<?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=Imbaczek</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=Imbaczek"/>
	<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/wiki/Special:Contributions/Imbaczek"/>
	<updated>2026-11-08T22:17:23Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_New_rendering_system&amp;diff=7776</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=7776"/>
		<updated>2010-03-11T23:03:46Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* Difficulty */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC idea: New Rendering System =&lt;br /&gt;
&lt;br /&gt;
== Why ==&lt;br /&gt;
Rendering would be faster and more extensible, making it easier to bring in new features and players. It should help prevent Spring&#039;s visuals become &#039;dated&#039; compared to commercial games running DX11 or OpenGL 3.1. It may eliminate some long-standing rendering bugs.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
The Spring rendering engine uses a lot of FFP (fixed function pipeline) OpenGL functions. This model is becoming deprecated and is generally slower than shader usage and less flexible.&lt;br /&gt;
&lt;br /&gt;
The rendering code should get a complete overhaul using modern graphic programming techniques such as shaders, implement load support for more standardized model formats (backwards compatibility with current available formats is mandatory either through direct loading 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;
OpenGL ES 2.0 compatibility should be aimed at where possible.&lt;br /&gt;
&lt;br /&gt;
== Required skills ==&lt;br /&gt;
* Knowledge of C++&lt;br /&gt;
* Knowledge of OpenGL 2.0 API and GLSL&lt;br /&gt;
* Understanding Spring&#039;s sync system&lt;br /&gt;
&lt;br /&gt;
== Difficulty ==&lt;br /&gt;
Estimated: medium &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;
&lt;br /&gt;
== Possible Mentor(s) ==&lt;br /&gt;
&lt;br /&gt;
[http://www.example.com FORUMLINK]&lt;br /&gt;
&lt;br /&gt;
[[Google_Summer_of_Code_2010]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Google_Summer_of_Code_2010&amp;diff=9617</id>
		<title>Google Summer of Code 2010</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Google_Summer_of_Code_2010&amp;diff=9617"/>
		<updated>2010-03-11T23:03:34Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* New Rendering System */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:GSOC.png]]&lt;br /&gt;
&lt;br /&gt;
= Project proposals =&lt;br /&gt;
&lt;br /&gt;
This is the list of project ideas for students willing to work on the Spring engine during the Google Summer of Code 2010. If you wish, you may read our [[Google_Summer_of_Code_2010_student_application|student application]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== An IDE for Spring game developing ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
At the moment Spring as a game engine project has no dedicated IDE for developing Spring games which would allow easier developing of Spring games.&lt;br /&gt;
A new IDE or plugins/addins for an existing IDE like Eclipse would lower the barrier for new developers. Speeding up the developing process and managing the huge amount of files which come with most games would allow developers to focus more on the content than on organization.&lt;br /&gt;
&lt;br /&gt;
The IDE should handle most of the typical Spring files like Lua files, textures and models. A few templates for project startups and Spring file types should be created.&lt;br /&gt;
Syntax highlighting, auto-completion (including Spring functions) and text snippets for Lua should be included in the IDE. A texture and model editor which can export/import and modify simple options would be nice, too.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Spring_IDE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Limited play area ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
Current spring map formats have an harcoded rectangle geometry, also they provide very limited support for defining aestetics of the surrounding environment outside the play area.&lt;br /&gt;
&lt;br /&gt;
The new system should allow the map to restrict the playable area to a subset of the global area, possibly adding support for multiple shapes and/or non rectangular shape restrictions.&lt;br /&gt;
&lt;br /&gt;
The restriction shapes should be readable and changeable mid-game trough the engine&#039;s Lua API. Proper handling of units which are suddenly off-map needs to be implemented.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Limited_play_area]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sensor handling redesign / simplification ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
Currently there are a number of different &amp;quot;sensor&amp;quot; systems in the engine: LineOfSight, Radar, Sonar, Seismic. Some can be jammed, some can not. Some respect terrain, and some are always circular.&lt;br /&gt;
&lt;br /&gt;
A new sensor system should integrate the current LOS, Radar, Sonar, Seismic systems, to reduce amount of code per functionality, and eventually add additional features wich would be then available for all types.&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 can not be a faster system with the same features.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Sensor_handling_redesign]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Engine level abstraction of resources ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium to hard&lt;br /&gt;
&lt;br /&gt;
The Spring engine has it&#039;s roots in being a Total Annihilation clone; even if such intent has been dropped since quite some time, the TA resource system is largely present in the codebase being hardcoded in a lot of critical places.&lt;br /&gt;
&lt;br /&gt;
The old system needs to be replaced, the new one should be enough flexible to reproduce everything that the old system did and be able to imitate the behaviour of most common RTS game titles.&lt;br /&gt;
&lt;br /&gt;
The engine&#039;s Lua API to fetch resources will have to be adapted to the new system, and new calls will have to be added to edit it.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Engine_resource_abstraction]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic ingame lobby ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
All existing Spring interfaces (lobbies) are either difficult to customize for game developers or have a different look &#039;n feel from the game itself and require focus switch from the game itself to operate.&lt;br /&gt;
&lt;br /&gt;
A new, Lua scriptable lobby should be implemented with customization and control in the mind, possibly integrated with spring codebase and/or running as a separate process overlaying to the game&#039;s UI.&lt;br /&gt;
&lt;br /&gt;
Optionally, the engine&#039;s start screen should be replaced and integrated with it.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Ingame_lobby]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Smarter pathfinder ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s pathfinder uses a 2d grid and is somewhat limited in functionality.&lt;br /&gt;
A partial/full rewrite should be introduced to add support for navigating using more than 8 primary directions and selectively ignore certain unit types for performance reasons.&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s Lua API should be extended to allow game developers to push new nodes/links and be able to alter or delete existing ones. (for pathfinder-aware tunnels/teleporting/etc.)&lt;br /&gt;
&lt;br /&gt;
Preferably this all should also be faster then the current system, or a compelling argument/experiment should be made that shows there can not be a faster system with the same features.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Smarter_pathfinder]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== More AI interfaces ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
The Spring engine&#039;s AI interface supports bindings for multiple languages, currently legacy 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;
[[GSoC_More_AI_interfaces]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New Rendering System ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
The Spring rendering engine uses a lot of FFP (fixed function pipeline) OpenGL functions. This model is becoming deprecated and is generally slower than shader usage and less flexible.&lt;br /&gt;
&lt;br /&gt;
The rendering code should get a complete overhaul using modern graphic programming techniques such as shaders, implement load support for more standardized model formats (backwards compatibility with current available formats is mandatory either trough 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;
OpenGL ES 2.0 compatibility should be aimed at where possible.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_New_rendering_system]]&lt;br /&gt;
&lt;br /&gt;
== Reconnect / Host change during a match ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium to hard&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s network model implies the existance of a server to host a battle. For various reasons the network link between host and clients can die, so 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;
[[GSoC_Reconnect_Host_change]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New map format ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
Spring at the moment has two map formats - SM2 which is the most used, but old, rather inflexible and requires a lot of storage. SM3 is newer but incomplete.&lt;br /&gt;
&lt;br /&gt;
The goal of this proposal would be a map format that doesn&#039;t consist of a giant texture layered on top of a basic height mesh, but something smarter that also supports correct texturing on vertical slopes (ie. no streching.) Look at e.g. DOW2 for inspiration. Not supporting heightmap deformation is acceptable, provided the pros outweigh the cons.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_New_map_format]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC:student_application&amp;diff=7678</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=7678"/>
		<updated>2010-03-11T23:03:13Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* Google Summer of Code student 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;
[[Google_Summer_of_Code_2010]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Google_Summer_of_Code_2010&amp;diff=9614</id>
		<title>Google Summer of Code 2010</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Google_Summer_of_Code_2010&amp;diff=9614"/>
		<updated>2010-03-11T22:58:29Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* Project proposals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:GSOC.png]]&lt;br /&gt;
&lt;br /&gt;
= Project proposals =&lt;br /&gt;
&lt;br /&gt;
This is the list of project ideas for students willing to work on the Spring engine during the Google Summer of Code 2010. If you wish, you may read our [[Google_Summer_of_Code_2010_student_application|student application]].&lt;br /&gt;
&lt;br /&gt;
== An IDE for Spring game developing ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
At the moment Spring as a game engine project has no dedicated IDE for developing Spring games which would allow easier developing of Spring games.&lt;br /&gt;
A new IDE or plugins/addins for an existing IDE like Eclipse would lower the barrier for new developers. Speeding up the developing process and managing the huge amount of files which come with most games would allow developers to focus more on the content than on organization.&lt;br /&gt;
&lt;br /&gt;
The IDE should handle most of the typical Spring files like Lua files, textures and models. A few templates for project startups and Spring file types should be created.&lt;br /&gt;
Syntax highlighting, auto-completion (including Spring functions) and text snippets for Lua should be included in the IDE. A texture and model editor which can export/import and modify simple options would be nice, too.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Spring_IDE]]&lt;br /&gt;
&lt;br /&gt;
== Limited play area ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
Current spring map formats have an harcoded rectangle geometry, also they provide very limited support for defining aestetics of the surrounding environment outside the play area.&lt;br /&gt;
&lt;br /&gt;
The new system should allow the map to restrict the playable area to a subset of the global area, possibly adding support for multiple shapes and/or non rectangular shape restrictions.&lt;br /&gt;
&lt;br /&gt;
The restriction shapes should be readable and changeable mid-game trough the engine&#039;s Lua API. Proper handling of units which are suddenly off-map needs to be implemented.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Limited_play_area]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sensor handling redesign / simplification ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
Currently there are a number of different &amp;quot;sensor&amp;quot; systems in the engine: LineOfSight, Radar, Sonar, Seismic. Some can be jammed, some can not. Some respect terrain, and some are always circular.&lt;br /&gt;
&lt;br /&gt;
A new sensor system should integrate the current LOS, Radar, Sonar, Seismic systems, to reduce amount of code per functionality, and eventually add additional features wich would be then available for all types.&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 can not be a faster system with the same features.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Sensor_handling_redesign]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Engine level abstraction of resources ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium to hard&lt;br /&gt;
&lt;br /&gt;
The Spring engine has it&#039;s roots in being a Total Annihilation clone; even if such intent has been dropped since quite some time, the TA resource system is largely present in the codebase being hardcoded in a lot of critical places.&lt;br /&gt;
&lt;br /&gt;
The old system needs to be replaced, the new one should be enough flexible to reproduce everything that the old system did and be able to imitate the behaviour of most common RTS game titles.&lt;br /&gt;
&lt;br /&gt;
The engine&#039;s Lua API to fetch resources will have to be adapted to the new system, and new calls will have to be added to edit it.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Engine_resource_abstraction]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic ingame lobby ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
All existing Spring interfaces (lobbies) are either difficult to customize for game developers or have a different look &#039;n feel from the game itself and require focus switch from the game itself to operate.&lt;br /&gt;
&lt;br /&gt;
A new, Lua scriptable lobby should be implemented with customization and control in the mind, possibly integrated with spring codebase and/or running as a separate process overlaying to the game&#039;s UI.&lt;br /&gt;
&lt;br /&gt;
Optionally, the engine&#039;s start screen should be replaced and integrated with it.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Ingame_lobby]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Smarter pathfinder ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s pathfinder uses a 2d grid and is somewhat limited in functionality.&lt;br /&gt;
A partial/full rewrite should be introduced to add support for navigating using more than 8 primary directions and selectively ignore certain unit types for performance reasons.&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s Lua API should be extended to allow game developers to push new nodes/links and be able to alter or delete existing ones. (for pathfinder-aware tunnels/teleporting/etc.)&lt;br /&gt;
&lt;br /&gt;
Preferably this all should also be faster then the current system, or a compelling argument/experiment should be made that shows there can not be a faster system with the same features.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Smarter_pathfinder]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== More AI interfaces ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
The Spring engine&#039;s AI interface supports bindings for multiple languages, currently legacy 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;
[[GSoC_More_AI_interfaces]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New Rendering System ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: below medium&lt;br /&gt;
&lt;br /&gt;
The Spring rendering engine uses a lot of FFP (fixed function pipeline) OpenGL functions. This model is becoming deprecated and is generally slower than shader usage and less flexible.&lt;br /&gt;
&lt;br /&gt;
The rendering code should get a complete overhaul using modern graphic programming techniques such as shaders, implement load support for more standardized model formats (backwards compatibility with current available formats is mandatory either trough 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;
OpenGL ES 2.0 compatibility should be aimed at where possible.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_New_rendering_system]]&lt;br /&gt;
&lt;br /&gt;
== Reconnect / Host change during a match ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium to hard&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s network model implies the existance of a server to host a battle. For various reasons the network link between host and clients can die, so 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;
[[GSoC_Reconnect_Host_change]]&lt;br /&gt;
&lt;br /&gt;
== New map format ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
Spring at the moment has two map formats - SM2m which is the most used, but old, rather inflexible and requires a lot of storage. SM3 is newer but incomplete.&lt;br /&gt;
&lt;br /&gt;
The goal of this proposal would be a map format that doesn&#039;t consist of a giant texture layered on top of a basic height mesh, but something smarter that also supports correct texturing on vertical slopes (ie. no streching.) Look at e.g. DOW2 for inspiration. Not supporting heightmap deformation is acceptable, provided the pros outweigh the cons.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_New_map_format]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC:student_application&amp;diff=7677</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=7677"/>
		<updated>2010-03-11T22:52:45Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: New page: = Google Summer of Code student application =  # Basics ## Write a small introduction to yourself. ## State your preferred email address. ## If you have chosen a nick for IRC, the Spring f...&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;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_New_rendering_system&amp;diff=7772</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=7772"/>
		<updated>2010-03-11T21:54:24Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* Difficulty */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC idea: New Rendering System =&lt;br /&gt;
&lt;br /&gt;
== Why ==&lt;br /&gt;
Rendering will be faster and more extensible, making it easier to bring in new features and players. It should help prevent Spring&#039;s visuals become &#039;dated&#039; compared to commercial games running DX11 or OpenGL 3.1. It may eliminate some long-standing rendering bugs.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
The Spring rendering engine uses a lot FFP (fixed function pipeline) OpenGL functions, this model is becoming deprecated, it is generally slower than shader usage and less flexible.&lt;br /&gt;
&lt;br /&gt;
The rendering code should get a complete overhaul using modern graphic programming techniques such as shaders, implement load support for more standardized model formats (backwards compatibility with current available formats is mandatory either trough 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;
OpenGL ES 2.0 compatibility should be aimed at where possible. &lt;br /&gt;
&lt;br /&gt;
== Required skills ==&lt;br /&gt;
* Knowledge of C++&lt;br /&gt;
* Knowledge of OpenGL 2.0 API and GLSL&lt;br /&gt;
* Understanding Spring&#039;s sync system&lt;br /&gt;
&lt;br /&gt;
== Difficulty ==&lt;br /&gt;
Estimated: below medium &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;
&lt;br /&gt;
== Possible Mentor(s) ==&lt;br /&gt;
&lt;br /&gt;
[http://www.example.com FORUMLINK]&lt;br /&gt;
&lt;br /&gt;
[[Google_Summer_of_Code_2010]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Smarter_pathfinder&amp;diff=7813</id>
		<title>GSoC Smarter pathfinder</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Smarter_pathfinder&amp;diff=7813"/>
		<updated>2010-03-11T21:49:16Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC idea: Smarter pathfinder =&lt;br /&gt;
&lt;br /&gt;
== Why ==&lt;br /&gt;
Current pathfinder is rather inflexible and inefficient.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
Spring&#039;s pathfinder uses a 2d grid and is somewhat limited in functionality. A partial/full rewrite should be introduced to add support for navigating using more than 8 primary directions and selectively ignore certain unit types for performance reasons.&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s Lua API should be extended to allow game developers to push new nodes/links and be able to alter or delete existing ones. (for pathfinder-aware tunnels/teleporting/etc.)&lt;br /&gt;
&lt;br /&gt;
Preferably this all should also be faster then the current system, or a compelling argument/experiment should be made that shows there can not be a faster system with the same features. &lt;br /&gt;
&lt;br /&gt;
== Required skills ==&lt;br /&gt;
* knowledge of graphs and pathfinding (particularly navigation graphs)&lt;br /&gt;
* C++ and Lua/C api&lt;br /&gt;
&lt;br /&gt;
== Difficulty ==&lt;br /&gt;
Estimated: hard&lt;br /&gt;
&lt;br /&gt;
The pathfinder is one of the better encapsulated subsystems in spring; generally, there will only be minor changes required in the rest of the engine, if any. There&#039;s a lot of algorithmic work to do under the hood, though:&lt;br /&gt;
* Cooperative pathfinding exists in a very scant form and could be greatly improved&lt;br /&gt;
* Navigation mesh could be introduced for better paths and faster searches - at the cost of generating the mesh and updating it online due to terrain modification&lt;br /&gt;
&lt;br /&gt;
== Possible Mentor(s) ==&lt;br /&gt;
&lt;br /&gt;
[http://www.example.com FORUMLINK]&lt;br /&gt;
&lt;br /&gt;
[[Google_Summer_of_Code_2010]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Engine_resource_abstraction&amp;diff=7704</id>
		<title>GSoC Engine resource abstraction</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Engine_resource_abstraction&amp;diff=7704"/>
		<updated>2010-03-11T21:14:03Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* Difficulty */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC idea: Engine level abstraction of resources =&lt;br /&gt;
&lt;br /&gt;
== Why ==&lt;br /&gt;
So game designers can reuse engine resource system and avoid all weird behaviours caused by the hardcoded assumptions all over the place.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
The Spring engine has its roots in being a Total Annihilation clone; even if such intent has been dropped since quite some time, the TA resource system is largely present in the codebase being hardcoded in a lot of critical places.&lt;br /&gt;
&lt;br /&gt;
The old system needs to be replaced, the new one should be enough flexible to reproduce everything that the old system did and be able to imitate the behaviour of most common RTS game titles.&lt;br /&gt;
&lt;br /&gt;
The engine&#039;s Lua API to fetch resources will have to be adapted to the new system, and new calls will have to be added to modify it&#039;s state.&lt;br /&gt;
&lt;br /&gt;
== Required skills ==&lt;br /&gt;
* C++&lt;br /&gt;
* Lua&lt;br /&gt;
* OpenGL skills to adapt the engine gui (optional)&lt;br /&gt;
&lt;br /&gt;
== Difficulty ==&lt;br /&gt;
Estimated: medium to hard&lt;br /&gt;
&lt;br /&gt;
* The new system should completely supersede the current&lt;br /&gt;
* Sync check should be adapted to hash the new resource system&lt;br /&gt;
* Hardcoded assumptions such as cost-based targeting should be removed completely&lt;br /&gt;
&lt;br /&gt;
== Possible Mentor(s) ==&lt;br /&gt;
&lt;br /&gt;
[http://www.example.com FORUMLINK]&lt;br /&gt;
&lt;br /&gt;
[[Google_Summer_of_Code_2010]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Google_Summer_of_Code_2010&amp;diff=9606</id>
		<title>Google Summer of Code 2010</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Google_Summer_of_Code_2010&amp;diff=9606"/>
		<updated>2010-03-11T21:13:50Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* Engine level abstraction of resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:GSOC.png]]&lt;br /&gt;
&lt;br /&gt;
= Google Summer of Code 2010 project proposals =&lt;br /&gt;
&lt;br /&gt;
This is a list of projects suggested to students willing to work on the Spring engine during the summer of 2010.&lt;br /&gt;
&lt;br /&gt;
== Limited play area ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
Current spring map formats have an harcoded rectangle geometry, also they provide very limited support for defining aestetics of the surrounding environment outside the play area.&lt;br /&gt;
&lt;br /&gt;
The new system should allow the map to restrict the playable area to a subset of the global area, possibly adding support for multiple shapes and/or non rectangular shape restrictions.&lt;br /&gt;
&lt;br /&gt;
The restriction shapes should be readable and changeable mid-game trough the engine&#039;s Lua API. Proper handling of units which are suddenly off-map needs to be implemented.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Limited_play_area]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sensor handling redesign / simplification ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
Currently there are a number of different &amp;quot;sensor&amp;quot; systems in the engine: LineOfSight, Radar, Sonar, Seismic. Some can be jammed, some can not. Some respect terrain, and some are always circular.&lt;br /&gt;
&lt;br /&gt;
A new sensor system should integrate the current LOS, Radar, Sonar, Seismic systems, to reduce amount of code per functionality, and eventually add additional features wich would be then available for all types.&lt;br /&gt;
&lt;br /&gt;
Preferably this all should also be faster then the current system, or a compelling argument/experiment should be made that shows there can not be a faster system with the same features.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Sensor_handling_redesign]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Engine level abstraction of resources ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium to hard&lt;br /&gt;
&lt;br /&gt;
The Spring engine has it&#039;s roots in being a Total Annihilation clone; even if such intent has been dropped since quite some time, the TA resource system is largely present in the codebase being hardcoded in a lot of critical places.&lt;br /&gt;
&lt;br /&gt;
The old system needs to be replaced, the new one should be enough flexible to reproduce everything that the old system did and be able to imitate the behaviour of most common RTS game titles.&lt;br /&gt;
&lt;br /&gt;
The engine&#039;s Lua API to fetch resources will have to be adapted to the new system, and new calls will have to be added to edit it.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Engine_resource_abstraction]]&lt;br /&gt;
&lt;br /&gt;
== Basic ingame lobby ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
All existing Spring interfaces (lobbies) are either difficult to customize for game developers or have a different look &#039;n feel from the game itself and require focus switch from the game itself to operate.&lt;br /&gt;
&lt;br /&gt;
A new, Lua scriptable lobby should be implemented with customization and control in the mind, possibly integrated with spring codebase and/or running as a separate process overlaying to the game&#039;s UI.&lt;br /&gt;
&lt;br /&gt;
Optionally, the engine&#039;s start screen should be replaced and integrated with it.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Ingame_lobby]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Smarter pathfinder ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s pathfinder uses a 2d grid and is somewhat limited in functionality.&lt;br /&gt;
A partial/full rewrite should be introduced to add support for navigating using more than 8 primary directions and selectively ignore certain unit types for performance reasons.&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s Lua API should be extended to allow game developers to push new nodes/links and be able to alter or delete existing ones. (for pathfinder-aware tunnels/teleporting/etc.)&lt;br /&gt;
&lt;br /&gt;
Preferably this all should also be faster then the current system, or a compelling argument/experiment should be made that shows there can not be a faster system with the same features.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Smarter_pathfinder]]&lt;br /&gt;
&lt;br /&gt;
== More AI interfaces ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
The Spring engine&#039;s AI interface supports bindings for multiple languages, currently legacy 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;
[[GSoC_More_AI_interfaces]]&lt;br /&gt;
&lt;br /&gt;
== New Rendering System ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: below medium&lt;br /&gt;
&lt;br /&gt;
The Spring rendering engine uses a lot FFP (fixed function pipeline) OpenGL functions, this model is becoming deprecated, it is generally slower than shader usage and less flexible.&lt;br /&gt;
&lt;br /&gt;
The rendering code should get a complete overhaul using modern graphic programming techniques such as shaders, implement load support for more standardized model formats (backwards compatibility with current available formats is mandatory either trough 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;
OpenGL ES 2.0 compatibility should be aimed at where possible.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_New_rendering_system]]&lt;br /&gt;
&lt;br /&gt;
== Reconnect / Host change during a match ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium to hard&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s network model implies the existance of a server to host a battle, because of various reasons, the network link between host and clients can die, a system should be designed to allow manual and/or automatic switch game 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;
[[GSoC_Reconnect_Host_change]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Engine_resource_abstraction&amp;diff=7703</id>
		<title>GSoC Engine resource abstraction</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Engine_resource_abstraction&amp;diff=7703"/>
		<updated>2010-03-11T21:13:03Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* Difficulty */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC idea: Engine level abstraction of resources =&lt;br /&gt;
&lt;br /&gt;
== Why ==&lt;br /&gt;
So game designers can reuse engine resource system and avoid all weird behaviours caused by the hardcoded assumptions all over the place.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
The Spring engine has its roots in being a Total Annihilation clone; even if such intent has been dropped since quite some time, the TA resource system is largely present in the codebase being hardcoded in a lot of critical places.&lt;br /&gt;
&lt;br /&gt;
The old system needs to be replaced, the new one should be enough flexible to reproduce everything that the old system did and be able to imitate the behaviour of most common RTS game titles.&lt;br /&gt;
&lt;br /&gt;
The engine&#039;s Lua API to fetch resources will have to be adapted to the new system, and new calls will have to be added to modify it&#039;s state.&lt;br /&gt;
&lt;br /&gt;
== Required skills ==&lt;br /&gt;
* C++&lt;br /&gt;
* Lua&lt;br /&gt;
* OpenGL skills to adapt the engine gui (optional)&lt;br /&gt;
&lt;br /&gt;
== Difficulty ==&lt;br /&gt;
Estimated: medium&lt;br /&gt;
&lt;br /&gt;
* The new system should completely supersede the current&lt;br /&gt;
* Sync check should be adapted to hash the new resource system&lt;br /&gt;
* Hardcoded assumptions such as cost-based targeting should be removed completely&lt;br /&gt;
&lt;br /&gt;
== Possible Mentor(s) ==&lt;br /&gt;
&lt;br /&gt;
[http://www.example.com FORUMLINK]&lt;br /&gt;
&lt;br /&gt;
[[Google_Summer_of_Code_2010]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Engine_resource_abstraction&amp;diff=7702</id>
		<title>GSoC Engine resource abstraction</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Engine_resource_abstraction&amp;diff=7702"/>
		<updated>2010-03-11T21:12:34Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* Required skills */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC idea: Engine level abstraction of resources =&lt;br /&gt;
&lt;br /&gt;
== Why ==&lt;br /&gt;
So game designers can reuse engine resource system and avoid all weird behaviours caused by the hardcoded assumptions all over the place.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
The Spring engine has its roots in being a Total Annihilation clone; even if such intent has been dropped since quite some time, the TA resource system is largely present in the codebase being hardcoded in a lot of critical places.&lt;br /&gt;
&lt;br /&gt;
The old system needs to be replaced, the new one should be enough flexible to reproduce everything that the old system did and be able to imitate the behaviour of most common RTS game titles.&lt;br /&gt;
&lt;br /&gt;
The engine&#039;s Lua API to fetch resources will have to be adapted to the new system, and new calls will have to be added to modify it&#039;s state.&lt;br /&gt;
&lt;br /&gt;
== Required skills ==&lt;br /&gt;
* C++&lt;br /&gt;
* Lua&lt;br /&gt;
* OpenGL skills to adapt the engine gui (optional)&lt;br /&gt;
&lt;br /&gt;
== Difficulty ==&lt;br /&gt;
Estimated: medium&lt;br /&gt;
&lt;br /&gt;
* The new system should completely superseed current&lt;br /&gt;
* sync check should be adapted to hash the new resource system&lt;br /&gt;
* hardcoded assumptions such as cost-based targeting should be removed completely&lt;br /&gt;
&lt;br /&gt;
== Possible Mentor(s) ==&lt;br /&gt;
&lt;br /&gt;
[http://www.example.com FORUMLINK]&lt;br /&gt;
&lt;br /&gt;
[[Google_Summer_of_Code_2010]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Engine_resource_abstraction&amp;diff=7701</id>
		<title>GSoC Engine resource abstraction</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Engine_resource_abstraction&amp;diff=7701"/>
		<updated>2010-03-11T21:12:14Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC idea: Engine level abstraction of resources =&lt;br /&gt;
&lt;br /&gt;
== Why ==&lt;br /&gt;
So game designers can reuse engine resource system and avoid all weird behaviours caused by the hardcoded assumptions all over the place.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
The Spring engine has its roots in being a Total Annihilation clone; even if such intent has been dropped since quite some time, the TA resource system is largely present in the codebase being hardcoded in a lot of critical places.&lt;br /&gt;
&lt;br /&gt;
The old system needs to be replaced, the new one should be enough flexible to reproduce everything that the old system did and be able to imitate the behaviour of most common RTS game titles.&lt;br /&gt;
&lt;br /&gt;
The engine&#039;s Lua API to fetch resources will have to be adapted to the new system, and new calls will have to be added to modify it&#039;s state.&lt;br /&gt;
&lt;br /&gt;
== Required skills ==&lt;br /&gt;
* C++&lt;br /&gt;
* Lua&lt;br /&gt;
* OpenGL skills to adapt the engine gui ( optional )&lt;br /&gt;
&lt;br /&gt;
== Difficulty ==&lt;br /&gt;
Estimated: medium&lt;br /&gt;
&lt;br /&gt;
* The new system should completely superseed current&lt;br /&gt;
* sync check should be adapted to hash the new resource system&lt;br /&gt;
* hardcoded assumptions such as cost-based targeting should be removed completely&lt;br /&gt;
&lt;br /&gt;
== Possible Mentor(s) ==&lt;br /&gt;
&lt;br /&gt;
[http://www.example.com FORUMLINK]&lt;br /&gt;
&lt;br /&gt;
[[Google_Summer_of_Code_2010]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Engine_resource_abstraction&amp;diff=7700</id>
		<title>GSoC Engine resource abstraction</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Engine_resource_abstraction&amp;diff=7700"/>
		<updated>2010-03-11T21:10:51Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC idea: Engine level abstraction of resources =&lt;br /&gt;
&lt;br /&gt;
== Why ==&lt;br /&gt;
So game designers can reuse engine resource system and avoid all weird behaviours caused by the hardcoded assumptions all over the place.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
The Spring engine has its roots in being a Total Annihilation clone; even if such intent has been dropped since quite some time, the TA resource system is largely present in the codebase being hardcoded in a lot of critical places.&lt;br /&gt;
&lt;br /&gt;
The old system needs to be replaced, the new one should be enough flexible to reproduce everything that the old system did and be able to imitate the behaviour of most common RTS game titles.&lt;br /&gt;
&lt;br /&gt;
The engine&#039;s Lua API to fetch resources will have to be adapted to the new system, and new calls will have to be added to edit it.&lt;br /&gt;
&lt;br /&gt;
== Required skills ==&lt;br /&gt;
* C++&lt;br /&gt;
* Lua&lt;br /&gt;
* OpenGL skills to adapt the engine gui ( optional )&lt;br /&gt;
&lt;br /&gt;
== Difficulty ==&lt;br /&gt;
Estimated: medium&lt;br /&gt;
&lt;br /&gt;
* The new system should completely superseed current&lt;br /&gt;
* sync check should be adapted to hash the new resource system&lt;br /&gt;
* hardcoded assumptions such as cost-based targeting should be removed completely&lt;br /&gt;
&lt;br /&gt;
== Possible Mentor(s) ==&lt;br /&gt;
&lt;br /&gt;
[http://www.example.com FORUMLINK]&lt;br /&gt;
&lt;br /&gt;
[[Google_Summer_of_Code_2010]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Sensor_handling_redesign&amp;diff=7801</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=7801"/>
		<updated>2010-03-11T21:10:03Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* Difficulty */&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;
Game designers have indicated a more generic sensor system would be desired, and a number of desired features have, over time, been mentioned.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
Currently there are a number of different &amp;quot;sensor&amp;quot; systems in the engine: LineOfSight, Radar, Sonar, Seismic. Some can be jammed, some can not. Some respect terrain, and some are always circular.&lt;br /&gt;
&lt;br /&gt;
A new sensor system should integrate the current LOS, Radar, Sonar, Seismic systems, to reduce amount of code per functionality, and eventually add additional features wich would be then available for all types.&lt;br /&gt;
&lt;br /&gt;
Preferably this all should also be faster then the current system, or a compelling argument/experiment should be made that shows there can not be a faster system with the same features. &lt;br /&gt;
&lt;br /&gt;
== Required skills ==&lt;br /&gt;
* Being able to program in 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;
* A new sensor system should integrate the current LOS, Radar, Sonar, Seismic systems to reduce amount of code per functionality.&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;
[http://www.example.com FORUMLINK]&lt;br /&gt;
&lt;br /&gt;
[[Google_Summer_of_Code_2010]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Sensor_handling_redesign&amp;diff=7800</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=7800"/>
		<updated>2010-03-11T21:09:23Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* Difficulty */&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;
Game designers have indicated a more generic sensor system would be desired, and a number of desired features have, over time, been mentioned.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
Currently there are a number of different &amp;quot;sensor&amp;quot; systems in the engine: LineOfSight, Radar, Sonar, Seismic. Some can be jammed, some can not. Some respect terrain, and some are always circular.&lt;br /&gt;
&lt;br /&gt;
A new sensor system should integrate the current LOS, Radar, Sonar, Seismic systems, to reduce amount of code per functionality, and eventually add additional features wich would be then available for all types.&lt;br /&gt;
&lt;br /&gt;
Preferably this all should also be faster then the current system, or a compelling argument/experiment should be made that shows there can not be a faster system with the same features. &lt;br /&gt;
&lt;br /&gt;
== Required skills ==&lt;br /&gt;
* Being able to program in 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;
* A new sensor system should integrate the current LOS, Radar, Sonar, Seismic systems to reduce amount of code per functionality.&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;
[http://www.example.com FORUMLINK]&lt;br /&gt;
&lt;br /&gt;
[[Google_Summer_of_Code_2010]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Google_Summer_of_Code_2010&amp;diff=9605</id>
		<title>Google Summer of Code 2010</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Google_Summer_of_Code_2010&amp;diff=9605"/>
		<updated>2010-03-11T20:46:13Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* Reconnect / Host change during a match */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:GSOC.png]]&lt;br /&gt;
&lt;br /&gt;
= Google Summer of Code 2010 project proposals =&lt;br /&gt;
&lt;br /&gt;
This is a list of projects suggested to students willing to work on the Spring engine during the summer of 2010.&lt;br /&gt;
&lt;br /&gt;
== Limited play area ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
Current spring map formats have an harcoded rectangle geometry, also they provide very limited support for defining aestetics of the surrounding environment outside the play area.&lt;br /&gt;
&lt;br /&gt;
The new system should allow the map to restrict the playable area to a subset of the global area, possibly adding support for multiple shapes and/or non rectangular shape restrictions.&lt;br /&gt;
&lt;br /&gt;
The restriction shapes should be readable and changeable mid-game trough the engine&#039;s Lua API. Proper handling of units which are suddenly off-map needs to be implemented.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Limited_play_area]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sensor handling redesign / simplification ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
Currently there are a number of different &amp;quot;sensor&amp;quot; systems in the engine: LineOfSight, Radar, Sonar, Seismic. Some can be jammed, some can not. Some respect terrain, and some are always circular.&lt;br /&gt;
&lt;br /&gt;
A new sensor system should integrate the current LOS, Radar, Sonar, Seismic systems, to reduce amount of code per functionality, and eventually add additional features wich would be then available for all types.&lt;br /&gt;
&lt;br /&gt;
Preferably this all should also be faster then the current system, or a compelling argument/experiment should be made that shows there can not be a faster system with the same features.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Sensor_handling_redesign]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Engine level abstraction of resources ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
The Spring engine has it&#039;s roots in being a Total Annihilation clone; even if such intent has been dropped since quite some time, the TA resource system is largely present in the codebase being hardcoded in a lot of critical places.&lt;br /&gt;
&lt;br /&gt;
The old system needs to be replaced, the new one should be enough flexible to reproduce everything that the old system did and be able to imitate the behaviour of most common RTS game titles.&lt;br /&gt;
&lt;br /&gt;
The engine&#039;s Lua API to fetch resources will have to be adapted to the new system, and new calls will have to be added to edit it.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Engine_resource_abstraction]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic ingame lobby ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
All existing Spring interfaces (lobbies) are either difficult to customize for game developers or have a different look &#039;n feel from the game itself and require focus switch from the game itself to operate.&lt;br /&gt;
&lt;br /&gt;
A new, Lua scriptable lobby should be implemented with customization and control in the mind, possibly integrated with spring codebase and/or running as a separate process overlaying to the game&#039;s UI.&lt;br /&gt;
&lt;br /&gt;
Optionally, the engine&#039;s start screen should be replaced and integrated with it.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Ingame_lobby]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Smarter pathfinder ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s pathfinder uses a 2d grid and is somewhat limited in functionality.&lt;br /&gt;
A partial/full rewrite should be introduced to add support for navigating using more than 8 primary directions and selectively ignore certain unit types for performance reasons.&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s Lua API should be extended to allow game developers to push new nodes/links and be able to alter or delete existing ones. (for pathfinder-aware tunnels/teleporting/etc.)&lt;br /&gt;
&lt;br /&gt;
Preferably this all should also be faster then the current system, or a compelling argument/experiment should be made that shows there can not be a faster system with the same features.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Smarter_pathfinder]]&lt;br /&gt;
&lt;br /&gt;
== More AI interfaces ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
The Spring engine&#039;s AI interface supports bindings for multiple languages, currently legacy 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;
[[GSoC_More_AI_interfaces]]&lt;br /&gt;
&lt;br /&gt;
== New Rendering System ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: below medium&lt;br /&gt;
&lt;br /&gt;
The Spring rendering engine uses a lot FFP (fixed function pipeline) OpenGL functions, this model is becoming deprecated, it is generally slower than shader usage and less flexible.&lt;br /&gt;
&lt;br /&gt;
The rendering code should get a complete overhaul using modern graphic programming techniques such as shaders, implement load support for more standardized model formats (backwards compatibility with current available formats is mandatory either trough 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;
OpenGL ES 2.0 compatibility should be aimed at where possible.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_New_rendering_system]]&lt;br /&gt;
&lt;br /&gt;
== Reconnect / Host change during a match ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium to hard&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s network model implies the existance of a server to host a battle, because of various reasons, the network link between host and clients can die, a system should be designed to allow manual and/or automatic switch game 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;
[[GSoC_Reconnect_Host_change]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Google_Summer_of_Code_2010&amp;diff=9604</id>
		<title>Google Summer of Code 2010</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Google_Summer_of_Code_2010&amp;diff=9604"/>
		<updated>2010-03-11T20:45:46Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* New Rendering System */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:GSOC.png]]&lt;br /&gt;
&lt;br /&gt;
= Google Summer of Code 2010 project proposals =&lt;br /&gt;
&lt;br /&gt;
This is a list of projects suggested to students willing to work on the Spring engine during the summer of 2010.&lt;br /&gt;
&lt;br /&gt;
== Limited play area ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
Current spring map formats have an harcoded rectangle geometry, also they provide very limited support for defining aestetics of the surrounding environment outside the play area.&lt;br /&gt;
&lt;br /&gt;
The new system should allow the map to restrict the playable area to a subset of the global area, possibly adding support for multiple shapes and/or non rectangular shape restrictions.&lt;br /&gt;
&lt;br /&gt;
The restriction shapes should be readable and changeable mid-game trough the engine&#039;s Lua API. Proper handling of units which are suddenly off-map needs to be implemented.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Limited_play_area]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sensor handling redesign / simplification ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
Currently there are a number of different &amp;quot;sensor&amp;quot; systems in the engine: LineOfSight, Radar, Sonar, Seismic. Some can be jammed, some can not. Some respect terrain, and some are always circular.&lt;br /&gt;
&lt;br /&gt;
A new sensor system should integrate the current LOS, Radar, Sonar, Seismic systems, to reduce amount of code per functionality, and eventually add additional features wich would be then available for all types.&lt;br /&gt;
&lt;br /&gt;
Preferably this all should also be faster then the current system, or a compelling argument/experiment should be made that shows there can not be a faster system with the same features.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Sensor_handling_redesign]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Engine level abstraction of resources ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
The Spring engine has it&#039;s roots in being a Total Annihilation clone; even if such intent has been dropped since quite some time, the TA resource system is largely present in the codebase being hardcoded in a lot of critical places.&lt;br /&gt;
&lt;br /&gt;
The old system needs to be replaced, the new one should be enough flexible to reproduce everything that the old system did and be able to imitate the behaviour of most common RTS game titles.&lt;br /&gt;
&lt;br /&gt;
The engine&#039;s Lua API to fetch resources will have to be adapted to the new system, and new calls will have to be added to edit it.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Engine_resource_abstraction]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic ingame lobby ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
All existing Spring interfaces (lobbies) are either difficult to customize for game developers or have a different look &#039;n feel from the game itself and require focus switch from the game itself to operate.&lt;br /&gt;
&lt;br /&gt;
A new, Lua scriptable lobby should be implemented with customization and control in the mind, possibly integrated with spring codebase and/or running as a separate process overlaying to the game&#039;s UI.&lt;br /&gt;
&lt;br /&gt;
Optionally, the engine&#039;s start screen should be replaced and integrated with it.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Ingame_lobby]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Smarter pathfinder ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s pathfinder uses a 2d grid and is somewhat limited in functionality.&lt;br /&gt;
A partial/full rewrite should be introduced to add support for navigating using more than 8 primary directions and selectively ignore certain unit types for performance reasons.&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s Lua API should be extended to allow game developers to push new nodes/links and be able to alter or delete existing ones. (for pathfinder-aware tunnels/teleporting/etc.)&lt;br /&gt;
&lt;br /&gt;
Preferably this all should also be faster then the current system, or a compelling argument/experiment should be made that shows there can not be a faster system with the same features.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Smarter_pathfinder]]&lt;br /&gt;
&lt;br /&gt;
== More AI interfaces ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
The Spring engine&#039;s AI interface supports bindings for multiple languages, currently legacy 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;
[[GSoC_More_AI_interfaces]]&lt;br /&gt;
&lt;br /&gt;
== New Rendering System ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: below medium&lt;br /&gt;
&lt;br /&gt;
The Spring rendering engine uses a lot FFP (fixed function pipeline) OpenGL functions, this model is becoming deprecated, it is generally slower than shader usage and less flexible.&lt;br /&gt;
&lt;br /&gt;
The rendering code should get a complete overhaul using modern graphic programming techniques such as shaders, implement load support for more standardized model formats (backwards compatibility with current available formats is mandatory either trough 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;
OpenGL ES 2.0 compatibility should be aimed at where possible.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_New_rendering_system]]&lt;br /&gt;
&lt;br /&gt;
== Reconnect / Host change during a match ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium to hard&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s network model implies the existance of a server to host a battle, because of various reasons, the network link between host and clients can die, a system should be designed to allow manual and/or automatic switch game 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;
[[GSoC_Reconnect_Host_change]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Google_Summer_of_Code_2010&amp;diff=9603</id>
		<title>Google Summer of Code 2010</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Google_Summer_of_Code_2010&amp;diff=9603"/>
		<updated>2010-03-11T20:44:17Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* More AI interfaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:GSOC.png]]&lt;br /&gt;
&lt;br /&gt;
= Google Summer of Code 2010 project proposals =&lt;br /&gt;
&lt;br /&gt;
This is a list of projects suggested to students willing to work on the Spring engine during the summer of 2010.&lt;br /&gt;
&lt;br /&gt;
== Limited play area ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
Current spring map formats have an harcoded rectangle geometry, also they provide very limited support for defining aestetics of the surrounding environment outside the play area.&lt;br /&gt;
&lt;br /&gt;
The new system should allow the map to restrict the playable area to a subset of the global area, possibly adding support for multiple shapes and/or non rectangular shape restrictions.&lt;br /&gt;
&lt;br /&gt;
The restriction shapes should be readable and changeable mid-game trough the engine&#039;s Lua API. Proper handling of units which are suddenly off-map needs to be implemented.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Limited_play_area]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sensor handling redesign / simplification ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
Currently there are a number of different &amp;quot;sensor&amp;quot; systems in the engine: LineOfSight, Radar, Sonar, Seismic. Some can be jammed, some can not. Some respect terrain, and some are always circular.&lt;br /&gt;
&lt;br /&gt;
A new sensor system should integrate the current LOS, Radar, Sonar, Seismic systems, to reduce amount of code per functionality, and eventually add additional features wich would be then available for all types.&lt;br /&gt;
&lt;br /&gt;
Preferably this all should also be faster then the current system, or a compelling argument/experiment should be made that shows there can not be a faster system with the same features.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Sensor_handling_redesign]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Engine level abstraction of resources ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
The Spring engine has it&#039;s roots in being a Total Annihilation clone; even if such intent has been dropped since quite some time, the TA resource system is largely present in the codebase being hardcoded in a lot of critical places.&lt;br /&gt;
&lt;br /&gt;
The old system needs to be replaced, the new one should be enough flexible to reproduce everything that the old system did and be able to imitate the behaviour of most common RTS game titles.&lt;br /&gt;
&lt;br /&gt;
The engine&#039;s Lua API to fetch resources will have to be adapted to the new system, and new calls will have to be added to edit it.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Engine_resource_abstraction]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic ingame lobby ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
All existing Spring interfaces (lobbies) are either difficult to customize for game developers or have a different look &#039;n feel from the game itself and require focus switch from the game itself to operate.&lt;br /&gt;
&lt;br /&gt;
A new, Lua scriptable lobby should be implemented with customization and control in the mind, possibly integrated with spring codebase and/or running as a separate process overlaying to the game&#039;s UI.&lt;br /&gt;
&lt;br /&gt;
Optionally, the engine&#039;s start screen should be replaced and integrated with it.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Ingame_lobby]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Smarter pathfinder ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s pathfinder uses a 2d grid and is somewhat limited in functionality.&lt;br /&gt;
A partial/full rewrite should be introduced to add support for navigating using more than 8 primary directions and selectively ignore certain unit types for performance reasons.&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s Lua API should be extended to allow game developers to push new nodes/links and be able to alter or delete existing ones. (for pathfinder-aware tunnels/teleporting/etc.)&lt;br /&gt;
&lt;br /&gt;
Preferably this all should also be faster then the current system, or a compelling argument/experiment should be made that shows there can not be a faster system with the same features.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Smarter_pathfinder]]&lt;br /&gt;
&lt;br /&gt;
== More AI interfaces ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
The Spring engine&#039;s AI interface supports bindings for multiple languages, currently legacy 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;
[[GSoC_More_AI_interfaces]]&lt;br /&gt;
&lt;br /&gt;
== New Rendering System ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: below medium&lt;br /&gt;
&lt;br /&gt;
The Spring rendering engine uses a lot FFP (fixed function pipeline) OpenGL functions, this model is becoming deprecated, it is generally slower than shader usage and less flexible.&lt;br /&gt;
&lt;br /&gt;
The rendering code should get a complete overhaul using modern graphic programming techniques such as shaders, implement load support for more standardized model formats (backwards compatibility with current available formats is mandatory either trough 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;
[[GSoC_New_rendering_system]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reconnect / Host change during a match ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium to hard&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s network model implies the existance of a server to host a battle, because of various reasons, the network link between host and clients can die, a system should be designed to allow manual and/or automatic switch game 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;
[[GSoC_Reconnect_Host_change]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Limited_play_area&amp;diff=7740</id>
		<title>GSoC Limited play area</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Limited_play_area&amp;diff=7740"/>
		<updated>2010-03-11T20:43:02Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* Difficulty */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC idea: Limited play area =&lt;br /&gt;
&lt;br /&gt;
== Why ==&lt;br /&gt;
So the mappers can define which part of the map is designed for gameplay and which for the looks.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
Current spring map formats have a harcoded rectangle geometry. They also provide very limited support for defining aesthetics of the surrounding environment outside the play area.&lt;br /&gt;
&lt;br /&gt;
The new system should allow the map to restrict the playable area to a subset of the global area, possibly adding support for multiple shapes and/or non rectangular shape restrictions.&lt;br /&gt;
&lt;br /&gt;
The restriction shapes should be readable and changeable mid-game trough the engine&#039;s Lua API. Proper handling of units which are suddenly off-map needs to be implemented.&lt;br /&gt;
&lt;br /&gt;
== Required skills ==&lt;br /&gt;
* grep&lt;br /&gt;
* C++ and Lua/C api&lt;br /&gt;
&lt;br /&gt;
== Difficulty ==&lt;br /&gt;
Estimated: medium&lt;br /&gt;
&lt;br /&gt;
The code pretty much everywhere assumes that the map top left is always at (0, 0) and bottom right at (width, height). The most difficult part is identifying all places that check for point-in-map condition and determining whether they should be converted to the new limited map area or left as-is (e.g. for drawing.)&lt;br /&gt;
&lt;br /&gt;
== Possible Mentor(s) ==&lt;br /&gt;
&lt;br /&gt;
[http://www.example.com FORUMLINK]&lt;br /&gt;
&lt;br /&gt;
[[Google_Summer_of_Code_2010]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Limited_play_area&amp;diff=7739</id>
		<title>GSoC Limited play area</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Limited_play_area&amp;diff=7739"/>
		<updated>2010-03-11T20:30:26Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* Why */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC idea: Limited play area =&lt;br /&gt;
&lt;br /&gt;
== Why ==&lt;br /&gt;
So the mappers can define which part of the map is designed for gameplay and which for the looks.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
Current spring map formats have a harcoded rectangle geometry. They also provide very limited support for defining aesthetics of the surrounding environment outside the play area.&lt;br /&gt;
&lt;br /&gt;
The new system should allow the map to restrict the playable area to a subset of the global area, possibly adding support for multiple shapes and/or non rectangular shape restrictions.&lt;br /&gt;
&lt;br /&gt;
The restriction shapes should be readable and changeable mid-game trough the engine&#039;s Lua API. Proper handling of units which are suddenly off-map needs to be implemented.&lt;br /&gt;
&lt;br /&gt;
== Required skills ==&lt;br /&gt;
* grep&lt;br /&gt;
* C++ and Lua/C api&lt;br /&gt;
&lt;br /&gt;
== Difficulty ==&lt;br /&gt;
some blabla&lt;br /&gt;
&lt;br /&gt;
== Possible Mentor(s) ==&lt;br /&gt;
&lt;br /&gt;
[http://www.example.com FORUMLINK]&lt;br /&gt;
&lt;br /&gt;
[[Google_Summer_of_Code_2010]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Limited_play_area&amp;diff=7738</id>
		<title>GSoC Limited play area</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Limited_play_area&amp;diff=7738"/>
		<updated>2010-03-11T20:29:59Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC idea: Limited play area =&lt;br /&gt;
&lt;br /&gt;
== Why ==&lt;br /&gt;
so the mappers can define which part of the map is designed for gameplay and which for the looks&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
Current spring map formats have a harcoded rectangle geometry. They also provide very limited support for defining aesthetics of the surrounding environment outside the play area.&lt;br /&gt;
&lt;br /&gt;
The new system should allow the map to restrict the playable area to a subset of the global area, possibly adding support for multiple shapes and/or non rectangular shape restrictions.&lt;br /&gt;
&lt;br /&gt;
The restriction shapes should be readable and changeable mid-game trough the engine&#039;s Lua API. Proper handling of units which are suddenly off-map needs to be implemented.&lt;br /&gt;
&lt;br /&gt;
== Required skills ==&lt;br /&gt;
* grep&lt;br /&gt;
* C++ and Lua/C api&lt;br /&gt;
&lt;br /&gt;
== Difficulty ==&lt;br /&gt;
some blabla&lt;br /&gt;
&lt;br /&gt;
== Possible Mentor(s) ==&lt;br /&gt;
&lt;br /&gt;
[http://www.example.com FORUMLINK]&lt;br /&gt;
&lt;br /&gt;
[[Google_Summer_of_Code_2010]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Limited_play_area&amp;diff=7737</id>
		<title>GSoC Limited play area</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Limited_play_area&amp;diff=7737"/>
		<updated>2010-03-11T20:27:59Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC idea: Limited play area =&lt;br /&gt;
&lt;br /&gt;
== Why ==&lt;br /&gt;
so the mappers can define which part of the map is designed for gameplay and which for the looks&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
Current spring map formats have a harcoded rectangle geometry. They also provide very limited support for defining aesthetics of the surrounding environment outside the play area.&amp;lt;br/&amp;gt;&lt;br /&gt;
The new system should allow the map to restrict the playable area to a subset of the global area, possibly adding support for multiple shapes and/or non rectangular shape restrictions.&amp;lt;br/&amp;gt;&lt;br /&gt;
The restriction shapes should be readable and changeable mid-game trough the engine&#039;s Lua API. Proper handling of units which are suddenly off-map needs to be implemented.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Required skills ==&lt;br /&gt;
* grep&lt;br /&gt;
* C++ and Lua/C api&lt;br /&gt;
&lt;br /&gt;
== Difficulty ==&lt;br /&gt;
some blabla&lt;br /&gt;
&lt;br /&gt;
== Possible Mentor(s) ==&lt;br /&gt;
&lt;br /&gt;
[http://www.example.com FORUMLINK]&lt;br /&gt;
&lt;br /&gt;
[[Google_Summer_of_Code_2010]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Google_Summer_of_Code_2010&amp;diff=9601</id>
		<title>Google Summer of Code 2010</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Google_Summer_of_Code_2010&amp;diff=9601"/>
		<updated>2010-03-11T20:17:49Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Google Summer of Code 2010 project proposals =&lt;br /&gt;
&lt;br /&gt;
This is a list of projects suggested to students willing to work on the Spring engine during the summer of 2010.&lt;br /&gt;
&lt;br /&gt;
== Limited play area ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
Current spring map formats have an harcoded rectangle geometry, also they provide very limited support for defining aestetics of the surrounding environment outside the play area.&lt;br /&gt;
&lt;br /&gt;
The new system should allow the map to restrict the playable area to a subset of the global area, possibly adding support for multiple shapes and/or non rectangular shape restrictions.&lt;br /&gt;
&lt;br /&gt;
The restriction shapes should be readable and changeable mid-game trough the engine&#039;s Lua API. Proper handling of units which are suddenly off-map needs to be implemented.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Limited_play_area]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sensor handling redesign / simplification ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
Currently there are a number of different &amp;quot;sensor&amp;quot; systems in the engine: LineOfSight, Radar, Sonar, Seismic. Some can be jammed, some can not. Some respect terrain, and some are always circular.&lt;br /&gt;
&lt;br /&gt;
A new sensor system should integrate the current LOS, Radar, Sonar, Seismic systems, to reduce amount of code per functionality, and eventually add additional features wich would be then available for all types.&lt;br /&gt;
&lt;br /&gt;
Preferably this all should also be faster then the current system, or a compelling argument/experiment should be made that shows there can not be a faster system with the same features.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Sensor_handling_redesign]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Engine level abstraction of resources ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
The Spring engine has it&#039;s roots in being a Total Annihilation clone; even if such intent has been dropped since quite some time, the TA resource system is largely present in the codebase being hardcoded in a lot of critical places.&lt;br /&gt;
&lt;br /&gt;
The old system needs to be replaced, the new one should be enough flexible to reproduce everything that the old system did and be able to imitate the behaviour of most common RTS game titles.&lt;br /&gt;
&lt;br /&gt;
The engine&#039;s Lua API to fetch resources will have to be adapted to the new system, and new calls will have to be added to edit it.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Engine_resource_abstraction]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic ingame lobby ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
All existing Spring interfaces (lobbies) are either difficult to customize for game developers or have a different look &#039;n feel from the game itself and require focus switch from the game itself to operate.&lt;br /&gt;
&lt;br /&gt;
A new, Lua scriptable lobby should be implemented with customization and control in the mind, possibly integrated with spring codebase and/or running as a separate process overlaying to the game&#039;s UI.&lt;br /&gt;
&lt;br /&gt;
Optionally, the engine&#039;s start screen should be replaced and integrated with it.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Ingame_lobby]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Smarter pathfinder ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s pathfinder uses a 2d grid and is somewhat limited in functionality.&lt;br /&gt;
A partial/full rewrite should be introduced to add support for navigating using more than 8 primary directions and selectively ignore certain unit types for performance reasons.&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s Lua API should be extended to allow game developers to push new nodes/links and be able to alter or delete existing ones. (for pathfinder-aware tunnels/teleporting/etc.)&lt;br /&gt;
&lt;br /&gt;
Preferably this all should also be faster then the current system, or a compelling argument/experiment should be made that shows there can not be a faster system with the same features.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Smarter_pathfinder]]&lt;br /&gt;
&lt;br /&gt;
== More AI interfaces ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
The Spring engine&#039;s AI interface supports bindings for multiple languages, currently legacy 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;
[[GSoC_More_AI_interfaces]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New Rendering System ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: below medium&lt;br /&gt;
&lt;br /&gt;
The Spring rendering engine uses a lot FFP (fixed function pipeline) OpenGL functions, this model is becoming deprecated, it is generally slower than shader usage and less flexible.&lt;br /&gt;
&lt;br /&gt;
The rendering code should get a complete overhaul using modern graphic programming techniques such as shaders, implement load support for more standardized model formats (backwards compatibility with current available formats is mandatory either trough 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;
[[GSoC_New_rendering_system]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reconnect / Host change during a match ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium to hard&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s network model implies the existance of a server to host a battle, because of various reasons, the network link between host and clients can die, a system should be designed to allow manual and/or automatic switch game 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;
[[GSoC_Reconnect_Host_change]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Google_Summer_of_Code_2010&amp;diff=9600</id>
		<title>Google Summer of Code 2010</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Google_Summer_of_Code_2010&amp;diff=9600"/>
		<updated>2010-03-11T20:15:26Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Limited play area ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
Current spring map formats have an harcoded rectangle geometry, also they provide very limited support for defining aestetics of the surrounding environment outside the play area.&lt;br /&gt;
&lt;br /&gt;
The new system should allow the map to restrict the playable area to a subset of the global area, possibly adding support for multiple shapes and/or non rectangular shape restrictions.&lt;br /&gt;
&lt;br /&gt;
The restriction shapes should be readable and changeable mid-game trough the engine&#039;s Lua API. Proper handling of units which are suddenly off-map needs to be implemented.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Limited_play_area]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sensor handling redesign / simplification ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
Currently there are a number of different &amp;quot;sensor&amp;quot; systems in the engine: LineOfSight, Radar, Sonar, Seismic. Some can be jammed, some can not. Some respect terrain, and some are always circular.&lt;br /&gt;
&lt;br /&gt;
A new sensor system should integrate the current LOS, Radar, Sonar, Seismic systems, to reduce amount of code per functionality, and eventually add additional features wich would be then available for all types.&lt;br /&gt;
&lt;br /&gt;
Preferably this all should also be faster then the current system, or a compelling argument/experiment should be made that shows there can not be a faster system with the same features.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Sensor_handling_redesign]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Engine level abstraction of resources ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
The Spring engine has it&#039;s roots in being a Total Annihilation clone; even if such intent has been dropped since quite some time, the TA resource system is largely present in the codebase being hardcoded in a lot of critical places.&lt;br /&gt;
&lt;br /&gt;
The old system needs to be replaced, the new one should be enough flexible to reproduce everything that the old system did and be able to imitate the behaviour of most common RTS game titles.&lt;br /&gt;
&lt;br /&gt;
The engine&#039;s Lua API to fetch resources will have to be adapted to the new system, and new calls will have to be added to edit it.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Engine_resource_abstraction]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic ingame lobby ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
All existing Spring interfaces (lobbies) are either difficult to customize for game developers or have a different look &#039;n feel from the game itself and require focus switch from the game itself to operate.&lt;br /&gt;
&lt;br /&gt;
A new, Lua scriptable lobby should be implemented with customization and control in the mind, possibly integrated with spring codebase and/or running as a separate process overlaying to the game&#039;s UI.&lt;br /&gt;
&lt;br /&gt;
Optionally, the engine&#039;s start screen should be replaced and integrated with it.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Ingame_lobby]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Smarter pathfinder ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s pathfinder uses a 2d grid and is somewhat limited in functionality.&lt;br /&gt;
A partial/full rewrite should be introduced to add support for navigating using more than 8 primary directions and selectively ignore certain unit types for performance reasons.&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s Lua API should be extended to allow game developers to push new nodes/links and be able to alter or delete existing ones. (for pathfinder-aware tunnels/teleporting/etc.)&lt;br /&gt;
&lt;br /&gt;
Preferably this all should also be faster then the current system, or a compelling argument/experiment should be made that shows there can not be a faster system with the same features.&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Smarter_pathfinder]]&lt;br /&gt;
&lt;br /&gt;
== More AI interfaces ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
The Spring engine&#039;s AI interface supports bindings for multiple languages, currently legacy 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;
[[GSoC_More_AI_interfaces]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New Rendering System ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: below medium&lt;br /&gt;
&lt;br /&gt;
The Spring rendering engine uses a lot FFP (fixed function pipeline) OpenGL functions, this model is becoming deprecated, it is generally slower than shader usage and less flexible.&lt;br /&gt;
&lt;br /&gt;
The rendering code should get a complete overhaul using modern graphic programming techniques such as shaders, implement load support for more standardized model formats (backwards compatibility with current available formats is mandatory either trough 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;
[[GSoC_New_rendering_system]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reconnect / Host change during a match ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium to hard&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s network model implies the existance of a server to host a battle, because of various reasons, the network link between host and clients can die, a system should be designed to allow manual and/or automatic switch game 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;
[[GSoC_Reconnect_Host_change]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Google_Summer_of_Code_2010&amp;diff=9599</id>
		<title>Google Summer of Code 2010</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Google_Summer_of_Code_2010&amp;diff=9599"/>
		<updated>2010-03-11T20:12:16Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: added estimated difficulties&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Limited play area ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
Current spring map formats have an harcoded rectangle geometry, also they provide very limited support for defining aestetics of the surrounding environment outside the play area.&amp;lt;br/&amp;gt;&lt;br /&gt;
The new system should allow the map to restrict the playable area to a subset of the global area, possibly adding support for multiple shapes and/or non rectangular shape restrictions.&amp;lt;br/&amp;gt;&lt;br /&gt;
The restriction shapes should be readable and changeable mid-game trough the engine&#039;s Lua API. Proper handling of units which are suddenly off-map needs to be implemented.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Limited_play_area]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sensor handling redesign / simplification ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
Currently there are a number of different &amp;quot;sensor&amp;quot; systems in the engine: LineOfSight, Radar, Sonar, Seismic. Some can be jammed, some can not. Some respect terrain, and some are always circular.&amp;lt;br/&amp;gt;&lt;br /&gt;
A new sensor system should integrate the current LOS, Radar, Sonar, Seismic systems, to reduce amount of code per functionality, and eventually add additional features wich would be then available for all types.&amp;lt;br/&amp;gt;&lt;br /&gt;
Preferably this all should also be faster then the current system, or a compelling argument/experiment should be made that shows there can not be a faster system with the same features.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Sensor_handling_redesign]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Engine level abstraction of resources ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
The Spring engine has it&#039;s roots in being a Total Annihilation clone; even if such intent has been dropped since quite some time, the TA resource system is largely present in the codebase being hardcoded in a lot of critical places.&amp;lt;br/&amp;gt;&lt;br /&gt;
The old system needs to be replaced, the new one should be enough flexible to reproduce everything that the old system did and be able to imitate the behaviour of most common RTS game titles.&amp;lt;br/&amp;gt;&lt;br /&gt;
The engine&#039;s Lua API to fetch resources will have to be adapted to the new system, and new calls will have to be added to edit it.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Engine_resource_abstraction]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic ingame lobby ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
All existing Spring interfaces ( lobbies ) are either difficult to customize for game developers or have a different look &#039;n feel from the game itself and require focus switch from the game itself to operate.&amp;lt;br/&amp;gt;&lt;br /&gt;
A new, Lua scriptable lobby should be implemented with customization and control in the mind, possibly integrated with spring codebase and/or running as a separate process overlaying to the game&#039;s UI.&amp;lt;br/&amp;gt;&lt;br /&gt;
Optionally, the engine&#039;s start screen should be replaced and integrated with it.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Ingame_lobby]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Smarter pathfinder ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: hard&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s pathfinder uses a 2d grid and is somewhat limited in functionality.&lt;br /&gt;
A partial/full rewrite should be introduced to add support for navigating using more than 8 primary directions and selectively ignore certain unit types for performance reasons.&amp;lt;br/&amp;gt;&lt;br /&gt;
Spring&#039;s Lua API should be extended to allow game developers to push new nodes/links and be able to alter or delete existing ones. (for pathfinder-aware tunnels/teleporting/etc.)&amp;lt;br/&amp;gt;&lt;br /&gt;
Preferably this all should also be faster then the current system, or a compelling argument/experiment should be made that shows there can not be a faster system with the same features.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[GSoC_Smarter_pathfinder]]&lt;br /&gt;
&lt;br /&gt;
== More AI interfaces ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: medium&lt;br /&gt;
&lt;br /&gt;
The Spring engine&#039;s AI interface supports bindings for multiple languages, currently legacy C++, C and java are supported.&amp;lt;br/&amp;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 ).&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[GSoC_More_AI_interfaces]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New Rendering System ==&lt;br /&gt;
&lt;br /&gt;
Estimated difficulty: below medium&lt;br /&gt;
&lt;br /&gt;
The Spring rendering engine uses a lot FFP (fixed function pipeline) OpenGL functions, this model is becoming deprecated, it is generally slower than shader usage and less flexible.&lt;br /&gt;
&lt;br /&gt;
The rendering code should get a complete overhaul using modern graphic programming techniques such as shaders, implement load support for more standardized model formats ( backwards compatibility with current available formats is mandatory either trough 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;
[[GSoC_New_rendering_system]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reconnect / Host change during a match ==&lt;br /&gt;
&lt;br /&gt;
Spring&#039;s network model implies the existance of a server to host a battle, because of various reasons, the network link between host and clients can die, a system should be designed to allow manual and/or automatic switch game 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;
[[GSoC_Reconnect_Host_change]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_MoveCtrl&amp;diff=11372</id>
		<title>Lua MoveCtrl</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_MoveCtrl&amp;diff=11372"/>
		<updated>2009-12-26T23:10:15Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* MoveType-specific */&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;
== Enable/Disable ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.Enable&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.Disable&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number tag ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.GetTag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetProgressState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number state | &amp;quot;done&amp;quot; | &amp;quot;active&amp;quot; | &amp;quot;failed&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Physics ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGravity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number gravity ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetDrag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number gravity ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGroundOffset&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number offset ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetWindFactor&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number windFactor ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetPhysics&#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 ) -&amp;gt; nil &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number posX, number posY, number posZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number velX, number velY, number velZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRelativeVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number relvelX, number relvelY, number relvelZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotation&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotX, number rotY, number rotZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotationVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotVelX, number rotVelY, number rotVelZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotationOffset&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotOffX, number rotOffY, number rotOffZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number heading ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetNoBlocking&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean noblock ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetLimits&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number minX, number minY, number minZ,&lt;br /&gt;
    number maxX, number maxY, number maxZ ) -&amp;gt; nil &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTrackSlope&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean trackslope ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTrackGround&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean noblock ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetLeaveTracks&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean leavetracks ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetExtrapolate&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean on ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetShotStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean shotstop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetSlopeStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean slopestop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetCollideStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean collidestop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== MoveType-specific ==&lt;br /&gt;
NOTE: all Set*MoveTypeData functions support the following number keys:&lt;br /&gt;
&lt;br /&gt;
  maxSpeed&lt;br /&gt;
  maxWantedSpeed&lt;br /&gt;
  repairBelowHealth&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetAirMoveTypeData&#039;&#039;&#039; - new in version 0.81&lt;br /&gt;
  ( number unitID, string key, value  ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, table values ) -&amp;gt; nil&lt;br /&gt;
  supported keys:&lt;br /&gt;
  numbers:&lt;br /&gt;
    wantedHeight&lt;br /&gt;
    myGravity&lt;br /&gt;
    maxBank&lt;br /&gt;
    maxPitch&lt;br /&gt;
    turnRadius&lt;br /&gt;
    maxAcc&lt;br /&gt;
    maxAileron&lt;br /&gt;
    maxElevator&lt;br /&gt;
    maxRudder&lt;br /&gt;
  booleans:&lt;br /&gt;
    collide&lt;br /&gt;
    useSmoothMesh&lt;br /&gt;
  NOTE: not all keys and not all values may work correctly.&lt;br /&gt;
  [[SetMoveTypeDataExample|Example usage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGroundMoveTypeData&#039;&#039;&#039; - new in version 0.81&lt;br /&gt;
  ( number unitID, string key, value  ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, table values ) -&amp;gt; nil&lt;br /&gt;
  supported keys:&lt;br /&gt;
  numbers:&lt;br /&gt;
    baseTurnRate&lt;br /&gt;
    turnRate&lt;br /&gt;
    accRate&lt;br /&gt;
    decRate&lt;br /&gt;
    maxReverseSpeed&lt;br /&gt;
    wantedSpeed&lt;br /&gt;
    requestedSpeed&lt;br /&gt;
    requestedTurnRate&lt;br /&gt;
  booleans:&lt;br /&gt;
    floatOnWater&lt;br /&gt;
  NOTE: not all keys and not all values may work correctly.&lt;br /&gt;
  [[SetMoveTypeDataExample|Example usage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGunshipMoveTypeData&#039;&#039;&#039; - new in version 0.81&lt;br /&gt;
  ( number unitID, string key, value  ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, table values ) -&amp;gt; nil&lt;br /&gt;
  supported keys:&lt;br /&gt;
  numbers:&lt;br /&gt;
    wantedHeight&lt;br /&gt;
    turnRate&lt;br /&gt;
    accRate&lt;br /&gt;
    decRate&lt;br /&gt;
    altitudeRate&lt;br /&gt;
    currentBank&lt;br /&gt;
    currentPitch&lt;br /&gt;
    breakDistance&lt;br /&gt;
  booleans:&lt;br /&gt;
    collide&lt;br /&gt;
    useSmoothMesh&lt;br /&gt;
    bankingAllowed&lt;br /&gt;
    dontLand&lt;br /&gt;
  NOTE: not all keys and not all values may work correctly.&lt;br /&gt;
  [[SetMoveTypeDataExample|Example usage]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=SetMoveTypeDataExample_Example_usage&amp;diff=16335</id>
		<title>SetMoveTypeDataExample Example usage</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=SetMoveTypeDataExample_Example_usage&amp;diff=16335"/>
		<updated>2009-12-26T19:15:35Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: SetMoveTypeDataExample Example usage moved to SetMoveTypeDataExample: brainfart&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[SetMoveTypeDataExample]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=SetMoveTypeDataExample&amp;diff=16330</id>
		<title>SetMoveTypeDataExample</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=SetMoveTypeDataExample&amp;diff=16330"/>
		<updated>2009-12-26T19:15:35Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: SetMoveTypeDataExample Example usage moved to SetMoveTypeDataExample: brainfart&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function gadget:GetInfo()&lt;br /&gt;
  return {&lt;br /&gt;
    name      = &amp;quot;FlashTurnRate&amp;quot;,&lt;br /&gt;
    desc      = &amp;quot;Adds an option for flashes and friends to turn faster but go slower&amp;quot;,&lt;br /&gt;
    author    = &amp;quot;Baczek&amp;quot;,&lt;br /&gt;
    date      = &amp;quot;26 Dec 2009&amp;quot;,&lt;br /&gt;
    license   = &amp;quot;GNU GPL, v2 or later&amp;quot;,&lt;br /&gt;
    layer     = 0,&lt;br /&gt;
    enabled   = true  --  loaded by default?&lt;br /&gt;
  }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
if (not gadgetHandler:IsSyncedCode()) then&lt;br /&gt;
  return&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local EditUnitCmdDesc = Spring.EditUnitCmdDesc&lt;br /&gt;
local FindUnitCmdDesc = Spring.FindUnitCmdDesc&lt;br /&gt;
local InsertUnitCmdDesc = Spring.InsertUnitCmdDesc&lt;br /&gt;
local GiveOrderToUnit = Spring.GiveOrderToUnit&lt;br /&gt;
local SetUnitNeutral = Spring.SetUnitNeutral&lt;br /&gt;
local GetUnitMoveTypeData = Spring.GetUnitMoveTypeData&lt;br /&gt;
local SetGroundMoveTypeData = Spring.MoveCtrl.SetGroundMoveTypeData&lt;br /&gt;
local SetGunshipMoveTypeData = Spring.MoveCtrl.SetGunshipMoveTypeData&lt;br /&gt;
&lt;br /&gt;
local FLASH = {&lt;br /&gt;
  [UnitDefNames[&amp;quot;armflash&amp;quot;].id] = true,&lt;br /&gt;
  [UnitDefNames[&amp;quot;corgator&amp;quot;].id] = true,&lt;br /&gt;
  [UnitDefNames[&amp;quot;armatlas&amp;quot;].id] = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local flashList = {}&lt;br /&gt;
&lt;br /&gt;
local CMD_SET_TR = 34581&lt;br /&gt;
&lt;br /&gt;
local turnCmd = {&lt;br /&gt;
      id      = CMD_SET_TR,&lt;br /&gt;
      name    = &amp;quot;flashTurnRate&amp;quot;,&lt;br /&gt;
      action  = &amp;quot;flashTurnRate&amp;quot;,&lt;br /&gt;
      type    = CMDTYPE.ICON_MODE,&lt;br /&gt;
      tooltip = &amp;quot;Changes the turn rate of the Flash&amp;quot;,&lt;br /&gt;
      params  = { &#039;0&#039;, &#039;  Lo  &#039;, &#039;  Hi  &#039;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function gadget:UnitCreated(unitID, unitDefID, unitTeam, builderID)&lt;br /&gt;
  if FLASH[unitDefID] then&lt;br /&gt;
    InsertUnitCmdDesc(unitID, 500, turnCmd)&lt;br /&gt;
    local tr = UnitDefs[unitDefID].turnRate&lt;br /&gt;
    local ms = UnitDefs[unitDefID].speed&lt;br /&gt;
    flashList[unitID] = {orgturnrate=tr, orgspeed=ms}&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function gadget:UnitDestroyed(unitID, unitDefID, unitTeam)&lt;br /&gt;
  flashList[unitID] = nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function gadget:AllowCommand(unitID, unitDefID, teamID, cmdID, cmdParams, cmdOptions)&lt;br /&gt;
  if FLASH[unitDefID] then&lt;br /&gt;
    if (cmdID == CMD_SET_TR) then &lt;br /&gt;
      local mt = GetUnitMoveTypeData(unitID)&lt;br /&gt;
      Spring.Echo(&amp;quot;turnRate=&amp;quot;..tostring(mt.turnRate))&lt;br /&gt;
      if mt.name ~= &amp;quot;ground&amp;quot; and mt.name ~= &amp;quot;gunship&amp;quot; then return false end&lt;br /&gt;
      local cmdDescID = FindUnitCmdDesc(unitID, CMD_SET_TR)&lt;br /&gt;
      Spring.Echo(&amp;quot;cmdparams[1]=&amp;quot; .. tostring(cmdParams[1]))&lt;br /&gt;
      if mt.name == &amp;quot;ground&amp;quot; then &lt;br /&gt;
        SetGroundMoveTypeData(unitID, {&lt;br /&gt;
                turnRate=(1+cmdParams[1]) * flashList[unitID].orgturnrate,&lt;br /&gt;
                maxSpeed=flashList[unitID].orgspeed / (1+cmdParams[1])&lt;br /&gt;
        })&lt;br /&gt;
      elseif mt.name == &amp;quot;gunship&amp;quot; then&lt;br /&gt;
        -- setting maxSpeed on gunships should automatically adjust&lt;br /&gt;
        -- brakeDistance&lt;br /&gt;
        SetGunshipMoveTypeData(unitID, {&lt;br /&gt;
                turnRate=(1+cmdParams[1]) * flashList[unitID].orgturnrate,&lt;br /&gt;
                maxSpeed=flashList[unitID].orgspeed / (1+cmdParams[1])&lt;br /&gt;
        })&lt;br /&gt;
      end&lt;br /&gt;
      turnCmd.params[1] = cmdParams[1]&lt;br /&gt;
      EditUnitCmdDesc(unitID, cmdDescID, turnCmd)&lt;br /&gt;
      turnCmd.params[1] = 1&lt;br /&gt;
      return false&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_MoveCtrl&amp;diff=11371</id>
		<title>Lua MoveCtrl</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_MoveCtrl&amp;diff=11371"/>
		<updated>2009-12-26T19:15:18Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* MoveType-specific */ oops&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;
== Enable/Disable ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.Enable&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.Disable&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number tag ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.GetTag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetProgressState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number state | &amp;quot;done&amp;quot; | &amp;quot;active&amp;quot; | &amp;quot;failed&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Physics ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGravity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number gravity ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetDrag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number gravity ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGroundOffset&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number offset ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetWindFactor&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number windFactor ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetPhysics&#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 ) -&amp;gt; nil &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number posX, number posY, number posZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number velX, number velY, number velZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRelativeVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number relvelX, number relvelY, number relvelZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotation&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotX, number rotY, number rotZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotationVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotVelX, number rotVelY, number rotVelZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotationOffset&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotOffX, number rotOffY, number rotOffZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number heading ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetNoBlocking&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean noblock ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetLimits&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number minX, number minY, number minZ,&lt;br /&gt;
    number maxX, number maxY, number maxZ ) -&amp;gt; nil &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTrackSlope&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean trackslope ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTrackGround&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean noblock ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetLeaveTracks&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean leavetracks ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetExtrapolate&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean on ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetShotStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean shotstop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetSlopeStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean slopestop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetCollideStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean collidestop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== MoveType-specific ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetAirMoveTypeData&#039;&#039;&#039; - new in version 0.81&lt;br /&gt;
  ( number unitID, string key, value  ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, table values ) -&amp;gt; nil&lt;br /&gt;
  supported keys:&lt;br /&gt;
  numbers:&lt;br /&gt;
    wantedHeight&lt;br /&gt;
    myGravity&lt;br /&gt;
    maxBank&lt;br /&gt;
    maxPitch&lt;br /&gt;
    turnRadius&lt;br /&gt;
    maxAcc&lt;br /&gt;
    maxAileron&lt;br /&gt;
    maxElevator&lt;br /&gt;
    maxRudder&lt;br /&gt;
  booleans:&lt;br /&gt;
    collide&lt;br /&gt;
    useSmoothMesh&lt;br /&gt;
  NOTE: not all keys and not all values may work correctly.&lt;br /&gt;
  [[SetMoveTypeDataExample|Example usage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGroundMoveTypeData&#039;&#039;&#039; - new in version 0.81&lt;br /&gt;
  ( number unitID, string key, value  ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, table values ) -&amp;gt; nil&lt;br /&gt;
  supported keys:&lt;br /&gt;
  numbers:&lt;br /&gt;
    baseTurnRate&lt;br /&gt;
    turnRate&lt;br /&gt;
    accRate&lt;br /&gt;
    decRate&lt;br /&gt;
    maxReverseSpeed&lt;br /&gt;
    wantedSpeed&lt;br /&gt;
    requestedSpeed&lt;br /&gt;
    requestedTurnRate&lt;br /&gt;
  booleans:&lt;br /&gt;
    floatOnWater&lt;br /&gt;
  NOTE: not all keys and not all values may work correctly.&lt;br /&gt;
  [[SetMoveTypeDataExample|Example usage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGunshipMoveTypeData&#039;&#039;&#039; - new in version 0.81&lt;br /&gt;
  ( number unitID, string key, value  ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, table values ) -&amp;gt; nil&lt;br /&gt;
  supported keys:&lt;br /&gt;
  numbers:&lt;br /&gt;
    wantedHeight&lt;br /&gt;
    turnRate&lt;br /&gt;
    accRate&lt;br /&gt;
    decRate&lt;br /&gt;
    altitudeRate&lt;br /&gt;
    currentBank&lt;br /&gt;
    currentPitch&lt;br /&gt;
    breakDistance&lt;br /&gt;
  booleans:&lt;br /&gt;
    collide&lt;br /&gt;
    useSmoothMesh&lt;br /&gt;
    bankingAllowed&lt;br /&gt;
    dontLand&lt;br /&gt;
  NOTE: not all keys and not all values may work correctly.&lt;br /&gt;
  [[SetMoveTypeDataExample|Example usage]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_MoveCtrl&amp;diff=11370</id>
		<title>Lua MoveCtrl</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_MoveCtrl&amp;diff=11370"/>
		<updated>2009-12-26T19:14:45Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* MoveType-specific */ added link to example usage&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;
== Enable/Disable ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.Enable&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.Disable&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number tag ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.GetTag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetProgressState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number state | &amp;quot;done&amp;quot; | &amp;quot;active&amp;quot; | &amp;quot;failed&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Physics ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGravity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number gravity ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetDrag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number gravity ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGroundOffset&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number offset ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetWindFactor&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number windFactor ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetPhysics&#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 ) -&amp;gt; nil &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number posX, number posY, number posZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number velX, number velY, number velZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRelativeVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number relvelX, number relvelY, number relvelZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotation&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotX, number rotY, number rotZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotationVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotVelX, number rotVelY, number rotVelZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotationOffset&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotOffX, number rotOffY, number rotOffZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number heading ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetNoBlocking&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean noblock ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetLimits&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number minX, number minY, number minZ,&lt;br /&gt;
    number maxX, number maxY, number maxZ ) -&amp;gt; nil &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTrackSlope&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean trackslope ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTrackGround&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean noblock ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetLeaveTracks&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean leavetracks ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetExtrapolate&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean on ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetShotStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean shotstop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetSlopeStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean slopestop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetCollideStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean collidestop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== MoveType-specific ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetAirMoveTypeData&#039;&#039;&#039; - new in version 0.81&lt;br /&gt;
  ( number unitID, string key, value  ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, table values ) -&amp;gt; nil&lt;br /&gt;
  supported keys:&lt;br /&gt;
  numbers:&lt;br /&gt;
    wantedHeight&lt;br /&gt;
    myGravity&lt;br /&gt;
    maxBank&lt;br /&gt;
    maxPitch&lt;br /&gt;
    turnRadius&lt;br /&gt;
    maxAcc&lt;br /&gt;
    maxAileron&lt;br /&gt;
    maxElevator&lt;br /&gt;
    maxRudder&lt;br /&gt;
  booleans:&lt;br /&gt;
    collide&lt;br /&gt;
    useSmoothMesh&lt;br /&gt;
  NOTE: not all keys and not all values may work correctly.&lt;br /&gt;
  [[SetMoveTypeDataExample Example usage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGroundMoveTypeData&#039;&#039;&#039; - new in version 0.81&lt;br /&gt;
  ( number unitID, string key, value  ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, table values ) -&amp;gt; nil&lt;br /&gt;
  supported keys:&lt;br /&gt;
  numbers:&lt;br /&gt;
    baseTurnRate&lt;br /&gt;
    turnRate&lt;br /&gt;
    accRate&lt;br /&gt;
    decRate&lt;br /&gt;
    maxReverseSpeed&lt;br /&gt;
    wantedSpeed&lt;br /&gt;
    requestedSpeed&lt;br /&gt;
    requestedTurnRate&lt;br /&gt;
  booleans:&lt;br /&gt;
    floatOnWater&lt;br /&gt;
  NOTE: not all keys and not all values may work correctly.&lt;br /&gt;
  [[SetMoveTypeDataExample Example usage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGunshipMoveTypeData&#039;&#039;&#039; - new in version 0.81&lt;br /&gt;
  ( number unitID, string key, value  ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, table values ) -&amp;gt; nil&lt;br /&gt;
  supported keys:&lt;br /&gt;
  numbers:&lt;br /&gt;
    wantedHeight&lt;br /&gt;
    turnRate&lt;br /&gt;
    accRate&lt;br /&gt;
    decRate&lt;br /&gt;
    altitudeRate&lt;br /&gt;
    currentBank&lt;br /&gt;
    currentPitch&lt;br /&gt;
    breakDistance&lt;br /&gt;
  booleans:&lt;br /&gt;
    collide&lt;br /&gt;
    useSmoothMesh&lt;br /&gt;
    bankingAllowed&lt;br /&gt;
    dontLand&lt;br /&gt;
  NOTE: not all keys and not all values may work correctly.&lt;br /&gt;
  [[SetMoveTypeDataExample Example usage]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=SetMoveTypeDataExample&amp;diff=16329</id>
		<title>SetMoveTypeDataExample</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=SetMoveTypeDataExample&amp;diff=16329"/>
		<updated>2009-12-26T19:14:17Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: example usage of Set*MoveTypeData&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function gadget:GetInfo()&lt;br /&gt;
  return {&lt;br /&gt;
    name      = &amp;quot;FlashTurnRate&amp;quot;,&lt;br /&gt;
    desc      = &amp;quot;Adds an option for flashes and friends to turn faster but go slower&amp;quot;,&lt;br /&gt;
    author    = &amp;quot;Baczek&amp;quot;,&lt;br /&gt;
    date      = &amp;quot;26 Dec 2009&amp;quot;,&lt;br /&gt;
    license   = &amp;quot;GNU GPL, v2 or later&amp;quot;,&lt;br /&gt;
    layer     = 0,&lt;br /&gt;
    enabled   = true  --  loaded by default?&lt;br /&gt;
  }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
if (not gadgetHandler:IsSyncedCode()) then&lt;br /&gt;
  return&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local EditUnitCmdDesc = Spring.EditUnitCmdDesc&lt;br /&gt;
local FindUnitCmdDesc = Spring.FindUnitCmdDesc&lt;br /&gt;
local InsertUnitCmdDesc = Spring.InsertUnitCmdDesc&lt;br /&gt;
local GiveOrderToUnit = Spring.GiveOrderToUnit&lt;br /&gt;
local SetUnitNeutral = Spring.SetUnitNeutral&lt;br /&gt;
local GetUnitMoveTypeData = Spring.GetUnitMoveTypeData&lt;br /&gt;
local SetGroundMoveTypeData = Spring.MoveCtrl.SetGroundMoveTypeData&lt;br /&gt;
local SetGunshipMoveTypeData = Spring.MoveCtrl.SetGunshipMoveTypeData&lt;br /&gt;
&lt;br /&gt;
local FLASH = {&lt;br /&gt;
  [UnitDefNames[&amp;quot;armflash&amp;quot;].id] = true,&lt;br /&gt;
  [UnitDefNames[&amp;quot;corgator&amp;quot;].id] = true,&lt;br /&gt;
  [UnitDefNames[&amp;quot;armatlas&amp;quot;].id] = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local flashList = {}&lt;br /&gt;
&lt;br /&gt;
local CMD_SET_TR = 34581&lt;br /&gt;
&lt;br /&gt;
local turnCmd = {&lt;br /&gt;
      id      = CMD_SET_TR,&lt;br /&gt;
      name    = &amp;quot;flashTurnRate&amp;quot;,&lt;br /&gt;
      action  = &amp;quot;flashTurnRate&amp;quot;,&lt;br /&gt;
      type    = CMDTYPE.ICON_MODE,&lt;br /&gt;
      tooltip = &amp;quot;Changes the turn rate of the Flash&amp;quot;,&lt;br /&gt;
      params  = { &#039;0&#039;, &#039;  Lo  &#039;, &#039;  Hi  &#039;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function gadget:UnitCreated(unitID, unitDefID, unitTeam, builderID)&lt;br /&gt;
  if FLASH[unitDefID] then&lt;br /&gt;
    InsertUnitCmdDesc(unitID, 500, turnCmd)&lt;br /&gt;
    local tr = UnitDefs[unitDefID].turnRate&lt;br /&gt;
    local ms = UnitDefs[unitDefID].speed&lt;br /&gt;
    flashList[unitID] = {orgturnrate=tr, orgspeed=ms}&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function gadget:UnitDestroyed(unitID, unitDefID, unitTeam)&lt;br /&gt;
  flashList[unitID] = nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function gadget:AllowCommand(unitID, unitDefID, teamID, cmdID, cmdParams, cmdOptions)&lt;br /&gt;
  if FLASH[unitDefID] then&lt;br /&gt;
    if (cmdID == CMD_SET_TR) then &lt;br /&gt;
      local mt = GetUnitMoveTypeData(unitID)&lt;br /&gt;
      Spring.Echo(&amp;quot;turnRate=&amp;quot;..tostring(mt.turnRate))&lt;br /&gt;
      if mt.name ~= &amp;quot;ground&amp;quot; and mt.name ~= &amp;quot;gunship&amp;quot; then return false end&lt;br /&gt;
      local cmdDescID = FindUnitCmdDesc(unitID, CMD_SET_TR)&lt;br /&gt;
      Spring.Echo(&amp;quot;cmdparams[1]=&amp;quot; .. tostring(cmdParams[1]))&lt;br /&gt;
      if mt.name == &amp;quot;ground&amp;quot; then &lt;br /&gt;
        SetGroundMoveTypeData(unitID, {&lt;br /&gt;
                turnRate=(1+cmdParams[1]) * flashList[unitID].orgturnrate,&lt;br /&gt;
                maxSpeed=flashList[unitID].orgspeed / (1+cmdParams[1])&lt;br /&gt;
        })&lt;br /&gt;
      elseif mt.name == &amp;quot;gunship&amp;quot; then&lt;br /&gt;
        -- setting maxSpeed on gunships should automatically adjust&lt;br /&gt;
        -- brakeDistance&lt;br /&gt;
        SetGunshipMoveTypeData(unitID, {&lt;br /&gt;
                turnRate=(1+cmdParams[1]) * flashList[unitID].orgturnrate,&lt;br /&gt;
                maxSpeed=flashList[unitID].orgspeed / (1+cmdParams[1])&lt;br /&gt;
        })&lt;br /&gt;
      end&lt;br /&gt;
      turnCmd.params[1] = cmdParams[1]&lt;br /&gt;
      EditUnitCmdDesc(unitID, cmdDescID, turnCmd)&lt;br /&gt;
      turnCmd.params[1] = 1&lt;br /&gt;
      return false&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_MoveCtrl&amp;diff=11369</id>
		<title>Lua MoveCtrl</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_MoveCtrl&amp;diff=11369"/>
		<updated>2009-12-23T20:51:00Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* MoveType-specific */ gunship and ground movetype 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;
== Enable/Disable ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.Enable&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.Disable&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number tag ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.GetTag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetProgressState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number state | &amp;quot;done&amp;quot; | &amp;quot;active&amp;quot; | &amp;quot;failed&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Physics ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGravity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number gravity ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetDrag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number gravity ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGroundOffset&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number offset ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetWindFactor&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number windFactor ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetPhysics&#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 ) -&amp;gt; nil &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number posX, number posY, number posZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number velX, number velY, number velZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRelativeVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number relvelX, number relvelY, number relvelZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotation&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotX, number rotY, number rotZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotationVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotVelX, number rotVelY, number rotVelZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotationOffset&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotOffX, number rotOffY, number rotOffZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number heading ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetNoBlocking&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean noblock ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetLimits&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number minX, number minY, number minZ,&lt;br /&gt;
    number maxX, number maxY, number maxZ ) -&amp;gt; nil &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTrackSlope&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean trackslope ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTrackGround&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean noblock ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetLeaveTracks&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean leavetracks ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetExtrapolate&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean on ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetShotStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean shotstop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetSlopeStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean slopestop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetCollideStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean collidestop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== MoveType-specific ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetAirMoveTypeData&#039;&#039;&#039; - new in version 0.81&lt;br /&gt;
  ( number unitID, string key, value  ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, table values ) -&amp;gt; nil&lt;br /&gt;
  supported keys:&lt;br /&gt;
  numbers:&lt;br /&gt;
    wantedHeight&lt;br /&gt;
    myGravity&lt;br /&gt;
    maxBank&lt;br /&gt;
    maxPitch&lt;br /&gt;
    turnRadius&lt;br /&gt;
    maxAcc&lt;br /&gt;
    maxAileron&lt;br /&gt;
    maxElevator&lt;br /&gt;
    maxRudder&lt;br /&gt;
  booleans:&lt;br /&gt;
    collide&lt;br /&gt;
    useSmoothMesh&lt;br /&gt;
  NOTE: not all keys and not all values may work correctly.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGroundMoveTypeData&#039;&#039;&#039; - new in version 0.81&lt;br /&gt;
  ( number unitID, string key, value  ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, table values ) -&amp;gt; nil&lt;br /&gt;
  supported keys:&lt;br /&gt;
  numbers:&lt;br /&gt;
    baseTurnRate&lt;br /&gt;
    turnRate&lt;br /&gt;
    accRate&lt;br /&gt;
    decRate&lt;br /&gt;
    maxReverseSpeed&lt;br /&gt;
    wantedSpeed&lt;br /&gt;
    requestedSpeed&lt;br /&gt;
    requestedTurnRate&lt;br /&gt;
  booleans:&lt;br /&gt;
    floatOnWater&lt;br /&gt;
  NOTE: not all keys and not all values may work correctly.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGunshipMoveTypeData&#039;&#039;&#039; - new in version 0.81&lt;br /&gt;
  ( number unitID, string key, value  ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, table values ) -&amp;gt; nil&lt;br /&gt;
  supported keys:&lt;br /&gt;
  numbers:&lt;br /&gt;
    wantedHeight&lt;br /&gt;
    turnRate&lt;br /&gt;
    accRate&lt;br /&gt;
    decRate&lt;br /&gt;
    altitudeRate&lt;br /&gt;
    currentBank&lt;br /&gt;
    currentPitch&lt;br /&gt;
    breakDistance&lt;br /&gt;
  booleans:&lt;br /&gt;
    collide&lt;br /&gt;
    useSmoothMesh&lt;br /&gt;
    bankingAllowed&lt;br /&gt;
    dontLand&lt;br /&gt;
  NOTE: not all keys and not all values may work correctly.&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_MoveCtrl&amp;diff=11368</id>
		<title>Lua MoveCtrl</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_MoveCtrl&amp;diff=11368"/>
		<updated>2009-12-23T20:46:05Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* MoveType-specific */  air move type 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;
== Enable/Disable ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.Enable&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.Disable&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number tag ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.GetTag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetProgressState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number state | &amp;quot;done&amp;quot; | &amp;quot;active&amp;quot; | &amp;quot;failed&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Physics ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGravity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number gravity ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetDrag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number gravity ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGroundOffset&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number offset ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetWindFactor&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number windFactor ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetPhysics&#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 ) -&amp;gt; nil &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number posX, number posY, number posZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number velX, number velY, number velZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRelativeVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number relvelX, number relvelY, number relvelZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotation&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotX, number rotY, number rotZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotationVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotVelX, number rotVelY, number rotVelZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotationOffset&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotOffX, number rotOffY, number rotOffZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number heading ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetNoBlocking&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean noblock ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetLimits&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number minX, number minY, number minZ,&lt;br /&gt;
    number maxX, number maxY, number maxZ ) -&amp;gt; nil &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTrackSlope&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean trackslope ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTrackGround&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean noblock ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetLeaveTracks&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean leavetracks ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetExtrapolate&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean on ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetShotStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean shotstop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetSlopeStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean slopestop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetCollideStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean collidestop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== MoveType-specific ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetAirMoveTypeData&#039;&#039;&#039; - new in version 0.81&lt;br /&gt;
  ( number unitID, string key, value  ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, table values ) -&amp;gt; nil&lt;br /&gt;
  supported keys:&lt;br /&gt;
  numbers:&lt;br /&gt;
    wantedHeight&lt;br /&gt;
    myGravity&lt;br /&gt;
    maxBank&lt;br /&gt;
    maxPitch&lt;br /&gt;
    turnRadius&lt;br /&gt;
    maxAcc&lt;br /&gt;
    maxAileron&lt;br /&gt;
    maxElevator&lt;br /&gt;
    maxRudder&lt;br /&gt;
  booleans:&lt;br /&gt;
    collide&lt;br /&gt;
    useSmoothMesh&lt;br /&gt;
  NOTE: not all keys and not all values may work correctly.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGroundMoveTypeData&#039;&#039;&#039; - new in version 0.81&lt;br /&gt;
  ( number unitID, string key, value  ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, table values ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGunshipMoveTypeData&#039;&#039;&#039; - new in version 0.81&lt;br /&gt;
  ( number unitID, string key, value  ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, table values ) -&amp;gt; nil&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_MoveCtrl&amp;diff=11367</id>
		<title>Lua MoveCtrl</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_MoveCtrl&amp;diff=11367"/>
		<updated>2009-12-23T20:41:15Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* MoveType-specific */&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;
== Enable/Disable ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.Enable&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.Disable&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number tag ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.GetTag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetProgressState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number state | &amp;quot;done&amp;quot; | &amp;quot;active&amp;quot; | &amp;quot;failed&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Physics ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGravity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number gravity ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetDrag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number gravity ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGroundOffset&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number offset ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetWindFactor&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number windFactor ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetPhysics&#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 ) -&amp;gt; nil &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number posX, number posY, number posZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number velX, number velY, number velZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRelativeVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number relvelX, number relvelY, number relvelZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotation&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotX, number rotY, number rotZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotationVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotVelX, number rotVelY, number rotVelZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotationOffset&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotOffX, number rotOffY, number rotOffZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number heading ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetNoBlocking&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean noblock ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetLimits&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number minX, number minY, number minZ,&lt;br /&gt;
    number maxX, number maxY, number maxZ ) -&amp;gt; nil &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTrackSlope&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean trackslope ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTrackGround&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean noblock ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetLeaveTracks&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean leavetracks ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetExtrapolate&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean on ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetShotStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean shotstop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetSlopeStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean slopestop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetCollideStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean collidestop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== MoveType-specific ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetAirMoveTypeData&#039;&#039;&#039; - new in version 0.81&lt;br /&gt;
  ( number unitID, string key, value  ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, table values ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGroundMoveTypeData&#039;&#039;&#039; - new in version 0.81&lt;br /&gt;
  ( number unitID, string key, value  ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, table values ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGunshipMoveTypeData&#039;&#039;&#039; - new in version 0.81&lt;br /&gt;
  ( number unitID, string key, value  ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, table values ) -&amp;gt; nil&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_MoveCtrl&amp;diff=11366</id>
		<title>Lua MoveCtrl</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_MoveCtrl&amp;diff=11366"/>
		<updated>2009-12-20T22:09:57Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: &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;
== Enable/Disable ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.Enable&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.Disable&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number tag ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.GetTag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetProgressState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number state | &amp;quot;done&amp;quot; | &amp;quot;active&amp;quot; | &amp;quot;failed&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Physics ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGravity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number gravity ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetDrag&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number gravity ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetGroundOffset&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number offset ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetWindFactor&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number windFactor ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetPhysics&#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 ) -&amp;gt; nil &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number posX, number posY, number posZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number velX, number velY, number velZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRelativeVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number relvelX, number relvelY, number relvelZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotation&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotX, number rotY, number rotZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotationVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotVelX, number rotVelY, number rotVelZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetRotationOffset&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number rotOffX, number rotOffY, number rotOffZ ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number heading ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetNoBlocking&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean noblock ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetLimits&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number minX, number minY, number minZ,&lt;br /&gt;
    number maxX, number maxY, number maxZ ) -&amp;gt; nil &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTrackSlope&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean trackslope ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetTrackGround&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean noblock ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetLeaveTracks&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean leavetracks ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetExtrapolate&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean on ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetShotStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean shotstop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetSlopeStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean slopestop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetCollideStop&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean collidestop ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== MoveType-specific ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.MoveCtrl.SetAirMoveTypeData&#039;&#039;&#039; - new in version 0.81&lt;br /&gt;
  ( number unitID, string key, value  ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, table values ) -&amp;gt; nil&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedRead&amp;diff=11891</id>
		<title>Lua SyncedRead</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedRead&amp;diff=11891"/>
		<updated>2009-12-19T22:36:49Z</updated>

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

		<summary type="html">&lt;p&gt;Imbaczek: /* Visual Studio 8 (2005) */  Windows SDK link&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;
= Get the Source Code =&lt;br /&gt;
{{Obtaining_The_Source_Code}}&lt;br /&gt;
&lt;br /&gt;
= Compiling on Windows =&lt;br /&gt;
For other platforms see [[Building spring]].&lt;br /&gt;
&lt;br /&gt;
==Install MinGW==&lt;br /&gt;
Code::Blocks and Dev C++ use MinGW too, so if you are using one of these IDEs, you&#039;ll want to follow these instructions too.&lt;br /&gt;
&lt;br /&gt;
===Getting MinGW===&lt;br /&gt;
Compiling Spring in MinGW requires GCC 4.x&lt;br /&gt;
There are 2 different packages the official one and the TDM (experimental) builds.&lt;br /&gt;
====Official 4.4.0====&lt;br /&gt;
(Note: you can&#039;t override an existing old TDM enviroment with these, you first have to uninstall TDM, else you will get some &amp;quot;undefined ... SJLJ_xyz&amp;quot; linking errors!)&lt;br /&gt;
&lt;br /&gt;
Get it here: [http://sourceforge.net/projects/mingw/files/ official MinGW + GCC4.4.0]&lt;br /&gt;
&lt;br /&gt;
You have to get MinGW as a bunch of separate packages, as the downloader does not support installing gcc 4.4.0 yet, which is needed to compile spring successfully.&lt;br /&gt;
&lt;br /&gt;
minimum packages:&lt;br /&gt;
* MinGW Runtime - &#039;&#039;mingwrt (dev &amp;amp; dll)&#039;&#039;&lt;br /&gt;
* MinGW API for MS-Windows - &#039;&#039;w32api (dev)&#039;&#039;&lt;br /&gt;
* GNU Binutils - &#039;&#039;binutils (bin)&#039;&#039;&lt;br /&gt;
* GCC 4 - &#039;&#039;gcc-core (bin &amp;amp; dll)&#039;&#039;&lt;br /&gt;
* GCC 4 - &#039;&#039;gcc-c++ (bin &amp;amp; dll)&#039;&#039;&lt;br /&gt;
* GCC 4 - &#039;&#039;pthreads (dll)&#039;&#039;&lt;br /&gt;
* GCC 4 - &#039;&#039;mpfr (dll)&#039;&#039;&lt;br /&gt;
* GCC 4 - &#039;&#039;gmp (dll)&#039;&#039;&lt;br /&gt;
instead of the five above mentioned GCC packages (17MB), you could also get it in a single archive instead (60MB):&lt;br /&gt;
* GCC 4 - &#039;&#039;full (bin)&#039;&#039;&lt;br /&gt;
if you do not have an other make system in place, get this in addition:&lt;br /&gt;
* GNU Make - &#039;&#039;mingw32-make&#039;&#039;&lt;br /&gt;
if you want to debug, you will want this as well:&lt;br /&gt;
* GNU Source-Level Debugger - &#039;&#039;gdb (version 6.8-3 or later)&#039;&#039;&lt;br /&gt;
Extract all the packages to a common dir, eg. &#039;&#039;C:/MinGW/&#039;&#039;, and then the environment vars:&lt;br /&gt;
* &#039;&#039;MINGDIR=C:/MinGW&#039;&#039;&lt;br /&gt;
* &#039;&#039;PATH=%PATH%;%MINGDIR%\bin&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You also need some Spring dependencies collected in a [http://github.com/spring/spring/downloads mingwlibs] package, you get it [http://github.com/spring/spring/downloads here].&lt;br /&gt;
(Note: this package differs from the one needed for the TDM builds!)&lt;br /&gt;
====TDM Builds====&lt;br /&gt;
Get it here: [http://www.tdragon.net/recentgcc/ TDM&#039;s experimental MinGW]&lt;br /&gt;
&lt;br /&gt;
Get at least the following packages:&lt;br /&gt;
* mingw-runtime&lt;br /&gt;
* core&lt;br /&gt;
* c++&lt;br /&gt;
* binutils&lt;br /&gt;
* win32api&lt;br /&gt;
In the case you use the old SJLJ exception handling you need this: [http://jobjol.nl/1102 v19 of the MinGW library package].&lt;br /&gt;
If you use the new Dwarf2 handling use the mingwlibs package for the official GCC from above.&lt;br /&gt;
&lt;br /&gt;
===MinGW Setup===&lt;br /&gt;
There are two ways to setup the MinGL libraries:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;1.&#039;&#039; Make sure you install the package in the checkout directory, so the path is: /spring/mingwlibs. If done right, it will look like:&lt;br /&gt;
*/spring/&lt;br /&gt;
*/spring/installer&lt;br /&gt;
*/spring/rts&lt;br /&gt;
*/spring/... other dirs&lt;br /&gt;
*/spring/mingwlibs&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;2.&#039;&#039; Install the package somewhere else (preferably outside of the source tree), and pass its location with the &#039;&#039;MINGDIR&#039;&#039; option to CMake in the configure step (see further down, in the quick instructions).&lt;br /&gt;
&lt;br /&gt;
These programs are a must have if you want to compile Spring with MinGW, so install them now, if you don&#039;t have them already.&lt;br /&gt;
*[http://www.cmake.org/files/v2.6/cmake-2.6.2-win32-x86.exe CMake 2.6 installer]&lt;br /&gt;
&lt;br /&gt;
= Compiling with cmake =&lt;br /&gt;
Currently the CMake scripts are not capable of generating Visual Studio project files, so CMake can only be used for gcc compiling.&lt;br /&gt;
&lt;br /&gt;
* run the cmake-gui and select a source and a build directory&lt;br /&gt;
* configure and follow the instructions, and adjust variables to your needs (defaults are OK)&lt;br /&gt;
* press generate&lt;br /&gt;
*open a console, cd into your build directory, run &amp;quot;mingw32-make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Compiling with scons=&lt;br /&gt;
Install the following programs (you don&#039;T need cmake in this case):&lt;br /&gt;
*[http://www.python.org/ftp/python/2.5.2/python-2.5.2.msi Python 2.5 installer]&lt;br /&gt;
*[http://downloads.sourceforge.net/pywin32/pywin32-212.win32-py2.5.exe Python 2.5 win32 extensions installer] &lt;br /&gt;
*[http://prdownloads.sourceforge.net/scons/scons-1.1.0.win32.exe Scons 1.1.0 installer]&lt;br /&gt;
&lt;br /&gt;
==Quick instructions==&lt;br /&gt;
* Grab and install the above programs.&lt;br /&gt;
* Make sure C:\Python25, C:\Python25\Scripts and C:\Dev-Cpp\bin are in your PATH environment variable. Set environment variables by: Start -&amp;gt; Settings -&amp;gt; Control Panel -&amp;gt; System -&amp;gt; Advanced -&amp;gt; Environment variables (for Windows XP).&lt;br /&gt;
* Make sure a MINGDIR environment variable with value C:\Dev-Cpp exists. (change paths where appropriate.)&lt;br /&gt;
* Checkout the Spring SVN repository, following the instructions above in obtaining source. (TODO:link)&lt;br /&gt;
* Open a console (Start -&amp;gt; Run -&amp;gt; cmd.exe -&amp;gt; Run), cd \where you checked it out in the previous step, if you checked it out on a different drive make sure to change drives with DriveLetter:&amp;lt;enter&amp;gt; first.&lt;br /&gt;
* Type scons configure&amp;lt;enter&amp;gt;. Refer to scons --help for options which can be passed to scons configure. Gotchas:&lt;br /&gt;
** If you get an error message starting with &amp;quot;EOFError: : env = Environment...&amp;quot;, try deleting the file build/scons_signatures.dblite&lt;br /&gt;
** If you get an error message stating &amp;quot;ImportError: No module named win32file:&amp;quot;, you have probably not installed the python-win32-extensions.&lt;br /&gt;
** If all proceeds as intended you will see a message similar to: &amp;quot;Everything seems OK.  Run `scons&#039; now to build.&amp;quot;&lt;br /&gt;
* Type scons&amp;lt;enter&amp;gt; to start the compilation.&lt;br /&gt;
** If you have Delphi installed and get an error message that the commandline params &amp;quot;--no-print-directory&amp;quot; &amp;amp; &amp;quot;-C&amp;quot; aren&#039;t supported, then you should remove the Delphi dirs from your &amp;lt;i&amp;gt;PATH&amp;lt;/i&amp;gt; variable, because scons tried to run the delphi&#039;s make.exe instead of using mingw32-make. (this will cause that streflop can&#039;t be build!)&lt;br /&gt;
* Wait for the compilation to finish, this may take a while.&lt;br /&gt;
* Copy datafiles and stuff from official Spring installation to the /spring/game directory (where spring.exe is located, after the compilation finished.)&lt;br /&gt;
* Copy missing DLLs from mingwlibs/dll.&lt;br /&gt;
* Start developing.&lt;br /&gt;
&lt;br /&gt;
=Visual Studio 8 (2005)=&lt;br /&gt;
(possibly the free Express Edition) &lt;br /&gt;
&lt;br /&gt;
* Install the [http://cloud.github.com/downloads/spring/spring/spring-vc8libs-v4.zip vclibs library package]. You need to install this in the /spring directory from the SVN checkout or the zipped source. If done right, it will look like:&lt;br /&gt;
**/spring/&lt;br /&gt;
**/spring/installer&lt;br /&gt;
**/spring/rts&lt;br /&gt;
**/spring/... other dirs&lt;br /&gt;
**/spring/vclibs&lt;br /&gt;
* Install the [http://msdn.microsoft.com/directx/sdk/ DirectX SDK]&lt;br /&gt;
* Install the PlatformSDK. I got away with unchecking the parts of the PlatformSDK that were obviously not related (IIS, web stuff). Makes for a smaller download. Make &#039;&#039;&#039;sure&#039;&#039;&#039; the Platform SDK and DirectX SDK are in the VS search/include directories.&lt;br /&gt;
** Note that the most recent version of Platform SDK is called [http://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505&amp;amp;displaylang=en Windows SDK].&lt;br /&gt;
* After installing them, open Visual C++. Click Tools &amp;gt;&amp;gt; Options &amp;gt;&amp;gt; Projects and Solutions &amp;gt;&amp;gt; VC++ Directories. Add these entries to the corresponding sections (paths just a reference, yours may be different):&lt;br /&gt;
**Include files:&lt;br /&gt;
***$(ProgramFiles)\Microsoft DirectX SDK (August 2007)\Include&lt;br /&gt;
***$(ProgramFiles)\Microsoft Platform SDK\include&lt;br /&gt;
**Library files:&lt;br /&gt;
***$(ProgramFiles)\Microsoft DirectX SDK (August 2007)\Lib\x86 (Might need \x64 on a 64-bit platform, I don&#039;t know.)&lt;br /&gt;
***$(ProgramFiles)\Microsoft Platform SDK\lib&lt;br /&gt;
* Open the solution. /spring/rts/build/vstudio8/rts.sln&lt;br /&gt;
* Start building (usually you want to select the release/no debug build, debug is really too slow and is used only when you really know what you want to test)&lt;br /&gt;
* Select the working directory in the project properties, otherwise spring will not work correctly&lt;br /&gt;
&lt;br /&gt;
== Errors ==&lt;br /&gt;
* &amp;lt;code&amp;gt;...\Windows\v6.0A\include\shlwapi.h(196) : error C2061: syntax error : identifier &#039;PCUITEMID_CHILD&#039;&amp;lt;/code&amp;gt; - wrong version of Platform SDK is used; go to Tools &amp;gt;&amp;gt; Options &amp;gt;&amp;gt; &amp;gt;&amp;gt; Projects and Solutions &amp;gt;&amp;gt; VC++ Directories and move the one that&#039;s causing this problem all the way down.&lt;br /&gt;
&lt;br /&gt;
=Visual Studio 9 (2008)=&lt;br /&gt;
(possibly the free Express Edition)&lt;br /&gt;
&lt;br /&gt;
Not yet fully working as far as I know; you need at least this hotfix from Microsoft though:&lt;br /&gt;
&lt;br /&gt;
http://support.microsoft.com/kb/946040&lt;br /&gt;
&lt;br /&gt;
For the rest the Visual Studio 8 instructions should apply, mostly.&lt;br /&gt;
&lt;br /&gt;
You need the [http://cloud.github.com/downloads/spring/spring/spring-vc9libs-v4.7z vclibs for VS2008], and not the ones for Visual Studio 2005. The installation procedure is the same though.&lt;br /&gt;
&lt;br /&gt;
[[Category:Compiling]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Building_Spring_on_Windows&amp;diff=3542</id>
		<title>Building Spring on Windows</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Building_Spring_on_Windows&amp;diff=3542"/>
		<updated>2009-12-12T11:54:59Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: /* Visual Studio 8 (2005) */ PCUITEMID_CHILD error&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;
= Get the Source Code =&lt;br /&gt;
{{Obtaining_The_Source_Code}}&lt;br /&gt;
&lt;br /&gt;
= Compiling on Windows =&lt;br /&gt;
For other platforms see [[Building spring]].&lt;br /&gt;
&lt;br /&gt;
==Install MinGW==&lt;br /&gt;
Code::Blocks and Dev C++ use MinGW too, so if you are using one of these IDEs, you&#039;ll want to follow these instructions too.&lt;br /&gt;
&lt;br /&gt;
===Getting MinGW===&lt;br /&gt;
Compiling Spring in MinGW requires GCC 4.x&lt;br /&gt;
There are 2 different packages the official one and the TDM (experimental) builds.&lt;br /&gt;
====Official 4.4.0====&lt;br /&gt;
(Note: you can&#039;t override an existing old TDM enviroment with these, you first have to uninstall TDM, else you will get some &amp;quot;undefined ... SJLJ_xyz&amp;quot; linking errors!)&lt;br /&gt;
&lt;br /&gt;
Get it here: [http://sourceforge.net/projects/mingw/files/ official MinGW + GCC4.4.0]&lt;br /&gt;
&lt;br /&gt;
You have to get MinGW as a bunch of separate packages, as the downloader does not support installing gcc 4.4.0 yet, which is needed to compile spring successfully.&lt;br /&gt;
&lt;br /&gt;
minimum packages:&lt;br /&gt;
* MinGW Runtime - &#039;&#039;mingwrt (dev &amp;amp; dll)&#039;&#039;&lt;br /&gt;
* MinGW API for MS-Windows - &#039;&#039;w32api (dev)&#039;&#039;&lt;br /&gt;
* GNU Binutils - &#039;&#039;binutils (bin)&#039;&#039;&lt;br /&gt;
* GCC 4 - &#039;&#039;gcc-core (bin &amp;amp; dll)&#039;&#039;&lt;br /&gt;
* GCC 4 - &#039;&#039;gcc-c++ (bin &amp;amp; dll)&#039;&#039;&lt;br /&gt;
* GCC 4 - &#039;&#039;pthreads (dll)&#039;&#039;&lt;br /&gt;
* GCC 4 - &#039;&#039;mpfr (dll)&#039;&#039;&lt;br /&gt;
* GCC 4 - &#039;&#039;gmp (dll)&#039;&#039;&lt;br /&gt;
instead of the five above mentioned GCC packages (17MB), you could also get it in a single archive instead (60MB):&lt;br /&gt;
* GCC 4 - &#039;&#039;full (bin)&#039;&#039;&lt;br /&gt;
if you do not have an other make system in place, get this in addition:&lt;br /&gt;
* GNU Make - &#039;&#039;mingw32-make&#039;&#039;&lt;br /&gt;
if you want to debug, you will want this as well:&lt;br /&gt;
* GNU Source-Level Debugger - &#039;&#039;gdb (version 6.8-3 or later)&#039;&#039;&lt;br /&gt;
Extract all the packages to a common dir, eg. &#039;&#039;C:/MinGW/&#039;&#039;, and then the environment vars:&lt;br /&gt;
* &#039;&#039;MINGDIR=C:/MinGW&#039;&#039;&lt;br /&gt;
* &#039;&#039;PATH=%PATH%;%MINGDIR%\bin&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You also need some Spring dependencies collected in a [http://github.com/spring/spring/downloads mingwlibs] package, you get it [http://github.com/spring/spring/downloads here].&lt;br /&gt;
(Note: this package differs from the one needed for the TDM builds!)&lt;br /&gt;
====TDM Builds====&lt;br /&gt;
Get it here: [http://www.tdragon.net/recentgcc/ TDM&#039;s experimental MinGW]&lt;br /&gt;
&lt;br /&gt;
Get at least the following packages:&lt;br /&gt;
* mingw-runtime&lt;br /&gt;
* core&lt;br /&gt;
* c++&lt;br /&gt;
* binutils&lt;br /&gt;
* win32api&lt;br /&gt;
In the case you use the old SJLJ exception handling you need this: [http://jobjol.nl/1102 v19 of the MinGW library package].&lt;br /&gt;
If you use the new Dwarf2 handling use the mingwlibs package for the official GCC from above.&lt;br /&gt;
&lt;br /&gt;
===MinGW Setup===&lt;br /&gt;
There are two ways to setup the MinGL libraries:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;1.&#039;&#039; Make sure you install the package in the checkout directory, so the path is: /spring/mingwlibs. If done right, it will look like:&lt;br /&gt;
*/spring/&lt;br /&gt;
*/spring/installer&lt;br /&gt;
*/spring/rts&lt;br /&gt;
*/spring/... other dirs&lt;br /&gt;
*/spring/mingwlibs&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;2.&#039;&#039; Install the package somewhere else (preferably outside of the source tree), and pass its location with the &#039;&#039;MINGDIR&#039;&#039; option to CMake in the configure step (see further down, in the quick instructions).&lt;br /&gt;
&lt;br /&gt;
These programs are a must have if you want to compile Spring with MinGW, so install them now, if you don&#039;t have them already.&lt;br /&gt;
*[http://www.cmake.org/files/v2.6/cmake-2.6.2-win32-x86.exe CMake 2.6 installer]&lt;br /&gt;
&lt;br /&gt;
= Compiling with cmake =&lt;br /&gt;
Currently the CMake scripts are not capable of generating Visual Studio project files, so CMake can only be used for gcc compiling.&lt;br /&gt;
&lt;br /&gt;
* run the cmake-gui and select a source and a build directory&lt;br /&gt;
* configure and follow the instructions, and adjust variables to your needs (defaults are OK)&lt;br /&gt;
* press generate&lt;br /&gt;
*open a console, cd into your build directory, run &amp;quot;mingw32-make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Compiling with scons=&lt;br /&gt;
Install the following programs (you don&#039;T need cmake in this case):&lt;br /&gt;
*[http://www.python.org/ftp/python/2.5.2/python-2.5.2.msi Python 2.5 installer]&lt;br /&gt;
*[http://downloads.sourceforge.net/pywin32/pywin32-212.win32-py2.5.exe Python 2.5 win32 extensions installer] &lt;br /&gt;
*[http://prdownloads.sourceforge.net/scons/scons-1.1.0.win32.exe Scons 1.1.0 installer]&lt;br /&gt;
&lt;br /&gt;
==Quick instructions==&lt;br /&gt;
* Grab and install the above programs.&lt;br /&gt;
* Make sure C:\Python25, C:\Python25\Scripts and C:\Dev-Cpp\bin are in your PATH environment variable. Set environment variables by: Start -&amp;gt; Settings -&amp;gt; Control Panel -&amp;gt; System -&amp;gt; Advanced -&amp;gt; Environment variables (for Windows XP).&lt;br /&gt;
* Make sure a MINGDIR environment variable with value C:\Dev-Cpp exists. (change paths where appropriate.)&lt;br /&gt;
* Checkout the Spring SVN repository, following the instructions above in obtaining source. (TODO:link)&lt;br /&gt;
* Open a console (Start -&amp;gt; Run -&amp;gt; cmd.exe -&amp;gt; Run), cd \where you checked it out in the previous step, if you checked it out on a different drive make sure to change drives with DriveLetter:&amp;lt;enter&amp;gt; first.&lt;br /&gt;
* Type scons configure&amp;lt;enter&amp;gt;. Refer to scons --help for options which can be passed to scons configure. Gotchas:&lt;br /&gt;
** If you get an error message starting with &amp;quot;EOFError: : env = Environment...&amp;quot;, try deleting the file build/scons_signatures.dblite&lt;br /&gt;
** If you get an error message stating &amp;quot;ImportError: No module named win32file:&amp;quot;, you have probably not installed the python-win32-extensions.&lt;br /&gt;
** If all proceeds as intended you will see a message similar to: &amp;quot;Everything seems OK.  Run `scons&#039; now to build.&amp;quot;&lt;br /&gt;
* Type scons&amp;lt;enter&amp;gt; to start the compilation.&lt;br /&gt;
** If you have Delphi installed and get an error message that the commandline params &amp;quot;--no-print-directory&amp;quot; &amp;amp; &amp;quot;-C&amp;quot; aren&#039;t supported, then you should remove the Delphi dirs from your &amp;lt;i&amp;gt;PATH&amp;lt;/i&amp;gt; variable, because scons tried to run the delphi&#039;s make.exe instead of using mingw32-make. (this will cause that streflop can&#039;t be build!)&lt;br /&gt;
* Wait for the compilation to finish, this may take a while.&lt;br /&gt;
* Copy datafiles and stuff from official Spring installation to the /spring/game directory (where spring.exe is located, after the compilation finished.)&lt;br /&gt;
* Copy missing DLLs from mingwlibs/dll.&lt;br /&gt;
* Start developing.&lt;br /&gt;
&lt;br /&gt;
=Visual Studio 8 (2005)=&lt;br /&gt;
(possibly the free Express Edition) &lt;br /&gt;
&lt;br /&gt;
* Install the [http://cloud.github.com/downloads/spring/spring/spring-vc8libs-v4.zip vclibs library package]. You need to install this in the /spring directory from the SVN checkout or the zipped source. If done right, it will look like:&lt;br /&gt;
**/spring/&lt;br /&gt;
**/spring/installer&lt;br /&gt;
**/spring/rts&lt;br /&gt;
**/spring/... other dirs&lt;br /&gt;
**/spring/vclibs&lt;br /&gt;
* Install the [http://msdn.microsoft.com/directx/sdk/ DirectX SDK]&lt;br /&gt;
* Install the PlatformSDK. I got away with unchecking the parts of the PlatformSDK that were obviously not related (IIS, web stuff). Makes for a smaller download. Make &#039;&#039;&#039;sure&#039;&#039;&#039; the Platform SDK and DirectX SDK are in the VS search/include directories:&lt;br /&gt;
* After installing them, open Visual C++. Click Tools &amp;gt;&amp;gt; Options &amp;gt;&amp;gt; Projects and Solutions &amp;gt;&amp;gt; VC++ Directories. Add these entries to the corresponding sections (paths just a reference, yours may be different):&lt;br /&gt;
**Include files:&lt;br /&gt;
***$(ProgramFiles)\Microsoft DirectX SDK (August 2007)\Include&lt;br /&gt;
***$(ProgramFiles)\Microsoft Platform SDK\include&lt;br /&gt;
**Library files:&lt;br /&gt;
***$(ProgramFiles)\Microsoft DirectX SDK (August 2007)\Lib\x86 (Might need \x64 on a 64-bit platform, I don&#039;t know.)&lt;br /&gt;
***$(ProgramFiles)\Microsoft Platform SDK\lib&lt;br /&gt;
* Open the solution. /spring/rts/build/vstudio8/rts.sln&lt;br /&gt;
* Start building (usually you want to select the release/no debug build, debug is really too slow and is used only when you really know what you want to test)&lt;br /&gt;
* Select the working directory in the project properties, otherwise spring will not work correctly&lt;br /&gt;
&lt;br /&gt;
== Errors ==&lt;br /&gt;
* &amp;lt;code&amp;gt;...\Windows\v6.0A\include\shlwapi.h(196) : error C2061: syntax error : identifier &#039;PCUITEMID_CHILD&#039;&amp;lt;/code&amp;gt; - wrong version of Platform SDK is used; go to Tools &amp;gt;&amp;gt; Options &amp;gt;&amp;gt; &amp;gt;&amp;gt; Projects and Solutions &amp;gt;&amp;gt; VC++ Directories and move the one that&#039;s causing this problem all the way down.&lt;br /&gt;
&lt;br /&gt;
=Visual Studio 9 (2008)=&lt;br /&gt;
(possibly the free Express Edition)&lt;br /&gt;
&lt;br /&gt;
Not yet fully working as far as I know; you need at least this hotfix from Microsoft though:&lt;br /&gt;
&lt;br /&gt;
http://support.microsoft.com/kb/946040&lt;br /&gt;
&lt;br /&gt;
For the rest the Visual Studio 8 instructions should apply, mostly.&lt;br /&gt;
&lt;br /&gt;
You need the [http://cloud.github.com/downloads/spring/spring/spring-vc9libs-v4.7z vclibs for VS2008], and not the ones for Visual Studio 2005. The installation procedure is the same though.&lt;br /&gt;
&lt;br /&gt;
[[Category:Compiling]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Talk:Download&amp;diff=20197</id>
		<title>Talk:Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Talk:Download&amp;diff=20197"/>
		<updated>2009-08-30T21:20:02Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;satirik : added the toc back, it&#039;s a mess without&lt;br /&gt;
&lt;br /&gt;
Forb: i removed the link because the file was truncated, sorry for not being precise enough. [[User:Imbaczek|Imbaczek]] 21:20, 30 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5938</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5938"/>
		<updated>2009-08-30T09:03:11Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: temporary fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
=Spring RTS Engine=&lt;br /&gt;
&lt;br /&gt;
On this page you will find information on how to download the latest releases from the Spring project for various platforms. &lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
&lt;br /&gt;
=== Game installers (for players) ===&lt;br /&gt;
&lt;br /&gt;
As Spring itself is just an engine and does not contain game content, we advise you to go to the website of the game you want to play for an all inclusive installer, however, you can use the &amp;quot;Spring Engine + Module Updater&amp;quot; installer. This installer will install the Spring Engine and the Spring Module Updater which contains a menu that lists many of the games available for the Spring Engine. Simply select which game you would like to install and it will download and install the game for you:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.80.2/spring_0.80.2.exe/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Barebones engine installer, 0.80.2&amp;lt;/span&amp;gt; ]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springinfo.info/moddownloads/SpringModuleUpdater.exe &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Spring Module Updater (Standalone Installer)&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are some of the download pages of games using the Spring engine:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.evolutionrts.info/wordpress/?page_id=16 &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Evolution RTS&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springfiles.com/1683 &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Kernel Panic&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://spring1944.net/downloads.php &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Spring 1944&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more Spring games, check out the [[Games]] page. Please note that some of them will require you to have the engine installed in order to work, as they don&#039;t come with their own installer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Engine installer (Bare Bones Installer) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.80.2/spring_0.80.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.80.2 ~21MB, added 2009-08-29&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.80.2.exe &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Backup in case the above doesn&#039;t work&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.80.2 ~21MB, added 2009-08-29&lt;br /&gt;
&lt;br /&gt;
As all Spring-based games don&#039;t have their own installer, the engine installer can also be used by players to play other games.&lt;br /&gt;
This installer provides the core files for Spring, the  multiplayer lobby client and the autodownloader. Use the autodownloader to get maps and games, or download them from some hosting sites (listed in the lobby #main channel).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.springfiles.com/show_file.php?id=2237 &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Experimental Multithreading executable&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.80.2, added 2009-08-26 ~3MB. Unzip to your installation folder. Does not work with all mods.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.80.2.7z &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Portable archive&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Release Candidate (for testing purposes) ===&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.80.1.exe &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Release candidate installer&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.80.1 ~20MB, added 2009-08-12&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nightly Builds (for engine/game developers/testers) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://buildbot.eat-peet.net/spring/installer/ &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;click here for a list of test builds (only for testing purposes)&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&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;
Please note that due to the amount of distributions out there, we cannot provide binary packages for each of them. If yours is not listed there, you most likely need to build it yourself. If you do so, please share your results with others.&lt;br /&gt;
&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;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Source Code=&lt;br /&gt;
{{Obtaining_The_Source_Code}}&lt;br /&gt;
&lt;br /&gt;
=== Building instructions ===&lt;br /&gt;
If you want to compile it yourself, see [[Building_spring]] for some tips.&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://spring.clan-sy.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>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5937</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5937"/>
		<updated>2009-08-30T09:00:29Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
=Spring RTS Engine=&lt;br /&gt;
&lt;br /&gt;
On this page you will find information on how to download the latest releases from the Spring project for various platforms. &lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
&lt;br /&gt;
=== Game installers (for players) ===&lt;br /&gt;
&lt;br /&gt;
As Spring itself is just an engine and does not contain game content, we advise you to go to the website of the game you want to play for an all inclusive installer, however, you can use the &amp;quot;Spring Engine + Module Updater&amp;quot; installer. This installer will install the Spring Engine and the Spring Module Updater which contains a menu that lists many of the games available for the Spring Engine. Simply select which game you would like to install and it will download and install the game for you:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springinfo.info/moddownloads/SpringModuleUpdater.exe &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Spring Module Updater (Standalone Installer)&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are some of the download pages of games using the Spring engine:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.evolutionrts.info/wordpress/?page_id=16 &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Evolution RTS&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springfiles.com/1683 &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Kernel Panic&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://spring1944.net/downloads.php &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Spring 1944&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more Spring games, check out the [[Games]] page. Please note that some of them will require you to have the engine installed in order to work, as they don&#039;t come with their own installer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Engine installer (Bare Bones Installer) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.80.2/spring_0.80.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.80.2 ~21MB, added 2009-08-29&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.80.2.exe &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Backup in case the above doesn&#039;t work&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.80.2 ~21MB, added 2009-08-29&lt;br /&gt;
&lt;br /&gt;
As all Spring-based games don&#039;t have their own installer, the engine installer can also be used by players to play other games.&lt;br /&gt;
This installer provides the core files for Spring, the  multiplayer lobby client and the autodownloader. Use the autodownloader to get maps and games, or download them from some hosting sites (listed in the lobby #main channel).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.springfiles.com/show_file.php?id=2237 &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Experimental Multithreading executable&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.80.2, added 2009-08-26 ~3MB. Unzip to your installation folder. Does not work with all mods.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.80.2.7z &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Portable archive&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Release Candidate (for testing purposes) ===&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.80.1.exe &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Release candidate installer&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.80.1 ~20MB, added 2009-08-12&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nightly Builds (for engine/game developers/testers) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://buildbot.eat-peet.net/spring/installer/ &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;click here for a list of test builds (only for testing purposes)&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&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;
Please note that due to the amount of distributions out there, we cannot provide binary packages for each of them. If yours is not listed there, you most likely need to build it yourself. If you do so, please share your results with others.&lt;br /&gt;
&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;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Source Code=&lt;br /&gt;
{{Obtaining_The_Source_Code}}&lt;br /&gt;
&lt;br /&gt;
=== Building instructions ===&lt;br /&gt;
If you want to compile it yourself, see [[Building_spring]] for some tips.&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://spring.clan-sy.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>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5936</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5936"/>
		<updated>2009-08-30T08:49:37Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: the engine+updater seems to be incomplete or something, removing link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
=Spring RTS Engine=&lt;br /&gt;
&lt;br /&gt;
On this page you will find information on how to download the latest releases from the Spring project for various platforms. &lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
&lt;br /&gt;
=== Game installers (for players) ===&lt;br /&gt;
&lt;br /&gt;
As Spring itself is just an engine and does not contain game content, we advise you to go to the website of the game you want to play for an all inclusive installer, however, you can use the &amp;quot;Spring Engine + Module Updater&amp;quot; installer. This installer will install the Spring Engine and the Spring Module Updater which contains a menu that lists many of the games available for the Spring Engine. Simply select which game you would like to install and it will download and install the game for you:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springinfo.info/moddownloads/SpringModuleUpdater.exe &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Spring Module Updater (Standalone Installer)&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Below are some of the download pages of games using the Spring engine:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.evolutionrts.info/wordpress/?page_id=16 &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Evolution RTS&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springfiles.com/1683 &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Kernel Panic&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://spring1944.net/downloads.php &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Spring 1944&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Engine installer (Bare Bones Installer) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.80.2/spring_0.80.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.80.2 ~21MB, added 2009-08-29&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.80.2.exe &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Backup in case the above doesn&#039;t work&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.80.2 ~21MB, added 2009-08-29&lt;br /&gt;
&lt;br /&gt;
As all Spring-based games don&#039;t have their own installer, the engine installer can also be used by players to play other games.&lt;br /&gt;
This installer provides the core files for Spring, the  multiplayer lobby client and the autodownloader. Use the autodownloader to get maps and games, or download them from some hosting sites (listed in the lobby #main channel).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.springfiles.com/show_file.php?id=2237 &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Experimental Multithreading executable&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.80.2, added 2009-08-26 ~3MB. Unzip to your installation folder. Does not work with all mods.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.80.2.7z &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Portable archive&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Release Candidate (for testing purposes) ===&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.80.1.exe &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Release candidate installer&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.80.1 ~20MB, added 2009-08-12&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nightly Builds (for engine/game developers/testers) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://buildbot.eat-peet.net/spring/installer/ &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;click here for a list of test builds (only for testing purposes)&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&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;
Please note that due to the amount of distributions out there, we cannot provide binary packages for each of them. If yours is not listed there, you most likely need to build it yourself. If you do so, please share your results with others.&lt;br /&gt;
&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;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Source Code=&lt;br /&gt;
{{Obtaining_The_Source_Code}}&lt;br /&gt;
&lt;br /&gt;
=== Building instructions ===&lt;br /&gt;
If you want to compile it yourself, see [[Building_spring]] for some tips.&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://spring.clan-sy.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>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=AI:RAI&amp;diff=1042</id>
		<title>AI:RAI</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=AI:RAI&amp;diff=1042"/>
		<updated>2009-01-17T21:30:13Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AI|RAI|Reth|v0.600 (spring v0.76b1)|Supports All Known Mods|Under Active Development|-}}&lt;br /&gt;
&lt;br /&gt;
=== Forum thread ===&lt;br /&gt;
*[http://taspring.clan-sy.com/phpbb/viewtopic.php?t=7924 &amp;quot;RAI v0.600&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
*[http://www.fileuniverse.com/?p=show&amp;amp;a=it&amp;amp;id=5296 Windows]&lt;br /&gt;
*[http://spring.jobjol.nl/show_file.php?id=949 Linux 64bit]&lt;br /&gt;
*[http://www.fileuniverse.com/?p=show&amp;amp;a=it&amp;amp;id=5398 Source code]&lt;br /&gt;
&lt;br /&gt;
Mods with incomplete support:&lt;br /&gt;
*BloX (transporters unsupported: can&#039;t figure out that guns are attached to the transporters to make a tank)&lt;br /&gt;
*1944 &amp;amp; Epic Legions (requires a unique method of destroying parts of the enemy base)&lt;br /&gt;
*Fibre - units are controlled differently than RAI expected, AI-Events do not occur in the way that is expected&lt;br /&gt;
* generally, any mod that does not have controllable mobile attack units&lt;br /&gt;
&lt;br /&gt;
Known Crashes:&lt;br /&gt;
*None&lt;br /&gt;
&lt;br /&gt;
=== How to compile on Linux ===&lt;br /&gt;
Recent versions of spring (0.77+) can compile it without any hassle, using both scons and cmake. A simple &#039;&#039;scons&#039;&#039; or &#039;&#039;make&#039;&#039; (if using cmake) will do.&lt;br /&gt;
&lt;br /&gt;
For older versions of spring (0.76):&lt;br /&gt;
* download spring sources [http://spring.clan-sy.com/dl/spring_0.76b1_src.tar.bz2 here], and extract it somewhere&lt;br /&gt;
* download RAI sources [http://www.fileuniverse.com/spring/ai/RAI%20v0.553%20source.rar here], and save it into the &#039;&#039;{spring source}/AI/Global/&#039;&#039; folder&lt;br /&gt;
* install the glew development package - on Ubuntu it&#039;s &#039;&#039;sudo apt-get install libglew1.5-dev&#039;&#039;&lt;br /&gt;
* open the project in CodeBlocks - there&#039;s a project file for CB provided in the RAI/CodeBlocks directory&lt;br /&gt;
* then edit the sources a bit to have them be more cross-platform friendly - atm they use a windows function to create folders.&lt;br /&gt;
** in v0.553: RAI/Global.cpp, edit line 4 to say &#039;&#039;#include &amp;lt;sys/stat.h&amp;gt;&#039;&#039; instead&lt;br /&gt;
** for v0.600: this is RAI/RAI.cpp, line 10&lt;br /&gt;
** in v0.553: RAI/Global.cpp, edit lines 157-158 to say:&lt;br /&gt;
*** mkdir( &amp;quot;AI/RAI&amp;quot;, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH );&lt;br /&gt;
*** mkdir( &amp;quot;AI/RAI/Metal&amp;quot;, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH );&lt;br /&gt;
** for v0.600: this is RAI/RAI.cpp, lines 1086-1089&lt;br /&gt;
* at this point, it&#039;ll compile fine, but give some warnings about int floats. The problem is that it doesn&#039;t generate a .so somehow though, so some voodoo magic needs to be done&lt;br /&gt;
** Go to project properties, and under Build Targets, enable &#039;auto generate extension&#039;.&lt;br /&gt;
* now use clean the project, and recompile the whole thing. You &#039;&#039;should&#039;&#039; get a RAI.so in the CodeBlocks directory. &lt;br /&gt;
* to test, put the .so into &#039;&#039;~/.spring/AI/Bot-libs/&#039;&#039;, and since SpringLobby will see it right away, try a single player game.&lt;br /&gt;
&lt;br /&gt;
=== Version History ===&lt;br /&gt;
v0.551-v0.553 (spring v0.75b2-v0.76b1)&lt;br /&gt;
*Fixes&lt;br /&gt;
v0.55 (spring v0.75b2)&lt;br /&gt;
*Assault units now use basic attack groups&lt;br /&gt;
*Remembering enemy positions outside of LOS/Radar&lt;br /&gt;
*Restrict hovercraft on certain maps &amp;amp; mods&lt;br /&gt;
*Player given orders are now followed until completion&lt;br /&gt;
*Unit support added: nano turrets&lt;br /&gt;
*Basic building placement added: defenses&lt;br /&gt;
*Minor Changes/Fixes&lt;br /&gt;
v0.50 (spring v0.74b3)&lt;br /&gt;
*Basic hub support &amp;amp; improved build list detection&lt;br /&gt;
*Units will now use capture/resurrect/high trajectory and are more willing to reclaim&lt;br /&gt;
*Builders will now upgrade extractors/geos&lt;br /&gt;
*Expands a little more intelligently&lt;br /&gt;
*A bit quicker expansion, slowly seizing available (metal/geo spots)&lt;br /&gt;
*Minor Changes/Fixes&lt;br /&gt;
v0.40 (spring v0.74b2-v0.74b3)&lt;br /&gt;
*Minor Changes/Fixes&lt;br /&gt;
v0.355 (spring v0.74b1)&lt;br /&gt;
*Fixes&lt;br /&gt;
v0.350 (spring v0.73b1)&lt;br /&gt;
*Improvements to Building Decisions.&lt;br /&gt;
*Support for Water Units/Maps.&lt;br /&gt;
*Minor Changes/Fixes&lt;br /&gt;
v0.300 (spring v0.73b1)&lt;br /&gt;
*First Release&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; [[AIs|&amp;lt;- Back to AI page]]&#039;&#039;&#039;&lt;br /&gt;
[[Category:AI]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=AI:RAI&amp;diff=1041</id>
		<title>AI:RAI</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=AI:RAI&amp;diff=1041"/>
		<updated>2009-01-17T21:29:11Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AI|RAI|Reth|v0.600 (spring v0.76b1)|Supports All Known Mods|Under Active Development|-}}&lt;br /&gt;
&lt;br /&gt;
=== Forum thread ===&lt;br /&gt;
*[http://taspring.clan-sy.com/phpbb/viewtopic.php?t=7924 &amp;quot;RAI v0.600&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
*[http://www.fileuniverse.com/?p=show&amp;amp;a=it&amp;amp;id=5296 Windows]&lt;br /&gt;
*[http://spring.jobjol.nl/show_file.php?id=949 Linux 64bit]&lt;br /&gt;
*[http://www.fileuniverse.com/?p=show&amp;amp;a=it&amp;amp;id=5398 Source code]&lt;br /&gt;
&lt;br /&gt;
Mods with incomplete support:&lt;br /&gt;
*BloX (transporters unsupported: can&#039;t figure out that guns are attached to the transporters to make a tank)&lt;br /&gt;
*1944 &amp;amp; Epic Legions (requires a unique method of destroying parts of the enemy base)&lt;br /&gt;
*Fibre - units are controlled differently than RAI expected, AI-Events do not occur in the way that is expected&lt;br /&gt;
* generally, any mod that does not have controllable mobile attack units&lt;br /&gt;
&lt;br /&gt;
Known Crashes:&lt;br /&gt;
*None&lt;br /&gt;
&lt;br /&gt;
=== How to compile on Linux ===&lt;br /&gt;
Recent versions of spring (0.77+) can compile it without any hassle, using both scons and cmake. A simple **scons** or **make** (if using cmake) will do.&lt;br /&gt;
&lt;br /&gt;
For older versions of spring (0.76):&lt;br /&gt;
* download spring sources [http://spring.clan-sy.com/dl/spring_0.76b1_src.tar.bz2 here], and extract it somewhere&lt;br /&gt;
* download RAI sources [http://www.fileuniverse.com/spring/ai/RAI%20v0.553%20source.rar here], and save it into the &#039;&#039;{spring source}/AI/Global/&#039;&#039; folder&lt;br /&gt;
* install the glew development package - on Ubuntu it&#039;s &#039;&#039;sudo apt-get install libglew1.5-dev&#039;&#039;&lt;br /&gt;
* open the project in CodeBlocks - there&#039;s a project file for CB provided in the RAI/CodeBlocks directory&lt;br /&gt;
* then edit the sources a bit to have them be more cross-platform friendly - atm they use a windows function to create folders.&lt;br /&gt;
** in v0.553: RAI/Global.cpp, edit line 4 to say &#039;&#039;#include &amp;lt;sys/stat.h&amp;gt;&#039;&#039; instead&lt;br /&gt;
** for v0.600: this is RAI/RAI.cpp, line 10&lt;br /&gt;
** in v0.553: RAI/Global.cpp, edit lines 157-158 to say:&lt;br /&gt;
*** mkdir( &amp;quot;AI/RAI&amp;quot;, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH );&lt;br /&gt;
*** mkdir( &amp;quot;AI/RAI/Metal&amp;quot;, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH );&lt;br /&gt;
** for v0.600: this is RAI/RAI.cpp, lines 1086-1089&lt;br /&gt;
* at this point, it&#039;ll compile fine, but give some warnings about int floats. The problem is that it doesn&#039;t generate a .so somehow though, so some voodoo magic needs to be done&lt;br /&gt;
** Go to project properties, and under Build Targets, enable &#039;auto generate extension&#039;.&lt;br /&gt;
* now use clean the project, and recompile the whole thing. You &#039;&#039;should&#039;&#039; get a RAI.so in the CodeBlocks directory. &lt;br /&gt;
* to test, put the .so into &#039;&#039;~/.spring/AI/Bot-libs/&#039;&#039;, and since SpringLobby will see it right away, try a single player game.&lt;br /&gt;
&lt;br /&gt;
=== Version History ===&lt;br /&gt;
v0.551-v0.553 (spring v0.75b2-v0.76b1)&lt;br /&gt;
*Fixes&lt;br /&gt;
v0.55 (spring v0.75b2)&lt;br /&gt;
*Assault units now use basic attack groups&lt;br /&gt;
*Remembering enemy positions outside of LOS/Radar&lt;br /&gt;
*Restrict hovercraft on certain maps &amp;amp; mods&lt;br /&gt;
*Player given orders are now followed until completion&lt;br /&gt;
*Unit support added: nano turrets&lt;br /&gt;
*Basic building placement added: defenses&lt;br /&gt;
*Minor Changes/Fixes&lt;br /&gt;
v0.50 (spring v0.74b3)&lt;br /&gt;
*Basic hub support &amp;amp; improved build list detection&lt;br /&gt;
*Units will now use capture/resurrect/high trajectory and are more willing to reclaim&lt;br /&gt;
*Builders will now upgrade extractors/geos&lt;br /&gt;
*Expands a little more intelligently&lt;br /&gt;
*A bit quicker expansion, slowly seizing available (metal/geo spots)&lt;br /&gt;
*Minor Changes/Fixes&lt;br /&gt;
v0.40 (spring v0.74b2-v0.74b3)&lt;br /&gt;
*Minor Changes/Fixes&lt;br /&gt;
v0.355 (spring v0.74b1)&lt;br /&gt;
*Fixes&lt;br /&gt;
v0.350 (spring v0.73b1)&lt;br /&gt;
*Improvements to Building Decisions.&lt;br /&gt;
*Support for Water Units/Maps.&lt;br /&gt;
*Minor Changes/Fixes&lt;br /&gt;
v0.300 (spring v0.73b1)&lt;br /&gt;
*First Release&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; [[AIs|&amp;lt;- Back to AI page]]&#039;&#039;&#039;&lt;br /&gt;
[[Category:AI]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=AI:RAI&amp;diff=1040</id>
		<title>AI:RAI</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=AI:RAI&amp;diff=1040"/>
		<updated>2009-01-17T21:28:51Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AI|RAI|Reth|v0.600 (spring v0.76b1)|Supports All Known Mods|Under Active Development|-}}&lt;br /&gt;
&lt;br /&gt;
=== Forum thread ===&lt;br /&gt;
*[http://taspring.clan-sy.com/phpbb/viewtopic.php?t=7924 &amp;quot;RAI v0.600&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
*[http://www.fileuniverse.com/?p=show&amp;amp;a=it&amp;amp;id=5296 Windows]&lt;br /&gt;
*[http://spring.jobjol.nl/show_file.php?id=949 Linux 64bit]&lt;br /&gt;
*[http://www.fileuniverse.com/?p=show&amp;amp;a=it&amp;amp;id=5398 Source code]&lt;br /&gt;
&lt;br /&gt;
Mods with incomplete support:&lt;br /&gt;
*BloX (transporters unsupported: can&#039;t figure out that guns are attached to the transporters to make a tank)&lt;br /&gt;
*1944 &amp;amp; Epic Legions (requires a unique method of destroying parts of the enemy base)&lt;br /&gt;
*Fibre - units are controlled differently than RAI expected, AI-Events do not occur in the way that is expected&lt;br /&gt;
* generally, any mod that does not have controllable mobile attack units&lt;br /&gt;
&lt;br /&gt;
Known Crashes:&lt;br /&gt;
*None&lt;br /&gt;
&lt;br /&gt;
=== How to compile on Linux ===&lt;br /&gt;
Recent versions of spring (0.77+) can compile it without any hassle, using both scons and cmake. A simple *scons* or *make* (if using cmake) will do.&lt;br /&gt;
&lt;br /&gt;
For older versions of spring (0.76):&lt;br /&gt;
* download spring sources [http://spring.clan-sy.com/dl/spring_0.76b1_src.tar.bz2 here], and extract it somewhere&lt;br /&gt;
* download RAI sources [http://www.fileuniverse.com/spring/ai/RAI%20v0.553%20source.rar here], and save it into the &#039;&#039;{spring source}/AI/Global/&#039;&#039; folder&lt;br /&gt;
* install the glew development package - on Ubuntu it&#039;s &#039;&#039;sudo apt-get install libglew1.5-dev&#039;&#039;&lt;br /&gt;
* open the project in CodeBlocks - there&#039;s a project file for CB provided in the RAI/CodeBlocks directory&lt;br /&gt;
* then edit the sources a bit to have them be more cross-platform friendly - atm they use a windows function to create folders.&lt;br /&gt;
** in v0.553: RAI/Global.cpp, edit line 4 to say &#039;&#039;#include &amp;lt;sys/stat.h&amp;gt;&#039;&#039; instead&lt;br /&gt;
** for v0.600: this is RAI/RAI.cpp, line 10&lt;br /&gt;
** in v0.553: RAI/Global.cpp, edit lines 157-158 to say:&lt;br /&gt;
*** mkdir( &amp;quot;AI/RAI&amp;quot;, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH );&lt;br /&gt;
*** mkdir( &amp;quot;AI/RAI/Metal&amp;quot;, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH );&lt;br /&gt;
** for v0.600: this is RAI/RAI.cpp, lines 1086-1089&lt;br /&gt;
* at this point, it&#039;ll compile fine, but give some warnings about int floats. The problem is that it doesn&#039;t generate a .so somehow though, so some voodoo magic needs to be done&lt;br /&gt;
** Go to project properties, and under Build Targets, enable &#039;auto generate extension&#039;.&lt;br /&gt;
* now use clean the project, and recompile the whole thing. You &#039;&#039;should&#039;&#039; get a RAI.so in the CodeBlocks directory. &lt;br /&gt;
* to test, put the .so into &#039;&#039;~/.spring/AI/Bot-libs/&#039;&#039;, and since SpringLobby will see it right away, try a single player game.&lt;br /&gt;
&lt;br /&gt;
=== Version History ===&lt;br /&gt;
v0.551-v0.553 (spring v0.75b2-v0.76b1)&lt;br /&gt;
*Fixes&lt;br /&gt;
v0.55 (spring v0.75b2)&lt;br /&gt;
*Assault units now use basic attack groups&lt;br /&gt;
*Remembering enemy positions outside of LOS/Radar&lt;br /&gt;
*Restrict hovercraft on certain maps &amp;amp; mods&lt;br /&gt;
*Player given orders are now followed until completion&lt;br /&gt;
*Unit support added: nano turrets&lt;br /&gt;
*Basic building placement added: defenses&lt;br /&gt;
*Minor Changes/Fixes&lt;br /&gt;
v0.50 (spring v0.74b3)&lt;br /&gt;
*Basic hub support &amp;amp; improved build list detection&lt;br /&gt;
*Units will now use capture/resurrect/high trajectory and are more willing to reclaim&lt;br /&gt;
*Builders will now upgrade extractors/geos&lt;br /&gt;
*Expands a little more intelligently&lt;br /&gt;
*A bit quicker expansion, slowly seizing available (metal/geo spots)&lt;br /&gt;
*Minor Changes/Fixes&lt;br /&gt;
v0.40 (spring v0.74b2-v0.74b3)&lt;br /&gt;
*Minor Changes/Fixes&lt;br /&gt;
v0.355 (spring v0.74b1)&lt;br /&gt;
*Fixes&lt;br /&gt;
v0.350 (spring v0.73b1)&lt;br /&gt;
*Improvements to Building Decisions.&lt;br /&gt;
*Support for Water Units/Maps.&lt;br /&gt;
*Minor Changes/Fixes&lt;br /&gt;
v0.300 (spring v0.73b1)&lt;br /&gt;
*First Release&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; [[AIs|&amp;lt;- Back to AI page]]&#039;&#039;&#039;&lt;br /&gt;
[[Category:AI]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnsyncedCtrl&amp;diff=12207</id>
		<title>Lua UnsyncedCtrl</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnsyncedCtrl&amp;diff=12207"/>
		<updated>2008-10-21T20:27:44Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Pipes ==&lt;br /&gt;
&#039;&#039;&#039;Spring.Echo&#039;&#039;&#039;&lt;br /&gt;
  ( arg1 [, arg2 [, ... ] ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Usefull for debugging.&amp;lt;br&amp;gt; Prints values in the spring chat console (hint: the default print() writes to STDOUT).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.PlaySoundFile&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;soundfile&amp;quot; [, number volume&lt;br /&gt;
    [, number x, number y, number z ] ] ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Plays WAV sounds. &amp;lt;i&amp;gt;By default&amp;lt;/i&amp;gt;, the soundfile is expected to be in the &amp;quot;Sounds&amp;quot; folder.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.PlaySoundStream&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;oggfile&amp;quot; [, number volume = 1.0&lt;br /&gt;
    [, number x, number y, number z ]] ) -&amp;gt; nil | boolean true&lt;br /&gt;
  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Allow you to play an Ogg Vorbis (.OGG) compressed sound file.&amp;lt;br&amp;gt; &amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; you may only play _ONE_ stream at a time. If another stream is playing and&amp;lt;br&amp;gt; you try to start a second one the call will fail, and silence will result.&amp;lt;br&amp;gt; &amp;lt;b&amp;gt;Note2:&amp;lt;/b&amp;gt; the file has to be on the local filesystem, so you can&#039;t playback ogg&#039;s&amp;lt;br&amp;gt; in your mod with this command, to do so you have to extract it before and save&amp;lt;br&amp;gt; it on the local filesystem.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.StopSoundStream&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil&lt;br /&gt;
  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Terminates any SoundStream is running.&amp;lt;br&amp;gt; Since only one may play at any time (see above), this can be used as an interrupt.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SendMessage ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessage&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToPlayer&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID, string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToAllyTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number allyID, string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToSpectators&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Unit Selection ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SelectUnitMap&#039;&#039;&#039;&lt;br /&gt;
  ( { [unitID] = anything, ...} [,boolean append] ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SelectUnitArray&#039;&#039;&#039;&lt;br /&gt;
  ( { [1] = unitID1 , [2] = unitID2 , ...} [,boolean append] ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.GetDrawSelectionInfo&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Returns whether &amp;amp;quot;Selected units&amp;amp;quot; text is displayed.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetDrawSelectionInfo&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawSelectionInfo ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Unit Control ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNoDraw&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;LuaGadgets only!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean noDraw ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNoSelect&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;LuaGadgets only!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean noSelect ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNoMinimap&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;LuaGadgets only!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean noMinimap ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== GUI ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetDrawSky&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawSky ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetDrawWater&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawWater ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetDrawGround&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawGround ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.DrawUnitCommands&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
  ( { [1] = unitID, ... } [, false ] ) -&amp;gt; nil&lt;br /&gt;
  ( { [unitID] = anything, ... }, true  ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetTeamColor&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number r, number g, number b ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.AssignMouseCursor&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;default hotspot is center!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string &amp;quot;cmdName&amp;quot;, string &amp;quot;iconFileName&amp;quot;&lt;br /&gt;
    [, boolean overwrite [, boolean hotSpotTopLeft] ] ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.ReplaceMouseCursor&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;default hotspot is center!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string &amp;quot;oldFileName&amp;quot;, string &amp;quot;newFileName&amp;quot; [, boolean hotSpotTopLeft] ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetCustomCommandDrawData&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;register your custom cmd so it gets visible in the unit&#039;s cmd queue&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number cmdID,&lt;br /&gt;
    number cmdIconID | string iconname | nil,&lt;br /&gt;
    { number r, number g, number b, number a } [, boolean showArea ] ) -&amp;gt; nil | true&lt;br /&gt;
&lt;br /&gt;
== Camera ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetCameraState&#039;&#039;&#039;&lt;br /&gt;
  ( table camState, number camTime) -&amp;gt; nil | boolean&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;camState = {&lt;br /&gt;
  mode = cameraID,&lt;br /&gt;
     1 = cameraID,&lt;br /&gt;
     2 = posX,&lt;br /&gt;
     3 = posY,&lt;br /&gt;
     4 = posZ,&lt;br /&gt;
     5 = dirX,&lt;br /&gt;
     6 = dirY,&lt;br /&gt;
     7 = dirZ,&lt;br /&gt;
     ... and more (depending on the camera ...&lt;br /&gt;
}&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetCameraTarget&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z [,number transTime] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== World Primitives ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;outdated! use opengl api instead!&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AddWorldIcon&#039;&#039;&#039;&lt;br /&gt;
  ( number cmdID, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.AddWorldText&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;text&amp;quot;, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.AddWorldUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID,&lt;br /&gt;
    number x, number y, number z,&lt;br /&gt;
    number team, number facing) -&amp;gt; nil&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnsyncedCtrl&amp;diff=12206</id>
		<title>Lua UnsyncedCtrl</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnsyncedCtrl&amp;diff=12206"/>
		<updated>2008-10-21T17:41:38Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: add Get/SetDrawSelectionInfo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Pipes ==&lt;br /&gt;
&#039;&#039;&#039;Spring.Echo&#039;&#039;&#039;&lt;br /&gt;
  ( arg1 [, arg2 [, ... ] ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Usefull for debugging.&amp;lt;br&amp;gt; Prints values in the spring chat console (hint: the default print() writes to STDOUT).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.PlaySoundFile&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;soundfile&amp;quot; [, number volume&lt;br /&gt;
    [, number x, number y, number z ] ] ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Plays WAV sounds. &amp;lt;i&amp;gt;By default&amp;lt;/i&amp;gt;, the soundfile is expected to be in the &amp;quot;Sounds&amp;quot; folder.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.PlaySoundStream&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;oggfile&amp;quot; [, number volume = 1.0&lt;br /&gt;
    [, number x, number y, number z ]] ) -&amp;gt; nil | boolean true&lt;br /&gt;
  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Allow you to play an Ogg Vorbis (.OGG) compressed sound file.&amp;lt;br&amp;gt; &amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; you may only play _ONE_ stream at a time. If another stream is playing and&amp;lt;br&amp;gt; you try to start a second one the call will fail, and silence will result.&amp;lt;br&amp;gt; &amp;lt;b&amp;gt;Note2:&amp;lt;/b&amp;gt; the file has to be on the local filesystem, so you can&#039;t playback ogg&#039;s&amp;lt;br&amp;gt; in your mod with this command, to do so you have to extract it before and save&amp;lt;br&amp;gt; it on the local filesystem.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.StopSoundStream&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil&lt;br /&gt;
  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Terminates any SoundStream is running.&amp;lt;br&amp;gt; Since only one may play at any time (see above), this can be used as an interrupt.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SendMessage ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessage&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToPlayer&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID, string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToAllyTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number allyID, string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToSpectators&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Unit Selection ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SelectUnitMap&#039;&#039;&#039;&lt;br /&gt;
  ( { [unitID] = anything, ...} [,boolean append] ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SelectUnitArray&#039;&#039;&#039;&lt;br /&gt;
  ( { [1] = unitID1 , [2] = unitID2 , ...} [,boolean append] ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.GetDrawSelectionInfo&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetDrawSelectionInfo&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawSelectionInfo ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Unit Control ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNoDraw&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;LuaGadgets only!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean noDraw ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNoSelect&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;LuaGadgets only!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean noSelect ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNoMinimap&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;LuaGadgets only!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean noMinimap ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== GUI ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetDrawSky&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawSky ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetDrawWater&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawWater ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetDrawGround&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawGround ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.DrawUnitCommands&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
  ( { [1] = unitID, ... } [, false ] ) -&amp;gt; nil&lt;br /&gt;
  ( { [unitID] = anything, ... }, true  ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetTeamColor&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number r, number g, number b ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.AssignMouseCursor&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;default hotspot is center!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string &amp;quot;cmdName&amp;quot;, string &amp;quot;iconFileName&amp;quot;&lt;br /&gt;
    [, boolean overwrite [, boolean hotSpotTopLeft] ] ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.ReplaceMouseCursor&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;default hotspot is center!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string &amp;quot;oldFileName&amp;quot;, string &amp;quot;newFileName&amp;quot; [, boolean hotSpotTopLeft] ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetCustomCommandDrawData&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;register your custom cmd so it gets visible in the unit&#039;s cmd queue&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number cmdID,&lt;br /&gt;
    number cmdIconID | string iconname | nil,&lt;br /&gt;
    { number r, number g, number b, number a } [, boolean showArea ] ) -&amp;gt; nil | true&lt;br /&gt;
&lt;br /&gt;
== Camera ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetCameraState&#039;&#039;&#039;&lt;br /&gt;
  ( table camState, number camTime) -&amp;gt; nil | boolean&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;camState = {&lt;br /&gt;
  mode = cameraID,&lt;br /&gt;
     1 = cameraID,&lt;br /&gt;
     2 = posX,&lt;br /&gt;
     3 = posY,&lt;br /&gt;
     4 = posZ,&lt;br /&gt;
     5 = dirX,&lt;br /&gt;
     6 = dirY,&lt;br /&gt;
     7 = dirZ,&lt;br /&gt;
     ... and more (depending on the camera ...&lt;br /&gt;
}&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetCameraTarget&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z [,number transTime] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== World Primitives ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;outdated! use opengl api instead!&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AddWorldIcon&#039;&#039;&#039;&lt;br /&gt;
  ( number cmdID, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.AddWorldText&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;text&amp;quot;, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.AddWorldUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID,&lt;br /&gt;
    number x, number y, number z,&lt;br /&gt;
    number team, number facing) -&amp;gt; nil&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5843</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5843"/>
		<updated>2008-10-17T16:22:45Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Spring Downloads==&lt;br /&gt;
&lt;br /&gt;
On this page you will find information on how to download the latest releases from the Spring project for various platforms. &lt;br /&gt;
&lt;br /&gt;
Make sure that you download the latest drivers for your graphic card in order to make Spring work correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Spring RTS Engine + Mods/Games==&lt;br /&gt;
&lt;br /&gt;
If all you are interested in is playing the game using the existing public lobby server (for multiplayer online play), then these are the files you will want.&lt;br /&gt;
&lt;br /&gt;
===Windows===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://installer.clan-sy.com/spring_0.77b4.exe Click here to download]&#039;&#039;&#039; 14.0MB, added 2008-10-16&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://planetspring.free.fr/spring/installer/spring_0.77b4-spring_0.77b4.exe Mirror #1]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This installer can provide you with everything you need to play Spring, including the core files, different mods and maps and the TASClient multiplayer lobby client.&lt;br /&gt;
&lt;br /&gt;
Please note that by selecting the mods XTA or BA in the installer you are legally required to own the original total annihilation game. The other mods are free of such content. More release notes can be found here.&lt;br /&gt;
&lt;br /&gt;
This installer can also update your 0.76b1 installation to 0.77b3.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;[[SetupGuide|Linux set up guide]]&#039;&#039;&#039; provides set up information for various Linux distributions.&lt;br /&gt;
&lt;br /&gt;
The Linux releases track with the Windows release, and those playing the game on Linux can play against players running the Windows version.&lt;br /&gt;
&lt;br /&gt;
===Mac OS X===&lt;br /&gt;
&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|here]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Source Code ===&lt;br /&gt;
&#039;&#039;&#039;[http://spring.clan-sy.com/dl/spring_0.77b4_src.tar.bz2 Linux .tar.bz2]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://spring.clan-sy.com/dl/spring_0.77b4_src.zip Windows .zip]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Lobby server==&lt;br /&gt;
&lt;br /&gt;
This is for those wanting to run their own private or public lobby server, e.g. if you want to use Spring on a LAN without the need for an external internet connection. See the readme &#039;&#039;&#039;[http://spring.clan-sy.com/dl/tasserver_readme.txt here]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Windows===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://spring.clan-sy.com/dl/TASServer_035.exe Click here to download]&#039;&#039;&#039; 120.7kb, added 2008-03-02 &lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://spring.clan-sy.com/dl/TASServer.jar Click here to download]&#039;&#039;&#039; 100.7kb, added 2008-03-02 &lt;br /&gt;
&lt;br /&gt;
===Mac OS X===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(Untested)&#039;&#039;&#039; Try the Linux release above, and let us know if it works!&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Main_Page&amp;diff=12778</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Main_Page&amp;diff=12778"/>
		<updated>2008-10-11T15:03:07Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: add link to debugging sync errors&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{|border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;10&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #41545c; border: 1px #aaa solid;&amp;quot;|&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Read Me First]]&#039;&#039;&#039; Answers to questions often asked - Everyone should read this first. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[FAQ]]&#039;&#039;&#039; Has it been asked before? &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Using_Spring|Playing Spring]]&#039;&#039;&#039; How to play the game. Controls, issuing orders, and related topics.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Mods]]&#039;&#039;&#039; Games that use the Spring engine.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Getting Spring Content and Links]]&#039;&#039;&#039; Lists sites related to spring, and sites from which you can download spring Mods/Games, Maps, and more&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Maps]]&#039;&#039;&#039; All about maps for the Spring engine and where to get them.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[AIs]]&#039;&#039;&#039; Skirmish AIs, Helper AIs...&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Strategy and Tactics]]&#039;&#039;&#039; Basic ideas how to stand your ground.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Glossary]]&#039;&#039;&#039; What does &amp;quot;AA&amp;quot; or &amp;quot;XTA&amp;quot; mean? Explanations for common terms and shorthand.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Clans]]&#039;&#039;&#039; A list of the official clans in spring.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[King Titles]]&#039;&#039;&#039; Titles of importance. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Spreading Spring]]&#039;&#039;&#039; Read before advertising.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Hosting Spring]]&#039;&#039;&#039; Autohosting and related topics.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[The Lighter Side Of Spring]]&#039;&#039;&#039; Humour, comics and quotations.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #41545c; border: 1px #aaa solid;&amp;quot;|&lt;br /&gt;
== Development == &lt;br /&gt;
&#039;&#039;&#039;[[Engine Development]]&#039;&#039;&#039; Information regarding the source code of Spring.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Mod_and_Unit_development#Mod_development|Game Development And Unit Creation]]&#039;&#039;&#039; Lots of links to valuable Articles and forum threads regarding Mod/Unit Development.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Map_development|Map Development]]&#039;&#039;&#039; Tutorials and other useful information for creating maps.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Debugging_sync_errors|Debugging sync errors]]&#039;&#039;&#039; Guide to debugging sync errors for engine developers, mod developers and testers.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Lua Scripting]]&#039;&#039;&#039; Information regarding the use of the supplementary Lua scripting language for Widgets and beyond...&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Map, Mod, And Unit Development Programs|Content Development Programs]]&#039;&#039;&#039; Links to all kind of useful programs.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Mission development]]&#039;&#039;&#039; Help on writing campaigns, demos and missions using Lua.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[AI|AI Development]]&#039;&#039;&#039; Lots of information about developing Skirmish, Unit and Group AIs for Spring.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Linux_Page |Linux and Mac OS]]&#039;&#039;&#039; Mac OSX / NetBSD / Solaris / Linux / Cross-platform information.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Monthly Topic Rotation]]&#039;&#039;&#039; Generally related to development of the engine or particular mods. Read before posting on the forums.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[General Resources]]&#039;&#039;&#039; Usable textures, sounds and code snippets by the community, for the community.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Associated Development Groups]]&#039;&#039;&#039; Teams, Forums and Groups associated with Spring content and code development.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot; style=&amp;quot;margin:10px; background:#2d3b43; padding:5px; border:1px #aaa solid;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
This site is put together by the community, which could (read as SHOULD) mean YOU!  If you see information missing, or find out new information you think would be helpful, put it in.  If you find a spelling mistake or phrase that could be clearer, fix it.  If you find yourself doing repeated searches or going back to the [[Special:Allpages|Topic Index]] repeatedly when trying to find out about a particular feature, consider combining articles or linking them to one another.  Any contributions you make to this Wiki are in the public domain.  [[Help:Editing|Add to the Wiki]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;A wiki is a web application that allows users to add content, as on an Internet forum, but also allows anyone to edit the content.&amp;quot;&#039;&#039;&lt;br /&gt;
- [http://en.wikipedia.org/wiki/Wiki Wikipedia.org]&lt;br /&gt;
|}&lt;br /&gt;
 __NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
&lt;br /&gt;
If you wish to comment on this page (or the wiki) you need to login and then you can go [http://taspring.clan-sy.com/w/index.php?title=Talk:Main_Page&amp;amp;action=edit&amp;amp;section=new here], and post your thoughts.&lt;br /&gt;
[[Category:Spring]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Main_Page&amp;diff=216</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Main_Page&amp;diff=216"/>
		<updated>2008-10-11T15:03:07Z</updated>

		<summary type="html">&lt;p&gt;Imbaczek: add link to debugging sync errors&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{|border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;10&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #41545c; border: 1px #aaa solid;&amp;quot;|&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Read Me First]]&#039;&#039;&#039; Answers to questions often asked - Everyone should read this first. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[FAQ]]&#039;&#039;&#039; Has it been asked before? &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Using_Spring|Playing Spring]]&#039;&#039;&#039; How to play the game. Controls, issuing orders, and related topics.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Mods]]&#039;&#039;&#039; Games that use the Spring engine.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Getting Spring Content and Links]]&#039;&#039;&#039; Lists sites related to spring, and sites from which you can download spring Mods/Games, Maps, and more&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Maps]]&#039;&#039;&#039; All about maps for the Spring engine and where to get them.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[AIs]]&#039;&#039;&#039; Skirmish AIs, Helper AIs...&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Strategy and Tactics]]&#039;&#039;&#039; Basic ideas how to stand your ground.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Glossary]]&#039;&#039;&#039; What does &amp;quot;AA&amp;quot; or &amp;quot;XTA&amp;quot; mean? Explanations for common terms and shorthand.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Clans]]&#039;&#039;&#039; A list of the official clans in spring.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[King Titles]]&#039;&#039;&#039; Titles of importance. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Spreading Spring]]&#039;&#039;&#039; Read before advertising.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Hosting Spring]]&#039;&#039;&#039; Autohosting and related topics.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[The Lighter Side Of Spring]]&#039;&#039;&#039; Humour, comics and quotations.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #41545c; border: 1px #aaa solid;&amp;quot;|&lt;br /&gt;
== Development == &lt;br /&gt;
&#039;&#039;&#039;[[Engine Development]]&#039;&#039;&#039; Information regarding the source code of Spring.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Mod_and_Unit_development#Mod_development|Game Development And Unit Creation]]&#039;&#039;&#039; Lots of links to valuable Articles and forum threads regarding Mod/Unit Development.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Map_development|Map Development]]&#039;&#039;&#039; Tutorials and other useful information for creating maps.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Debugging_sync_errors|Debugging sync errors]]&#039;&#039;&#039; Guide to debugging sync errors for engine developers, mod developers and testers.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Lua Scripting]]&#039;&#039;&#039; Information regarding the use of the supplementary Lua scripting language for Widgets and beyond...&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Map, Mod, And Unit Development Programs|Content Development Programs]]&#039;&#039;&#039; Links to all kind of useful programs.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Mission development]]&#039;&#039;&#039; Help on writing campaigns, demos and missions using Lua.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[AI|AI Development]]&#039;&#039;&#039; Lots of information about developing Skirmish, Unit and Group AIs for Spring.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Linux_Page |Linux and Mac OS]]&#039;&#039;&#039; Mac OSX / NetBSD / Solaris / Linux / Cross-platform information.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Monthly Topic Rotation]]&#039;&#039;&#039; Generally related to development of the engine or particular mods. Read before posting on the forums.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[General Resources]]&#039;&#039;&#039; Usable textures, sounds and code snippets by the community, for the community.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Associated Development Groups]]&#039;&#039;&#039; Teams, Forums and Groups associated with Spring content and code development.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot; style=&amp;quot;margin:10px; background:#2d3b43; padding:5px; border:1px #aaa solid;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
This site is put together by the community, which could (read as SHOULD) mean YOU!  If you see information missing, or find out new information you think would be helpful, put it in.  If you find a spelling mistake or phrase that could be clearer, fix it.  If you find yourself doing repeated searches or going back to the [[Special:Allpages|Topic Index]] repeatedly when trying to find out about a particular feature, consider combining articles or linking them to one another.  Any contributions you make to this Wiki are in the public domain.  [[Help:Editing|Add to the Wiki]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;A wiki is a web application that allows users to add content, as on an Internet forum, but also allows anyone to edit the content.&amp;quot;&#039;&#039;&lt;br /&gt;
- [http://en.wikipedia.org/wiki/Wiki Wikipedia.org]&lt;br /&gt;
|}&lt;br /&gt;
 __NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
&lt;br /&gt;
If you wish to comment on this page (or the wiki) you need to login and then you can go [http://taspring.clan-sy.com/w/index.php?title=Talk:Main_Page&amp;amp;action=edit&amp;amp;section=new here], and post your thoughts.&lt;br /&gt;
[[Category:Spring]]&lt;/div&gt;</summary>
		<author><name>Imbaczek</name></author>
	</entry>
</feed>