<?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=Sdbryan</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=Sdbryan"/>
	<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/wiki/Special:Contributions/Sdbryan"/>
	<updated>2026-11-08T18:17:25Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=User:Sdbryan&amp;diff=21037</id>
		<title>User:Sdbryan</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=User:Sdbryan&amp;diff=21037"/>
		<updated>2013-04-08T05:16:36Z</updated>

		<summary type="html">&lt;p&gt;Sdbryan: Created page with &amp;quot;I am &amp;#039;&amp;#039;&amp;#039;Bryan Dunsheng See&amp;#039;&amp;#039;&amp;#039;, from Malaysia.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am &#039;&#039;&#039;Bryan Dunsheng See&#039;&#039;&#039;, from Malaysia.&lt;/div&gt;</summary>
		<author><name>Sdbryan</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Format&amp;diff=3801</id>
		<title>CEG-Format</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Format&amp;diff=3801"/>
		<updated>2011-02-06T04:29:43Z</updated>

		<summary type="html">&lt;p&gt;Sdbryan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Source:&#039;&#039;&#039; https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Projectiles&lt;br /&gt;
&lt;br /&gt;
== Overall Format ==&lt;br /&gt;
&lt;br /&gt;
A CEG file contains one or more CEGs. Each CEG follows this format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
[ceg_name] {&lt;br /&gt;
  useDefaultExplosions = 0;&lt;br /&gt;
  [spawner_name_0] {&lt;br /&gt;
     class=CClassName;&lt;br /&gt;
     [properties] {&lt;br /&gt;
       property0 = value0;&lt;br /&gt;
       property1 = value1;&lt;br /&gt;
       //and so on...&lt;br /&gt;
     }&lt;br /&gt;
     condition0 = 1;&lt;br /&gt;
     condition1 = 0;&lt;br /&gt;
     count = 1;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  [spawner_name_1] {&lt;br /&gt;
     //each spawner follows that format&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  [groundflash] {&lt;br /&gt;
     //groundflash is a special name; it always generates a groundflash&lt;br /&gt;
     flashsize=16;&lt;br /&gt;
     flashalpha=1;&lt;br /&gt;
     circlegrowth=1;&lt;br /&gt;
     circlealpha=0;&lt;br /&gt;
     ttl=8;&lt;br /&gt;
     color=1,1,1;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== useDefaultExplosions ===&lt;br /&gt;
If this is set, the CEG will use the default explosion (based on damage and area of effect) in addition to any spawners you define.&lt;br /&gt;
&lt;br /&gt;
=== Spawners ===&lt;br /&gt;
A CEG can contain any number of spawners. The name of the spawners don&#039;t really matter, as long as it&#039;s not &amp;quot;groundflash&amp;quot;, which has a special meaning. You can think of each spawner as being one component of the overall explosion.&lt;br /&gt;
&lt;br /&gt;
==== Class ====&lt;br /&gt;
Each spawner has a class that determines what kind of graphical effect it creates. Spring has a number of standard classes that you can choose from. See [[CEG-Classes]] for details.&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
Depending on what class a spawner is, it will have a set of properties that allow you to fine-tune what the spawner displays. Again, see [[CEG-Classes]] for details.&lt;br /&gt;
&lt;br /&gt;
==== Conditions ====&lt;br /&gt;
These determine under what conditions the spawner will run. The available conditions are &amp;quot;air&amp;quot; (at least 20 elmos above ground/sea level), &amp;quot;water&amp;quot;, &amp;quot;ground&amp;quot;, &amp;quot;unit&amp;quot; (hits a unit), and &amp;quot;nounit&amp;quot; (doesn&#039;t hit a unit). There is an &amp;quot;underwater&amp;quot; condition, but it doesn&#039;t actually work at time of writing. If you set the condition to true (e.g., &amp;quot;water = 1;&amp;quot;), the spawner will run if the explosion takes place under that condition. If you set more than one condition, the spawner will run if &#039;&#039;any&#039;&#039; of them are true. If you want a spawner to run only if two or more conditions are &#039;&#039;all&#039;&#039; true, you have to do a little trick with the CExpGenSpawner class.&lt;br /&gt;
&lt;br /&gt;
==== Count ====&lt;br /&gt;
The count determines the number of times the spawner will run.&lt;br /&gt;
&lt;br /&gt;
=== groundflash ===&lt;br /&gt;
If you name a spawner &amp;quot;groundflash,&amp;quot; it will always generate a groundflash. A groundflash has the following properties:&lt;br /&gt;
&lt;br /&gt;
*flashsize (float): The radius of the groundflash.&lt;br /&gt;
*flashalpha (float in [0, 1]): How transparent the groundflash is. Generally, the higher, the brighter.&lt;br /&gt;
*circlegrowth (float): A groundflash can have an additional circle that expands outwards. This controls how fast the circle grows.&lt;br /&gt;
*circlealpha (float in [0, 1]): How transparent the circle is.&lt;br /&gt;
*ttl (int): How long the groundflash lasts.&lt;br /&gt;
*color (float3): The color of the groundflash.&lt;br /&gt;
&lt;br /&gt;
Suggested Use: A short groundflash (~8 frames) is good for any explosion that gives off light. You can also use a longer groundflash to suggest the ground is glowing from heat.&lt;br /&gt;
&lt;br /&gt;
=== Data Types ===&lt;br /&gt;
CEGs use the following data types:&lt;br /&gt;
&lt;br /&gt;
*float: Most properties are floats.&lt;br /&gt;
*int: Used for counts and ttls.&lt;br /&gt;
*bool: Use for conditions, and some properties.&lt;br /&gt;
*float3: Used for vectors and colors. The components are floats, separated by commas. You can also use the keyword &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt;, which represents the direction fed to the CEG.&lt;br /&gt;
*string: Used for colormaps and texture names. In .lua you delimit a string by quotes; in .tdf you do not. Color maps consist of 2 or more groups of 4 numbers, each group representing a RGBA color. Textures are the names you define in gamedata/resources.tdf or gamedata/resources.lua.&lt;br /&gt;
&lt;br /&gt;
You can use [[CEG-Operators]] to define floats that are not fixed.&lt;br /&gt;
&lt;br /&gt;
=== Units ===&lt;br /&gt;
&lt;br /&gt;
All distances are in elmos; all time is in frames.&lt;br /&gt;
&lt;br /&gt;
[[Category:CEG]]&lt;/div&gt;</summary>
		<author><name>Sdbryan</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Game_and_Unit_development&amp;diff=8005</id>
		<title>Game and Unit development</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Game_and_Unit_development&amp;diff=8005"/>
		<updated>2011-02-06T04:28:34Z</updated>

		<summary type="html">&lt;p&gt;Sdbryan: /* Explosions (.tdf, .lua) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
=Game development=&lt;br /&gt;
This information is meant to help newcomers learn how to develop their own games for the Spring Engine.&lt;br /&gt;
==General==&lt;br /&gt;
*[[Game structure]]&amp;lt;br /&amp;gt;&lt;br /&gt;
*[[Game specification|Game specification]]&amp;lt;br /&amp;gt;&lt;br /&gt;
*[http://springrts.com/phpbb/viewtopic.php?t=6015 What do I need to create a game?]&lt;br /&gt;
*[[Simple Mod Tutorial|Simple Game Tutorial]]&lt;br /&gt;
*[[Freely available and reusable content|Freely available and reusable content for maps and games]]&lt;br /&gt;
*[[The Complete Guide To Making A Spring Game]]&lt;br /&gt;
&lt;br /&gt;
=Modeling (.3do, .s3o)=&lt;br /&gt;
Spring supports different 3d representations: &#039;.s3o&#039; and &#039;.3do&#039;. The biggest difference between both formats is the workflow to create a new unit. There are exporter plugins for &#039;blender&#039; and &#039;3ds-max&#039; so that texturing and modeling can be done using these.&lt;br /&gt;
In contrast: when you model an &#039;.3do&#039; you have to use &#039;UpSpring&#039; currently.&lt;br /&gt;
&lt;br /&gt;
The animation with can either be done using &#039;lua&#039; or &#039;COB/BOS&#039; is does not depend on either, see rigging/animation. For new units use &#039;lua&#039; scripting.&lt;br /&gt;
&lt;br /&gt;
==s3o modeling==&lt;br /&gt;
* [[Basic s3o unit making guide]] (using UpSpring)&lt;br /&gt;
* [[s3o using blender]] (not using UpSpring)&lt;br /&gt;
* [[Trouble-shooting s3o units]]&lt;br /&gt;
&lt;br /&gt;
===Tutorials===&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?t=10612 Wings UV Mapping Tutorial]&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?f=9&amp;amp;t=12354 Saving polygons in Wings3d Tutorial]&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?t=10503 Runecrafter&#039;s 3DS Max UV Mapping Tutorial]&lt;br /&gt;
&lt;br /&gt;
===S3O Textures===&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?f=57&amp;amp;t=22392 DDS Textures:  How To]&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?t=10947 Greeble Tutorial 1]&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?f=9&amp;amp;t=12356 Greeble Tutorial 2]&lt;br /&gt;
&lt;br /&gt;
==Models - 3do Files==&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; 3do is an outdated model format used by OTA models (Balanced Annihilation, NOTA, etc.).&amp;lt;br&amp;gt;&lt;br /&gt;
(Note: UpSpring has some problems with empty objects and groundplates)&lt;br /&gt;
*use [http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=7208&amp;amp;p=126129&amp;amp;hilit=upspring#p126129 UpSpring] and [http://springfiles.com/1755 3doBuilder] to edit those files&lt;br /&gt;
*[http://user.supradigital.org/jcnossen/UpspringInstaller-1.54-EulerAngles.exe Click here to download UpSpring, our content support tool.]&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?f=9&amp;amp;t=15106 Argh&#039;s UpSpring Easy Workflow Guide]&lt;br /&gt;
* [http://lassie.student.utwente.nl/vliet/springtut.pdf Maestro&#039;s tutorial of Upspring and textures- very outdated].&lt;br /&gt;
&lt;br /&gt;
=Scripting/Animations (.cob, .bos, .lua)=&lt;br /&gt;
==Lua Animations==&lt;br /&gt;
To edit .lua files you need a text editor. &lt;br /&gt;
*[[Animation-LuaScripting]]&lt;br /&gt;
**[[Animation-LuaCallins]]&lt;br /&gt;
**[[Animation-LuaCallouts]]&lt;br /&gt;
**[[Animation-CobLuaDifferences]]&lt;br /&gt;
&lt;br /&gt;
==COB Animations==&lt;br /&gt;
The binary &#039;.cob&#039; file format is obsolete and some &#039;.cob&#039; files might be copyrighed by cavedog. A &#039;.cob&#039; file can be decompiled to see what it is doing or if you have the source, that is a &#039;.bos&#039; file, you can compile it into a &#039;.cob&#039; file.&lt;br /&gt;
&lt;br /&gt;
To edit .bos files you need a program/compiler. The most famous one is [http://jobjol.nl/1384 Scriptor]&lt;br /&gt;
*[[Animation-CobLuaDifferences]]&lt;br /&gt;
*[[Animation-CobOverview]]&lt;br /&gt;
**[[Animation-CobExamples]]&lt;br /&gt;
**[[Animation-CobAnimation]]&lt;br /&gt;
**[[Animation-CobCallins]]&lt;br /&gt;
**[[Animation-CobConstants]]&lt;br /&gt;
**[[Animation-CobThreads]]&lt;br /&gt;
**[[Animation-CobHitByWeaponID]]&lt;br /&gt;
*[[Units:LuaCOB]] - how to interface COB with LUA&lt;br /&gt;
*[[CEG_For_Units|Game Development:Calling basic CEGs from COB]]&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?p=132943#132943 GPL-compliant sourcecode, scripting code examples, and other things.]&lt;br /&gt;
&lt;br /&gt;
=UnitDefs (.fbi, .lua)=&lt;br /&gt;
*[[Units:FBI]]&lt;br /&gt;
*[[All_FBI-variable_values:_min,_max,_default,_type|Units:FBI (variable datatype list)]]&lt;br /&gt;
*[[Unit_Categories]]&lt;br /&gt;
&lt;br /&gt;
=MoveDefs (movedefs.lua)=&lt;br /&gt;
*[[Units:MoveTypes]]&lt;br /&gt;
&lt;br /&gt;
=WeaponDefs (.tdf, .lua)=&lt;br /&gt;
*[[Weapon Variables]] : This is the most up to date&lt;br /&gt;
*[[Units:WeaponMainDir]]&lt;br /&gt;
*[[Units:Weapons]] : Various informations about the weapontypes (uncompleted)&lt;br /&gt;
*[[Weapons:Antinukes]]: All about antinukes.&lt;br /&gt;
&lt;br /&gt;
=Explosions (.tdf, .lua)=&lt;br /&gt;
*[[CEG]]&lt;br /&gt;
**[[CEG-Calls]] &lt;br /&gt;
**[[CEG-Format]] &lt;br /&gt;
**[[CEG-Classes]] &lt;br /&gt;
**[[CEG-Operators]] &lt;br /&gt;
**[[CEG-Miscellaneous]] &lt;br /&gt;
**[[CEG-OldInfo]]&lt;br /&gt;
*[[LUPS]]&lt;br /&gt;
&lt;br /&gt;
=Misc=&lt;br /&gt;
*[[Units:Design]]&lt;br /&gt;
*[[Units:Textures]]&lt;br /&gt;
*[[Units:Buildpics]]&lt;br /&gt;
*[[Units:SideData TDF]]&lt;br /&gt;
*[[Units:Download TDF]] &lt;br /&gt;
*[[Units:FlankingBonus]]&lt;br /&gt;
*[[Mod Development:Armor|Game Development:Armor]]&lt;br /&gt;
*[[Mod Development:Cursors|Game Development:Cursors]]&lt;br /&gt;
*[[Mod Development:Archives|Game Development:Archives]]&lt;br /&gt;
*[[Mod Development:Sidepics|Game Development:Sidepics]]&lt;br /&gt;
*[[CustomUnitIcons|Game Development:Custom unit icons]]&lt;br /&gt;
&lt;br /&gt;
=Legacy Porting Tools=&lt;br /&gt;
==Automated Game Creation==&lt;br /&gt;
* [[TA2Spring]] - Automatically adds and converts Total Annihilation unit packs (.ufo files, etc..) into Spring games (requires a base game for the game rules, XTA is recommended, it is probably not properly supported by current Spring)&lt;br /&gt;
&lt;br /&gt;
[[Category: Unit_development]]&lt;br /&gt;
[[Category:Game development]]&lt;/div&gt;</summary>
		<author><name>Sdbryan</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Format&amp;diff=3800</id>
		<title>CEG-Format</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Format&amp;diff=3800"/>
		<updated>2011-02-05T18:28:42Z</updated>

		<summary type="html">&lt;p&gt;Sdbryan: /* .LUA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Source:&#039;&#039;&#039; https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Projectiles&lt;br /&gt;
&lt;br /&gt;
= .TDF =&lt;br /&gt;
&lt;br /&gt;
== Overall Format ==&lt;br /&gt;
&lt;br /&gt;
A CEG file contains one or more CEGs. Each CEG follows this format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
[ceg_name] {&lt;br /&gt;
  useDefaultExplosions = 0;&lt;br /&gt;
  [spawner_name_0] {&lt;br /&gt;
     class=CClassName;&lt;br /&gt;
     [properties] {&lt;br /&gt;
       property0 = value0;&lt;br /&gt;
       property1 = value1;&lt;br /&gt;
       //and so on...&lt;br /&gt;
     }&lt;br /&gt;
     condition0 = 1;&lt;br /&gt;
     condition1 = 0;&lt;br /&gt;
     count = 1;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  [spawner_name_1] {&lt;br /&gt;
     //each spawner follows that format&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  [groundflash] {&lt;br /&gt;
     //groundflash is a special name; it always generates a groundflash&lt;br /&gt;
     flashsize=16;&lt;br /&gt;
     flashalpha=1;&lt;br /&gt;
     circlegrowth=1;&lt;br /&gt;
     circlealpha=0;&lt;br /&gt;
     ttl=8;&lt;br /&gt;
     color=1,1,1;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== useDefaultExplosions ===&lt;br /&gt;
If this is set, the CEG will use the default explosion (based on damage and area of effect) in addition to any spawners you define.&lt;br /&gt;
&lt;br /&gt;
=== Spawners ===&lt;br /&gt;
A CEG can contain any number of spawners. The name of the spawners don&#039;t really matter, as long as it&#039;s not &amp;quot;groundflash&amp;quot;, which has a special meaning. You can think of each spawner as being one component of the overall explosion.&lt;br /&gt;
&lt;br /&gt;
==== Class ====&lt;br /&gt;
Each spawner has a class that determines what kind of graphical effect it creates. Spring has a number of standard classes that you can choose from. See [[CEG-Classes]] for details.&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
Depending on what class a spawner is, it will have a set of properties that allow you to fine-tune what the spawner displays. Again, see [[CEG-Classes]] for details.&lt;br /&gt;
&lt;br /&gt;
==== Conditions ====&lt;br /&gt;
These determine under what conditions the spawner will run. The available conditions are &amp;quot;air&amp;quot; (at least 20 elmos above ground/sea level), &amp;quot;water&amp;quot;, &amp;quot;ground&amp;quot;, &amp;quot;unit&amp;quot; (hits a unit), and &amp;quot;nounit&amp;quot; (doesn&#039;t hit a unit). There is an &amp;quot;underwater&amp;quot; condition, but it doesn&#039;t actually work at time of writing. If you set the condition to true (e.g., &amp;quot;water = 1;&amp;quot;), the spawner will run if the explosion takes place under that condition. If you set more than one condition, the spawner will run if &#039;&#039;any&#039;&#039; of them are true. If you want a spawner to run only if two or more conditions are &#039;&#039;all&#039;&#039; true, you have to do a little trick with the CExpGenSpawner class.&lt;br /&gt;
&lt;br /&gt;
==== Count ====&lt;br /&gt;
The count determines the number of times the spawner will run.&lt;br /&gt;
&lt;br /&gt;
=== groundflash ===&lt;br /&gt;
If you name a spawner &amp;quot;groundflash,&amp;quot; it will always generate a groundflash. A groundflash has the following properties:&lt;br /&gt;
&lt;br /&gt;
*flashsize (float): The radius of the groundflash.&lt;br /&gt;
*flashalpha (float in [0, 1]): How transparent the groundflash is. Generally, the higher, the brighter.&lt;br /&gt;
*circlegrowth (float): A groundflash can have an additional circle that expands outwards. This controls how fast the circle grows.&lt;br /&gt;
*circlealpha (float in [0, 1]): How transparent the circle is.&lt;br /&gt;
*ttl (int): How long the groundflash lasts.&lt;br /&gt;
*color (float3): The color of the groundflash.&lt;br /&gt;
&lt;br /&gt;
Suggested Use: A short groundflash (~8 frames) is good for any explosion that gives off light. You can also use a longer groundflash to suggest the ground is glowing from heat.&lt;br /&gt;
&lt;br /&gt;
=== Data Types ===&lt;br /&gt;
CEGs use the following data types:&lt;br /&gt;
&lt;br /&gt;
*float: Most properties are floats.&lt;br /&gt;
*int: Used for counts and ttls.&lt;br /&gt;
*bool: Use for conditions, and some properties.&lt;br /&gt;
*float3: Used for vectors and colors. The components are floats, separated by commas. You can also use the keyword &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt;, which represents the direction fed to the CEG.&lt;br /&gt;
*string: Used for colormaps and texture names. In .lua you delimit a string by quotes; in .tdf you do not. Color maps consist of 2 or more groups of 4 numbers, each group representing a RGBA color. Textures are the names you define in gamedata/resources.tdf or gamedata/resources.lua.&lt;br /&gt;
&lt;br /&gt;
You can use [[CEG-Operators]] to define floats that are not fixed.&lt;br /&gt;
&lt;br /&gt;
=== Units ===&lt;br /&gt;
&lt;br /&gt;
All distances are in elmos; all time is in frames.&lt;br /&gt;
&lt;br /&gt;
= .LUA =&lt;br /&gt;
This uses the LUPS (Lua Particle System).&lt;br /&gt;
&lt;br /&gt;
== Overall Format ==&lt;br /&gt;
&lt;br /&gt;
A CEG file contains one or more CEGs. Each CEG follows this format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
local ceg_name = {&lt;br /&gt;
  useDefaultExplosions = 0,&lt;br /&gt;
  [spawner_name_0] = {&lt;br /&gt;
     class=CClassName,&lt;br /&gt;
     [properties] = {&lt;br /&gt;
       property0 = value0,&lt;br /&gt;
       property1 = value1,&lt;br /&gt;
       --and so on...&lt;br /&gt;
     },&lt;br /&gt;
     condition0 = 1,&lt;br /&gt;
     condition1 = 0,&lt;br /&gt;
     count = 1,&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  [spawner_name_1] = {&lt;br /&gt;
     --each spawner follows that format&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  [groundflash] = {&lt;br /&gt;
     --groundflash is a special name; it always generates a groundflash&lt;br /&gt;
     flashsize=16,&lt;br /&gt;
     flashalpha=1,&lt;br /&gt;
     circlegrowth=1,&lt;br /&gt;
     circlealpha=0,&lt;br /&gt;
     ttl=8,&lt;br /&gt;
     color=1,1,1,&lt;br /&gt;
  },&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:CEG]]&lt;/div&gt;</summary>
		<author><name>Sdbryan</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Format&amp;diff=3799</id>
		<title>CEG-Format</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Format&amp;diff=3799"/>
		<updated>2011-02-05T18:25:43Z</updated>

		<summary type="html">&lt;p&gt;Sdbryan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Source:&#039;&#039;&#039; https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Projectiles&lt;br /&gt;
&lt;br /&gt;
= .TDF =&lt;br /&gt;
&lt;br /&gt;
== Overall Format ==&lt;br /&gt;
&lt;br /&gt;
A CEG file contains one or more CEGs. Each CEG follows this format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
[ceg_name] {&lt;br /&gt;
  useDefaultExplosions = 0;&lt;br /&gt;
  [spawner_name_0] {&lt;br /&gt;
     class=CClassName;&lt;br /&gt;
     [properties] {&lt;br /&gt;
       property0 = value0;&lt;br /&gt;
       property1 = value1;&lt;br /&gt;
       //and so on...&lt;br /&gt;
     }&lt;br /&gt;
     condition0 = 1;&lt;br /&gt;
     condition1 = 0;&lt;br /&gt;
     count = 1;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  [spawner_name_1] {&lt;br /&gt;
     //each spawner follows that format&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  [groundflash] {&lt;br /&gt;
     //groundflash is a special name; it always generates a groundflash&lt;br /&gt;
     flashsize=16;&lt;br /&gt;
     flashalpha=1;&lt;br /&gt;
     circlegrowth=1;&lt;br /&gt;
     circlealpha=0;&lt;br /&gt;
     ttl=8;&lt;br /&gt;
     color=1,1,1;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== useDefaultExplosions ===&lt;br /&gt;
If this is set, the CEG will use the default explosion (based on damage and area of effect) in addition to any spawners you define.&lt;br /&gt;
&lt;br /&gt;
=== Spawners ===&lt;br /&gt;
A CEG can contain any number of spawners. The name of the spawners don&#039;t really matter, as long as it&#039;s not &amp;quot;groundflash&amp;quot;, which has a special meaning. You can think of each spawner as being one component of the overall explosion.&lt;br /&gt;
&lt;br /&gt;
==== Class ====&lt;br /&gt;
Each spawner has a class that determines what kind of graphical effect it creates. Spring has a number of standard classes that you can choose from. See [[CEG-Classes]] for details.&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
Depending on what class a spawner is, it will have a set of properties that allow you to fine-tune what the spawner displays. Again, see [[CEG-Classes]] for details.&lt;br /&gt;
&lt;br /&gt;
==== Conditions ====&lt;br /&gt;
These determine under what conditions the spawner will run. The available conditions are &amp;quot;air&amp;quot; (at least 20 elmos above ground/sea level), &amp;quot;water&amp;quot;, &amp;quot;ground&amp;quot;, &amp;quot;unit&amp;quot; (hits a unit), and &amp;quot;nounit&amp;quot; (doesn&#039;t hit a unit). There is an &amp;quot;underwater&amp;quot; condition, but it doesn&#039;t actually work at time of writing. If you set the condition to true (e.g., &amp;quot;water = 1;&amp;quot;), the spawner will run if the explosion takes place under that condition. If you set more than one condition, the spawner will run if &#039;&#039;any&#039;&#039; of them are true. If you want a spawner to run only if two or more conditions are &#039;&#039;all&#039;&#039; true, you have to do a little trick with the CExpGenSpawner class.&lt;br /&gt;
&lt;br /&gt;
==== Count ====&lt;br /&gt;
The count determines the number of times the spawner will run.&lt;br /&gt;
&lt;br /&gt;
=== groundflash ===&lt;br /&gt;
If you name a spawner &amp;quot;groundflash,&amp;quot; it will always generate a groundflash. A groundflash has the following properties:&lt;br /&gt;
&lt;br /&gt;
*flashsize (float): The radius of the groundflash.&lt;br /&gt;
*flashalpha (float in [0, 1]): How transparent the groundflash is. Generally, the higher, the brighter.&lt;br /&gt;
*circlegrowth (float): A groundflash can have an additional circle that expands outwards. This controls how fast the circle grows.&lt;br /&gt;
*circlealpha (float in [0, 1]): How transparent the circle is.&lt;br /&gt;
*ttl (int): How long the groundflash lasts.&lt;br /&gt;
*color (float3): The color of the groundflash.&lt;br /&gt;
&lt;br /&gt;
Suggested Use: A short groundflash (~8 frames) is good for any explosion that gives off light. You can also use a longer groundflash to suggest the ground is glowing from heat.&lt;br /&gt;
&lt;br /&gt;
=== Data Types ===&lt;br /&gt;
CEGs use the following data types:&lt;br /&gt;
&lt;br /&gt;
*float: Most properties are floats.&lt;br /&gt;
*int: Used for counts and ttls.&lt;br /&gt;
*bool: Use for conditions, and some properties.&lt;br /&gt;
*float3: Used for vectors and colors. The components are floats, separated by commas. You can also use the keyword &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt;, which represents the direction fed to the CEG.&lt;br /&gt;
*string: Used for colormaps and texture names. In .lua you delimit a string by quotes; in .tdf you do not. Color maps consist of 2 or more groups of 4 numbers, each group representing a RGBA color. Textures are the names you define in gamedata/resources.tdf or gamedata/resources.lua.&lt;br /&gt;
&lt;br /&gt;
You can use [[CEG-Operators]] to define floats that are not fixed.&lt;br /&gt;
&lt;br /&gt;
=== Units ===&lt;br /&gt;
&lt;br /&gt;
All distances are in elmos; all time is in frames.&lt;br /&gt;
&lt;br /&gt;
= .LUA =&lt;br /&gt;
&lt;br /&gt;
[[Category:CEG]]&lt;/div&gt;</summary>
		<author><name>Sdbryan</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=General_Resources&amp;diff=9290</id>
		<title>General Resources</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=General_Resources&amp;diff=9290"/>
		<updated>2010-10-19T13:24:10Z</updated>

		<summary type="html">&lt;p&gt;Sdbryan: /* Sounds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; General Resources&lt;br /&gt;
&lt;br /&gt;
=Textures=&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?t=7093&amp;amp;start=0 Texture Competition 0001 - Metal]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?t=7188&amp;amp;start=0 Texture Competition 0002 - Camo]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?t=7731 Texture Competition 0003 - Stone/Concrete]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.cgtextures.com/ CG Textures]&lt;br /&gt;
&lt;br /&gt;
=Code=&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?t=7457 GPL Code Repository]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?t=6569&amp;amp;postdays=0&amp;amp;postorder=asc&amp;amp;start=0 The Millionth Monkey Gets Its Typewriter - Movement Optimization]&lt;br /&gt;
&lt;br /&gt;
=Sounds=&lt;br /&gt;
[http://freesound.iua.upf.edu/ Freesound] free sounds and samples, distributed under the [http://creativecommons.org/licenses/sampling+/1.0/ Creative Commons License]&lt;br /&gt;
[http://www.pdsounds.org/ Public domain sounds] sounds and samples distributed to the public domain&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?t=4047 Compilation List of Features for Maps]&lt;br /&gt;
&lt;br /&gt;
=Models=&lt;br /&gt;
[http://planet-wars.eu/ModelBase/Units.aspx Model Base]&lt;br /&gt;
&lt;br /&gt;
[[Category: Art_assets]]&lt;br /&gt;
[[Category: Development]]&lt;/div&gt;</summary>
		<author><name>Sdbryan</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Simple_Game_Tutorial&amp;diff=16867</id>
		<title>Simple Game Tutorial</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Simple_Game_Tutorial&amp;diff=16867"/>
		<updated>2010-06-13T17:12:20Z</updated>

		<summary type="html">&lt;p&gt;Sdbryan: /* Step 6:A couple Text Files */ Changed to lua files&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Until I Finish [[Mod Development]] is the place to go.&lt;br /&gt;
&lt;br /&gt;
This Tutorial Aims to get a person from knowing nothing about Spring to the point where they can create and edit mods.&lt;br /&gt;
&lt;br /&gt;
Right now I am working from memory so you may want to correct me when I&#039;m wrong, I will try to cross link from my summaries to the appropriate articles available in other places.&lt;br /&gt;
&lt;br /&gt;
I will not go too deep into making 3do&#039;s because they are old and dumb... but I&#039;ll try to make note of the differences here.&lt;br /&gt;
&lt;br /&gt;
I don&#039;t know anything about scripting right now, so that section is likely to be sparse when I write it, I hope that someone will expand on it.&lt;br /&gt;
&lt;br /&gt;
=Book 1: The First Unit=&lt;br /&gt;
&lt;br /&gt;
==Step 1:Planning==&lt;br /&gt;
Who cares about planning, you know what you&#039;re doing... just come up with an idea for a mod... I made a chess set... if you don&#039;t have a real idea and just want to make a model show up in the game... then yeah... this is the place to start... I&#039;d do that if I were you.&lt;br /&gt;
&lt;br /&gt;
Another good thing to do at this point is to creat a &amp;quot;working directory&amp;quot;, and inside it create a directory with the name that your mod will have... after many headaches I decided it&#039;s best to put this in the root directory of your system so it&#039;s really easy to find when you are switching around back and forth between folders and keep having to find your files over and over again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Step 2:Getting The Tools==&lt;br /&gt;
You will need a bunch of stuff... here&#039;s the list (I assume you are using windows)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Want:&#039;&#039;&lt;br /&gt;
*[http://taspring.clan-sy.com/download.php Spring] - The main program, you will likely need this to test if you&#039;ve screwed up&lt;br /&gt;
*A Tiny Map (2x2) - to test your mod fast (suggest [http://www.fileuniverse.com/?p=showitem&amp;amp;ID=2534 Simple Chess Map])&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Need:&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;Program listings can be found here:&#039;&#039;&#039; &#039;&#039;&#039;[http://taspring.clan-sy.com/wiki/Map%2C_Mod%2C_And_Unit_Development_Programs Map, Mod, And Unit Development Programs]&#039;&#039;&#039;&lt;br /&gt;
*3D Modeling Program - &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Notepad - to edit all the miriad of text files&lt;br /&gt;
*A Graphical Editing Program - needs to handle RGBA TGAs (aka tga&#039;s with alpha channels), I suggest Photoshop if you have it, or The GIMP... needed for all of the texture making for UVmapping stuff... &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Upspring 1.3 - To convert your models to the approprite s3o format (if you want to fight with 3do builder, then go ahead... a good trick is to get your model into upspring first and adjust all the hierachy, then save it as an 3do... but why bother?). &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Scriptor - to make and compile your units &amp;quot;animation script&amp;quot;... or steal someone else&#039;s and make it work for your unit. &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Compression Utility - (I suggest [http://www.7-zip.org/ 7zip] - even if you are using zip compression and not 7zip, it&#039;s still good to have)&lt;br /&gt;
&lt;br /&gt;
==Step 3:Making a 3D Model==&lt;br /&gt;
&lt;br /&gt;
Go into your 3D modelling program and make a 3D model, [http://taspring.clan-sy.com/w/images/b/b4/WingsCombine.PNG combine] all the objects and UV map the model, then separate it out into any parts that need to move independently of each other.  Then Export the UV map as an Image File and Export the whole thing as a 3ds file.  Put the original wings file, the UVMap image and the 3ds file into your working directory so you can find them later.&lt;br /&gt;
&lt;br /&gt;
Wings 3D UV Mapping tutorial has been started here - [[Units:CreateModel]]&lt;br /&gt;
&lt;br /&gt;
==Step 4:Fixing Your Images==&lt;br /&gt;
&lt;br /&gt;
[[Basic s3o unit making guide|This Article includes a UVMapping Guide]]&lt;br /&gt;
&lt;br /&gt;
Open up your UVMap in Photoshop (or whatever) go to the layer/chooser thingy and go to the Channels Tab, add a new layer (it should default to alpha) and fill it with 99% black so you can see your texture in upspring.  If you want to can paint the UVmap and put white (1% black) on the alpha channel where you want your team colours to show up (you can use something between 1% and 99% to get a blend of your team colour along with the texture... for example 50% will give you your texture with 50% of the team colour mixed in...)&lt;br /&gt;
&lt;br /&gt;
I don&#039;t know how to do glow maps... XXreminder for someone to create a Glowmapping tutorial... you don&#039;t acctually need one for the model to show up.&lt;br /&gt;
&lt;br /&gt;
Save these images both in the working directory.&lt;br /&gt;
&lt;br /&gt;
Save a copy of these images in tga format into &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/unittextures&lt;br /&gt;
&lt;br /&gt;
==Step 5:Upspring==&lt;br /&gt;
&lt;br /&gt;
===Importing Your 3ds===&lt;br /&gt;
Open Upspring 1.3, go to file&amp;gt;load model and navigate to and open your 3DS model you exported, you should see the model in upspring as a 3d mesh.  Go to the model tab and set the radius and height values to something other then zero... this defines where the health bar will show up, and more importantly, how big the collision sphere will be.&lt;br /&gt;
&lt;br /&gt;
You will also need to use all of the other tools on those tabs to resize and rotate and move your model to the right place... wings makes models that are 90 degrees off and about 30 times smaller than most spring models... make sure you click the &amp;quot;apply transform&amp;quot; button after any changes that you actually want to show up in the game.&lt;br /&gt;
&lt;br /&gt;
Also, you will want to make the hierachy work using the cut, paste, and add empty buttons.  You will need an object called &amp;quot;base&amp;quot; that all the other objects are connected to... the &amp;quot;origin object&amp;quot;... sometimes you get lucky and wings exports it properly... usually not.&lt;br /&gt;
&lt;br /&gt;
===Importing Your UV and Glowmaps===&lt;br /&gt;
&lt;br /&gt;
Go to the textures tab and make your UV/texture/team-colour map as &amp;quot;texture1&amp;quot; and your UV/glow/reflectivity map as &amp;quot;texture2&amp;quot;... it should show up correctly in the preview pane.&lt;br /&gt;
&lt;br /&gt;
===Exporting Your s3o===&lt;br /&gt;
Choose File&amp;gt;Save Model As then in the drop down select &amp;quot;s3o&amp;quot; and type an appropriate name. This model should be saved to your working directory, and a copy of it made to &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/objects3d/&lt;br /&gt;
&lt;br /&gt;
==Step 6: Lua files==&lt;br /&gt;
&lt;br /&gt;
===UnitName.lua===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
For Reference visit [[Units:FBI]], but again, the easiest way to do this is to extract an existing mod and find the fbi for a unit that behaves similarly to the one you are trying to make and rename and modify it.&lt;br /&gt;
&lt;br /&gt;
Some More Specific Information Not Clear in the &amp;quot;Units:FBI&amp;quot; article:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Name+&amp;quot; &amp;quot;+Description=Spring Display Name&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So if you have the following settings:&lt;br /&gt;
&lt;br /&gt;
 Name=Tiger;&lt;br /&gt;
 Description=Fast Attack C.A.T.;&lt;br /&gt;
&lt;br /&gt;
The Tooltip will show &amp;quot;Tiger Fast Attack C.A.T.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BuildPic Defaults to UnitName.bmp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So if you leave out &amp;quot;BuildPic=filename.bmp;&amp;quot; Spring will look in /unitpics/ for a file called &amp;quot;UnitName.bmp&amp;quot; to use as your buildpic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ObjectName&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you want to use an s3o object, you will need to specify with &amp;quot;ObjectName=UnitName&#039;&#039;&#039;.S3O;&#039;&#039;&#039;&amp;quot; otherwise it will look for &amp;quot;UnitName.3do&amp;quot;.  Also, you don&#039;t have to use &amp;quot;UnitName&amp;quot; as the filename and, in fact, multiple Unit&#039;s fbi files can reference the same 3D models. It is easier, however, for people to figure out what you are doing in your mod if you follow the standards.&lt;br /&gt;
&lt;br /&gt;
Save this file as plain text in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/units/&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unitDef = {&lt;br /&gt;
  unitname           = [[arm_spider]],&lt;br /&gt;
  name               = [[Weaver]],&lt;br /&gt;
  description        = [[Cloaking Construction Spider, Builds at 9 m/s]],&lt;br /&gt;
  acceleration       = 0.15,&lt;br /&gt;
  bmcode             = [[1]],&lt;br /&gt;
  brakeRate          = 0.15,&lt;br /&gt;
  buildCostEnergy    = 230,&lt;br /&gt;
  buildCostMetal     = 230,&lt;br /&gt;
  buildDistance      = 80,&lt;br /&gt;
  builder            = true,&lt;br /&gt;
&lt;br /&gt;
  buildoptions       = {&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  buildPic           = [[arm_spider.png]],&lt;br /&gt;
  buildTime          = 230,&lt;br /&gt;
  canAttack          = false,&lt;br /&gt;
  canGuard           = true,&lt;br /&gt;
  canMove            = true,&lt;br /&gt;
  canPatrol          = true,&lt;br /&gt;
  canreclamate       = [[1]],&lt;br /&gt;
  canstop            = [[1]],&lt;br /&gt;
  category           = [[LAND UNARMED]],&lt;br /&gt;
  cloakCost          = 1,&lt;br /&gt;
  cloakCostMoving    = 2,&lt;br /&gt;
  corpse             = [[DEAD]],&lt;br /&gt;
&lt;br /&gt;
  customParams       = {&lt;br /&gt;
    description_bp = [[Aranha e de construÃƒÂ§?o, ConstrÃƒÂ³i a 6 m/s]],&lt;br /&gt;
    description_es = [[Ara?a de construcciÃƒÂ³n, construye a 6 m/s]],&lt;br /&gt;
    description_fi = [[Rakentaja/kaikuluotainkiipeilij?, rakentaa 6m/s nopeudella]],&lt;br /&gt;
    description_fr = [[Araign?e de Construction, Construit ? 6 m/s]],&lt;br /&gt;
    description_it = [[Ragno do costruzione occultante, costruisce a 6 m/s]],&lt;br /&gt;
    description_pl = [[Paj?k konstruktor, buduje z pr?dko?ci? 6m/s]],&lt;br /&gt;
    helptext       = [[The Weaver is a constructor that can climb over any obstacle and build defenses on high ground.]],&lt;br /&gt;
    helptext_bp    = [[Weaver ÃƒÂ© o construtor escalador camuflÃƒÂ¡vel de NOVA. Pode subir qualquer obstÃƒÂ¡culo, mas constrÃƒÂ³i mais devagar que construtores normais.]],&lt;br /&gt;
    helptext_es    = [[El Weaver es el constructor que puede treparse sobre qualquier obstÃƒÂ¡culo y construir defensas en terreno alto]],&lt;br /&gt;
    helptext_fi    = [[Weaver pystyy liikkumaan vaikeakulkuisimmassakin maastossa ja rakentamaan vaivatta my?s useimmille muille rakentajille saavuttamattomiin paikkoihin.]],&lt;br /&gt;
    helptext_fr    = [[Le weaver est un robot de construction tout terrain qui peut batir des d?fenses en terrain ?lev?.]],&lt;br /&gt;
    helptext_it    = [[Il Weaver ÃƒÂ© un costruttore che puo arrampicarsi su qualunque ostacolo e costruire difese nel terreno alto]],&lt;br /&gt;
    helptext_pl    = [[Weaver jest konstruktorem mog?cym wspina? si? po ka?dej powierzchni oraz posiadaj?cym mo?liwo?? maskowania si?]],&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  defaultmissiontype = [[Standby]],&lt;br /&gt;
  designation        = [[ARM-MLSPD]],&lt;br /&gt;
  energyMake         = 0.15,&lt;br /&gt;
  energyUse          = 0,&lt;br /&gt;
  explodeAs          = [[BIG_UNITEX]],&lt;br /&gt;
  footprintX         = 3,&lt;br /&gt;
  footprintZ         = 3,&lt;br /&gt;
  iconType           = [[builder]],&lt;br /&gt;
  mass               = 115,&lt;br /&gt;
  maxDamage          = 750,&lt;br /&gt;
  maxslope           = 16,&lt;br /&gt;
  maxSlope           = 72,&lt;br /&gt;
  maxVelocity        = 1.7,&lt;br /&gt;
  maxWaterDepth      = 22,&lt;br /&gt;
  metalMake          = 0.15,&lt;br /&gt;
  movementClass      = [[TKBOT3]],&lt;br /&gt;
  noAutoFire         = false,&lt;br /&gt;
  noChaseCategory    = [[TERRAFORM SATELLITE FIXEDWING GUNSHIP HOVER SHIP SWIM SUB LAND FLOAT SINK]],&lt;br /&gt;
  objectName         = [[ARMMLSPD]],&lt;br /&gt;
  radarDistanceJam   = 256,&lt;br /&gt;
  seismicSignature   = 16,&lt;br /&gt;
  selfDestructAs     = [[BIG_UNITEX]],&lt;br /&gt;
  showNanoSpray      = false,&lt;br /&gt;
  side               = [[ARM]],&lt;br /&gt;
  sightDistance      = 295,&lt;br /&gt;
  smoothAnim         = true,&lt;br /&gt;
  steeringmode       = [[1]],&lt;br /&gt;
  TEDClass           = [[CNSTR]],&lt;br /&gt;
  terraformSpeed     = 450,&lt;br /&gt;
  threed             = [[1]],&lt;br /&gt;
  turninplace        = 0,&lt;br /&gt;
  turnRate           = 1020,&lt;br /&gt;
  workerTime         = 9,&lt;br /&gt;
  zbuffer            = [[1]],&lt;br /&gt;
&lt;br /&gt;
  featureDefs        = {&lt;br /&gt;
&lt;br /&gt;
    DEAD  = {&lt;br /&gt;
      description      = [[Wreckage - Weaver]],&lt;br /&gt;
      blocking         = true,&lt;br /&gt;
      category         = [[arm_corpses]],&lt;br /&gt;
      damage           = 850,&lt;br /&gt;
      featureDead      = [[DEAD2]],&lt;br /&gt;
      featurereclamate = [[smudge01]],&lt;br /&gt;
      footprintX       = 3,&lt;br /&gt;
      footprintZ       = 3,&lt;br /&gt;
      height           = [[40]],&lt;br /&gt;
      hitdensity       = [[100]],&lt;br /&gt;
      metal            = 92,&lt;br /&gt;
      object           = [[ARMMLSPD_dead]],&lt;br /&gt;
      reclaimable      = true,&lt;br /&gt;
      reclaimTime      = 92,&lt;br /&gt;
      seqnamereclamate = [[tree1reclamate]],&lt;br /&gt;
      world            = [[All Worlds]],&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    DEAD2 = {&lt;br /&gt;
      description      = [[Debris - Weaver]],&lt;br /&gt;
      blocking         = false,&lt;br /&gt;
      category         = [[heaps]],&lt;br /&gt;
      damage           = 850,&lt;br /&gt;
      featureDead      = [[HEAP]],&lt;br /&gt;
      featurereclamate = [[smudge01]],&lt;br /&gt;
      footprintX       = 3,&lt;br /&gt;
      footprintZ       = 3,&lt;br /&gt;
      height           = [[4]],&lt;br /&gt;
      hitdensity       = [[100]],&lt;br /&gt;
      metal            = 92,&lt;br /&gt;
      object           = [[debris3x3b.s3o]],&lt;br /&gt;
      reclaimable      = true,&lt;br /&gt;
      reclaimTime      = 92,&lt;br /&gt;
      seqnamereclamate = [[tree1reclamate]],&lt;br /&gt;
      world            = [[All Worlds]],&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    HEAP  = {&lt;br /&gt;
      description      = [[Debris - Weaver]],&lt;br /&gt;
      blocking         = false,&lt;br /&gt;
      category         = [[heaps]],&lt;br /&gt;
      damage           = 850,&lt;br /&gt;
      featurereclamate = [[smudge01]],&lt;br /&gt;
      footprintX       = 3,&lt;br /&gt;
      footprintZ       = 3,&lt;br /&gt;
      height           = [[4]],&lt;br /&gt;
      hitdensity       = [[100]],&lt;br /&gt;
      metal            = 46,&lt;br /&gt;
      object           = [[debris3x3b.s3o]],&lt;br /&gt;
      reclaimable      = true,&lt;br /&gt;
      reclaimTime      = 46,&lt;br /&gt;
      seqnamereclamate = [[tree1reclamate]],&lt;br /&gt;
      world            = [[All Worlds]],&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return lowerkeys({ arm_spider = unitDef })&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save this file as a lua file in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/units/&lt;br /&gt;
&lt;br /&gt;
===modinfo.lua===&lt;br /&gt;
&lt;br /&gt;
modinfo.lua is a lua file that defines a number of things that are used when loading a mod, most of the information is self explanitory but basically what you are doing is defining what is going to show up in whatever mod-selection interface you use as well as what other files need to be loaded into memory in order for your mod to work.&lt;br /&gt;
&lt;br /&gt;
====Making a New Mod with your unit/units====&lt;br /&gt;
The following is an example of what will be in your modinfo.lua file if you are starting from scratch and making your own mod. This is also good when you are just testing one unit to see if it works.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
return {&lt;br /&gt;
		-- The name is shown in the selection interface&lt;br /&gt;
		game = &amp;quot;MyMod&amp;quot;,&lt;br /&gt;
		shortGame = &amp;quot;MM&amp;quot;,&lt;br /&gt;
		name = &amp;quot;My Mod&amp;quot;,&lt;br /&gt;
		shortName = &amp;quot;MM&amp;quot;,&lt;br /&gt;
		version = &amp;quot;4.0&amp;quot;,&lt;br /&gt;
		mutator = &amp;quot;Heroes&amp;quot;,&lt;br /&gt;
		-- These can be shown by the selection interface&lt;br /&gt;
		description = &amp;quot;My Mod That I Made&amp;quot;,&lt;br /&gt;
		url = &amp;quot;http://www.theplacepeoplecangetthelatestversionofyourmod.com&amp;quot;,&lt;br /&gt;
		-- What kind of mod this is &lt;br /&gt;
		--  0 - Hidden (support mod that can&#039;t be selected, such as OTA_textures) &lt;br /&gt;
		--  1 - Normal, only one can be selected at a time &lt;br /&gt;
		--  2 - Addon, any number of these can be selected. Could be used &lt;br /&gt;
		--      for single units for example. &lt;br /&gt;
		--  others - perhaps mutators and addon races that can be &lt;br /&gt;
		--           enabled in addition to xta for example? &lt;br /&gt;
		modtype = &amp;quot;1&amp;quot;,&lt;br /&gt;
		-- Number of other archives this one depends on &lt;br /&gt;
		depend= {&lt;br /&gt;
			taenheter.sdz,&lt;br /&gt;
			springcontent.sdz,&lt;br /&gt;
			otacontent.sdz,&lt;br /&gt;
			tatextures.sdz,&lt;br /&gt;
			-- Number of other archives this one replaces&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Adding Your Unit to an Existing Mod====&lt;br /&gt;
The following is an example of what will be in your modinfo.lua file if you are adding new units to an existing mod (in this case xta_se_v066.sdz), this is good for adding units to the build tree of an existing mod or adding a whole new team.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Description of the mod control file recognized by spring:&lt;br /&gt;
return {&lt;br /&gt;
		-- The name is shown in the selection interface&lt;br /&gt;
		game = &amp;quot;XTASE_MyUnits&amp;quot;,&lt;br /&gt;
		shortGame = &amp;quot;XTASEMU&amp;quot;,&lt;br /&gt;
		name = &amp;quot;XTASEv0.66 with+My Units&amp;quot;,&lt;br /&gt;
		shortName = &amp;quot;XTASEMU&amp;quot;,&lt;br /&gt;
		version = &amp;quot;4.0&amp;quot;,&lt;br /&gt;
		mutator = &amp;quot;Heroes&amp;quot;,&lt;br /&gt;
		-- These can be shown by the selection interface&lt;br /&gt;
		description = &amp;quot;xta_se_v066 with the cool tank I made&amp;quot;,&lt;br /&gt;
		url = &amp;quot;http://www.fileuniverse.com/exactlocationblahblahblah&amp;quot;,&lt;br /&gt;
		-- What kind of mod this is &lt;br /&gt;
		--  0 - Hidden (support mod that can&#039;t be selected, such as OTA_textures) &lt;br /&gt;
		--  1 - Normal, only one can be selected at a time &lt;br /&gt;
		--  2 - Addon, any number of these can be selected. Could be used &lt;br /&gt;
		--      for single units for example. &lt;br /&gt;
		--  others - perhaps mutators and addon races that can be &lt;br /&gt;
		--           enabled in addition to xta for example? &lt;br /&gt;
		modtype = &amp;quot;1&amp;quot;,&lt;br /&gt;
		-- Number of other archives this one depends on &lt;br /&gt;
		depend= {&lt;br /&gt;
			taenheter.sdz,&lt;br /&gt;
			springcontent.sdz,&lt;br /&gt;
			otacontent.sdz,&lt;br /&gt;
			tatextures.sdz,&lt;br /&gt;
			xta_se_v066.sdz,&lt;br /&gt;
			-- Number of other archives this one replaces&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are not depending on OTA files, you will have to supply your own cursors.&lt;br /&gt;
&lt;br /&gt;
There are some extra bits in these examples, but I work on the &amp;quot;better safe than sorry&amp;quot; principle... which is to wait for someone who knows what they are doing to fix my articles. &lt;br /&gt;
&lt;br /&gt;
You will want to save this file as plain text in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/&lt;br /&gt;
&lt;br /&gt;
===armorDefs.lua===&lt;br /&gt;
&lt;br /&gt;
I&#039;m not exactly sure how this works, but the file needs to exist, so either steal one from another mod and modify it... or just make a file that looks like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local armorDefs = {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will want to save this file as a lua file in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/gamedata&lt;br /&gt;
&lt;br /&gt;
===sidedata.lua===&lt;br /&gt;
&lt;br /&gt;
Start by stealing the sidedata.lua file from your dependency mod if you have one, then edit it to include your units/side.&lt;br /&gt;
&lt;br /&gt;
Basically this file is in the form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local sideData = {&lt;br /&gt;
	[1] = {&lt;br /&gt;
		name      = &#039;Good Guys&#039;,&lt;br /&gt;
		startunit = &#039;GG_comm&#039;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are also additional &amp;quot;[X]&amp;quot; entries for each side/team/commander-choice available in the mod-selector you choose.&lt;br /&gt;
&lt;br /&gt;
You will save this file as lua file in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/gamedata/&lt;br /&gt;
&lt;br /&gt;
===moveDefs.lua===&lt;br /&gt;
This file determines the footprint of your units, the angle of slopes they can climb and in how deep water they can drive. It contains several entries, all in the following format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local moveDefs = {&lt;br /&gt;
	KBOT1 = { -- This is the name. Unit files refer to this name.&lt;br /&gt;
		footprintx = 1, -- This is how big the X dimension is of the footprint in Spring units probably?&lt;br /&gt;
		footprintz = 1, -- This is how big the Y dimension is of the footprint in Spring units probably?&lt;br /&gt;
		maxwaterdepth = 15, -- This is how big the Y dimension is of the footprint in Spring units probably?&lt;br /&gt;
		maxslope = 36, -- The maximum angle of slopes this unit can climb.&lt;br /&gt;
		crushstrength = 5, -- This determines if the unit/unit class can crush certain features&lt;br /&gt;
	},&lt;br /&gt;
	-- etc..&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===sounds.lua===&lt;br /&gt;
This file refers to all the sounds your units make, so Spring knows which sound file is linked to what action. It contains entries in the following format.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local Sounds = {&lt;br /&gt;
   SoundItems = {&lt;br /&gt;
      IncomingChat = {&lt;br /&gt;
         file = &amp;quot;sounds/nexuiz/talk.wav&amp;quot;,&lt;br /&gt;
         priority = 15,&lt;br /&gt;
         preload = true,&lt;br /&gt;
      },&lt;br /&gt;
      MultiSelect = {&lt;br /&gt;
         file = &amp;quot;sounds/ota/button9.wav&amp;quot;,&lt;br /&gt;
         priority = 15,&lt;br /&gt;
         preload = true,&lt;br /&gt;
         rolloff = 0.1,&lt;br /&gt;
      },&lt;br /&gt;
      MapPoint = {&lt;br /&gt;
         file = &amp;quot;sounds/bzflag/teamgrab.wav&amp;quot;,&lt;br /&gt;
         priority = 15,&lt;br /&gt;
         preload = true,&lt;br /&gt;
         rolloff = 0.1,&lt;br /&gt;
      },&lt;br /&gt;
      FailedCommand = {&lt;br /&gt;
         file = &amp;quot;sounds/openQuarz/pkup.wav&amp;quot;,&lt;br /&gt;
         gain = 0.75,&lt;br /&gt;
         priority = 15,&lt;br /&gt;
         preload = true,&lt;br /&gt;
         in3d = false,&lt;br /&gt;
      },&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==Step 7:Adding a Build Pic==&lt;br /&gt;
&lt;br /&gt;
Add a 96x96 BMP to your &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/unitpics/ folder named either &amp;quot;UnitName.bmp&amp;quot; or whatever you specified in the &amp;quot;BuildPic=&amp;quot; line of your fbi.&lt;br /&gt;
&lt;br /&gt;
==Step 8:Adding a Side Pic==&lt;br /&gt;
&lt;br /&gt;
Add a 16x16 BMP to your &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/sidepics/ folder named &amp;quot;teamname.bmp&amp;quot; or whatever you specified in the &amp;quot;name=&amp;quot; line of your SIDEDATA.TDF for each side/team you have added.&lt;br /&gt;
&lt;br /&gt;
==Step 9:Scriptor==&lt;br /&gt;
&lt;br /&gt;
===Stealing a Script===&lt;br /&gt;
Open someone else&#039;s script in scriptor that works the way you want your script to work, look at the top where it&#039;s talking about &amp;quot;piece names&amp;quot;... then change those piece names to be the piece names of your unit and do a find/replace to make all the places where those pieces show up to be your pieces too.  Compile it so its name is the same as the &amp;quot;UnitName=&amp;quot; value in your &amp;quot;UnitName.fbi&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
XXreminder to someone to link to a proper scripting tutorial&lt;br /&gt;
&lt;br /&gt;
Put the bos and cob files for your unit script in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/scripts&lt;br /&gt;
&lt;br /&gt;
==Step 10:Compiling Your Mod==&lt;br /&gt;
&lt;br /&gt;
You may want to check your mod directory and make sure it follows the structure defined [[Mod_Development:Archives|here]].&lt;br /&gt;
&lt;br /&gt;
navigate to your &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt; and select everything and choose &amp;quot;add to archive &amp;lt;mod name&amp;gt;.7z&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
make a copy of this file called &amp;lt;mod name&amp;gt;v0.7z in your working directory so you don&#039;t screw anything up later, then make a copy of it called &amp;lt;mod name&amp;gt;.sd7 in the mods directory of spring.&lt;br /&gt;
&lt;br /&gt;
An alternative, added in more recent versions is the &amp;quot;.SDD&amp;quot; folder, to use this, copy the entire &amp;lt;mod name&amp;gt; folder in the mods directory of spring and rename it as &amp;quot;&amp;lt;mod name&amp;gt;.SDD&amp;quot;.  The advantage to the &amp;quot;.SDD&amp;quot; method is that you can tweak settings and add files without recompressing your mod all the time.  When it comes time to distribute your mod use &amp;quot;.sd7&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
EXAMPLES:&lt;br /&gt;
If your mod is called JoesMod you will have a file called &amp;quot;JoesMod.sd7&amp;quot; or a folder called &amp;quot;JoesMod.SDD&amp;quot; in your spring mods directory.&lt;br /&gt;
&lt;br /&gt;
==Step 11:Testing Your Mod==&lt;br /&gt;
Open Up your lobby client, pick your mod from the drop-down list of the games in host battle or singleplayer mode if your lobby supports it(if it doesn&#039;t show up you screwed up your modinfo.txt), choose your tiny map from the map list and press start.  If it doesn&#039;t break and your unit shows up, you have created all the neccessary files... yay!&lt;br /&gt;
&lt;br /&gt;
Gotchas:&lt;br /&gt;
*If it doesn&#039;t work, check you didn&#039;t zip the folder itself, but the contents, ie if you open mymod.sd7 with 7zip, you should see folders such as &amp;quot;unittextures&amp;quot; rather than a folder &amp;quot;mymod&amp;quot; containing unittextures.&lt;br /&gt;
&lt;br /&gt;
[[Category:Mod development]]&lt;/div&gt;</summary>
		<author><name>Sdbryan</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Simple_Game_Tutorial&amp;diff=16866</id>
		<title>Simple Game Tutorial</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Simple_Game_Tutorial&amp;diff=16866"/>
		<updated>2010-06-13T17:08:29Z</updated>

		<summary type="html">&lt;p&gt;Sdbryan: /* SOUND.TDF */ Changed to sound.lua&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Until I Finish [[Mod Development]] is the place to go.&lt;br /&gt;
&lt;br /&gt;
This Tutorial Aims to get a person from knowing nothing about Spring to the point where they can create and edit mods.&lt;br /&gt;
&lt;br /&gt;
Right now I am working from memory so you may want to correct me when I&#039;m wrong, I will try to cross link from my summaries to the appropriate articles available in other places.&lt;br /&gt;
&lt;br /&gt;
I will not go too deep into making 3do&#039;s because they are old and dumb... but I&#039;ll try to make note of the differences here.&lt;br /&gt;
&lt;br /&gt;
I don&#039;t know anything about scripting right now, so that section is likely to be sparse when I write it, I hope that someone will expand on it.&lt;br /&gt;
&lt;br /&gt;
=Book 1: The First Unit=&lt;br /&gt;
&lt;br /&gt;
==Step 1:Planning==&lt;br /&gt;
Who cares about planning, you know what you&#039;re doing... just come up with an idea for a mod... I made a chess set... if you don&#039;t have a real idea and just want to make a model show up in the game... then yeah... this is the place to start... I&#039;d do that if I were you.&lt;br /&gt;
&lt;br /&gt;
Another good thing to do at this point is to creat a &amp;quot;working directory&amp;quot;, and inside it create a directory with the name that your mod will have... after many headaches I decided it&#039;s best to put this in the root directory of your system so it&#039;s really easy to find when you are switching around back and forth between folders and keep having to find your files over and over again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Step 2:Getting The Tools==&lt;br /&gt;
You will need a bunch of stuff... here&#039;s the list (I assume you are using windows)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Want:&#039;&#039;&lt;br /&gt;
*[http://taspring.clan-sy.com/download.php Spring] - The main program, you will likely need this to test if you&#039;ve screwed up&lt;br /&gt;
*A Tiny Map (2x2) - to test your mod fast (suggest [http://www.fileuniverse.com/?p=showitem&amp;amp;ID=2534 Simple Chess Map])&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Need:&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;Program listings can be found here:&#039;&#039;&#039; &#039;&#039;&#039;[http://taspring.clan-sy.com/wiki/Map%2C_Mod%2C_And_Unit_Development_Programs Map, Mod, And Unit Development Programs]&#039;&#039;&#039;&lt;br /&gt;
*3D Modeling Program - &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Notepad - to edit all the miriad of text files&lt;br /&gt;
*A Graphical Editing Program - needs to handle RGBA TGAs (aka tga&#039;s with alpha channels), I suggest Photoshop if you have it, or The GIMP... needed for all of the texture making for UVmapping stuff... &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Upspring 1.3 - To convert your models to the approprite s3o format (if you want to fight with 3do builder, then go ahead... a good trick is to get your model into upspring first and adjust all the hierachy, then save it as an 3do... but why bother?). &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Scriptor - to make and compile your units &amp;quot;animation script&amp;quot;... or steal someone else&#039;s and make it work for your unit. &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Compression Utility - (I suggest [http://www.7-zip.org/ 7zip] - even if you are using zip compression and not 7zip, it&#039;s still good to have)&lt;br /&gt;
&lt;br /&gt;
==Step 3:Making a 3D Model==&lt;br /&gt;
&lt;br /&gt;
Go into your 3D modelling program and make a 3D model, [http://taspring.clan-sy.com/w/images/b/b4/WingsCombine.PNG combine] all the objects and UV map the model, then separate it out into any parts that need to move independently of each other.  Then Export the UV map as an Image File and Export the whole thing as a 3ds file.  Put the original wings file, the UVMap image and the 3ds file into your working directory so you can find them later.&lt;br /&gt;
&lt;br /&gt;
Wings 3D UV Mapping tutorial has been started here - [[Units:CreateModel]]&lt;br /&gt;
&lt;br /&gt;
==Step 4:Fixing Your Images==&lt;br /&gt;
&lt;br /&gt;
[[Basic s3o unit making guide|This Article includes a UVMapping Guide]]&lt;br /&gt;
&lt;br /&gt;
Open up your UVMap in Photoshop (or whatever) go to the layer/chooser thingy and go to the Channels Tab, add a new layer (it should default to alpha) and fill it with 99% black so you can see your texture in upspring.  If you want to can paint the UVmap and put white (1% black) on the alpha channel where you want your team colours to show up (you can use something between 1% and 99% to get a blend of your team colour along with the texture... for example 50% will give you your texture with 50% of the team colour mixed in...)&lt;br /&gt;
&lt;br /&gt;
I don&#039;t know how to do glow maps... XXreminder for someone to create a Glowmapping tutorial... you don&#039;t acctually need one for the model to show up.&lt;br /&gt;
&lt;br /&gt;
Save these images both in the working directory.&lt;br /&gt;
&lt;br /&gt;
Save a copy of these images in tga format into &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/unittextures&lt;br /&gt;
&lt;br /&gt;
==Step 5:Upspring==&lt;br /&gt;
&lt;br /&gt;
===Importing Your 3ds===&lt;br /&gt;
Open Upspring 1.3, go to file&amp;gt;load model and navigate to and open your 3DS model you exported, you should see the model in upspring as a 3d mesh.  Go to the model tab and set the radius and height values to something other then zero... this defines where the health bar will show up, and more importantly, how big the collision sphere will be.&lt;br /&gt;
&lt;br /&gt;
You will also need to use all of the other tools on those tabs to resize and rotate and move your model to the right place... wings makes models that are 90 degrees off and about 30 times smaller than most spring models... make sure you click the &amp;quot;apply transform&amp;quot; button after any changes that you actually want to show up in the game.&lt;br /&gt;
&lt;br /&gt;
Also, you will want to make the hierachy work using the cut, paste, and add empty buttons.  You will need an object called &amp;quot;base&amp;quot; that all the other objects are connected to... the &amp;quot;origin object&amp;quot;... sometimes you get lucky and wings exports it properly... usually not.&lt;br /&gt;
&lt;br /&gt;
===Importing Your UV and Glowmaps===&lt;br /&gt;
&lt;br /&gt;
Go to the textures tab and make your UV/texture/team-colour map as &amp;quot;texture1&amp;quot; and your UV/glow/reflectivity map as &amp;quot;texture2&amp;quot;... it should show up correctly in the preview pane.&lt;br /&gt;
&lt;br /&gt;
===Exporting Your s3o===&lt;br /&gt;
Choose File&amp;gt;Save Model As then in the drop down select &amp;quot;s3o&amp;quot; and type an appropriate name. This model should be saved to your working directory, and a copy of it made to &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/objects3d/&lt;br /&gt;
&lt;br /&gt;
==Step 6:A couple Text Files==&lt;br /&gt;
&lt;br /&gt;
===UnitName.fbi===&lt;br /&gt;
For Reference visit [[Units:FBI]], but again, the easiest way to do this is to extract an existing mod and find the fbi for a unit that behaves similarly to the one you are trying to make and rename and modify it.&lt;br /&gt;
&lt;br /&gt;
Some More Specific Information Not Clear in the &amp;quot;Units:FBI&amp;quot; article:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Name+&amp;quot; &amp;quot;+Description=Spring Display Name&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So if you have the following settings:&lt;br /&gt;
&lt;br /&gt;
 Name=Tiger;&lt;br /&gt;
 Description=Fast Attack C.A.T.;&lt;br /&gt;
&lt;br /&gt;
The Tooltip will show &amp;quot;Tiger Fast Attack C.A.T.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BuildPic Defaults to UnitName.bmp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So if you leave out &amp;quot;BuildPic=filename.bmp;&amp;quot; Spring will look in /unitpics/ for a file called &amp;quot;UnitName.bmp&amp;quot; to use as your buildpic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ObjectName&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you want to use an s3o object, you will need to specify with &amp;quot;ObjectName=UnitName&#039;&#039;&#039;.S3O;&#039;&#039;&#039;&amp;quot; otherwise it will look for &amp;quot;UnitName.3do&amp;quot;.  Also, you don&#039;t have to use &amp;quot;UnitName&amp;quot; as the filename and, in fact, multiple Unit&#039;s fbi files can reference the same 3D models. It is easier, however, for people to figure out what you are doing in your mod if you follow the standards.&lt;br /&gt;
&lt;br /&gt;
Save this file as plain text in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/units/&lt;br /&gt;
&lt;br /&gt;
===modinfo.lua===&lt;br /&gt;
&lt;br /&gt;
modinfo.lua is a lua file that defines a number of things that are used when loading a mod, most of the information is self explanitory but basically what you are doing is defining what is going to show up in whatever mod-selection interface you use as well as what other files need to be loaded into memory in order for your mod to work.&lt;br /&gt;
&lt;br /&gt;
====Making a New Mod with your unit/units====&lt;br /&gt;
The following is an example of what will be in your modinfo.lua file if you are starting from scratch and making your own mod. This is also good when you are just testing one unit to see if it works.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
return {&lt;br /&gt;
		-- The name is shown in the selection interface&lt;br /&gt;
		game = &amp;quot;MyMod&amp;quot;,&lt;br /&gt;
		shortGame = &amp;quot;MM&amp;quot;,&lt;br /&gt;
		name = &amp;quot;My Mod&amp;quot;,&lt;br /&gt;
		shortName = &amp;quot;MM&amp;quot;,&lt;br /&gt;
		version = &amp;quot;4.0&amp;quot;,&lt;br /&gt;
		mutator = &amp;quot;Heroes&amp;quot;,&lt;br /&gt;
		-- These can be shown by the selection interface&lt;br /&gt;
		description = &amp;quot;My Mod That I Made&amp;quot;,&lt;br /&gt;
		url = &amp;quot;http://www.theplacepeoplecangetthelatestversionofyourmod.com&amp;quot;,&lt;br /&gt;
		-- What kind of mod this is &lt;br /&gt;
		--  0 - Hidden (support mod that can&#039;t be selected, such as OTA_textures) &lt;br /&gt;
		--  1 - Normal, only one can be selected at a time &lt;br /&gt;
		--  2 - Addon, any number of these can be selected. Could be used &lt;br /&gt;
		--      for single units for example. &lt;br /&gt;
		--  others - perhaps mutators and addon races that can be &lt;br /&gt;
		--           enabled in addition to xta for example? &lt;br /&gt;
		modtype = &amp;quot;1&amp;quot;,&lt;br /&gt;
		-- Number of other archives this one depends on &lt;br /&gt;
		depend= {&lt;br /&gt;
			taenheter.sdz,&lt;br /&gt;
			springcontent.sdz,&lt;br /&gt;
			otacontent.sdz,&lt;br /&gt;
			tatextures.sdz,&lt;br /&gt;
			-- Number of other archives this one replaces&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Adding Your Unit to an Existing Mod====&lt;br /&gt;
The following is an example of what will be in your modinfo.lua file if you are adding new units to an existing mod (in this case xta_se_v066.sdz), this is good for adding units to the build tree of an existing mod or adding a whole new team.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Description of the mod control file recognized by spring:&lt;br /&gt;
return {&lt;br /&gt;
		-- The name is shown in the selection interface&lt;br /&gt;
		game = &amp;quot;XTASE_MyUnits&amp;quot;,&lt;br /&gt;
		shortGame = &amp;quot;XTASEMU&amp;quot;,&lt;br /&gt;
		name = &amp;quot;XTASEv0.66 with+My Units&amp;quot;,&lt;br /&gt;
		shortName = &amp;quot;XTASEMU&amp;quot;,&lt;br /&gt;
		version = &amp;quot;4.0&amp;quot;,&lt;br /&gt;
		mutator = &amp;quot;Heroes&amp;quot;,&lt;br /&gt;
		-- These can be shown by the selection interface&lt;br /&gt;
		description = &amp;quot;xta_se_v066 with the cool tank I made&amp;quot;,&lt;br /&gt;
		url = &amp;quot;http://www.fileuniverse.com/exactlocationblahblahblah&amp;quot;,&lt;br /&gt;
		-- What kind of mod this is &lt;br /&gt;
		--  0 - Hidden (support mod that can&#039;t be selected, such as OTA_textures) &lt;br /&gt;
		--  1 - Normal, only one can be selected at a time &lt;br /&gt;
		--  2 - Addon, any number of these can be selected. Could be used &lt;br /&gt;
		--      for single units for example. &lt;br /&gt;
		--  others - perhaps mutators and addon races that can be &lt;br /&gt;
		--           enabled in addition to xta for example? &lt;br /&gt;
		modtype = &amp;quot;1&amp;quot;,&lt;br /&gt;
		-- Number of other archives this one depends on &lt;br /&gt;
		depend= {&lt;br /&gt;
			taenheter.sdz,&lt;br /&gt;
			springcontent.sdz,&lt;br /&gt;
			otacontent.sdz,&lt;br /&gt;
			tatextures.sdz,&lt;br /&gt;
			xta_se_v066.sdz,&lt;br /&gt;
			-- Number of other archives this one replaces&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are not depending on OTA files, you will have to supply your own cursors.&lt;br /&gt;
&lt;br /&gt;
There are some extra bits in these examples, but I work on the &amp;quot;better safe than sorry&amp;quot; principle... which is to wait for someone who knows what they are doing to fix my articles. &lt;br /&gt;
&lt;br /&gt;
You will want to save this file as plain text in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/&lt;br /&gt;
&lt;br /&gt;
===armorDefs.lua===&lt;br /&gt;
&lt;br /&gt;
I&#039;m not exactly sure how this works, but the file needs to exist, so either steal one from another mod and modify it... or just make a file that looks like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local armorDefs = {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will want to save this file as a lua file in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/gamedata&lt;br /&gt;
&lt;br /&gt;
===sidedata.lua===&lt;br /&gt;
&lt;br /&gt;
Start by stealing the sidedata.lua file from your dependency mod if you have one, then edit it to include your units/side.&lt;br /&gt;
&lt;br /&gt;
Basically this file is in the form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local sideData = {&lt;br /&gt;
	[1] = {&lt;br /&gt;
		name      = &#039;Good Guys&#039;,&lt;br /&gt;
		startunit = &#039;GG_comm&#039;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are also additional &amp;quot;[X]&amp;quot; entries for each side/team/commander-choice available in the mod-selector you choose.&lt;br /&gt;
&lt;br /&gt;
You will save this file as lua file in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/gamedata/&lt;br /&gt;
&lt;br /&gt;
===moveDefs.lua===&lt;br /&gt;
This file determines the footprint of your units, the angle of slopes they can climb and in how deep water they can drive. It contains several entries, all in the following format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local moveDefs = {&lt;br /&gt;
	KBOT1 = { -- This is the name. Unit files refer to this name.&lt;br /&gt;
		footprintx = 1, -- This is how big the X dimension is of the footprint in Spring units probably?&lt;br /&gt;
		footprintz = 1, -- This is how big the Y dimension is of the footprint in Spring units probably?&lt;br /&gt;
		maxwaterdepth = 15, -- This is how big the Y dimension is of the footprint in Spring units probably?&lt;br /&gt;
		maxslope = 36, -- The maximum angle of slopes this unit can climb.&lt;br /&gt;
		crushstrength = 5, -- This determines if the unit/unit class can crush certain features&lt;br /&gt;
	},&lt;br /&gt;
	-- etc..&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===sounds.lua===&lt;br /&gt;
This file refers to all the sounds your units make, so Spring knows which sound file is linked to what action. It contains entries in the following format.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local Sounds = {&lt;br /&gt;
   SoundItems = {&lt;br /&gt;
      IncomingChat = {&lt;br /&gt;
         file = &amp;quot;sounds/nexuiz/talk.wav&amp;quot;,&lt;br /&gt;
         priority = 15,&lt;br /&gt;
         preload = true,&lt;br /&gt;
      },&lt;br /&gt;
      MultiSelect = {&lt;br /&gt;
         file = &amp;quot;sounds/ota/button9.wav&amp;quot;,&lt;br /&gt;
         priority = 15,&lt;br /&gt;
         preload = true,&lt;br /&gt;
         rolloff = 0.1,&lt;br /&gt;
      },&lt;br /&gt;
      MapPoint = {&lt;br /&gt;
         file = &amp;quot;sounds/bzflag/teamgrab.wav&amp;quot;,&lt;br /&gt;
         priority = 15,&lt;br /&gt;
         preload = true,&lt;br /&gt;
         rolloff = 0.1,&lt;br /&gt;
      },&lt;br /&gt;
      FailedCommand = {&lt;br /&gt;
         file = &amp;quot;sounds/openQuarz/pkup.wav&amp;quot;,&lt;br /&gt;
         gain = 0.75,&lt;br /&gt;
         priority = 15,&lt;br /&gt;
         preload = true,&lt;br /&gt;
         in3d = false,&lt;br /&gt;
      },&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==Step 7:Adding a Build Pic==&lt;br /&gt;
&lt;br /&gt;
Add a 96x96 BMP to your &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/unitpics/ folder named either &amp;quot;UnitName.bmp&amp;quot; or whatever you specified in the &amp;quot;BuildPic=&amp;quot; line of your fbi.&lt;br /&gt;
&lt;br /&gt;
==Step 8:Adding a Side Pic==&lt;br /&gt;
&lt;br /&gt;
Add a 16x16 BMP to your &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/sidepics/ folder named &amp;quot;teamname.bmp&amp;quot; or whatever you specified in the &amp;quot;name=&amp;quot; line of your SIDEDATA.TDF for each side/team you have added.&lt;br /&gt;
&lt;br /&gt;
==Step 9:Scriptor==&lt;br /&gt;
&lt;br /&gt;
===Stealing a Script===&lt;br /&gt;
Open someone else&#039;s script in scriptor that works the way you want your script to work, look at the top where it&#039;s talking about &amp;quot;piece names&amp;quot;... then change those piece names to be the piece names of your unit and do a find/replace to make all the places where those pieces show up to be your pieces too.  Compile it so its name is the same as the &amp;quot;UnitName=&amp;quot; value in your &amp;quot;UnitName.fbi&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
XXreminder to someone to link to a proper scripting tutorial&lt;br /&gt;
&lt;br /&gt;
Put the bos and cob files for your unit script in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/scripts&lt;br /&gt;
&lt;br /&gt;
==Step 10:Compiling Your Mod==&lt;br /&gt;
&lt;br /&gt;
You may want to check your mod directory and make sure it follows the structure defined [[Mod_Development:Archives|here]].&lt;br /&gt;
&lt;br /&gt;
navigate to your &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt; and select everything and choose &amp;quot;add to archive &amp;lt;mod name&amp;gt;.7z&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
make a copy of this file called &amp;lt;mod name&amp;gt;v0.7z in your working directory so you don&#039;t screw anything up later, then make a copy of it called &amp;lt;mod name&amp;gt;.sd7 in the mods directory of spring.&lt;br /&gt;
&lt;br /&gt;
An alternative, added in more recent versions is the &amp;quot;.SDD&amp;quot; folder, to use this, copy the entire &amp;lt;mod name&amp;gt; folder in the mods directory of spring and rename it as &amp;quot;&amp;lt;mod name&amp;gt;.SDD&amp;quot;.  The advantage to the &amp;quot;.SDD&amp;quot; method is that you can tweak settings and add files without recompressing your mod all the time.  When it comes time to distribute your mod use &amp;quot;.sd7&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
EXAMPLES:&lt;br /&gt;
If your mod is called JoesMod you will have a file called &amp;quot;JoesMod.sd7&amp;quot; or a folder called &amp;quot;JoesMod.SDD&amp;quot; in your spring mods directory.&lt;br /&gt;
&lt;br /&gt;
==Step 11:Testing Your Mod==&lt;br /&gt;
Open Up your lobby client, pick your mod from the drop-down list of the games in host battle or singleplayer mode if your lobby supports it(if it doesn&#039;t show up you screwed up your modinfo.txt), choose your tiny map from the map list and press start.  If it doesn&#039;t break and your unit shows up, you have created all the neccessary files... yay!&lt;br /&gt;
&lt;br /&gt;
Gotchas:&lt;br /&gt;
*If it doesn&#039;t work, check you didn&#039;t zip the folder itself, but the contents, ie if you open mymod.sd7 with 7zip, you should see folders such as &amp;quot;unittextures&amp;quot; rather than a folder &amp;quot;mymod&amp;quot; containing unittextures.&lt;br /&gt;
&lt;br /&gt;
[[Category:Mod development]]&lt;/div&gt;</summary>
		<author><name>Sdbryan</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Simple_Game_Tutorial&amp;diff=16865</id>
		<title>Simple Game Tutorial</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Simple_Game_Tutorial&amp;diff=16865"/>
		<updated>2010-06-13T17:01:01Z</updated>

		<summary type="html">&lt;p&gt;Sdbryan: /* MOVEDATA.TDF */ Changed to moveDefs.lua&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Until I Finish [[Mod Development]] is the place to go.&lt;br /&gt;
&lt;br /&gt;
This Tutorial Aims to get a person from knowing nothing about Spring to the point where they can create and edit mods.&lt;br /&gt;
&lt;br /&gt;
Right now I am working from memory so you may want to correct me when I&#039;m wrong, I will try to cross link from my summaries to the appropriate articles available in other places.&lt;br /&gt;
&lt;br /&gt;
I will not go too deep into making 3do&#039;s because they are old and dumb... but I&#039;ll try to make note of the differences here.&lt;br /&gt;
&lt;br /&gt;
I don&#039;t know anything about scripting right now, so that section is likely to be sparse when I write it, I hope that someone will expand on it.&lt;br /&gt;
&lt;br /&gt;
=Book 1: The First Unit=&lt;br /&gt;
&lt;br /&gt;
==Step 1:Planning==&lt;br /&gt;
Who cares about planning, you know what you&#039;re doing... just come up with an idea for a mod... I made a chess set... if you don&#039;t have a real idea and just want to make a model show up in the game... then yeah... this is the place to start... I&#039;d do that if I were you.&lt;br /&gt;
&lt;br /&gt;
Another good thing to do at this point is to creat a &amp;quot;working directory&amp;quot;, and inside it create a directory with the name that your mod will have... after many headaches I decided it&#039;s best to put this in the root directory of your system so it&#039;s really easy to find when you are switching around back and forth between folders and keep having to find your files over and over again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Step 2:Getting The Tools==&lt;br /&gt;
You will need a bunch of stuff... here&#039;s the list (I assume you are using windows)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Want:&#039;&#039;&lt;br /&gt;
*[http://taspring.clan-sy.com/download.php Spring] - The main program, you will likely need this to test if you&#039;ve screwed up&lt;br /&gt;
*A Tiny Map (2x2) - to test your mod fast (suggest [http://www.fileuniverse.com/?p=showitem&amp;amp;ID=2534 Simple Chess Map])&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Need:&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;Program listings can be found here:&#039;&#039;&#039; &#039;&#039;&#039;[http://taspring.clan-sy.com/wiki/Map%2C_Mod%2C_And_Unit_Development_Programs Map, Mod, And Unit Development Programs]&#039;&#039;&#039;&lt;br /&gt;
*3D Modeling Program - &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Notepad - to edit all the miriad of text files&lt;br /&gt;
*A Graphical Editing Program - needs to handle RGBA TGAs (aka tga&#039;s with alpha channels), I suggest Photoshop if you have it, or The GIMP... needed for all of the texture making for UVmapping stuff... &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Upspring 1.3 - To convert your models to the approprite s3o format (if you want to fight with 3do builder, then go ahead... a good trick is to get your model into upspring first and adjust all the hierachy, then save it as an 3do... but why bother?). &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Scriptor - to make and compile your units &amp;quot;animation script&amp;quot;... or steal someone else&#039;s and make it work for your unit. &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Compression Utility - (I suggest [http://www.7-zip.org/ 7zip] - even if you are using zip compression and not 7zip, it&#039;s still good to have)&lt;br /&gt;
&lt;br /&gt;
==Step 3:Making a 3D Model==&lt;br /&gt;
&lt;br /&gt;
Go into your 3D modelling program and make a 3D model, [http://taspring.clan-sy.com/w/images/b/b4/WingsCombine.PNG combine] all the objects and UV map the model, then separate it out into any parts that need to move independently of each other.  Then Export the UV map as an Image File and Export the whole thing as a 3ds file.  Put the original wings file, the UVMap image and the 3ds file into your working directory so you can find them later.&lt;br /&gt;
&lt;br /&gt;
Wings 3D UV Mapping tutorial has been started here - [[Units:CreateModel]]&lt;br /&gt;
&lt;br /&gt;
==Step 4:Fixing Your Images==&lt;br /&gt;
&lt;br /&gt;
[[Basic s3o unit making guide|This Article includes a UVMapping Guide]]&lt;br /&gt;
&lt;br /&gt;
Open up your UVMap in Photoshop (or whatever) go to the layer/chooser thingy and go to the Channels Tab, add a new layer (it should default to alpha) and fill it with 99% black so you can see your texture in upspring.  If you want to can paint the UVmap and put white (1% black) on the alpha channel where you want your team colours to show up (you can use something between 1% and 99% to get a blend of your team colour along with the texture... for example 50% will give you your texture with 50% of the team colour mixed in...)&lt;br /&gt;
&lt;br /&gt;
I don&#039;t know how to do glow maps... XXreminder for someone to create a Glowmapping tutorial... you don&#039;t acctually need one for the model to show up.&lt;br /&gt;
&lt;br /&gt;
Save these images both in the working directory.&lt;br /&gt;
&lt;br /&gt;
Save a copy of these images in tga format into &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/unittextures&lt;br /&gt;
&lt;br /&gt;
==Step 5:Upspring==&lt;br /&gt;
&lt;br /&gt;
===Importing Your 3ds===&lt;br /&gt;
Open Upspring 1.3, go to file&amp;gt;load model and navigate to and open your 3DS model you exported, you should see the model in upspring as a 3d mesh.  Go to the model tab and set the radius and height values to something other then zero... this defines where the health bar will show up, and more importantly, how big the collision sphere will be.&lt;br /&gt;
&lt;br /&gt;
You will also need to use all of the other tools on those tabs to resize and rotate and move your model to the right place... wings makes models that are 90 degrees off and about 30 times smaller than most spring models... make sure you click the &amp;quot;apply transform&amp;quot; button after any changes that you actually want to show up in the game.&lt;br /&gt;
&lt;br /&gt;
Also, you will want to make the hierachy work using the cut, paste, and add empty buttons.  You will need an object called &amp;quot;base&amp;quot; that all the other objects are connected to... the &amp;quot;origin object&amp;quot;... sometimes you get lucky and wings exports it properly... usually not.&lt;br /&gt;
&lt;br /&gt;
===Importing Your UV and Glowmaps===&lt;br /&gt;
&lt;br /&gt;
Go to the textures tab and make your UV/texture/team-colour map as &amp;quot;texture1&amp;quot; and your UV/glow/reflectivity map as &amp;quot;texture2&amp;quot;... it should show up correctly in the preview pane.&lt;br /&gt;
&lt;br /&gt;
===Exporting Your s3o===&lt;br /&gt;
Choose File&amp;gt;Save Model As then in the drop down select &amp;quot;s3o&amp;quot; and type an appropriate name. This model should be saved to your working directory, and a copy of it made to &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/objects3d/&lt;br /&gt;
&lt;br /&gt;
==Step 6:A couple Text Files==&lt;br /&gt;
&lt;br /&gt;
===UnitName.fbi===&lt;br /&gt;
For Reference visit [[Units:FBI]], but again, the easiest way to do this is to extract an existing mod and find the fbi for a unit that behaves similarly to the one you are trying to make and rename and modify it.&lt;br /&gt;
&lt;br /&gt;
Some More Specific Information Not Clear in the &amp;quot;Units:FBI&amp;quot; article:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Name+&amp;quot; &amp;quot;+Description=Spring Display Name&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So if you have the following settings:&lt;br /&gt;
&lt;br /&gt;
 Name=Tiger;&lt;br /&gt;
 Description=Fast Attack C.A.T.;&lt;br /&gt;
&lt;br /&gt;
The Tooltip will show &amp;quot;Tiger Fast Attack C.A.T.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BuildPic Defaults to UnitName.bmp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So if you leave out &amp;quot;BuildPic=filename.bmp;&amp;quot; Spring will look in /unitpics/ for a file called &amp;quot;UnitName.bmp&amp;quot; to use as your buildpic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ObjectName&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you want to use an s3o object, you will need to specify with &amp;quot;ObjectName=UnitName&#039;&#039;&#039;.S3O;&#039;&#039;&#039;&amp;quot; otherwise it will look for &amp;quot;UnitName.3do&amp;quot;.  Also, you don&#039;t have to use &amp;quot;UnitName&amp;quot; as the filename and, in fact, multiple Unit&#039;s fbi files can reference the same 3D models. It is easier, however, for people to figure out what you are doing in your mod if you follow the standards.&lt;br /&gt;
&lt;br /&gt;
Save this file as plain text in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/units/&lt;br /&gt;
&lt;br /&gt;
===modinfo.lua===&lt;br /&gt;
&lt;br /&gt;
modinfo.lua is a lua file that defines a number of things that are used when loading a mod, most of the information is self explanitory but basically what you are doing is defining what is going to show up in whatever mod-selection interface you use as well as what other files need to be loaded into memory in order for your mod to work.&lt;br /&gt;
&lt;br /&gt;
====Making a New Mod with your unit/units====&lt;br /&gt;
The following is an example of what will be in your modinfo.lua file if you are starting from scratch and making your own mod. This is also good when you are just testing one unit to see if it works.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
return {&lt;br /&gt;
		-- The name is shown in the selection interface&lt;br /&gt;
		game = &amp;quot;MyMod&amp;quot;,&lt;br /&gt;
		shortGame = &amp;quot;MM&amp;quot;,&lt;br /&gt;
		name = &amp;quot;My Mod&amp;quot;,&lt;br /&gt;
		shortName = &amp;quot;MM&amp;quot;,&lt;br /&gt;
		version = &amp;quot;4.0&amp;quot;,&lt;br /&gt;
		mutator = &amp;quot;Heroes&amp;quot;,&lt;br /&gt;
		-- These can be shown by the selection interface&lt;br /&gt;
		description = &amp;quot;My Mod That I Made&amp;quot;,&lt;br /&gt;
		url = &amp;quot;http://www.theplacepeoplecangetthelatestversionofyourmod.com&amp;quot;,&lt;br /&gt;
		-- What kind of mod this is &lt;br /&gt;
		--  0 - Hidden (support mod that can&#039;t be selected, such as OTA_textures) &lt;br /&gt;
		--  1 - Normal, only one can be selected at a time &lt;br /&gt;
		--  2 - Addon, any number of these can be selected. Could be used &lt;br /&gt;
		--      for single units for example. &lt;br /&gt;
		--  others - perhaps mutators and addon races that can be &lt;br /&gt;
		--           enabled in addition to xta for example? &lt;br /&gt;
		modtype = &amp;quot;1&amp;quot;,&lt;br /&gt;
		-- Number of other archives this one depends on &lt;br /&gt;
		depend= {&lt;br /&gt;
			taenheter.sdz,&lt;br /&gt;
			springcontent.sdz,&lt;br /&gt;
			otacontent.sdz,&lt;br /&gt;
			tatextures.sdz,&lt;br /&gt;
			-- Number of other archives this one replaces&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Adding Your Unit to an Existing Mod====&lt;br /&gt;
The following is an example of what will be in your modinfo.lua file if you are adding new units to an existing mod (in this case xta_se_v066.sdz), this is good for adding units to the build tree of an existing mod or adding a whole new team.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Description of the mod control file recognized by spring:&lt;br /&gt;
return {&lt;br /&gt;
		-- The name is shown in the selection interface&lt;br /&gt;
		game = &amp;quot;XTASE_MyUnits&amp;quot;,&lt;br /&gt;
		shortGame = &amp;quot;XTASEMU&amp;quot;,&lt;br /&gt;
		name = &amp;quot;XTASEv0.66 with+My Units&amp;quot;,&lt;br /&gt;
		shortName = &amp;quot;XTASEMU&amp;quot;,&lt;br /&gt;
		version = &amp;quot;4.0&amp;quot;,&lt;br /&gt;
		mutator = &amp;quot;Heroes&amp;quot;,&lt;br /&gt;
		-- These can be shown by the selection interface&lt;br /&gt;
		description = &amp;quot;xta_se_v066 with the cool tank I made&amp;quot;,&lt;br /&gt;
		url = &amp;quot;http://www.fileuniverse.com/exactlocationblahblahblah&amp;quot;,&lt;br /&gt;
		-- What kind of mod this is &lt;br /&gt;
		--  0 - Hidden (support mod that can&#039;t be selected, such as OTA_textures) &lt;br /&gt;
		--  1 - Normal, only one can be selected at a time &lt;br /&gt;
		--  2 - Addon, any number of these can be selected. Could be used &lt;br /&gt;
		--      for single units for example. &lt;br /&gt;
		--  others - perhaps mutators and addon races that can be &lt;br /&gt;
		--           enabled in addition to xta for example? &lt;br /&gt;
		modtype = &amp;quot;1&amp;quot;,&lt;br /&gt;
		-- Number of other archives this one depends on &lt;br /&gt;
		depend= {&lt;br /&gt;
			taenheter.sdz,&lt;br /&gt;
			springcontent.sdz,&lt;br /&gt;
			otacontent.sdz,&lt;br /&gt;
			tatextures.sdz,&lt;br /&gt;
			xta_se_v066.sdz,&lt;br /&gt;
			-- Number of other archives this one replaces&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are not depending on OTA files, you will have to supply your own cursors.&lt;br /&gt;
&lt;br /&gt;
There are some extra bits in these examples, but I work on the &amp;quot;better safe than sorry&amp;quot; principle... which is to wait for someone who knows what they are doing to fix my articles. &lt;br /&gt;
&lt;br /&gt;
You will want to save this file as plain text in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/&lt;br /&gt;
&lt;br /&gt;
===armorDefs.lua===&lt;br /&gt;
&lt;br /&gt;
I&#039;m not exactly sure how this works, but the file needs to exist, so either steal one from another mod and modify it... or just make a file that looks like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local armorDefs = {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will want to save this file as a lua file in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/gamedata&lt;br /&gt;
&lt;br /&gt;
===sidedata.lua===&lt;br /&gt;
&lt;br /&gt;
Start by stealing the sidedata.lua file from your dependency mod if you have one, then edit it to include your units/side.&lt;br /&gt;
&lt;br /&gt;
Basically this file is in the form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local sideData = {&lt;br /&gt;
	[1] = {&lt;br /&gt;
		name      = &#039;Good Guys&#039;,&lt;br /&gt;
		startunit = &#039;GG_comm&#039;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are also additional &amp;quot;[X]&amp;quot; entries for each side/team/commander-choice available in the mod-selector you choose.&lt;br /&gt;
&lt;br /&gt;
You will save this file as lua file in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/gamedata/&lt;br /&gt;
&lt;br /&gt;
===moveDefs.lua===&lt;br /&gt;
This file determines the footprint of your units, the angle of slopes they can climb and in how deep water they can drive. It contains several entries, all in the following format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local moveDefs = {&lt;br /&gt;
	KBOT1 = { -- This is the name. Unit files refer to this name.&lt;br /&gt;
		footprintx = 1, -- This is how big the X dimension is of the footprint in Spring units probably?&lt;br /&gt;
		footprintz = 1, -- This is how big the Y dimension is of the footprint in Spring units probably?&lt;br /&gt;
		maxwaterdepth = 15, -- This is how big the Y dimension is of the footprint in Spring units probably?&lt;br /&gt;
		maxslope = 36, -- The maximum angle of slopes this unit can climb.&lt;br /&gt;
		crushstrength = 5, -- This determines if the unit/unit class can crush certain features&lt;br /&gt;
	},&lt;br /&gt;
	-- etc..&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===SOUND.TDF===&lt;br /&gt;
This file refers to all the sounds your units make, so Spring knows which sound file is linked to what action. It contains entries in the following format.&lt;br /&gt;
[NAME] (The name of the unit class)&lt;br /&gt;
{&lt;br /&gt;
There are lots of different entries, I will list only the basic ones here for now.&lt;br /&gt;
select1=sound; (This entry determines what sound a unit makes if you click on it.&lt;br /&gt;
ok1=sound; (This entry determines what sound a unit makes if it does an action.&lt;br /&gt;
cant1=sound; (&amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; if it can&#039;t do an action.)&lt;br /&gt;
underattack=sound; (&amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; if it is attacked)&lt;br /&gt;
count5-count0=sound; (These 6 entries determine how the self-destruct countdown times sounds like.&lt;br /&gt;
canceldestruct=sound; (A unit makes this sound if you cancel the self-destruct procedure)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==Step 7:Adding a Build Pic==&lt;br /&gt;
&lt;br /&gt;
Add a 96x96 BMP to your &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/unitpics/ folder named either &amp;quot;UnitName.bmp&amp;quot; or whatever you specified in the &amp;quot;BuildPic=&amp;quot; line of your fbi.&lt;br /&gt;
&lt;br /&gt;
==Step 8:Adding a Side Pic==&lt;br /&gt;
&lt;br /&gt;
Add a 16x16 BMP to your &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/sidepics/ folder named &amp;quot;teamname.bmp&amp;quot; or whatever you specified in the &amp;quot;name=&amp;quot; line of your SIDEDATA.TDF for each side/team you have added.&lt;br /&gt;
&lt;br /&gt;
==Step 9:Scriptor==&lt;br /&gt;
&lt;br /&gt;
===Stealing a Script===&lt;br /&gt;
Open someone else&#039;s script in scriptor that works the way you want your script to work, look at the top where it&#039;s talking about &amp;quot;piece names&amp;quot;... then change those piece names to be the piece names of your unit and do a find/replace to make all the places where those pieces show up to be your pieces too.  Compile it so its name is the same as the &amp;quot;UnitName=&amp;quot; value in your &amp;quot;UnitName.fbi&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
XXreminder to someone to link to a proper scripting tutorial&lt;br /&gt;
&lt;br /&gt;
Put the bos and cob files for your unit script in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/scripts&lt;br /&gt;
&lt;br /&gt;
==Step 10:Compiling Your Mod==&lt;br /&gt;
&lt;br /&gt;
You may want to check your mod directory and make sure it follows the structure defined [[Mod_Development:Archives|here]].&lt;br /&gt;
&lt;br /&gt;
navigate to your &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt; and select everything and choose &amp;quot;add to archive &amp;lt;mod name&amp;gt;.7z&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
make a copy of this file called &amp;lt;mod name&amp;gt;v0.7z in your working directory so you don&#039;t screw anything up later, then make a copy of it called &amp;lt;mod name&amp;gt;.sd7 in the mods directory of spring.&lt;br /&gt;
&lt;br /&gt;
An alternative, added in more recent versions is the &amp;quot;.SDD&amp;quot; folder, to use this, copy the entire &amp;lt;mod name&amp;gt; folder in the mods directory of spring and rename it as &amp;quot;&amp;lt;mod name&amp;gt;.SDD&amp;quot;.  The advantage to the &amp;quot;.SDD&amp;quot; method is that you can tweak settings and add files without recompressing your mod all the time.  When it comes time to distribute your mod use &amp;quot;.sd7&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
EXAMPLES:&lt;br /&gt;
If your mod is called JoesMod you will have a file called &amp;quot;JoesMod.sd7&amp;quot; or a folder called &amp;quot;JoesMod.SDD&amp;quot; in your spring mods directory.&lt;br /&gt;
&lt;br /&gt;
==Step 11:Testing Your Mod==&lt;br /&gt;
Open Up your lobby client, pick your mod from the drop-down list of the games in host battle or singleplayer mode if your lobby supports it(if it doesn&#039;t show up you screwed up your modinfo.txt), choose your tiny map from the map list and press start.  If it doesn&#039;t break and your unit shows up, you have created all the neccessary files... yay!&lt;br /&gt;
&lt;br /&gt;
Gotchas:&lt;br /&gt;
*If it doesn&#039;t work, check you didn&#039;t zip the folder itself, but the contents, ie if you open mymod.sd7 with 7zip, you should see folders such as &amp;quot;unittextures&amp;quot; rather than a folder &amp;quot;mymod&amp;quot; containing unittextures.&lt;br /&gt;
&lt;br /&gt;
[[Category:Mod development]]&lt;/div&gt;</summary>
		<author><name>Sdbryan</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Simple_Game_Tutorial&amp;diff=16864</id>
		<title>Simple Game Tutorial</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Simple_Game_Tutorial&amp;diff=16864"/>
		<updated>2010-06-13T16:54:42Z</updated>

		<summary type="html">&lt;p&gt;Sdbryan: /* SIDEDATA.TDF */ Changed to sidedata.lua&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Until I Finish [[Mod Development]] is the place to go.&lt;br /&gt;
&lt;br /&gt;
This Tutorial Aims to get a person from knowing nothing about Spring to the point where they can create and edit mods.&lt;br /&gt;
&lt;br /&gt;
Right now I am working from memory so you may want to correct me when I&#039;m wrong, I will try to cross link from my summaries to the appropriate articles available in other places.&lt;br /&gt;
&lt;br /&gt;
I will not go too deep into making 3do&#039;s because they are old and dumb... but I&#039;ll try to make note of the differences here.&lt;br /&gt;
&lt;br /&gt;
I don&#039;t know anything about scripting right now, so that section is likely to be sparse when I write it, I hope that someone will expand on it.&lt;br /&gt;
&lt;br /&gt;
=Book 1: The First Unit=&lt;br /&gt;
&lt;br /&gt;
==Step 1:Planning==&lt;br /&gt;
Who cares about planning, you know what you&#039;re doing... just come up with an idea for a mod... I made a chess set... if you don&#039;t have a real idea and just want to make a model show up in the game... then yeah... this is the place to start... I&#039;d do that if I were you.&lt;br /&gt;
&lt;br /&gt;
Another good thing to do at this point is to creat a &amp;quot;working directory&amp;quot;, and inside it create a directory with the name that your mod will have... after many headaches I decided it&#039;s best to put this in the root directory of your system so it&#039;s really easy to find when you are switching around back and forth between folders and keep having to find your files over and over again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Step 2:Getting The Tools==&lt;br /&gt;
You will need a bunch of stuff... here&#039;s the list (I assume you are using windows)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Want:&#039;&#039;&lt;br /&gt;
*[http://taspring.clan-sy.com/download.php Spring] - The main program, you will likely need this to test if you&#039;ve screwed up&lt;br /&gt;
*A Tiny Map (2x2) - to test your mod fast (suggest [http://www.fileuniverse.com/?p=showitem&amp;amp;ID=2534 Simple Chess Map])&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Need:&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;Program listings can be found here:&#039;&#039;&#039; &#039;&#039;&#039;[http://taspring.clan-sy.com/wiki/Map%2C_Mod%2C_And_Unit_Development_Programs Map, Mod, And Unit Development Programs]&#039;&#039;&#039;&lt;br /&gt;
*3D Modeling Program - &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Notepad - to edit all the miriad of text files&lt;br /&gt;
*A Graphical Editing Program - needs to handle RGBA TGAs (aka tga&#039;s with alpha channels), I suggest Photoshop if you have it, or The GIMP... needed for all of the texture making for UVmapping stuff... &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Upspring 1.3 - To convert your models to the approprite s3o format (if you want to fight with 3do builder, then go ahead... a good trick is to get your model into upspring first and adjust all the hierachy, then save it as an 3do... but why bother?). &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Scriptor - to make and compile your units &amp;quot;animation script&amp;quot;... or steal someone else&#039;s and make it work for your unit. &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Compression Utility - (I suggest [http://www.7-zip.org/ 7zip] - even if you are using zip compression and not 7zip, it&#039;s still good to have)&lt;br /&gt;
&lt;br /&gt;
==Step 3:Making a 3D Model==&lt;br /&gt;
&lt;br /&gt;
Go into your 3D modelling program and make a 3D model, [http://taspring.clan-sy.com/w/images/b/b4/WingsCombine.PNG combine] all the objects and UV map the model, then separate it out into any parts that need to move independently of each other.  Then Export the UV map as an Image File and Export the whole thing as a 3ds file.  Put the original wings file, the UVMap image and the 3ds file into your working directory so you can find them later.&lt;br /&gt;
&lt;br /&gt;
Wings 3D UV Mapping tutorial has been started here - [[Units:CreateModel]]&lt;br /&gt;
&lt;br /&gt;
==Step 4:Fixing Your Images==&lt;br /&gt;
&lt;br /&gt;
[[Basic s3o unit making guide|This Article includes a UVMapping Guide]]&lt;br /&gt;
&lt;br /&gt;
Open up your UVMap in Photoshop (or whatever) go to the layer/chooser thingy and go to the Channels Tab, add a new layer (it should default to alpha) and fill it with 99% black so you can see your texture in upspring.  If you want to can paint the UVmap and put white (1% black) on the alpha channel where you want your team colours to show up (you can use something between 1% and 99% to get a blend of your team colour along with the texture... for example 50% will give you your texture with 50% of the team colour mixed in...)&lt;br /&gt;
&lt;br /&gt;
I don&#039;t know how to do glow maps... XXreminder for someone to create a Glowmapping tutorial... you don&#039;t acctually need one for the model to show up.&lt;br /&gt;
&lt;br /&gt;
Save these images both in the working directory.&lt;br /&gt;
&lt;br /&gt;
Save a copy of these images in tga format into &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/unittextures&lt;br /&gt;
&lt;br /&gt;
==Step 5:Upspring==&lt;br /&gt;
&lt;br /&gt;
===Importing Your 3ds===&lt;br /&gt;
Open Upspring 1.3, go to file&amp;gt;load model and navigate to and open your 3DS model you exported, you should see the model in upspring as a 3d mesh.  Go to the model tab and set the radius and height values to something other then zero... this defines where the health bar will show up, and more importantly, how big the collision sphere will be.&lt;br /&gt;
&lt;br /&gt;
You will also need to use all of the other tools on those tabs to resize and rotate and move your model to the right place... wings makes models that are 90 degrees off and about 30 times smaller than most spring models... make sure you click the &amp;quot;apply transform&amp;quot; button after any changes that you actually want to show up in the game.&lt;br /&gt;
&lt;br /&gt;
Also, you will want to make the hierachy work using the cut, paste, and add empty buttons.  You will need an object called &amp;quot;base&amp;quot; that all the other objects are connected to... the &amp;quot;origin object&amp;quot;... sometimes you get lucky and wings exports it properly... usually not.&lt;br /&gt;
&lt;br /&gt;
===Importing Your UV and Glowmaps===&lt;br /&gt;
&lt;br /&gt;
Go to the textures tab and make your UV/texture/team-colour map as &amp;quot;texture1&amp;quot; and your UV/glow/reflectivity map as &amp;quot;texture2&amp;quot;... it should show up correctly in the preview pane.&lt;br /&gt;
&lt;br /&gt;
===Exporting Your s3o===&lt;br /&gt;
Choose File&amp;gt;Save Model As then in the drop down select &amp;quot;s3o&amp;quot; and type an appropriate name. This model should be saved to your working directory, and a copy of it made to &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/objects3d/&lt;br /&gt;
&lt;br /&gt;
==Step 6:A couple Text Files==&lt;br /&gt;
&lt;br /&gt;
===UnitName.fbi===&lt;br /&gt;
For Reference visit [[Units:FBI]], but again, the easiest way to do this is to extract an existing mod and find the fbi for a unit that behaves similarly to the one you are trying to make and rename and modify it.&lt;br /&gt;
&lt;br /&gt;
Some More Specific Information Not Clear in the &amp;quot;Units:FBI&amp;quot; article:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Name+&amp;quot; &amp;quot;+Description=Spring Display Name&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So if you have the following settings:&lt;br /&gt;
&lt;br /&gt;
 Name=Tiger;&lt;br /&gt;
 Description=Fast Attack C.A.T.;&lt;br /&gt;
&lt;br /&gt;
The Tooltip will show &amp;quot;Tiger Fast Attack C.A.T.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BuildPic Defaults to UnitName.bmp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So if you leave out &amp;quot;BuildPic=filename.bmp;&amp;quot; Spring will look in /unitpics/ for a file called &amp;quot;UnitName.bmp&amp;quot; to use as your buildpic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ObjectName&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you want to use an s3o object, you will need to specify with &amp;quot;ObjectName=UnitName&#039;&#039;&#039;.S3O;&#039;&#039;&#039;&amp;quot; otherwise it will look for &amp;quot;UnitName.3do&amp;quot;.  Also, you don&#039;t have to use &amp;quot;UnitName&amp;quot; as the filename and, in fact, multiple Unit&#039;s fbi files can reference the same 3D models. It is easier, however, for people to figure out what you are doing in your mod if you follow the standards.&lt;br /&gt;
&lt;br /&gt;
Save this file as plain text in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/units/&lt;br /&gt;
&lt;br /&gt;
===modinfo.lua===&lt;br /&gt;
&lt;br /&gt;
modinfo.lua is a lua file that defines a number of things that are used when loading a mod, most of the information is self explanitory but basically what you are doing is defining what is going to show up in whatever mod-selection interface you use as well as what other files need to be loaded into memory in order for your mod to work.&lt;br /&gt;
&lt;br /&gt;
====Making a New Mod with your unit/units====&lt;br /&gt;
The following is an example of what will be in your modinfo.lua file if you are starting from scratch and making your own mod. This is also good when you are just testing one unit to see if it works.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
return {&lt;br /&gt;
		-- The name is shown in the selection interface&lt;br /&gt;
		game = &amp;quot;MyMod&amp;quot;,&lt;br /&gt;
		shortGame = &amp;quot;MM&amp;quot;,&lt;br /&gt;
		name = &amp;quot;My Mod&amp;quot;,&lt;br /&gt;
		shortName = &amp;quot;MM&amp;quot;,&lt;br /&gt;
		version = &amp;quot;4.0&amp;quot;,&lt;br /&gt;
		mutator = &amp;quot;Heroes&amp;quot;,&lt;br /&gt;
		-- These can be shown by the selection interface&lt;br /&gt;
		description = &amp;quot;My Mod That I Made&amp;quot;,&lt;br /&gt;
		url = &amp;quot;http://www.theplacepeoplecangetthelatestversionofyourmod.com&amp;quot;,&lt;br /&gt;
		-- What kind of mod this is &lt;br /&gt;
		--  0 - Hidden (support mod that can&#039;t be selected, such as OTA_textures) &lt;br /&gt;
		--  1 - Normal, only one can be selected at a time &lt;br /&gt;
		--  2 - Addon, any number of these can be selected. Could be used &lt;br /&gt;
		--      for single units for example. &lt;br /&gt;
		--  others - perhaps mutators and addon races that can be &lt;br /&gt;
		--           enabled in addition to xta for example? &lt;br /&gt;
		modtype = &amp;quot;1&amp;quot;,&lt;br /&gt;
		-- Number of other archives this one depends on &lt;br /&gt;
		depend= {&lt;br /&gt;
			taenheter.sdz,&lt;br /&gt;
			springcontent.sdz,&lt;br /&gt;
			otacontent.sdz,&lt;br /&gt;
			tatextures.sdz,&lt;br /&gt;
			-- Number of other archives this one replaces&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Adding Your Unit to an Existing Mod====&lt;br /&gt;
The following is an example of what will be in your modinfo.lua file if you are adding new units to an existing mod (in this case xta_se_v066.sdz), this is good for adding units to the build tree of an existing mod or adding a whole new team.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Description of the mod control file recognized by spring:&lt;br /&gt;
return {&lt;br /&gt;
		-- The name is shown in the selection interface&lt;br /&gt;
		game = &amp;quot;XTASE_MyUnits&amp;quot;,&lt;br /&gt;
		shortGame = &amp;quot;XTASEMU&amp;quot;,&lt;br /&gt;
		name = &amp;quot;XTASEv0.66 with+My Units&amp;quot;,&lt;br /&gt;
		shortName = &amp;quot;XTASEMU&amp;quot;,&lt;br /&gt;
		version = &amp;quot;4.0&amp;quot;,&lt;br /&gt;
		mutator = &amp;quot;Heroes&amp;quot;,&lt;br /&gt;
		-- These can be shown by the selection interface&lt;br /&gt;
		description = &amp;quot;xta_se_v066 with the cool tank I made&amp;quot;,&lt;br /&gt;
		url = &amp;quot;http://www.fileuniverse.com/exactlocationblahblahblah&amp;quot;,&lt;br /&gt;
		-- What kind of mod this is &lt;br /&gt;
		--  0 - Hidden (support mod that can&#039;t be selected, such as OTA_textures) &lt;br /&gt;
		--  1 - Normal, only one can be selected at a time &lt;br /&gt;
		--  2 - Addon, any number of these can be selected. Could be used &lt;br /&gt;
		--      for single units for example. &lt;br /&gt;
		--  others - perhaps mutators and addon races that can be &lt;br /&gt;
		--           enabled in addition to xta for example? &lt;br /&gt;
		modtype = &amp;quot;1&amp;quot;,&lt;br /&gt;
		-- Number of other archives this one depends on &lt;br /&gt;
		depend= {&lt;br /&gt;
			taenheter.sdz,&lt;br /&gt;
			springcontent.sdz,&lt;br /&gt;
			otacontent.sdz,&lt;br /&gt;
			tatextures.sdz,&lt;br /&gt;
			xta_se_v066.sdz,&lt;br /&gt;
			-- Number of other archives this one replaces&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are not depending on OTA files, you will have to supply your own cursors.&lt;br /&gt;
&lt;br /&gt;
There are some extra bits in these examples, but I work on the &amp;quot;better safe than sorry&amp;quot; principle... which is to wait for someone who knows what they are doing to fix my articles. &lt;br /&gt;
&lt;br /&gt;
You will want to save this file as plain text in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/&lt;br /&gt;
&lt;br /&gt;
===armorDefs.lua===&lt;br /&gt;
&lt;br /&gt;
I&#039;m not exactly sure how this works, but the file needs to exist, so either steal one from another mod and modify it... or just make a file that looks like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local armorDefs = {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will want to save this file as a lua file in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/gamedata&lt;br /&gt;
&lt;br /&gt;
===sidedata.lua===&lt;br /&gt;
&lt;br /&gt;
Start by stealing the sidedata.lua file from your dependency mod if you have one, then edit it to include your units/side.&lt;br /&gt;
&lt;br /&gt;
Basically this file is in the form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local sideData = {&lt;br /&gt;
	[1] = {&lt;br /&gt;
		name      = &#039;Good Guys&#039;,&lt;br /&gt;
		startunit = &#039;GG_comm&#039;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are also additional &amp;quot;[X]&amp;quot; entries for each side/team/commander-choice available in the mod-selector you choose.&lt;br /&gt;
&lt;br /&gt;
You will save this file as lua file in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/gamedata/&lt;br /&gt;
&lt;br /&gt;
===MOVEDATA.TDF===&lt;br /&gt;
This file determines the footprint of your units, the angle of slopes they can climb and in how deep water they can drive. It contains several entries, all in the following format:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[CLASS#] (Replace # with numbers, so you get entries CLASS0, CLASS1 etc.)&lt;br /&gt;
{&lt;br /&gt;
name=KBOT; (This is the name. FBI files refer to this name.)&lt;br /&gt;
footprintx=1; (This is how big the X dimension is of the footprint in Spring units probably?)&lt;br /&gt;
footprintz=1; (This is how big the Y dimension is of the footprint in Spring units probably?)&lt;br /&gt;
maxwaterdepth=5; (This is in how deep water the unit/unit class can walk.)&lt;br /&gt;
maxslope=36; (The maximum angle of slopes this unit can climb.)&lt;br /&gt;
crushstrength=10; (This determines if the unit/unit class can crush certain features)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
===SOUND.TDF===&lt;br /&gt;
This file refers to all the sounds your units make, so Spring knows which sound file is linked to what action. It contains entries in the following format.&lt;br /&gt;
[NAME] (The name of the unit class)&lt;br /&gt;
{&lt;br /&gt;
There are lots of different entries, I will list only the basic ones here for now.&lt;br /&gt;
select1=sound; (This entry determines what sound a unit makes if you click on it.&lt;br /&gt;
ok1=sound; (This entry determines what sound a unit makes if it does an action.&lt;br /&gt;
cant1=sound; (&amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; if it can&#039;t do an action.)&lt;br /&gt;
underattack=sound; (&amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; if it is attacked)&lt;br /&gt;
count5-count0=sound; (These 6 entries determine how the self-destruct countdown times sounds like.&lt;br /&gt;
canceldestruct=sound; (A unit makes this sound if you cancel the self-destruct procedure)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==Step 7:Adding a Build Pic==&lt;br /&gt;
&lt;br /&gt;
Add a 96x96 BMP to your &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/unitpics/ folder named either &amp;quot;UnitName.bmp&amp;quot; or whatever you specified in the &amp;quot;BuildPic=&amp;quot; line of your fbi.&lt;br /&gt;
&lt;br /&gt;
==Step 8:Adding a Side Pic==&lt;br /&gt;
&lt;br /&gt;
Add a 16x16 BMP to your &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/sidepics/ folder named &amp;quot;teamname.bmp&amp;quot; or whatever you specified in the &amp;quot;name=&amp;quot; line of your SIDEDATA.TDF for each side/team you have added.&lt;br /&gt;
&lt;br /&gt;
==Step 9:Scriptor==&lt;br /&gt;
&lt;br /&gt;
===Stealing a Script===&lt;br /&gt;
Open someone else&#039;s script in scriptor that works the way you want your script to work, look at the top where it&#039;s talking about &amp;quot;piece names&amp;quot;... then change those piece names to be the piece names of your unit and do a find/replace to make all the places where those pieces show up to be your pieces too.  Compile it so its name is the same as the &amp;quot;UnitName=&amp;quot; value in your &amp;quot;UnitName.fbi&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
XXreminder to someone to link to a proper scripting tutorial&lt;br /&gt;
&lt;br /&gt;
Put the bos and cob files for your unit script in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/scripts&lt;br /&gt;
&lt;br /&gt;
==Step 10:Compiling Your Mod==&lt;br /&gt;
&lt;br /&gt;
You may want to check your mod directory and make sure it follows the structure defined [[Mod_Development:Archives|here]].&lt;br /&gt;
&lt;br /&gt;
navigate to your &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt; and select everything and choose &amp;quot;add to archive &amp;lt;mod name&amp;gt;.7z&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
make a copy of this file called &amp;lt;mod name&amp;gt;v0.7z in your working directory so you don&#039;t screw anything up later, then make a copy of it called &amp;lt;mod name&amp;gt;.sd7 in the mods directory of spring.&lt;br /&gt;
&lt;br /&gt;
An alternative, added in more recent versions is the &amp;quot;.SDD&amp;quot; folder, to use this, copy the entire &amp;lt;mod name&amp;gt; folder in the mods directory of spring and rename it as &amp;quot;&amp;lt;mod name&amp;gt;.SDD&amp;quot;.  The advantage to the &amp;quot;.SDD&amp;quot; method is that you can tweak settings and add files without recompressing your mod all the time.  When it comes time to distribute your mod use &amp;quot;.sd7&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
EXAMPLES:&lt;br /&gt;
If your mod is called JoesMod you will have a file called &amp;quot;JoesMod.sd7&amp;quot; or a folder called &amp;quot;JoesMod.SDD&amp;quot; in your spring mods directory.&lt;br /&gt;
&lt;br /&gt;
==Step 11:Testing Your Mod==&lt;br /&gt;
Open Up your lobby client, pick your mod from the drop-down list of the games in host battle or singleplayer mode if your lobby supports it(if it doesn&#039;t show up you screwed up your modinfo.txt), choose your tiny map from the map list and press start.  If it doesn&#039;t break and your unit shows up, you have created all the neccessary files... yay!&lt;br /&gt;
&lt;br /&gt;
Gotchas:&lt;br /&gt;
*If it doesn&#039;t work, check you didn&#039;t zip the folder itself, but the contents, ie if you open mymod.sd7 with 7zip, you should see folders such as &amp;quot;unittextures&amp;quot; rather than a folder &amp;quot;mymod&amp;quot; containing unittextures.&lt;br /&gt;
&lt;br /&gt;
[[Category:Mod development]]&lt;/div&gt;</summary>
		<author><name>Sdbryan</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Simple_Game_Tutorial&amp;diff=16863</id>
		<title>Simple Game Tutorial</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Simple_Game_Tutorial&amp;diff=16863"/>
		<updated>2010-06-13T16:46:29Z</updated>

		<summary type="html">&lt;p&gt;Sdbryan: /* Armor.txt */ Changed to armorDefs.lua&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Until I Finish [[Mod Development]] is the place to go.&lt;br /&gt;
&lt;br /&gt;
This Tutorial Aims to get a person from knowing nothing about Spring to the point where they can create and edit mods.&lt;br /&gt;
&lt;br /&gt;
Right now I am working from memory so you may want to correct me when I&#039;m wrong, I will try to cross link from my summaries to the appropriate articles available in other places.&lt;br /&gt;
&lt;br /&gt;
I will not go too deep into making 3do&#039;s because they are old and dumb... but I&#039;ll try to make note of the differences here.&lt;br /&gt;
&lt;br /&gt;
I don&#039;t know anything about scripting right now, so that section is likely to be sparse when I write it, I hope that someone will expand on it.&lt;br /&gt;
&lt;br /&gt;
=Book 1: The First Unit=&lt;br /&gt;
&lt;br /&gt;
==Step 1:Planning==&lt;br /&gt;
Who cares about planning, you know what you&#039;re doing... just come up with an idea for a mod... I made a chess set... if you don&#039;t have a real idea and just want to make a model show up in the game... then yeah... this is the place to start... I&#039;d do that if I were you.&lt;br /&gt;
&lt;br /&gt;
Another good thing to do at this point is to creat a &amp;quot;working directory&amp;quot;, and inside it create a directory with the name that your mod will have... after many headaches I decided it&#039;s best to put this in the root directory of your system so it&#039;s really easy to find when you are switching around back and forth between folders and keep having to find your files over and over again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Step 2:Getting The Tools==&lt;br /&gt;
You will need a bunch of stuff... here&#039;s the list (I assume you are using windows)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Want:&#039;&#039;&lt;br /&gt;
*[http://taspring.clan-sy.com/download.php Spring] - The main program, you will likely need this to test if you&#039;ve screwed up&lt;br /&gt;
*A Tiny Map (2x2) - to test your mod fast (suggest [http://www.fileuniverse.com/?p=showitem&amp;amp;ID=2534 Simple Chess Map])&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Need:&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;Program listings can be found here:&#039;&#039;&#039; &#039;&#039;&#039;[http://taspring.clan-sy.com/wiki/Map%2C_Mod%2C_And_Unit_Development_Programs Map, Mod, And Unit Development Programs]&#039;&#039;&#039;&lt;br /&gt;
*3D Modeling Program - &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Notepad - to edit all the miriad of text files&lt;br /&gt;
*A Graphical Editing Program - needs to handle RGBA TGAs (aka tga&#039;s with alpha channels), I suggest Photoshop if you have it, or The GIMP... needed for all of the texture making for UVmapping stuff... &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Upspring 1.3 - To convert your models to the approprite s3o format (if you want to fight with 3do builder, then go ahead... a good trick is to get your model into upspring first and adjust all the hierachy, then save it as an 3do... but why bother?). &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Scriptor - to make and compile your units &amp;quot;animation script&amp;quot;... or steal someone else&#039;s and make it work for your unit. &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Compression Utility - (I suggest [http://www.7-zip.org/ 7zip] - even if you are using zip compression and not 7zip, it&#039;s still good to have)&lt;br /&gt;
&lt;br /&gt;
==Step 3:Making a 3D Model==&lt;br /&gt;
&lt;br /&gt;
Go into your 3D modelling program and make a 3D model, [http://taspring.clan-sy.com/w/images/b/b4/WingsCombine.PNG combine] all the objects and UV map the model, then separate it out into any parts that need to move independently of each other.  Then Export the UV map as an Image File and Export the whole thing as a 3ds file.  Put the original wings file, the UVMap image and the 3ds file into your working directory so you can find them later.&lt;br /&gt;
&lt;br /&gt;
Wings 3D UV Mapping tutorial has been started here - [[Units:CreateModel]]&lt;br /&gt;
&lt;br /&gt;
==Step 4:Fixing Your Images==&lt;br /&gt;
&lt;br /&gt;
[[Basic s3o unit making guide|This Article includes a UVMapping Guide]]&lt;br /&gt;
&lt;br /&gt;
Open up your UVMap in Photoshop (or whatever) go to the layer/chooser thingy and go to the Channels Tab, add a new layer (it should default to alpha) and fill it with 99% black so you can see your texture in upspring.  If you want to can paint the UVmap and put white (1% black) on the alpha channel where you want your team colours to show up (you can use something between 1% and 99% to get a blend of your team colour along with the texture... for example 50% will give you your texture with 50% of the team colour mixed in...)&lt;br /&gt;
&lt;br /&gt;
I don&#039;t know how to do glow maps... XXreminder for someone to create a Glowmapping tutorial... you don&#039;t acctually need one for the model to show up.&lt;br /&gt;
&lt;br /&gt;
Save these images both in the working directory.&lt;br /&gt;
&lt;br /&gt;
Save a copy of these images in tga format into &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/unittextures&lt;br /&gt;
&lt;br /&gt;
==Step 5:Upspring==&lt;br /&gt;
&lt;br /&gt;
===Importing Your 3ds===&lt;br /&gt;
Open Upspring 1.3, go to file&amp;gt;load model and navigate to and open your 3DS model you exported, you should see the model in upspring as a 3d mesh.  Go to the model tab and set the radius and height values to something other then zero... this defines where the health bar will show up, and more importantly, how big the collision sphere will be.&lt;br /&gt;
&lt;br /&gt;
You will also need to use all of the other tools on those tabs to resize and rotate and move your model to the right place... wings makes models that are 90 degrees off and about 30 times smaller than most spring models... make sure you click the &amp;quot;apply transform&amp;quot; button after any changes that you actually want to show up in the game.&lt;br /&gt;
&lt;br /&gt;
Also, you will want to make the hierachy work using the cut, paste, and add empty buttons.  You will need an object called &amp;quot;base&amp;quot; that all the other objects are connected to... the &amp;quot;origin object&amp;quot;... sometimes you get lucky and wings exports it properly... usually not.&lt;br /&gt;
&lt;br /&gt;
===Importing Your UV and Glowmaps===&lt;br /&gt;
&lt;br /&gt;
Go to the textures tab and make your UV/texture/team-colour map as &amp;quot;texture1&amp;quot; and your UV/glow/reflectivity map as &amp;quot;texture2&amp;quot;... it should show up correctly in the preview pane.&lt;br /&gt;
&lt;br /&gt;
===Exporting Your s3o===&lt;br /&gt;
Choose File&amp;gt;Save Model As then in the drop down select &amp;quot;s3o&amp;quot; and type an appropriate name. This model should be saved to your working directory, and a copy of it made to &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/objects3d/&lt;br /&gt;
&lt;br /&gt;
==Step 6:A couple Text Files==&lt;br /&gt;
&lt;br /&gt;
===UnitName.fbi===&lt;br /&gt;
For Reference visit [[Units:FBI]], but again, the easiest way to do this is to extract an existing mod and find the fbi for a unit that behaves similarly to the one you are trying to make and rename and modify it.&lt;br /&gt;
&lt;br /&gt;
Some More Specific Information Not Clear in the &amp;quot;Units:FBI&amp;quot; article:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Name+&amp;quot; &amp;quot;+Description=Spring Display Name&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So if you have the following settings:&lt;br /&gt;
&lt;br /&gt;
 Name=Tiger;&lt;br /&gt;
 Description=Fast Attack C.A.T.;&lt;br /&gt;
&lt;br /&gt;
The Tooltip will show &amp;quot;Tiger Fast Attack C.A.T.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BuildPic Defaults to UnitName.bmp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So if you leave out &amp;quot;BuildPic=filename.bmp;&amp;quot; Spring will look in /unitpics/ for a file called &amp;quot;UnitName.bmp&amp;quot; to use as your buildpic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ObjectName&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you want to use an s3o object, you will need to specify with &amp;quot;ObjectName=UnitName&#039;&#039;&#039;.S3O;&#039;&#039;&#039;&amp;quot; otherwise it will look for &amp;quot;UnitName.3do&amp;quot;.  Also, you don&#039;t have to use &amp;quot;UnitName&amp;quot; as the filename and, in fact, multiple Unit&#039;s fbi files can reference the same 3D models. It is easier, however, for people to figure out what you are doing in your mod if you follow the standards.&lt;br /&gt;
&lt;br /&gt;
Save this file as plain text in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/units/&lt;br /&gt;
&lt;br /&gt;
===modinfo.lua===&lt;br /&gt;
&lt;br /&gt;
modinfo.lua is a lua file that defines a number of things that are used when loading a mod, most of the information is self explanitory but basically what you are doing is defining what is going to show up in whatever mod-selection interface you use as well as what other files need to be loaded into memory in order for your mod to work.&lt;br /&gt;
&lt;br /&gt;
====Making a New Mod with your unit/units====&lt;br /&gt;
The following is an example of what will be in your modinfo.lua file if you are starting from scratch and making your own mod. This is also good when you are just testing one unit to see if it works.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
return {&lt;br /&gt;
		-- The name is shown in the selection interface&lt;br /&gt;
		game = &amp;quot;MyMod&amp;quot;,&lt;br /&gt;
		shortGame = &amp;quot;MM&amp;quot;,&lt;br /&gt;
		name = &amp;quot;My Mod&amp;quot;,&lt;br /&gt;
		shortName = &amp;quot;MM&amp;quot;,&lt;br /&gt;
		version = &amp;quot;4.0&amp;quot;,&lt;br /&gt;
		mutator = &amp;quot;Heroes&amp;quot;,&lt;br /&gt;
		-- These can be shown by the selection interface&lt;br /&gt;
		description = &amp;quot;My Mod That I Made&amp;quot;,&lt;br /&gt;
		url = &amp;quot;http://www.theplacepeoplecangetthelatestversionofyourmod.com&amp;quot;,&lt;br /&gt;
		-- What kind of mod this is &lt;br /&gt;
		--  0 - Hidden (support mod that can&#039;t be selected, such as OTA_textures) &lt;br /&gt;
		--  1 - Normal, only one can be selected at a time &lt;br /&gt;
		--  2 - Addon, any number of these can be selected. Could be used &lt;br /&gt;
		--      for single units for example. &lt;br /&gt;
		--  others - perhaps mutators and addon races that can be &lt;br /&gt;
		--           enabled in addition to xta for example? &lt;br /&gt;
		modtype = &amp;quot;1&amp;quot;,&lt;br /&gt;
		-- Number of other archives this one depends on &lt;br /&gt;
		depend= {&lt;br /&gt;
			taenheter.sdz,&lt;br /&gt;
			springcontent.sdz,&lt;br /&gt;
			otacontent.sdz,&lt;br /&gt;
			tatextures.sdz,&lt;br /&gt;
			-- Number of other archives this one replaces&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Adding Your Unit to an Existing Mod====&lt;br /&gt;
The following is an example of what will be in your modinfo.lua file if you are adding new units to an existing mod (in this case xta_se_v066.sdz), this is good for adding units to the build tree of an existing mod or adding a whole new team.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Description of the mod control file recognized by spring:&lt;br /&gt;
return {&lt;br /&gt;
		-- The name is shown in the selection interface&lt;br /&gt;
		game = &amp;quot;XTASE_MyUnits&amp;quot;,&lt;br /&gt;
		shortGame = &amp;quot;XTASEMU&amp;quot;,&lt;br /&gt;
		name = &amp;quot;XTASEv0.66 with+My Units&amp;quot;,&lt;br /&gt;
		shortName = &amp;quot;XTASEMU&amp;quot;,&lt;br /&gt;
		version = &amp;quot;4.0&amp;quot;,&lt;br /&gt;
		mutator = &amp;quot;Heroes&amp;quot;,&lt;br /&gt;
		-- These can be shown by the selection interface&lt;br /&gt;
		description = &amp;quot;xta_se_v066 with the cool tank I made&amp;quot;,&lt;br /&gt;
		url = &amp;quot;http://www.fileuniverse.com/exactlocationblahblahblah&amp;quot;,&lt;br /&gt;
		-- What kind of mod this is &lt;br /&gt;
		--  0 - Hidden (support mod that can&#039;t be selected, such as OTA_textures) &lt;br /&gt;
		--  1 - Normal, only one can be selected at a time &lt;br /&gt;
		--  2 - Addon, any number of these can be selected. Could be used &lt;br /&gt;
		--      for single units for example. &lt;br /&gt;
		--  others - perhaps mutators and addon races that can be &lt;br /&gt;
		--           enabled in addition to xta for example? &lt;br /&gt;
		modtype = &amp;quot;1&amp;quot;,&lt;br /&gt;
		-- Number of other archives this one depends on &lt;br /&gt;
		depend= {&lt;br /&gt;
			taenheter.sdz,&lt;br /&gt;
			springcontent.sdz,&lt;br /&gt;
			otacontent.sdz,&lt;br /&gt;
			tatextures.sdz,&lt;br /&gt;
			xta_se_v066.sdz,&lt;br /&gt;
			-- Number of other archives this one replaces&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are not depending on OTA files, you will have to supply your own cursors.&lt;br /&gt;
&lt;br /&gt;
There are some extra bits in these examples, but I work on the &amp;quot;better safe than sorry&amp;quot; principle... which is to wait for someone who knows what they are doing to fix my articles. &lt;br /&gt;
&lt;br /&gt;
You will want to save this file as plain text in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/&lt;br /&gt;
&lt;br /&gt;
===armorDefs.lua===&lt;br /&gt;
&lt;br /&gt;
I&#039;m not exactly sure how this works, but the file needs to exist, so either steal one from another mod and modify it... or just make a file that looks like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local armorDefs = {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will want to save this file as a lua file in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/gamedata&lt;br /&gt;
&lt;br /&gt;
===SIDEDATA.TDF===&lt;br /&gt;
&lt;br /&gt;
Start by stealing the sidedata.tdf file from your dependency mod if you have one, then edit it to include your units/side.&lt;br /&gt;
&lt;br /&gt;
Basically this file is in the form:&lt;br /&gt;
&lt;br /&gt;
 [SIDE0]&lt;br /&gt;
 	{&lt;br /&gt;
 	name=Good Guys;&lt;br /&gt;
 	nameprefix=GG;&lt;br /&gt;
 	commander=UnitName1;&lt;br /&gt;
 	}&lt;br /&gt;
 [CANBUILD]&lt;br /&gt;
 	{&lt;br /&gt;
 	[UnitName1]&lt;br /&gt;
 		{&lt;br /&gt;
 		canbuild1=UnitName2;&lt;br /&gt;
 		canbuild2=UnitName3;&lt;br /&gt;
 		canbuild3=UnitName4;&lt;br /&gt;
 		canbuild4=UnitName5;&lt;br /&gt;
 		canbuild5=UnitName6;&lt;br /&gt;
 		}&lt;br /&gt;
 	}    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...with additional &amp;quot;[SIDEX]&amp;quot; entries for each side/team/commander-choice available in the mod-selector you choose, additional &amp;quot;[UnitName]&amp;quot; sections for each factory of construction unit, and additional &amp;quot;canbuildx=UnitName&amp;quot; entries to all factory/con-units that can build each unit.&lt;br /&gt;
&lt;br /&gt;
You will save this file as plain text in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/gamedata/&lt;br /&gt;
&lt;br /&gt;
===MOVEDATA.TDF===&lt;br /&gt;
This file determines the footprint of your units, the angle of slopes they can climb and in how deep water they can drive. It contains several entries, all in the following format:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[CLASS#] (Replace # with numbers, so you get entries CLASS0, CLASS1 etc.)&lt;br /&gt;
{&lt;br /&gt;
name=KBOT; (This is the name. FBI files refer to this name.)&lt;br /&gt;
footprintx=1; (This is how big the X dimension is of the footprint in Spring units probably?)&lt;br /&gt;
footprintz=1; (This is how big the Y dimension is of the footprint in Spring units probably?)&lt;br /&gt;
maxwaterdepth=5; (This is in how deep water the unit/unit class can walk.)&lt;br /&gt;
maxslope=36; (The maximum angle of slopes this unit can climb.)&lt;br /&gt;
crushstrength=10; (This determines if the unit/unit class can crush certain features)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
===SOUND.TDF===&lt;br /&gt;
This file refers to all the sounds your units make, so Spring knows which sound file is linked to what action. It contains entries in the following format.&lt;br /&gt;
[NAME] (The name of the unit class)&lt;br /&gt;
{&lt;br /&gt;
There are lots of different entries, I will list only the basic ones here for now.&lt;br /&gt;
select1=sound; (This entry determines what sound a unit makes if you click on it.&lt;br /&gt;
ok1=sound; (This entry determines what sound a unit makes if it does an action.&lt;br /&gt;
cant1=sound; (&amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; if it can&#039;t do an action.)&lt;br /&gt;
underattack=sound; (&amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; if it is attacked)&lt;br /&gt;
count5-count0=sound; (These 6 entries determine how the self-destruct countdown times sounds like.&lt;br /&gt;
canceldestruct=sound; (A unit makes this sound if you cancel the self-destruct procedure)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==Step 7:Adding a Build Pic==&lt;br /&gt;
&lt;br /&gt;
Add a 96x96 BMP to your &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/unitpics/ folder named either &amp;quot;UnitName.bmp&amp;quot; or whatever you specified in the &amp;quot;BuildPic=&amp;quot; line of your fbi.&lt;br /&gt;
&lt;br /&gt;
==Step 8:Adding a Side Pic==&lt;br /&gt;
&lt;br /&gt;
Add a 16x16 BMP to your &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/sidepics/ folder named &amp;quot;teamname.bmp&amp;quot; or whatever you specified in the &amp;quot;name=&amp;quot; line of your SIDEDATA.TDF for each side/team you have added.&lt;br /&gt;
&lt;br /&gt;
==Step 9:Scriptor==&lt;br /&gt;
&lt;br /&gt;
===Stealing a Script===&lt;br /&gt;
Open someone else&#039;s script in scriptor that works the way you want your script to work, look at the top where it&#039;s talking about &amp;quot;piece names&amp;quot;... then change those piece names to be the piece names of your unit and do a find/replace to make all the places where those pieces show up to be your pieces too.  Compile it so its name is the same as the &amp;quot;UnitName=&amp;quot; value in your &amp;quot;UnitName.fbi&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
XXreminder to someone to link to a proper scripting tutorial&lt;br /&gt;
&lt;br /&gt;
Put the bos and cob files for your unit script in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/scripts&lt;br /&gt;
&lt;br /&gt;
==Step 10:Compiling Your Mod==&lt;br /&gt;
&lt;br /&gt;
You may want to check your mod directory and make sure it follows the structure defined [[Mod_Development:Archives|here]].&lt;br /&gt;
&lt;br /&gt;
navigate to your &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt; and select everything and choose &amp;quot;add to archive &amp;lt;mod name&amp;gt;.7z&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
make a copy of this file called &amp;lt;mod name&amp;gt;v0.7z in your working directory so you don&#039;t screw anything up later, then make a copy of it called &amp;lt;mod name&amp;gt;.sd7 in the mods directory of spring.&lt;br /&gt;
&lt;br /&gt;
An alternative, added in more recent versions is the &amp;quot;.SDD&amp;quot; folder, to use this, copy the entire &amp;lt;mod name&amp;gt; folder in the mods directory of spring and rename it as &amp;quot;&amp;lt;mod name&amp;gt;.SDD&amp;quot;.  The advantage to the &amp;quot;.SDD&amp;quot; method is that you can tweak settings and add files without recompressing your mod all the time.  When it comes time to distribute your mod use &amp;quot;.sd7&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
EXAMPLES:&lt;br /&gt;
If your mod is called JoesMod you will have a file called &amp;quot;JoesMod.sd7&amp;quot; or a folder called &amp;quot;JoesMod.SDD&amp;quot; in your spring mods directory.&lt;br /&gt;
&lt;br /&gt;
==Step 11:Testing Your Mod==&lt;br /&gt;
Open Up your lobby client, pick your mod from the drop-down list of the games in host battle or singleplayer mode if your lobby supports it(if it doesn&#039;t show up you screwed up your modinfo.txt), choose your tiny map from the map list and press start.  If it doesn&#039;t break and your unit shows up, you have created all the neccessary files... yay!&lt;br /&gt;
&lt;br /&gt;
Gotchas:&lt;br /&gt;
*If it doesn&#039;t work, check you didn&#039;t zip the folder itself, but the contents, ie if you open mymod.sd7 with 7zip, you should see folders such as &amp;quot;unittextures&amp;quot; rather than a folder &amp;quot;mymod&amp;quot; containing unittextures.&lt;br /&gt;
&lt;br /&gt;
[[Category:Mod development]]&lt;/div&gt;</summary>
		<author><name>Sdbryan</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Simple_Game_Tutorial&amp;diff=16862</id>
		<title>Simple Game Tutorial</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Simple_Game_Tutorial&amp;diff=16862"/>
		<updated>2010-05-23T05:08:14Z</updated>

		<summary type="html">&lt;p&gt;Sdbryan: /* modinfo.tdf */ Changed to modinfo.lua for the latest version of Spring 0.81.2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Until I Finish [[Mod Development]] is the place to go.&lt;br /&gt;
&lt;br /&gt;
This Tutorial Aims to get a person from knowing nothing about Spring to the point where they can create and edit mods.&lt;br /&gt;
&lt;br /&gt;
Right now I am working from memory so you may want to correct me when I&#039;m wrong, I will try to cross link from my summaries to the appropriate articles available in other places.&lt;br /&gt;
&lt;br /&gt;
I will not go too deep into making 3do&#039;s because they are old and dumb... but I&#039;ll try to make note of the differences here.&lt;br /&gt;
&lt;br /&gt;
I don&#039;t know anything about scripting right now, so that section is likely to be sparse when I write it, I hope that someone will expand on it.&lt;br /&gt;
&lt;br /&gt;
=Book 1: The First Unit=&lt;br /&gt;
&lt;br /&gt;
==Step 1:Planning==&lt;br /&gt;
Who cares about planning, you know what you&#039;re doing... just come up with an idea for a mod... I made a chess set... if you don&#039;t have a real idea and just want to make a model show up in the game... then yeah... this is the place to start... I&#039;d do that if I were you.&lt;br /&gt;
&lt;br /&gt;
Another good thing to do at this point is to creat a &amp;quot;working directory&amp;quot;, and inside it create a directory with the name that your mod will have... after many headaches I decided it&#039;s best to put this in the root directory of your system so it&#039;s really easy to find when you are switching around back and forth between folders and keep having to find your files over and over again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Step 2:Getting The Tools==&lt;br /&gt;
You will need a bunch of stuff... here&#039;s the list (I assume you are using windows)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Want:&#039;&#039;&lt;br /&gt;
*[http://taspring.clan-sy.com/download.php Spring] - The main program, you will likely need this to test if you&#039;ve screwed up&lt;br /&gt;
*A Tiny Map (2x2) - to test your mod fast (suggest [http://www.fileuniverse.com/?p=showitem&amp;amp;ID=2534 Simple Chess Map])&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Need:&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;Program listings can be found here:&#039;&#039;&#039; &#039;&#039;&#039;[http://taspring.clan-sy.com/wiki/Map%2C_Mod%2C_And_Unit_Development_Programs Map, Mod, And Unit Development Programs]&#039;&#039;&#039;&lt;br /&gt;
*3D Modeling Program - &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Notepad - to edit all the miriad of text files&lt;br /&gt;
*A Graphical Editing Program - needs to handle RGBA TGAs (aka tga&#039;s with alpha channels), I suggest Photoshop if you have it, or The GIMP... needed for all of the texture making for UVmapping stuff... &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Upspring 1.3 - To convert your models to the approprite s3o format (if you want to fight with 3do builder, then go ahead... a good trick is to get your model into upspring first and adjust all the hierachy, then save it as an 3do... but why bother?). &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Scriptor - to make and compile your units &amp;quot;animation script&amp;quot;... or steal someone else&#039;s and make it work for your unit. &#039;&#039;&#039;See above link&#039;&#039;&#039;&lt;br /&gt;
*Compression Utility - (I suggest [http://www.7-zip.org/ 7zip] - even if you are using zip compression and not 7zip, it&#039;s still good to have)&lt;br /&gt;
&lt;br /&gt;
==Step 3:Making a 3D Model==&lt;br /&gt;
&lt;br /&gt;
Go into your 3D modelling program and make a 3D model, [http://taspring.clan-sy.com/w/images/b/b4/WingsCombine.PNG combine] all the objects and UV map the model, then separate it out into any parts that need to move independently of each other.  Then Export the UV map as an Image File and Export the whole thing as a 3ds file.  Put the original wings file, the UVMap image and the 3ds file into your working directory so you can find them later.&lt;br /&gt;
&lt;br /&gt;
Wings 3D UV Mapping tutorial has been started here - [[Units:CreateModel]]&lt;br /&gt;
&lt;br /&gt;
==Step 4:Fixing Your Images==&lt;br /&gt;
&lt;br /&gt;
[[Basic s3o unit making guide|This Article includes a UVMapping Guide]]&lt;br /&gt;
&lt;br /&gt;
Open up your UVMap in Photoshop (or whatever) go to the layer/chooser thingy and go to the Channels Tab, add a new layer (it should default to alpha) and fill it with 99% black so you can see your texture in upspring.  If you want to can paint the UVmap and put white (1% black) on the alpha channel where you want your team colours to show up (you can use something between 1% and 99% to get a blend of your team colour along with the texture... for example 50% will give you your texture with 50% of the team colour mixed in...)&lt;br /&gt;
&lt;br /&gt;
I don&#039;t know how to do glow maps... XXreminder for someone to create a Glowmapping tutorial... you don&#039;t acctually need one for the model to show up.&lt;br /&gt;
&lt;br /&gt;
Save these images both in the working directory.&lt;br /&gt;
&lt;br /&gt;
Save a copy of these images in tga format into &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/unittextures&lt;br /&gt;
&lt;br /&gt;
==Step 5:Upspring==&lt;br /&gt;
&lt;br /&gt;
===Importing Your 3ds===&lt;br /&gt;
Open Upspring 1.3, go to file&amp;gt;load model and navigate to and open your 3DS model you exported, you should see the model in upspring as a 3d mesh.  Go to the model tab and set the radius and height values to something other then zero... this defines where the health bar will show up, and more importantly, how big the collision sphere will be.&lt;br /&gt;
&lt;br /&gt;
You will also need to use all of the other tools on those tabs to resize and rotate and move your model to the right place... wings makes models that are 90 degrees off and about 30 times smaller than most spring models... make sure you click the &amp;quot;apply transform&amp;quot; button after any changes that you actually want to show up in the game.&lt;br /&gt;
&lt;br /&gt;
Also, you will want to make the hierachy work using the cut, paste, and add empty buttons.  You will need an object called &amp;quot;base&amp;quot; that all the other objects are connected to... the &amp;quot;origin object&amp;quot;... sometimes you get lucky and wings exports it properly... usually not.&lt;br /&gt;
&lt;br /&gt;
===Importing Your UV and Glowmaps===&lt;br /&gt;
&lt;br /&gt;
Go to the textures tab and make your UV/texture/team-colour map as &amp;quot;texture1&amp;quot; and your UV/glow/reflectivity map as &amp;quot;texture2&amp;quot;... it should show up correctly in the preview pane.&lt;br /&gt;
&lt;br /&gt;
===Exporting Your s3o===&lt;br /&gt;
Choose File&amp;gt;Save Model As then in the drop down select &amp;quot;s3o&amp;quot; and type an appropriate name. This model should be saved to your working directory, and a copy of it made to &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/objects3d/&lt;br /&gt;
&lt;br /&gt;
==Step 6:A couple Text Files==&lt;br /&gt;
&lt;br /&gt;
===UnitName.fbi===&lt;br /&gt;
For Reference visit [[Units:FBI]], but again, the easiest way to do this is to extract an existing mod and find the fbi for a unit that behaves similarly to the one you are trying to make and rename and modify it.&lt;br /&gt;
&lt;br /&gt;
Some More Specific Information Not Clear in the &amp;quot;Units:FBI&amp;quot; article:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Name+&amp;quot; &amp;quot;+Description=Spring Display Name&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So if you have the following settings:&lt;br /&gt;
&lt;br /&gt;
 Name=Tiger;&lt;br /&gt;
 Description=Fast Attack C.A.T.;&lt;br /&gt;
&lt;br /&gt;
The Tooltip will show &amp;quot;Tiger Fast Attack C.A.T.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BuildPic Defaults to UnitName.bmp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So if you leave out &amp;quot;BuildPic=filename.bmp;&amp;quot; Spring will look in /unitpics/ for a file called &amp;quot;UnitName.bmp&amp;quot; to use as your buildpic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ObjectName&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you want to use an s3o object, you will need to specify with &amp;quot;ObjectName=UnitName&#039;&#039;&#039;.S3O;&#039;&#039;&#039;&amp;quot; otherwise it will look for &amp;quot;UnitName.3do&amp;quot;.  Also, you don&#039;t have to use &amp;quot;UnitName&amp;quot; as the filename and, in fact, multiple Unit&#039;s fbi files can reference the same 3D models. It is easier, however, for people to figure out what you are doing in your mod if you follow the standards.&lt;br /&gt;
&lt;br /&gt;
Save this file as plain text in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/units/&lt;br /&gt;
&lt;br /&gt;
===modinfo.lua===&lt;br /&gt;
&lt;br /&gt;
modinfo.lua is a lua file that defines a number of things that are used when loading a mod, most of the information is self explanitory but basically what you are doing is defining what is going to show up in whatever mod-selection interface you use as well as what other files need to be loaded into memory in order for your mod to work.&lt;br /&gt;
&lt;br /&gt;
====Making a New Mod with your unit/units====&lt;br /&gt;
The following is an example of what will be in your modinfo.lua file if you are starting from scratch and making your own mod. This is also good when you are just testing one unit to see if it works.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
return {&lt;br /&gt;
		-- The name is shown in the selection interface&lt;br /&gt;
		game = &amp;quot;MyMod&amp;quot;,&lt;br /&gt;
		shortGame = &amp;quot;MM&amp;quot;,&lt;br /&gt;
		name = &amp;quot;My Mod&amp;quot;,&lt;br /&gt;
		shortName = &amp;quot;MM&amp;quot;,&lt;br /&gt;
		version = &amp;quot;4.0&amp;quot;,&lt;br /&gt;
		mutator = &amp;quot;Heroes&amp;quot;,&lt;br /&gt;
		-- These can be shown by the selection interface&lt;br /&gt;
		description = &amp;quot;My Mod That I Made&amp;quot;,&lt;br /&gt;
		url = &amp;quot;http://www.theplacepeoplecangetthelatestversionofyourmod.com&amp;quot;,&lt;br /&gt;
		-- What kind of mod this is &lt;br /&gt;
		--  0 - Hidden (support mod that can&#039;t be selected, such as OTA_textures) &lt;br /&gt;
		--  1 - Normal, only one can be selected at a time &lt;br /&gt;
		--  2 - Addon, any number of these can be selected. Could be used &lt;br /&gt;
		--      for single units for example. &lt;br /&gt;
		--  others - perhaps mutators and addon races that can be &lt;br /&gt;
		--           enabled in addition to xta for example? &lt;br /&gt;
		modtype = &amp;quot;1&amp;quot;,&lt;br /&gt;
		-- Number of other archives this one depends on &lt;br /&gt;
		depend= {&lt;br /&gt;
			taenheter.sdz,&lt;br /&gt;
			springcontent.sdz,&lt;br /&gt;
			otacontent.sdz,&lt;br /&gt;
			tatextures.sdz,&lt;br /&gt;
			-- Number of other archives this one replaces&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Adding Your Unit to an Existing Mod====&lt;br /&gt;
The following is an example of what will be in your modinfo.lua file if you are adding new units to an existing mod (in this case xta_se_v066.sdz), this is good for adding units to the build tree of an existing mod or adding a whole new team.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Description of the mod control file recognized by spring:&lt;br /&gt;
return {&lt;br /&gt;
		-- The name is shown in the selection interface&lt;br /&gt;
		game = &amp;quot;XTASE_MyUnits&amp;quot;,&lt;br /&gt;
		shortGame = &amp;quot;XTASEMU&amp;quot;,&lt;br /&gt;
		name = &amp;quot;XTASEv0.66 with+My Units&amp;quot;,&lt;br /&gt;
		shortName = &amp;quot;XTASEMU&amp;quot;,&lt;br /&gt;
		version = &amp;quot;4.0&amp;quot;,&lt;br /&gt;
		mutator = &amp;quot;Heroes&amp;quot;,&lt;br /&gt;
		-- These can be shown by the selection interface&lt;br /&gt;
		description = &amp;quot;xta_se_v066 with the cool tank I made&amp;quot;,&lt;br /&gt;
		url = &amp;quot;http://www.fileuniverse.com/exactlocationblahblahblah&amp;quot;,&lt;br /&gt;
		-- What kind of mod this is &lt;br /&gt;
		--  0 - Hidden (support mod that can&#039;t be selected, such as OTA_textures) &lt;br /&gt;
		--  1 - Normal, only one can be selected at a time &lt;br /&gt;
		--  2 - Addon, any number of these can be selected. Could be used &lt;br /&gt;
		--      for single units for example. &lt;br /&gt;
		--  others - perhaps mutators and addon races that can be &lt;br /&gt;
		--           enabled in addition to xta for example? &lt;br /&gt;
		modtype = &amp;quot;1&amp;quot;,&lt;br /&gt;
		-- Number of other archives this one depends on &lt;br /&gt;
		depend= {&lt;br /&gt;
			taenheter.sdz,&lt;br /&gt;
			springcontent.sdz,&lt;br /&gt;
			otacontent.sdz,&lt;br /&gt;
			tatextures.sdz,&lt;br /&gt;
			xta_se_v066.sdz,&lt;br /&gt;
			-- Number of other archives this one replaces&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are not depending on OTA files, you will have to supply your own cursors.&lt;br /&gt;
&lt;br /&gt;
There are some extra bits in these examples, but I work on the &amp;quot;better safe than sorry&amp;quot; principle... which is to wait for someone who knows what they are doing to fix my articles. &lt;br /&gt;
&lt;br /&gt;
You will want to save this file as plain text in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/&lt;br /&gt;
&lt;br /&gt;
===Armor.txt===&lt;br /&gt;
&lt;br /&gt;
I&#039;m not exactly sure how this works, but the file needs to exist, so either steal one from another mod and modify it... or just make a file that looks like this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 // [UNITNAME]- Good Against Lazer/Bad Against Nukes&lt;br /&gt;
 [UNITNAME]&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will want to save this file as plain text in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/&lt;br /&gt;
&lt;br /&gt;
===SIDEDATA.TDF===&lt;br /&gt;
&lt;br /&gt;
Start by stealing the sidedata.tdf file from your dependency mod if you have one, then edit it to include your units/side.&lt;br /&gt;
&lt;br /&gt;
Basically this file is in the form:&lt;br /&gt;
&lt;br /&gt;
 [SIDE0]&lt;br /&gt;
 	{&lt;br /&gt;
 	name=Good Guys;&lt;br /&gt;
 	nameprefix=GG;&lt;br /&gt;
 	commander=UnitName1;&lt;br /&gt;
 	}&lt;br /&gt;
 [CANBUILD]&lt;br /&gt;
 	{&lt;br /&gt;
 	[UnitName1]&lt;br /&gt;
 		{&lt;br /&gt;
 		canbuild1=UnitName2;&lt;br /&gt;
 		canbuild2=UnitName3;&lt;br /&gt;
 		canbuild3=UnitName4;&lt;br /&gt;
 		canbuild4=UnitName5;&lt;br /&gt;
 		canbuild5=UnitName6;&lt;br /&gt;
 		}&lt;br /&gt;
 	}    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...with additional &amp;quot;[SIDEX]&amp;quot; entries for each side/team/commander-choice available in the mod-selector you choose, additional &amp;quot;[UnitName]&amp;quot; sections for each factory of construction unit, and additional &amp;quot;canbuildx=UnitName&amp;quot; entries to all factory/con-units that can build each unit.&lt;br /&gt;
&lt;br /&gt;
You will save this file as plain text in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/gamedata/&lt;br /&gt;
&lt;br /&gt;
===MOVEDATA.TDF===&lt;br /&gt;
This file determines the footprint of your units, the angle of slopes they can climb and in how deep water they can drive. It contains several entries, all in the following format:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[CLASS#] (Replace # with numbers, so you get entries CLASS0, CLASS1 etc.)&lt;br /&gt;
{&lt;br /&gt;
name=KBOT; (This is the name. FBI files refer to this name.)&lt;br /&gt;
footprintx=1; (This is how big the X dimension is of the footprint in Spring units probably?)&lt;br /&gt;
footprintz=1; (This is how big the Y dimension is of the footprint in Spring units probably?)&lt;br /&gt;
maxwaterdepth=5; (This is in how deep water the unit/unit class can walk.)&lt;br /&gt;
maxslope=36; (The maximum angle of slopes this unit can climb.)&lt;br /&gt;
crushstrength=10; (This determines if the unit/unit class can crush certain features)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
===SOUND.TDF===&lt;br /&gt;
This file refers to all the sounds your units make, so Spring knows which sound file is linked to what action. It contains entries in the following format.&lt;br /&gt;
[NAME] (The name of the unit class)&lt;br /&gt;
{&lt;br /&gt;
There are lots of different entries, I will list only the basic ones here for now.&lt;br /&gt;
select1=sound; (This entry determines what sound a unit makes if you click on it.&lt;br /&gt;
ok1=sound; (This entry determines what sound a unit makes if it does an action.&lt;br /&gt;
cant1=sound; (&amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; if it can&#039;t do an action.)&lt;br /&gt;
underattack=sound; (&amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; &amp;quot; if it is attacked)&lt;br /&gt;
count5-count0=sound; (These 6 entries determine how the self-destruct countdown times sounds like.&lt;br /&gt;
canceldestruct=sound; (A unit makes this sound if you cancel the self-destruct procedure)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==Step 7:Adding a Build Pic==&lt;br /&gt;
&lt;br /&gt;
Add a 96x96 BMP to your &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/unitpics/ folder named either &amp;quot;UnitName.bmp&amp;quot; or whatever you specified in the &amp;quot;BuildPic=&amp;quot; line of your fbi.&lt;br /&gt;
&lt;br /&gt;
==Step 8:Adding a Side Pic==&lt;br /&gt;
&lt;br /&gt;
Add a 16x16 BMP to your &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/sidepics/ folder named &amp;quot;teamname.bmp&amp;quot; or whatever you specified in the &amp;quot;name=&amp;quot; line of your SIDEDATA.TDF for each side/team you have added.&lt;br /&gt;
&lt;br /&gt;
==Step 9:Scriptor==&lt;br /&gt;
&lt;br /&gt;
===Stealing a Script===&lt;br /&gt;
Open someone else&#039;s script in scriptor that works the way you want your script to work, look at the top where it&#039;s talking about &amp;quot;piece names&amp;quot;... then change those piece names to be the piece names of your unit and do a find/replace to make all the places where those pieces show up to be your pieces too.  Compile it so its name is the same as the &amp;quot;UnitName=&amp;quot; value in your &amp;quot;UnitName.fbi&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
XXreminder to someone to link to a proper scripting tutorial&lt;br /&gt;
&lt;br /&gt;
Put the bos and cob files for your unit script in &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt;/scripts&lt;br /&gt;
&lt;br /&gt;
==Step 10:Compiling Your Mod==&lt;br /&gt;
&lt;br /&gt;
You may want to check your mod directory and make sure it follows the structure defined [[Mod_Development:Archives|here]].&lt;br /&gt;
&lt;br /&gt;
navigate to your &amp;lt;working directory&amp;gt;/&amp;lt;mod name&amp;gt; and select everything and choose &amp;quot;add to archive &amp;lt;mod name&amp;gt;.7z&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
make a copy of this file called &amp;lt;mod name&amp;gt;v0.7z in your working directory so you don&#039;t screw anything up later, then make a copy of it called &amp;lt;mod name&amp;gt;.sd7 in the mods directory of spring.&lt;br /&gt;
&lt;br /&gt;
An alternative, added in more recent versions is the &amp;quot;.SDD&amp;quot; folder, to use this, copy the entire &amp;lt;mod name&amp;gt; folder in the mods directory of spring and rename it as &amp;quot;&amp;lt;mod name&amp;gt;.SDD&amp;quot;.  The advantage to the &amp;quot;.SDD&amp;quot; method is that you can tweak settings and add files without recompressing your mod all the time.  When it comes time to distribute your mod use &amp;quot;.sd7&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
EXAMPLES:&lt;br /&gt;
If your mod is called JoesMod you will have a file called &amp;quot;JoesMod.sd7&amp;quot; or a folder called &amp;quot;JoesMod.SDD&amp;quot; in your spring mods directory.&lt;br /&gt;
&lt;br /&gt;
==Step 11:Testing Your Mod==&lt;br /&gt;
Open Up your lobby client, pick your mod from the drop-down list of the games in host battle or singleplayer mode if your lobby supports it(if it doesn&#039;t show up you screwed up your modinfo.txt), choose your tiny map from the map list and press start.  If it doesn&#039;t break and your unit shows up, you have created all the neccessary files... yay!&lt;br /&gt;
&lt;br /&gt;
Gotchas:&lt;br /&gt;
*If it doesn&#039;t work, check you didn&#039;t zip the folder itself, but the contents, ie if you open mymod.sd7 with 7zip, you should see folders such as &amp;quot;unittextures&amp;quot; rather than a folder &amp;quot;mymod&amp;quot; containing unittextures.&lt;br /&gt;
&lt;br /&gt;
[[Category:Mod development]]&lt;/div&gt;</summary>
		<author><name>Sdbryan</name></author>
	</entry>
</feed>