<?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=Evil4zerggin</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=Evil4zerggin"/>
	<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/wiki/Special:Contributions/Evil4zerggin"/>
	<updated>2026-11-08T22:53:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Animation-CobConstants&amp;diff=1927</id>
		<title>Animation-CobConstants</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Animation-CobConstants&amp;diff=1927"/>
		<updated>2009-02-16T19:55:36Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Source==&lt;br /&gt;
&lt;br /&gt;
This has a list of all COB SET/GET constants: https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Units/COB/CobInstance.cpp&lt;br /&gt;
&lt;br /&gt;
You&#039;ll want to include a file with these constants in your script.&lt;br /&gt;
&lt;br /&gt;
==SET/GET==&lt;br /&gt;
&lt;br /&gt;
===Use===&lt;br /&gt;
Use GET [tag] to get a value. Some GETs refer to functions; in this case, use GET [tag](arg1, arg2, arg3, arg4).&lt;br /&gt;
Use SET [tag] to [value] to change a value.&lt;br /&gt;
&lt;br /&gt;
===Tags===&lt;br /&gt;
There&#039;s a lot of GET/SET tags; I&#039;ll cover some of the more useful but less intuitive ones.&lt;br /&gt;
&lt;br /&gt;
*ACTIVATION: Whether the unit is on (true) or off (false).&lt;br /&gt;
*ARMORED: When true, any damage dealt to the unit will be multiplied by its damageModifier.&lt;br /&gt;
*PRINT: You can use GET PRINT to send up to 4 arguments to chat. Useful for debugging.&lt;br /&gt;
*VETERAN_LEVEL: The unit&#039;s experience times 100. Note that you can SET this via script, although the unit won&#039;t gain any extra health from doing so.&lt;br /&gt;
&lt;br /&gt;
=== Custom Variables ===&lt;br /&gt;
Higher GET/SET numbers are reserved for custom variables. These are very useful for Lua integration. Setting these variables is much (perhaps 100x) faster than calling functions across Lua and COB; the disadvantages are the limited number of variables and the fact that the other side is not immediately notified of a change in the variable.&lt;br /&gt;
&lt;br /&gt;
*Unit variables: The 8 numbers starting at 1024 correspond to per-unit variables. To get at these from Lua, use Spring.[Get|Set]COBUnitVar.&lt;br /&gt;
*Team variables: The 64 numbers starting at 2048 correspond to per-team variables. To get at these from Lua, use Spring.[Get|Set]COBTeamVar.&lt;br /&gt;
*Ally variables: The 64 numbers starting at 3072 correspond to per-team variables. To get at these from Lua, use Spring.[Get|Set]COBAllyTeamVar.&lt;br /&gt;
*Global variables: The 4096 numbers starting at 4096 correspond to global variables. To get at these from Lua, use Spring.[Get|Set]COBGlobalVar.&lt;br /&gt;
&lt;br /&gt;
==emit-sfx==&lt;br /&gt;
&lt;br /&gt;
 emit-sfx [sfxtype] from [piece];&lt;br /&gt;
&lt;br /&gt;
The least significant byte of sfxtype is treated as an unsigned integer; the remaining bits are a bitmask. The bitmask indicates what &#039;&#039;type&#039;&#039; of sfx to emit, while the number indicates &#039;&#039;which&#039;&#039; sfx of that type to emit. The bits are as follows:&lt;br /&gt;
&lt;br /&gt;
*256: Point-based fx. Used for white smoke (1), black smoke (2), and bubbles (3).&lt;br /&gt;
*1024: Unit sfx. Use with the unit&#039;s sfxtypes.explosionGenerators. The first one is 0, the second one is 1, etc.&lt;br /&gt;
*2048: Fire weapon. Fires a weapon from the piece (no aiming involved). Again, the first weapon is 0, the second weapon is 1, etc.&lt;br /&gt;
*4096: Explode weapon. Detonates a weapon at the piece. Again, the first weapon is 0, the second weapon is 1, etc.&lt;br /&gt;
&lt;br /&gt;
==explode==&lt;br /&gt;
&lt;br /&gt;
Causes the piece to explode and possibly go flying. This actually gives the appearance of making a copy of the piece (henceforth referred to as &amp;quot;debris&amp;quot;) so if you&#039;re using it outside of Killed() you may want to hide the piece in question.&lt;br /&gt;
&lt;br /&gt;
 explode [piece] type [exptype];&lt;br /&gt;
&lt;br /&gt;
exptype is a bitmask. The bits are as follows:&lt;br /&gt;
&lt;br /&gt;
*SHATTER: Explodes the debris into tiny triangles. Looks like confetti.&lt;br /&gt;
*EXPLODE_ON_HIT: Debris will explode on impact, causing about 40 damage.&lt;br /&gt;
*FALL: Debris is affected by gravity.&lt;br /&gt;
*SMOKE&lt;br /&gt;
*FIRE&lt;br /&gt;
*BITMAPONLY: No debris, just an explosion graphic.&lt;br /&gt;
*NOCEGTRAIL&lt;br /&gt;
*BITMAP[1...5]: Doesn&#039;t actually appear to do anything.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua:Main&amp;diff=10855</id>
		<title>Lua:Main</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua:Main&amp;diff=10855"/>
		<updated>2009-02-16T19:50:55Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Lua FAQ&#039;&#039;&#039;&amp;lt;br&amp;gt; &lt;br /&gt;
[[Lua_Beginners_FAQ]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[:Category:Lua]] (shows which interfaces are loaded by LuaUI,LuaRules,etc.)&amp;lt;br&amp;gt;&lt;br /&gt;
[http://spring.clan-sy.com/phpbb/viewtopic.php?f=23&amp;amp;t=15596 Forum topic with some basic information about gadgets]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://spring.clan-sy.com/phpbb/viewtopic.php?f=23&amp;amp;t=16223 Forum topic with a manual on Spring lua scripting]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Interfaces&#039;&#039;&#039; &amp;lt;font color=#55ee99&amp;gt;(last update: 76b1)&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
{{LuaInterfaces}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Other useful information&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[LuaCallinReturn]]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://spring.clan-sy.com/wiki/COB_Constants#Custom_Variables COB Custom Variables] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Official Lua documentation&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.lua.org/pil/ &#039;Programming in Lua&#039; book online]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.lua.org/manual/5.1/ Lua 5.1 Reference manual]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://lua-users.org/wiki/TutorialDirectory Lua tutorials]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;old Wikis&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(outdated)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_SyncedInterface]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Units:LuaCOB]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_Startscripts]]&amp;lt;/font&amp;gt;&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua:Main&amp;diff=10854</id>
		<title>Lua:Main</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua:Main&amp;diff=10854"/>
		<updated>2009-02-16T19:49:52Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Lua FAQ&#039;&#039;&#039;&amp;lt;br&amp;gt; &lt;br /&gt;
[[Lua_Beginners_FAQ]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[:Category:Lua]] (shows which interfaces are loaded by LuaUI,LuaRules,etc.)&amp;lt;br&amp;gt;&lt;br /&gt;
[http://spring.clan-sy.com/phpbb/viewtopic.php?f=23&amp;amp;t=15596 Forum topic with some basic information about gadgets]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://spring.clan-sy.com/phpbb/viewtopic.php?f=23&amp;amp;t=16223 Forum topic with a manual on Spring lua scripting]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Interfaces&#039;&#039;&#039; &amp;lt;font color=#55ee99&amp;gt;(last update: 76b1)&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
{{LuaInterfaces}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Other useful tables&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[LuaCallinReturn]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Official Lua documentation&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.lua.org/pil/ &#039;Programming in Lua&#039; book online]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.lua.org/manual/5.1/ Lua 5.1 Reference manual]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://lua-users.org/wiki/TutorialDirectory Lua tutorials]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;old Wikis&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(outdated)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_SyncedInterface]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Units:LuaCOB]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_Startscripts]]&amp;lt;/font&amp;gt;&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Animation-CobConstants&amp;diff=1926</id>
		<title>Animation-CobConstants</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Animation-CobConstants&amp;diff=1926"/>
		<updated>2009-02-16T19:48:49Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Source==&lt;br /&gt;
&lt;br /&gt;
This has a list of all COB SET/GET constants: https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Units/COB/CobInstance.cpp&lt;br /&gt;
&lt;br /&gt;
You&#039;ll want to include a file with these constants in your script.&lt;br /&gt;
&lt;br /&gt;
==SET/GET==&lt;br /&gt;
&lt;br /&gt;
===Use===&lt;br /&gt;
Use GET [tag] to get a value. Some GETs refer to functions; in this case, use GET [tag](arg1, arg2, arg3, arg4).&lt;br /&gt;
Use SET [tag] to [value] to change a value.&lt;br /&gt;
&lt;br /&gt;
===Tags===&lt;br /&gt;
There&#039;s a lot of GET/SET tags; I&#039;ll cover some of the more useful but less intuitive ones.&lt;br /&gt;
&lt;br /&gt;
*ACTIVATION: Whether the unit is on (true) or off (false).&lt;br /&gt;
*ARMORED: When true, any damage dealt to the unit will be multiplied by its damageModifier.&lt;br /&gt;
*PRINT: You can use GET PRINT to send up to 4 arguments to chat. Useful for debugging.&lt;br /&gt;
*VETERAN_LEVEL: The unit&#039;s experience times 100. Note that you can SET this via script, although the unit won&#039;t gain any extra health from doing so.&lt;br /&gt;
&lt;br /&gt;
=== Custom Variables ===&lt;br /&gt;
Higher GET/SET numbers are reserved for custom variables. These are very useful for Lua integration. Setting these variables is much (perhaps 100x) faster than calling functions across Lua and COB; the disadvantages are the limited number of variables and the fact that the other side is not immediately notified of a change in the variable.&lt;br /&gt;
&lt;br /&gt;
*Unit variables: The 8 numbers starting at 1024 correspond to per-unit variables. To get at these from Lua, use Spring.[Get|Set]GetCOBUnitVar.&lt;br /&gt;
*Team variables: The 64 numbers starting at 2048 correspond to per-team variables. To get at these from Lua, use Spring.[Get|Set]GetCOBTeamVar.&lt;br /&gt;
*Ally variables: The 64 numbers starting at 3072 correspond to per-team variables. To get at these from Lua, use Spring.[Get|Set]GetCOBAllyTeamVar.&lt;br /&gt;
*Global variables: The 4096 numbers starting at 4096 correspond to global variables. To get at these from Lua, use Spring.[Get|Set]GetCOBGlobalVar.&lt;br /&gt;
&lt;br /&gt;
==emit-sfx==&lt;br /&gt;
&lt;br /&gt;
 emit-sfx [sfxtype] from [piece];&lt;br /&gt;
&lt;br /&gt;
The least significant byte of sfxtype is treated as an unsigned integer; the remaining bits are a bitmask. The bitmask indicates what &#039;&#039;type&#039;&#039; of sfx to emit, while the number indicates &#039;&#039;which&#039;&#039; sfx of that type to emit. The bits are as follows:&lt;br /&gt;
&lt;br /&gt;
*256: Point-based fx. Used for white smoke (1), black smoke (2), and bubbles (3).&lt;br /&gt;
*1024: Unit sfx. Use with the unit&#039;s sfxtypes.explosionGenerators. The first one is 0, the second one is 1, etc.&lt;br /&gt;
*2048: Fire weapon. Fires a weapon from the piece (no aiming involved). Again, the first weapon is 0, the second weapon is 1, etc.&lt;br /&gt;
*4096: Explode weapon. Detonates a weapon at the piece. Again, the first weapon is 0, the second weapon is 1, etc.&lt;br /&gt;
&lt;br /&gt;
==explode==&lt;br /&gt;
&lt;br /&gt;
Causes the piece to explode and possibly go flying. This actually gives the appearance of making a copy of the piece (henceforth referred to as &amp;quot;debris&amp;quot;) so if you&#039;re using it outside of Killed() you may want to hide the piece in question.&lt;br /&gt;
&lt;br /&gt;
 explode [piece] type [exptype];&lt;br /&gt;
&lt;br /&gt;
exptype is a bitmask. The bits are as follows:&lt;br /&gt;
&lt;br /&gt;
*SHATTER: Explodes the debris into tiny triangles. Looks like confetti.&lt;br /&gt;
*EXPLODE_ON_HIT: Debris will explode on impact, causing about 40 damage.&lt;br /&gt;
*FALL: Debris is affected by gravity.&lt;br /&gt;
*SMOKE&lt;br /&gt;
*FIRE&lt;br /&gt;
*BITMAPONLY: No debris, just an explosion graphic.&lt;br /&gt;
*NOCEGTRAIL&lt;br /&gt;
*BITMAP[1...5]: Doesn&#039;t actually appear to do anything.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Animation-CobConstants&amp;diff=1925</id>
		<title>Animation-CobConstants</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Animation-CobConstants&amp;diff=1925"/>
		<updated>2009-02-16T19:46:31Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Source==&lt;br /&gt;
&lt;br /&gt;
This has a list of all COB SET/GET constants: https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Units/COB/CobInstance.cpp&lt;br /&gt;
&lt;br /&gt;
You&#039;ll want to include a file with these constants in your script.&lt;br /&gt;
&lt;br /&gt;
==SET/GET==&lt;br /&gt;
&lt;br /&gt;
===Use===&lt;br /&gt;
Use GET [tag] to get a value. Some GETs refer to functions; in this case, use GET [tag](arg1, arg2, arg3, arg4).&lt;br /&gt;
Use SET [tag] to [value] to change a value.&lt;br /&gt;
&lt;br /&gt;
===Tags===&lt;br /&gt;
There&#039;s a lot of GET/SET tags; I&#039;ll cover some of the more useful but less intuitive ones.&lt;br /&gt;
&lt;br /&gt;
*ACTIVATION: Whether the unit is on (true) or off (false).&lt;br /&gt;
*ARMORED: When true, any damage dealt to the unit will be multiplied by its damageModifier.&lt;br /&gt;
*PRINT: You can use GET PRINT to send up to 4 arguments to chat. Useful for debugging.&lt;br /&gt;
*VETERAN_LEVEL: The unit&#039;s experience times 100. Note that you can SET this via script, although the unit won&#039;t gain any extra health from doing so.&lt;br /&gt;
&lt;br /&gt;
=== Custom Variables ===&lt;br /&gt;
Higher GET/SET numbers are reserved for custom variables. These are very useful for Lua integration. Setting these variables is much (perhaps 100x) faster than calling functions across Lua and COB; the disadvantages are the limited number of variables and the fact that the other side is not immediately notified of a change in the variable.&lt;br /&gt;
&lt;br /&gt;
*Unit variables: The 8 numbers starting at 1024 correspond to per-unit variables.&lt;br /&gt;
*Team variables: The 64 numbers starting at 2048 correspond to per-team variables. This is &amp;quot;team&amp;quot; in the old terminology; now we call them players.&lt;br /&gt;
*Ally variables: The 64 numbers starting at 3072 correspond to per-team variables. This is &amp;quot;ally&amp;quot; in the old terminology; now we call them teams.&lt;br /&gt;
*Global variables: The 4096 numbers starting at 4096 correspond to global variables.&lt;br /&gt;
&lt;br /&gt;
==emit-sfx==&lt;br /&gt;
&lt;br /&gt;
 emit-sfx [sfxtype] from [piece];&lt;br /&gt;
&lt;br /&gt;
The least significant byte of sfxtype is treated as an unsigned integer; the remaining bits are a bitmask. The bitmask indicates what &#039;&#039;type&#039;&#039; of sfx to emit, while the number indicates &#039;&#039;which&#039;&#039; sfx of that type to emit. The bits are as follows:&lt;br /&gt;
&lt;br /&gt;
*256: Point-based fx. Used for white smoke (1), black smoke (2), and bubbles (3).&lt;br /&gt;
*1024: Unit sfx. Use with the unit&#039;s sfxtypes.explosionGenerators. The first one is 0, the second one is 1, etc.&lt;br /&gt;
*2048: Fire weapon. Fires a weapon from the piece (no aiming involved). Again, the first weapon is 0, the second weapon is 1, etc.&lt;br /&gt;
*4096: Explode weapon. Detonates a weapon at the piece. Again, the first weapon is 0, the second weapon is 1, etc.&lt;br /&gt;
&lt;br /&gt;
==explode==&lt;br /&gt;
&lt;br /&gt;
Causes the piece to explode and possibly go flying. This actually gives the appearance of making a copy of the piece (henceforth referred to as &amp;quot;debris&amp;quot;) so if you&#039;re using it outside of Killed() you may want to hide the piece in question.&lt;br /&gt;
&lt;br /&gt;
 explode [piece] type [exptype];&lt;br /&gt;
&lt;br /&gt;
exptype is a bitmask. The bits are as follows:&lt;br /&gt;
&lt;br /&gt;
*SHATTER: Explodes the debris into tiny triangles. Looks like confetti.&lt;br /&gt;
*EXPLODE_ON_HIT: Debris will explode on impact, causing about 40 damage.&lt;br /&gt;
*FALL: Debris is affected by gravity.&lt;br /&gt;
*SMOKE&lt;br /&gt;
*FIRE&lt;br /&gt;
*BITMAPONLY: No debris, just an explosion graphic.&lt;br /&gt;
*NOCEGTRAIL&lt;br /&gt;
*BITMAP[1...5]: Doesn&#039;t actually appear to do anything.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitDefs&amp;diff=12117</id>
		<title>Lua UnitDefs</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitDefs&amp;diff=12117"/>
		<updated>2009-01-12T19:36:02Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font style=&amp;quot;font-size:125%&amp;quot; color=&amp;quot;#55ee99&amp;quot;&amp;gt;The UnitDefs[] table holds all information about the units used in the mod.&lt;br /&gt;
Note: Its entries are metatables, so you can&#039;t use the pairs() iterator on them, use this instead:&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font style=&amp;quot;font-size:110%&amp;quot; color=&amp;quot;lightblue&amp;quot;&amp;gt;&lt;br /&gt;
  for id,unitDef in pairs(UnitDefs) do&lt;br /&gt;
    for name,param in unitDef:pairs() do&lt;br /&gt;
      Spring.Echo(name,param)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font style=&amp;quot;font-size:125%&amp;quot; color=&amp;quot;#55ee99&amp;quot;&amp;gt;Very usefull is UnitDefs[i][&amp;quot;customParams&amp;quot;], since you can access any custom fbi param with it and use it in your lua scripts.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font style=&amp;quot;font-size:125%&amp;quot; color=&amp;quot;#55ee99&amp;quot;&amp;gt;So because the UnitDefs tables are very large, I simple print here an example of it (BA5.8 core commander):&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;customParams&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
    } &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Variable names written must be lowercase and variables can only be strings.&amp;lt;/font&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;TEDClass&amp;quot;]&#039;&#039;&#039; = &amp;quot;COMMANDER&amp;quot;,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;activateWhenBuilt&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;aihint&amp;quot;]&#039;&#039;&#039; = 216,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;cobID&amp;quot;]&#039;&#039;&#039; = -1,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;airLosRadius&amp;quot;]&#039;&#039;&#039; = 21.09375,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;airStrafe&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;armorType&amp;quot;]&#039;&#039;&#039; = 8,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;armoredMultiple&amp;quot;]&#039;&#039;&#039; = 1,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;autoHeal&amp;quot;]&#039;&#039;&#039; = 2.6666667461395,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;bankingAllowed&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;buildDistance&amp;quot;]&#039;&#039;&#039; = 128,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;buildOptions&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
      &#039;&#039;&#039;[1]&#039;&#039;&#039; = unitDefID1,&lt;br /&gt;
      &#039;&#039;&#039;[2]&#039;&#039;&#039; = unitDefID2,&lt;br /&gt;
      ...&lt;br /&gt;
    }&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;buildRange3D&amp;quot;] = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;buildSpeed&amp;quot;]&#039;&#039;&#039; = 300,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;buildTime&amp;quot;]&#039;&#039;&#039; = 75000,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;buildangle&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;builder&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;buildingDecalDecaySpeed&amp;quot;]&#039;&#039;&#039; = 0.10000000149012,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;buildingDecalSizeX&amp;quot;]&#039;&#039;&#039; = 4,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;buildingDecalSizeY&amp;quot;]&#039;&#039;&#039; = 4,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;buildingDecalType&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;buildpicname&amp;quot;]&#039;&#039;&#039; = &amp;quot;CORCOM.DDS&amp;quot;,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canAssist&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canAttack&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canBeAssisted&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canBuild&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canCapture&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canCloak&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canCrash&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canDGun&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canDropFlare&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canFight&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canFireControl&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canFly&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canGuard&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canHover&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canKamikaze&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canLoopbackAttack&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canMove&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canPatrol&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canReclaim&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canRepair&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canRepeat&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canRestore&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canResurrect&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canSelfRepair&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;canSubmerge&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;capturable&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;captureSpeed&amp;quot;]&#039;&#039;&#039; = 300,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;cloakCost&amp;quot;]&#039;&#039;&#039; = 100,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;cloakCostMoving&amp;quot;]&#039;&#039;&#039; = 1000,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;collide&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;controlRadius&amp;quot;]&#039;&#039;&#039; = 32,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;crashDrag&amp;quot;]&#039;&#039;&#039; = 32,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;deathExplosion&amp;quot;]&#039;&#039;&#039; = &amp;quot;COMMANDER_BLAST&amp;quot;,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;decloakDistance&amp;quot;]&#039;&#039;&#039; = 50,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;decloakOnFire&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;decloakSpherical&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;decoyDef&amp;quot;]&#039;&#039;&#039; = nil, &lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;dlHoverFactor&amp;quot;]&#039;&#039;&#039; = -1,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;drag&amp;quot;]&#039;&#039;&#039; = 0.13046109676361,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;energyCost&amp;quot;]&#039;&#039;&#039; = 2500,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;energyMake&amp;quot;]&#039;&#039;&#039; = 25,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;energyStorage&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;energyUpkeep&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;extractRange&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;extractsMetal&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;extractSquare&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;factoryHeadingTakeoff&amp;quot;] = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;fallSpeed&amp;quot;]&#039;&#039;&#039; = 1,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;filename&amp;quot;]&#039;&#039;&#039; = &amp;quot;units/corcom.fbi&amp;quot;,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;fireState&amp;quot;]&#039;&#039;&#039; = 1,&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;flankingBonusMode&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;flankingBonusMax&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;flankingBonusMin&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;flankingBonusDirX&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;flankingBonusDirY&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;flankingBonusDirZ&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;flankingBonusMobilityAdd&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;flareDelay&amp;quot;]&#039;&#039;&#039; = 0.30000001192093,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;flareDropVectorX&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;flareDropVectorY&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;flareDropVectorZ&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;flareEfficiency&amp;quot;]&#039;&#039;&#039; = 0.5,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;flareReloadTime&amp;quot;]&#039;&#039;&#039; = 5,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;flareSalvoDelay&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;flareSalvoSize&amp;quot;]&#039;&#039;&#039; = 4,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;flareTime&amp;quot;]&#039;&#039;&#039; = 90,&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;floater&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;frontToSpeed&amp;quot;]&#039;&#039;&#039; = 0.10000000149012,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;fullHealthFactory&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;gaia&amp;quot;]&#039;&#039;&#039; = &amp;quot;&amp;quot;,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;health&amp;quot;]&#039;&#039;&#039; = 3000,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;height&amp;quot;]&#039;&#039;&#039; = 42.333557128906,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;hideDamage&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;highTrajectoryType&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;holdSteady&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;hoverAttack&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;humanName&amp;quot;]&#039;&#039;&#039; = &amp;quot;Commander&amp;quot;,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;iconType&amp;quot;]&#039;&#039;&#039; = &amp;quot;corcommander&amp;quot;,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;id&amp;quot;]&#039;&#039;&#039; = 216,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;idleAutoHeal&amp;quot;]&#039;&#039;&#039; = 2.6666667461395,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;idleTime&amp;quot;]&#039;&#039;&#039; = 1800,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;isAirBase&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;isBomber&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;isBuilder&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;isBuilding&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;isCommander&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;isFactory&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;isFeature&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;isFighter&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;isFirePlatform&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;isGroundUnit&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;isMetalExtractor&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;isMetalMaker&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;isTransport&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;jammerRadius&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;kamikazeDist&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;leaveTracks&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;levelGround&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;loadingRadius&amp;quot;]&#039;&#039;&#039; = 220,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;losHeight&amp;quot;]&#039;&#039;&#039; = 20,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;losRadius&amp;quot;]&#039;&#039;&#039; = 28.125,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;makesMetal&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;mass&amp;quot;]&#039;&#039;&#039; = 5000,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;maxAcc&amp;quot;]&#039;&#039;&#039; = 0.18000000715256,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;maxAileron&amp;quot;]&#039;&#039;&#039; = 0.014999999664724,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;maxBank&amp;quot;]&#039;&#039;&#039; = 0.80000001192093,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;maxCoverage&amp;quot;]&#039;&#039;&#039; = 1000.0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;maxDec&amp;quot;]&#039;&#039;&#039; = 0.037500001490116,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;maxElevator&amp;quot;]&#039;&#039;&#039; = 0.0099999997764826,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;maxFuel&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;maxHeightDif&amp;quot;]&#039;&#039;&#039; = 14.558809280396,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;maxPitch&amp;quot;]&#039;&#039;&#039; = 0.44999998807907,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;maxRepairSpeed&amp;quot;]&#039;&#039;&#039; = 300,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;maxRudder&amp;quot;]&#039;&#039;&#039; = 0.0040000001899898,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;maxSlope&amp;quot;]&#039;&#039;&#039; = 0.93969261646271,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;maxThisUnit&amp;quot;]&#039;&#039;&#039; = 5000,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;maxWaterDepth&amp;quot;]&#039;&#039;&#039; = 35,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;maxWeaponRange&amp;quot;]&#039;&#039;&#039; = 300,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;maxx&amp;quot;]&#039;&#039;&#039; = 17.456253051758,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;maxy&amp;quot;]&#039;&#039;&#039; = 42.333557128906,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;maxz&amp;quot;]&#039;&#039;&#039; = 22.837493896484,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;metalCost&amp;quot;]&#039;&#039;&#039; = 2500,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;metalMake&amp;quot;]&#039;&#039;&#039; = 1.5,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;metalStorage&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;metalUpkeep&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;midx&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;midy&amp;quot;]&#039;&#039;&#039; = 19.558204650879,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;midz&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;minAirBasePower&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;minCollisionSpeed&amp;quot;]&#039;&#039;&#039; = 1,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;minWaterDepth&amp;quot;]&#039;&#039;&#039; = -10000000,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;minx&amp;quot;]&#039;&#039;&#039; = -17.456253051758,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;miny&amp;quot;]&#039;&#039;&#039; = -3.2171478271484,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;minz&amp;quot;]&#039;&#039;&#039; = -9.9750061035156,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;modCategories&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;notship&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;notair&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;core&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;commander&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;all&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;level10&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;ctrl_c&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;notsub&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;weapon&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
    }&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;model&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;textures&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
      }&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;type&amp;quot;]&#039;&#039;&#039; = &amp;quot;3do&amp;quot;,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;name&amp;quot;]&#039;&#039;&#039; = &amp;quot;CORCOM&amp;quot;,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;path&amp;quot;]&#039;&#039;&#039; = &amp;quot;objects3d/CORCOM&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;moveData&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;name&amp;quot;]&#039;&#039;&#039; = &amp;quot;KBOT3&amp;quot;,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;type&amp;quot;]&#039;&#039;&#039; = &amp;quot;ground&amp;quot;,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;maxSlope&amp;quot;]&#039;&#039;&#039; = 0.41221475601196,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;id&amp;quot;]&#039;&#039;&#039; = 2,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;depthMod&amp;quot;]&#039;&#039;&#039; = 0.10000000149012,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;crushStrength&amp;quot;]&#039;&#039;&#039; = 50,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;family&amp;quot;]&#039;&#039;&#039; = &amp;quot;kbot&amp;quot;,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;depth&amp;quot;]&#039;&#039;&#039; = 5000,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;slopeMod&amp;quot;]&#039;&#039;&#039; = 9.680196762085,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;size&amp;quot;]&#039;&#039;&#039; = 4,&lt;br /&gt;
    }&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;moveState&amp;quot;]&#039;&#039;&#039; = 1,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;moveType&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;myGravity&amp;quot;]&#039;&#039;&#039; = 0.40000000596046,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;name&amp;quot;]&#039;&#039;&#039; = &amp;quot;corcom&amp;quot;,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;nanoColorB&amp;quot;]&#039;&#039;&#039; = 0.20000000298023,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;nanoColorG&amp;quot;]&#039;&#039;&#039; = 0.69999998807907,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;nanoColorR&amp;quot;]&#039;&#039;&#039; = 0.20000000298023,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;needGeo&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;noChaseCategories&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;all&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
    }&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;onOffable&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;pieceTrailCEGTag&amp;quot;]&#039;&#039;&#039; = &amp;quot;&amp;quot;,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;pieceTrailCEGRange&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;power&amp;quot;]&#039;&#039;&#039; = 2541.6667480469,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;radarRadius&amp;quot;]&#039;&#039;&#039; = 700,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;radius&amp;quot;]&#039;&#039;&#039; = 24.740692138672,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;reclaimSpeed&amp;quot;]&#039;&#039;&#039; = 300,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;reclaimable&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;refuelTime&amp;quot;]&#039;&#039;&#039; = 5,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;releaseHeld&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;repairSpeed&amp;quot;]&#039;&#039;&#039; = 300,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;resurrectSpeed&amp;quot;]&#039;&#039;&#039; = 300,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;scriptName&amp;quot;]&#039;&#039;&#039; = &amp;quot;armcom.cob&amp;quot;,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;scriptPath&amp;quot;]&#039;&#039;&#039; = &amp;quot;scripts/armcom.cob&amp;quot;,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;seismicRadius&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;seismicSignature&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;selfDCountdown&amp;quot;]&#039;&#039;&#039; = 5,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;selfDExplosion&amp;quot;]&#039;&#039;&#039; = &amp;quot;COMMANDER_BLAST&amp;quot;,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;shieldWeaponDef&amp;quot;]&#039;&#039;&#039; = nil, &lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;showNanoFrame&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;showNanoSpray&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;showPlayerName&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;slideTolerance&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;smoothAnim&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;sonarJamRadius&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;sonarRadius&amp;quot;]&#039;&#039;&#039; = 300,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;sonarStealth&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;sounds&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;repair&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
      }&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;arrived&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
      }&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;underattack&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
        &#039;&#039;&#039;[1]&#039;&#039;&#039; = {&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;id&amp;quot;]&#039;&#039;&#039; = 140,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;name&amp;quot;]&#039;&#039;&#039; = &amp;quot;warning2&amp;quot;,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;volume&amp;quot;]&#039;&#039;&#039; = 5,&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;select&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
        &#039;&#039;&#039;[1]&#039;&#039;&#039; = {&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;id&amp;quot;]&#039;&#039;&#039; = 213,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;name&amp;quot;]&#039;&#039;&#039; = &amp;quot;kccorsel&amp;quot;,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;volume&amp;quot;]&#039;&#039;&#039; = 5,&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;deactivate&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
      }&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;activate&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
      }&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;ok&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
        &#039;&#039;&#039;[1]&#039;&#039;&#039; = {&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;id&amp;quot;]&#039;&#039;&#039; = 212,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;name&amp;quot;]&#039;&#039;&#039; = &amp;quot;kcormov&amp;quot;,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;volume&amp;quot;]&#039;&#039;&#039; = 5,&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;cant&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
        &#039;&#039;&#039;[1]&#039;&#039;&#039; = {&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;id&amp;quot;]&#039;&#039;&#039; = 92,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;name&amp;quot;]&#039;&#039;&#039; = &amp;quot;cantdo4&amp;quot;,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;volume&amp;quot;]&#039;&#039;&#039; = 5,&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;working&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
      }&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;build&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
        &#039;&#039;&#039;[1]&#039;&#039;&#039; = {&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;id&amp;quot;]&#039;&#039;&#039; = 197,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;name&amp;quot;]&#039;&#039;&#039; = &amp;quot;nanlath2&amp;quot;,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;volume&amp;quot;]&#039;&#039;&#039; = 5,&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;speed&amp;quot;]&#039;&#039;&#039; = 37.5,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;speedToFront&amp;quot;]&#039;&#039;&#039; = 0.070000000298023,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;springCategories&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;commander&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;notship&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;notair&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;all&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;notsub&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
      &#039;&#039;&#039;[&amp;quot;weapon&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
    }&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;startCloaked&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;stealth&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;stockpileWeaponDef&amp;quot;]&#039;&#039;&#039; = nil, &lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;strafeToAttack&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;targfac&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;techLevel&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;terraformSpeed&amp;quot;]&#039;&#039;&#039; = 300,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;tidalGenerator&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;tooltip&amp;quot;]&#039;&#039;&#039; = &amp;quot;Commander&amp;quot;,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;totalEnergyOut&amp;quot;]&#039;&#039;&#039; = 25,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;trackOffset&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;trackStrength&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;trackStretch&amp;quot;]&#039;&#039;&#039; = 1,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;trackType&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;trackWidth&amp;quot;]&#039;&#039;&#039; = 32,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;transportByEnemy&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;transportCapacity&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;transportMass&amp;quot;]&#039;&#039;&#039; = 100000,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;transportSize&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;transportUnloadMethod&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;turnRadius&amp;quot;]&#039;&#039;&#039; = 500,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;turnRate&amp;quot;]&#039;&#039;&#039; = 1133,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;type&amp;quot;]&#039;&#039;&#039; = &amp;quot;Builder&amp;quot;,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;unitFallSpeed&amp;quot;]&#039;&#039;&#039; = 1.0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;upright&amp;quot;]&#039;&#039;&#039; = true,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;useBuildingGroundDecal&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;wantedHeight&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;waterline&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;weapons&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
      &#039;&#039;&#039;[1]&#039;&#039;&#039; = {&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;onlyTargets&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;antiflame&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;vtol&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;notland&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;fort&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;special&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;notair&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;kbot&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;antiemg&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;commander&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;jam&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;tport&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;constr&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;strategic&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;kamikaze&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;minelayer&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;hover&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;noweapon&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;plant&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;ship&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;antilaser&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;phib&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;mine&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;notstructure&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;tank&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;mobile&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;underwater&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;antigator&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;notship&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;all&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;notsub&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;weapon&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
        }&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;weaponDef&amp;quot;]&#039;&#039;&#039; = 39,&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;slavedTo&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;badTargets&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;antilaser&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
        }&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;fuelUsage&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;mainDirX&amp;quot;]&#039;&#039;&#039;  = 0,&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;mainDirY&amp;quot;]&#039;&#039;&#039;  = 0,&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;mainDirZ&amp;quot;]&#039;&#039;&#039;  = 1,&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;maxAngleDif&amp;quot;]&#039;&#039;&#039; = -1,&lt;br /&gt;
      }&lt;br /&gt;
      &#039;&#039;&#039;[2]&#039;&#039;&#039; = {&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;onlyTargets&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
        }&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;weaponDef&amp;quot;]&#039;&#039;&#039; = 195,&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;slavedTo&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;badTargets&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
        }&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;fuelUsage&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;maxAngleDif&amp;quot;]&#039;&#039;&#039; = -1,&lt;br /&gt;
      }&lt;br /&gt;
      &#039;&#039;&#039;[3]&#039;&#039;&#039; = {&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;onlyTargets&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;antiflame&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;vtol&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;notland&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;fort&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;special&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;notair&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;kbot&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;antiemg&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;commander&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;jam&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;tport&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;constr&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;strategic&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;kamikaze&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;minelayer&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;hover&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;noweapon&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;plant&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;ship&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;antilaser&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;phib&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;mine&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;notstructure&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;tank&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;mobile&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;underwater&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;antigator&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;notship&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;all&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;notsub&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
          &#039;&#039;&#039;[&amp;quot;weapon&amp;quot;]&#039;&#039;&#039; = false,&lt;br /&gt;
        }&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;weaponDef&amp;quot;]&#039;&#039;&#039; = 13,&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;slavedTo&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;badTargets&amp;quot;]&#039;&#039;&#039; = {&lt;br /&gt;
        }&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;fuelUsage&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
        &#039;&#039;&#039;[&amp;quot;maxAngleDif&amp;quot;]&#039;&#039;&#039; = -1,&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;windGenerator&amp;quot;]&#039;&#039;&#039; = 0,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;wingAngle&amp;quot;]&#039;&#039;&#039; = 0.079999998211861,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;wingDrag&amp;quot;]&#039;&#039;&#039; = 0.070000000298023,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;wreckName&amp;quot;]&#039;&#039;&#039; = &amp;quot;CORCOM_DEAD&amp;quot;,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;verticalSpeed&amp;quot;]&#039;&#039;&#039; = 4,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;xsize&amp;quot;]&#039;&#039;&#039; = 4,&lt;br /&gt;
  &#039;&#039;&#039;UnitDefs[&#039;&#039;&#039;216&#039;&#039;&#039;][&amp;quot;ysize&amp;quot;]&#039;&#039;&#039; = 4,&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Miscellaneous&amp;diff=3908</id>
		<title>CEG:Miscellaneous</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Miscellaneous&amp;diff=3908"/>
		<updated>2009-01-09T03:37:39Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Blending ==&lt;br /&gt;
&lt;br /&gt;
CEGs use the blending mode GL_ONE, GL_ONE_MINUS_SRC_ALPHA. This is in contrast to the default GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA. As far as I can tell, this means that the alpha determines how much of whatever is behind the particle will show through, but doesn&#039;t affect how the particle itself looks. If you want default blending, you&#039;ll have to scale the color components by the alpha by hand if the class you&#039;re using doesn&#039;t do it for you. (Most classes don&#039;t) Note that an alpha of zero will cause the CEG not to be displayed at all. &lt;br /&gt;
&lt;br /&gt;
=== Z-Fighting ===&lt;br /&gt;
&lt;br /&gt;
A related problem is Z-fighting. If you have several high-alpha particles moving through each other, you may get an undesirable flickering effect as one particle is drawn at first, then the other. To solve this, reduce the alpha.&lt;br /&gt;
&lt;br /&gt;
== Things To Consider When Making a CEG ==&lt;br /&gt;
&lt;br /&gt;
=== Realism ===&lt;br /&gt;
&lt;br /&gt;
While it&#039;s important to make sure a CEG doesn&#039;t look completely implausible, don&#039;t get too hung up on realism. In almost any RTS, concessions are made for gameplay at the cost of a bit of realism; likewise with CEGs, you&#039;ll need to make some concessions for looking cool.&lt;br /&gt;
&lt;br /&gt;
=== Gameplay ===&lt;br /&gt;
&lt;br /&gt;
As well as looking cool, CEGs are an important part of gameplay. They let players know when things are happening and where they are happening. CEGs should give clues as to what is happening in the mechanics of the game. A powerful weapon should have a powerful-looking CEG; a blast that affects a large area should have a large CEG. Use the alwaysVisisble and useAirLos tags where appropriate. Hopefully we will eventually have a radius operator so CEGs can automatically be scaled to the radius of the weapon.&lt;br /&gt;
&lt;br /&gt;
At the same time, you don&#039;t want to obstruct players&#039; views of the game. A CEG should look cool for a moment, and then get out of the way.&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
&lt;br /&gt;
Bascially, try not to use more particles than necessary, and try not to use them longer than necessary. Be aware of how often you expect your CEG to run; if it&#039;s a commander death or a nuclear missile, you can afford to spend some extra particles, but if it&#039;s a machine gun or a cegtag (which is called every frame), you&#039;ll want to keep it down.&lt;br /&gt;
&lt;br /&gt;
=== Randomness ===&lt;br /&gt;
&lt;br /&gt;
Always put a little randomness in your CEGs. CEGs are more interesting if they happen a little differently every time, especially if your CEG gets called more than once at the same time on the same screen.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3775</id>
		<title>CEG-Classes</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3775"/>
		<updated>2009-01-09T03:34:55Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;
https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Projectiles/Unsynced/&lt;br /&gt;
&lt;br /&gt;
== Common Properties ==&lt;br /&gt;
All classes have the following properties, although not all of them use them:&lt;br /&gt;
&lt;br /&gt;
*pos (float3): The initial position of the spawner.&lt;br /&gt;
*useAirLos (bool): Whether the spawner uses air LoS to determine if it is visible. This may allow the spawner to be seen from a further distance than normal.&lt;br /&gt;
*alwaysVisible (bool): If true, the spawner is always visible, ignoring LoS.&lt;br /&gt;
*speed (float3): The initial speed of the spawner.&lt;br /&gt;
&lt;br /&gt;
== CExpGenSpawner ==&lt;br /&gt;
This is the closest thing CEG has to a function call. Instead of creating a graphical effect on its own, it creates another CEG.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
&lt;br /&gt;
*delay (int): How long to wait before spawning the CEG.&lt;br /&gt;
*dir (float3): The CEG will be called with this direction.&lt;br /&gt;
*damage (float): The CEG will be called with this damage. The CEG doesn&#039;t actually deal any damage, but you can use this as a parameter and read it using the &#039;d&#039; operator.&lt;br /&gt;
*explosionGenerator (string): The name of the CEG you want to spawn.&lt;br /&gt;
&lt;br /&gt;
Suggested Use: &lt;br /&gt;
*If you use a spawner a lot of times, you may want to make it a separate CEG to avoid having to copy-paste many times.&lt;br /&gt;
*This is the only way to truly delay a graphical effect.&lt;br /&gt;
*The spawned CEG still checks conditions, so if you want to, say, spawn an effect only if it is in water &#039;&#039;and&#039;&#039; doesn&#039;t hit a unit, you can give the CExpGenSpawner &amp;lt;code&amp;gt;nounit = 1;&amp;lt;/code&amp;gt; and the spawned &amp;lt;code&amp;gt;CEG water = 1;&amp;lt;/code&amp;gt;.&lt;br /&gt;
*This allows you to give a set of spawners the same (and possibly random) direction.&lt;br /&gt;
*You can animate an explosion flip-book style using delays and several bitmaps.&lt;br /&gt;
&lt;br /&gt;
== CBitmapMuzzleFlame ==&lt;br /&gt;
This creates three rectangular textures at right angles to each other. The &amp;lt;code&amp;gt;frontTexture&amp;lt;/code&amp;gt; has &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; as its normal.&lt;br /&gt;
&lt;br /&gt;
Properties: &lt;br /&gt;
*sideTexture (string)&lt;br /&gt;
*frontTexture (string)&lt;br /&gt;
*dir (float3)&lt;br /&gt;
*colorMap (string)&lt;br /&gt;
*size (float): The initial width of the muzzle flame.&lt;br /&gt;
*length (float): The initial length of the muzzle flame.&lt;br /&gt;
*sizeGrowth (float): By the end of its life, the muzzle flame grows to 1 + sizeGrowth times its initial size and length. The flame grows quickly at first and more slowly toward the end.&lt;br /&gt;
*ttl (int): How long the muzzle flame lasts.&lt;br /&gt;
*frontOffset (float): Where the frontTexture is along the length of the muzzle flame. 0 means it is in the back, 1 is in the front.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Muzzle flames, obviously.&lt;br /&gt;
*You can use an upward-pointing CBitmapMuzzleFlame as a simple splash of water or dirt.&lt;br /&gt;
*Railgun trails.&lt;br /&gt;
*This is the only class that both obeys perspective and allows for a custom texture.&lt;br /&gt;
&lt;br /&gt;
== CExploSpikeProjectile ==&lt;br /&gt;
&lt;br /&gt;
This creates a glowy spike. Note that the spike is two sided, i.e., symmetric about the position of the spawner.&lt;br /&gt;
&lt;br /&gt;
*length (float): The initial length of (half) of the spike (multiplied by dir).&lt;br /&gt;
*width (float): Half the initial width of of the spike. This is an absolute value.&lt;br /&gt;
*alpha (float): The starting alpha of the spike.&lt;br /&gt;
*alphaDecay (float): How quickly the alpha of the spike decreases.&lt;br /&gt;
*lengthGrowth (float): How much the spike grows in length every frame. The spike does not grow in width.&lt;br /&gt;
*dir (float3): The direction of the spike. Not normalized.&lt;br /&gt;
*color (float3): The color of the spike.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Anything glowy.&lt;br /&gt;
*For large, slow missiles, you can try using this as an extended engine flame. Set the width to something fairly large.&lt;br /&gt;
*Long and thin spikes will look spiky; meanwhile, shorter and wider spikes look more blobby.&lt;br /&gt;
*The colors of spikes add together, so if you have several spikes and all three color channels are non-zero, it will be white in the center.&lt;br /&gt;
&lt;br /&gt;
== CHeatCloudProjectile ==&lt;br /&gt;
&lt;br /&gt;
Creates an expanding sprite. Simple but effective.&lt;br /&gt;
&lt;br /&gt;
*heat (float)&lt;br /&gt;
*maxheat (float)&lt;br /&gt;
*heatFalloff (float)&lt;br /&gt;
This is really confusing way of representing alpha and alphaDecay. Basically alpha = heat/maxheat, and alphaDecay = heatFalloff/maxHeat.&lt;br /&gt;
*size (float): The initial radius of the heatcloud.&lt;br /&gt;
*sizeGrowth (float): The heatcloud grows by this amount every frame.&lt;br /&gt;
*sizemod (float): The size of the heatcloud is multiplied by 1 - sizemod.&lt;br /&gt;
*sizemodmod (float): Each frame, sizemod is multiplied by sizemodmod.&lt;br /&gt;
*texture (string): The texture used for the heatcloud.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*As the main background to an explosion.&lt;br /&gt;
&lt;br /&gt;
== CSimpleParticleSystem ==&lt;br /&gt;
&lt;br /&gt;
Creates a sprite that can undergo complex motion. Probably the most versatile class. Since there are a lot of properties, I&#039;ll group them:&lt;br /&gt;
&lt;br /&gt;
=== Initial Velocity Properties ===&lt;br /&gt;
*emitVector (float3): The basic direction in which the particle is emitted.&lt;br /&gt;
*emitRot (float): At what angle to emit the particle relative to emitVector. 0 means that the particle will be emitted in emitVector&#039;s direction; 180 will emit the particle in the opposite direction. 90 will emit the particle in a random direction perpendicular to emitVector, which is good for creating rings.&lt;br /&gt;
*emitRotSpread (float): For each particle, a random number between 0 and emitRotSpread is added to the emitRot.&lt;br /&gt;
*emitMul (float3): Scales the initial particle velocity; for this property, +y is considered to be in the direction of emitVector. Good if you want to create an egg-shaped explosion.&lt;br /&gt;
*particleSpeed (float): The particle&#039;s initial speed.&lt;br /&gt;
*particleSpeedSpread (float): For each particle, a random number between 0 and particleSpeedSpread is added to the particleSpeed .&lt;br /&gt;
&lt;br /&gt;
=== Movement Properties ===&lt;br /&gt;
*gravity (float3): This will be added to the particle&#039;s velocity every frame.&lt;br /&gt;
*airdrag (float): The particle&#039;s velocity is multiplied by this every frame.&lt;br /&gt;
&lt;br /&gt;
=== Size Properties ===&lt;br /&gt;
*particleSize (float): The initial size of the particle.&lt;br /&gt;
*particleSizeSpread (float): For each particle, a random number between 0 and particleSizeSpread is added to the particleSize.&lt;br /&gt;
*sizeGrowth (float): How much the particle grows each frame.&lt;br /&gt;
*sizeMod (float): The size of the particle is multiplied by this each frame.&lt;br /&gt;
&lt;br /&gt;
=== Visual Properties ===&lt;br /&gt;
*directional (bool): If true, the particle will point in the direction it is moving.&lt;br /&gt;
*texture (string): The texture to use for the particle.&lt;br /&gt;
*colorMap (string): The colormap to use for the particle.&lt;br /&gt;
&lt;br /&gt;
=== Life Properties ===&lt;br /&gt;
*numParticles (int): How many particles to create. This is not the same as &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;; if you spawn multiple particles using &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;, any [[CEG_Operators]] will be reevaluated for each particle, whereas if you use &amp;lt;code&amp;gt;numParticles&amp;lt;/code&amp;gt; they will not be. However, the spread properties are evaluated separately for each particle regardless of which one you use.&lt;br /&gt;
*particleLife (float): How long each particle lasts. &lt;br /&gt;
*particleLifeSpread (float); For each particle, a random number between 0 and particleLifeSpread is added to the particleLife .&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*This is probably the most versatile class.&lt;br /&gt;
*Anything moving that is not doing so at constant velocity.&lt;br /&gt;
*If you want something that expands (or shrinks) to some size then stops, set sizeMod to something less than 1, and sizeGrowth to something positive. The particle will grow to a size equal to sizeGrowth/ (1 - sizeMod) and stop. The smaller sizeMod is, the faster it will reach this size.&lt;br /&gt;
&lt;br /&gt;
== CSpherePartSpawner ==&lt;br /&gt;
&lt;br /&gt;
Draws an expanding sphere.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
*alpha (float): The alpha of the sphere.&lt;br /&gt;
*ttl (int): How long the sphere lasts.&lt;br /&gt;
*expansionSpeed (float): How quickly the sphere expands.&lt;br /&gt;
*color (float3): The color of the sphere.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Looks like a shockwave.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Miscellaneous&amp;diff=3907</id>
		<title>CEG:Miscellaneous</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Miscellaneous&amp;diff=3907"/>
		<updated>2009-01-08T22:45:03Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Blending ==&lt;br /&gt;
&lt;br /&gt;
CEGs use the blending mode GL_ONE, GL_ONE_MINUS_SRC_ALPHA. This is in contrast to the default GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA. As far as I can tell, this means that the alpha determines how much of whatever is behind the particle will show through, but doesn&#039;t affect how the particle itself looks. If you want default blending, you&#039;ll have to scale the color components by the alpha by hand if the class you&#039;re using doesn&#039;t do it for you. (Most classes do, but CSimpleParticleSystem doesn&#039;t.) Note that an alpha of zero will cause the CEG not to be displayed at all. &lt;br /&gt;
&lt;br /&gt;
=== Z-Fighting ===&lt;br /&gt;
&lt;br /&gt;
A related problem is Z-fighting. If you have several high-alpha particles moving through each other, you may get an undesirable flickering effect as one particle is drawn at first, then the other. To solve this, reduce the alpha.&lt;br /&gt;
&lt;br /&gt;
== Things To Consider When Making a CEG ==&lt;br /&gt;
&lt;br /&gt;
=== Realism ===&lt;br /&gt;
&lt;br /&gt;
While it&#039;s important to make sure a CEG doesn&#039;t look completely implausible, don&#039;t get too hung up on realism. In almost any RTS, concessions are made for gameplay at the cost of a bit of realism; likewise with CEGs, you&#039;ll need to make some concessions for looking cool.&lt;br /&gt;
&lt;br /&gt;
=== Gameplay ===&lt;br /&gt;
&lt;br /&gt;
As well as looking cool, CEGs are an important part of gameplay. They let players know when things are happening and where they are happening. CEGs should give clues as to what is happening in the mechanics of the game. A powerful weapon should have a powerful-looking CEG; a blast that affects a large area should have a large CEG. Use the alwaysVisisble and useAirLos tags where appropriate. Hopefully we will eventually have a radius operator so CEGs can automatically be scaled to the radius of the weapon.&lt;br /&gt;
&lt;br /&gt;
At the same time, you don&#039;t want to obstruct players&#039; views of the game. A CEG should look cool for a moment, and then get out of the way.&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
&lt;br /&gt;
Bascially, try not to use more particles than necessary, and try not to use them longer than necessary. Be aware of how often you expect your CEG to run; if it&#039;s a commander death or a nuclear missile, you can afford to spend some extra particles, but if it&#039;s a machine gun or a cegtag (which is called every frame), you&#039;ll want to keep it down.&lt;br /&gt;
&lt;br /&gt;
=== Randomness ===&lt;br /&gt;
&lt;br /&gt;
Always put a little randomness in your CEGs. CEGs are more interesting if they happen a little differently every time, especially if your CEG gets called more than once at the same time on the same screen.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Miscellaneous&amp;diff=3906</id>
		<title>CEG:Miscellaneous</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Miscellaneous&amp;diff=3906"/>
		<updated>2009-01-08T22:44:30Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Blending ==&lt;br /&gt;
&lt;br /&gt;
CEGs use the blending mode GL_ONE, GL_ONE_MINUS_SRC_ALPHA. This is in contrast to the default GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA. As far as I can tell, this means that the alpha determines how much of whatever is behind the particle will show through, but doesn&#039;t affect how the particle itself looks. If you want default blending, you&#039;ll have to scale the color components by the alpha by hand if the class you&#039;re using doesn&#039;t do it for you. (Most classes do, but CSimpleParticleSystem does.) Note that an alpha of zero will cause the CEG not to be displayed at all. &lt;br /&gt;
&lt;br /&gt;
=== Z-Fighting ===&lt;br /&gt;
&lt;br /&gt;
A related problem is Z-fighting. If you have several high-alpha particles moving through each other, you may get an undesirable flickering effect as one particle is drawn at first, then the other. To solve this, reduce the alpha.&lt;br /&gt;
&lt;br /&gt;
== Things To Consider When Making a CEG ==&lt;br /&gt;
&lt;br /&gt;
=== Realism ===&lt;br /&gt;
&lt;br /&gt;
While it&#039;s important to make sure a CEG doesn&#039;t look completely implausible, don&#039;t get too hung up on realism. In almost any RTS, concessions are made for gameplay at the cost of a bit of realism; likewise with CEGs, you&#039;ll need to make some concessions for looking cool.&lt;br /&gt;
&lt;br /&gt;
=== Gameplay ===&lt;br /&gt;
&lt;br /&gt;
As well as looking cool, CEGs are an important part of gameplay. They let players know when things are happening and where they are happening. CEGs should give clues as to what is happening in the mechanics of the game. A powerful weapon should have a powerful-looking CEG; a blast that affects a large area should have a large CEG. Use the alwaysVisisble and useAirLos tags where appropriate. Hopefully we will eventually have a radius operator so CEGs can automatically be scaled to the radius of the weapon.&lt;br /&gt;
&lt;br /&gt;
At the same time, you don&#039;t want to obstruct players&#039; views of the game. A CEG should look cool for a moment, and then get out of the way.&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
&lt;br /&gt;
Bascially, try not to use more particles than necessary, and try not to use them longer than necessary. Be aware of how often you expect your CEG to run; if it&#039;s a commander death or a nuclear missile, you can afford to spend some extra particles, but if it&#039;s a machine gun or a cegtag (which is called every frame), you&#039;ll want to keep it down.&lt;br /&gt;
&lt;br /&gt;
=== Randomness ===&lt;br /&gt;
&lt;br /&gt;
Always put a little randomness in your CEGs. CEGs are more interesting if they happen a little differently every time, especially if your CEG gets called more than once at the same time on the same screen.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Miscellaneous&amp;diff=3905</id>
		<title>CEG:Miscellaneous</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Miscellaneous&amp;diff=3905"/>
		<updated>2009-01-08T04:40:49Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: New page: == Blending ==  CEGs use the blending mode GL_ONE, GL_ONE_MINUS_SRC_ALPHA. This is in contrast to the default GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA. As far as I can tell, this means that th...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Blending ==&lt;br /&gt;
&lt;br /&gt;
CEGs use the blending mode GL_ONE, GL_ONE_MINUS_SRC_ALPHA. This is in contrast to the default GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA. As far as I can tell, this means that the alpha determines how much of whatever is behind the particle will show through, but doesn&#039;t affect how the particle itself looks. If you want default blending, you&#039;ll have to scale the color components by the alpha by hand. Will test more later.&lt;br /&gt;
&lt;br /&gt;
=== Z-Fighting ===&lt;br /&gt;
&lt;br /&gt;
A related problem is Z-fighting. If you have several high-alpha particles moving through each other, you may get an undesirable flickering effect as one particle is drawn at first, then the other. To solve this, reduce the alpha.&lt;br /&gt;
&lt;br /&gt;
== Things To Consider When Making a CEG ==&lt;br /&gt;
&lt;br /&gt;
=== Realism ===&lt;br /&gt;
&lt;br /&gt;
While it&#039;s important to make sure a CEG doesn&#039;t look completely implausible, don&#039;t get too hung up on realism. In almost any RTS, concessions are made for gameplay at the cost of a bit of realism; likewise with CEGs, you&#039;ll need to make some concessions for looking cool.&lt;br /&gt;
&lt;br /&gt;
=== Gameplay ===&lt;br /&gt;
&lt;br /&gt;
As well as looking cool, CEGs are an important part of gameplay. They let players know when things are happening and where they are happening. CEGs should give clues as to what is happening in the mechanics of the game. A powerful weapon should have a powerful-looking CEG; a blast that affects a large area should have a large CEG. Use the alwaysVisisble and useAirLos tags where appropriate. Hopefully we will eventually have a radius operator so CEGs can automatically be scaled to the radius of the weapon.&lt;br /&gt;
&lt;br /&gt;
At the same time, you don&#039;t want to obstruct players&#039; views of the game. A CEG should look cool for a moment, and then get out of the way.&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
&lt;br /&gt;
Bascially, try not to use more particles than necessary, and try not to use them longer than necessary. Be aware of how often you expect your CEG to run; if it&#039;s a commander death or a nuclear missile, you can afford to spend some extra particles, but if it&#039;s a machine gun or a cegtag (which is called every frame), you&#039;ll want to keep it down.&lt;br /&gt;
&lt;br /&gt;
=== Randomness ===&lt;br /&gt;
&lt;br /&gt;
Always put a little randomness in your CEGs. CEGs are more interesting if they happen a little differently every time, especially if your CEG gets called more than once at the same time on the same screen.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Game_and_Unit_development&amp;diff=7963</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=7963"/>
		<updated>2009-01-08T04:18:55Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Mod development=&lt;br /&gt;
Mods, next to Maps, is the content used in Spring.&amp;lt;br&amp;gt;&lt;br /&gt;
A mod is simply a combined file containing a small structure of files and directories holding all the data required.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Mod_Development | Mod Development]] wiki is a starting page, linking to very useful information on the files included in a mod, their hierarchy and more.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Almost the entire mod developing is the creation of units. Which isn&#039;t an easy job.&amp;lt;br&amp;gt;&lt;br /&gt;
Information about the creation of units are everywere, but not combined.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a gathered list of all Tutorials and helpfull forums threads I could find:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==General==&lt;br /&gt;
*[[Mod Development]]&lt;br /&gt;
*[[Mod specification]]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://spring.clan-sy.com/phpbb/viewtopic.php?t=6015 What do I need to create a mod]&lt;br /&gt;
*[[Simple Mod Tutorial]]&lt;br /&gt;
*[[Freely available and reusable content|Freely available and reusable content/games/mods]]&lt;br /&gt;
&lt;br /&gt;
==Unit Development==&lt;br /&gt;
====Automated Mod Creation====&lt;br /&gt;
* [[TA2Spring]] - Automatically adds and converts Total Annihilation unit packs (.ufo files, etc..) into Spring mods (requires a base modification for the game rules, XTA is recommended)&lt;br /&gt;
====Models - s3o Files====&lt;br /&gt;
*[http://user.supradigital.org/jcnossen/UpspringInstaller-1.54-EulerAngles.exe UpSpring, our second-gen import / export / rigging / animation tool.]&lt;br /&gt;
* [http://lassie.student.utwente.nl/vliet/springtut.pdf Maestro&#039;s tutorial of Upspring and textures].&lt;br /&gt;
* [[Basic s3o unit making guide]]&lt;br /&gt;
* [[Simple Mod Tutorial]]&lt;br /&gt;
* [[Units:CreateModel|UV Mapping in Wings3D]]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?t=10612 Wings UV Mapping Tutorial]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?f=9&amp;amp;t=12354 Saving polygons in Wings3d Tutorial]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?t=10947 Greeble Tutorial 1]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?f=9&amp;amp;t=12356 Greeble Tutorial 2]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?p=75495 various things about unit making. (Also contains an illustrated alpha-channel tut)]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?t=10503 Runecrafter&#039;s 3DS Max UV Mapping Tutorial]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?f=9&amp;amp;t=15106 Argh&#039;s UpSpring Easy Workflow Guide]&lt;br /&gt;
* [[Trouble-shooting s3o units]]&lt;br /&gt;
&lt;br /&gt;
====Models - 3do Files====&lt;br /&gt;
outdated model format used by OTA&amp;lt;br&amp;gt;&lt;br /&gt;
(Note: UpSpring has some problems with empty objects and groundplates)&lt;br /&gt;
*use [http://spring.clan-sy.com/phpbb/viewtopic.php?f=12&amp;amp;t=7208&amp;amp;p=126129&amp;amp;hilit=upspring#p126129 UpSpring] and [http://www.fileuniverse.com/?p=show&amp;amp;a=it&amp;amp;id=305 3doBuilder] to edit those files&lt;br /&gt;
&lt;br /&gt;
====Scripting and Animation - COB/BOS Files====&lt;br /&gt;
To edit those you need a program/compiler. The most famous one is Scriptor.&lt;br /&gt;
*[[Units0:.bos ]] some examples&lt;br /&gt;
*[[COB_Overview]]&lt;br /&gt;
*[[COB_Animation]]&lt;br /&gt;
*[[COB_Callins]]&lt;br /&gt;
*[[COB_Constants]]&lt;br /&gt;
*[[COB_Threads]]&lt;br /&gt;
*[[COB_HitByWeaponID]]&lt;br /&gt;
*[http://www.planetannihilation.com/tadc/tut_unit_01_1.asp PlanetAnnihilation] has a nice tutorial&lt;br /&gt;
*[[Units:LuaCOB]] - how to interface COB with LUA&lt;br /&gt;
*[[CEG_For_Units|Mod Development:Calling basic CEGs from COB]]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?p=132943#132943 GPL-compliant sourcecode, scripting code examples, and other things.]&lt;br /&gt;
&lt;br /&gt;
====Units - FBI Files====&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;
====Weapons - TDF Files====&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;
*[[All_Weapons_variable_values:_min%2C_max%2C_default%2C_type|Weapon datatype list]] : All weapon variables min/max/default values and datatypes listed.&lt;br /&gt;
*[[Weapons:Antinukes]]: All about antinukes.&lt;br /&gt;
&lt;br /&gt;
====Explosions====&lt;br /&gt;
*[[CEG_Overview]]&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;
*[[CustomExplosionGenerators|Old CEG page]]&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]]&lt;br /&gt;
*[[Mod Development:Cursors]]&lt;br /&gt;
*[[Mod Development:Archives]]&lt;br /&gt;
*[[Mod Development:Sidepics]]&lt;br /&gt;
*[[CustomUnitIcons|Mod Development:Custom unit icons]]&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3774</id>
		<title>CEG-Classes</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3774"/>
		<updated>2009-01-08T04:18:19Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;
https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Projectiles/Unsynced/&lt;br /&gt;
&lt;br /&gt;
== Common Properties ==&lt;br /&gt;
All classes have the following properties, although not all of them use them:&lt;br /&gt;
&lt;br /&gt;
*pos (float3): The initial position of the spawner.&lt;br /&gt;
*useAirLos (bool): Whether the spawner uses air LoS to determine if it is visible. This may allow the spawner to be seen from a further distance than normal.&lt;br /&gt;
*alwaysVisible (bool): If true, the spawner is always visible, ignoring LoS.&lt;br /&gt;
*speed (float3): The initial speed of the spawner.&lt;br /&gt;
&lt;br /&gt;
== CExpGenSpawner ==&lt;br /&gt;
This is the closest thing CEG has to a function call. Instead of creating a graphical effect on its own, it creates another CEG.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
&lt;br /&gt;
*delay (int): How long to wait before spawning the CEG.&lt;br /&gt;
*dir (float3): The CEG will be called with this direction.&lt;br /&gt;
*damage (float): The CEG will be called with this damage. The CEG doesn&#039;t actually deal any damage, but you can use this as a parameter and read it using the &#039;d&#039; operator.&lt;br /&gt;
*explosionGenerator (string): The name of the CEG you want to spawn.&lt;br /&gt;
&lt;br /&gt;
Suggested Use: &lt;br /&gt;
*If you use a spawner a lot of times, you may want to make it a separate CEG to avoid having to copy-paste many times.&lt;br /&gt;
*This is the only way to truly delay a graphical effect.&lt;br /&gt;
*The spawned CEG still checks conditions, so if you want to, say, spawn an effect only if it is in water &#039;&#039;and&#039;&#039; doesn&#039;t hit a unit, you can give the CExpGenSpawner &amp;lt;code&amp;gt;nounit = 1;&amp;lt;/code&amp;gt; and the spawned &amp;lt;code&amp;gt;CEG water = 1;&amp;lt;/code&amp;gt;.&lt;br /&gt;
*This allows you to give a set of spawners the same (and possibly random) direction.&lt;br /&gt;
*You can animate an explosion flip-book style using delays and several bitmaps.&lt;br /&gt;
&lt;br /&gt;
== CBitmapMuzzleFlame ==&lt;br /&gt;
This creates three rectangular textures at right angles to each other. The &amp;lt;code&amp;gt;frontTexture&amp;lt;/code&amp;gt; has &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; as its normal.&lt;br /&gt;
&lt;br /&gt;
Properties: &lt;br /&gt;
*sideTexture (string)&lt;br /&gt;
*frontTexture (string)&lt;br /&gt;
*dir (float3)&lt;br /&gt;
*colorMap (string)&lt;br /&gt;
*size (float): The initial width of the muzzle flame.&lt;br /&gt;
*length (float): The initial length of the muzzle flame.&lt;br /&gt;
*sizeGrowth (float): By the end of its life, the muzzle flame grows to 1 + sizeGrowth times its initial size and length. The flame grows quickly at first and more slowly toward the end.&lt;br /&gt;
*ttl (int): How long the muzzle flame lasts.&lt;br /&gt;
*frontOffset (float): Where the frontTexture is along the length of the muzzle flame. 0 means it is in the back, 1 is in the front.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Muzzle flames, obviously.&lt;br /&gt;
*You can use an upward-pointing CBitmapMuzzleFlame as a simple splash of water or dirt.&lt;br /&gt;
*Railgun trails.&lt;br /&gt;
*This is the only class that both obeys perspective and allows for a custom texture. All other classes except CExploSpikeProjectile always face directly toward the viewer.&lt;br /&gt;
&lt;br /&gt;
== CExploSpikeProjectile ==&lt;br /&gt;
&lt;br /&gt;
This creates a glowy spike. Note that the spike is two sided, i.e., symmetric about the position of the spawner.&lt;br /&gt;
&lt;br /&gt;
*length (float): The initial length of (half) of the spike.&lt;br /&gt;
*width (float): Half the initial width of of the spike.&lt;br /&gt;
*alpha (float): The starting alpha of the spike.&lt;br /&gt;
*alphaDecay (float): How quickly the alpha of the spike decreases.&lt;br /&gt;
*lengthGrowth (float): How much the spike grows in length every frame. The spike does not grow in width.&lt;br /&gt;
*dir (float3): The direction of the spike.&lt;br /&gt;
*color (float3): The color of the spike.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Anything glowy.&lt;br /&gt;
*For large, slow missiles, you can try using this as an extended engine flame. Set the width to something fairly large.&lt;br /&gt;
*Long and thin spikes will look spiky; meanwhile, shorter and wider spikes look more blobby.&lt;br /&gt;
*The colors of spikes add together, so if you have several spikes and all three color channels are non-zero, it will be white in the center.&lt;br /&gt;
&lt;br /&gt;
== CHeatCloudProjectile ==&lt;br /&gt;
&lt;br /&gt;
Creates an expanding sprite. Simple but effective.&lt;br /&gt;
&lt;br /&gt;
*heat (float)&lt;br /&gt;
*maxheat (float)&lt;br /&gt;
*heatFalloff (float)&lt;br /&gt;
This is really confusing way of representing alpha and alphaDecay. Basically alpha = heat/maxheat, and alphaDecay = heatFalloff/maxHeat.&lt;br /&gt;
*size (float): The initial radius of the heatcloud.&lt;br /&gt;
*sizeGrowth (float): The heatcloud grows by this amount every frame.&lt;br /&gt;
*sizemod (float): The size of the heatcloud is multiplied by 1 - sizemod.&lt;br /&gt;
*sizemodmod (float): Each frame, sizemod is multiplied by sizemodmod.&lt;br /&gt;
*texture (string): The texture used for the heatcloud.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*As the main background to an explosion.&lt;br /&gt;
&lt;br /&gt;
== CSimpleParticleSystem ==&lt;br /&gt;
&lt;br /&gt;
Creates a sprite that can undergo complex motion. Probably the most versatile class. Since there are a lot of properties, I&#039;ll group them:&lt;br /&gt;
&lt;br /&gt;
=== Initial Velocity Properties ===&lt;br /&gt;
*emitVector (float3): The basic direction in which the particle is emitted.&lt;br /&gt;
*emitRot (float): At what angle to emit the particle relative to emitVector. 0 means that the particle will be emitted in emitVector&#039;s direction; 180 will emit the particle in the opposite direction. 90 will emit the particle in a random direction perpendicular to emitVector, which is good for creating rings.&lt;br /&gt;
*emitRotSpread (float): For each particle, a random number between 0 and emitRotSpread is added to the emitRot.&lt;br /&gt;
*emitMul (float3): Scales the initial particle velocity; for this property, +y is considered to be in the direction of emitVector. Good if you want to create an egg-shaped explosion.&lt;br /&gt;
*particleSpeed (float): The particle&#039;s initial speed.&lt;br /&gt;
*particleSpeedSpread (float): For each particle, a random number between 0 and particleSpeedSpread is added to the particleSpeed .&lt;br /&gt;
&lt;br /&gt;
=== Movement Properties ===&lt;br /&gt;
*gravity (float3): This will be added to the particle&#039;s velocity every frame.&lt;br /&gt;
*airdrag (float): The particle&#039;s velocity is multiplied by this every frame.&lt;br /&gt;
&lt;br /&gt;
=== Size Properties ===&lt;br /&gt;
*particleSize (float): The initial size of the particle.&lt;br /&gt;
*particleSizeSpread (float): For each particle, a random number between 0 and particleSizeSpread is added to the particleSize.&lt;br /&gt;
*sizeGrowth (float): How much the particle grows each frame.&lt;br /&gt;
*sizeMod (float): The size of the particle is multiplied by this each frame.&lt;br /&gt;
&lt;br /&gt;
=== Visual Properties ===&lt;br /&gt;
*directional (bool): If true, the particle will point in the direction it is moving.&lt;br /&gt;
*texture (string): The texture to use for the particle.&lt;br /&gt;
*colorMap (string): The colormap to use for the particle.&lt;br /&gt;
&lt;br /&gt;
=== Life Properties ===&lt;br /&gt;
*numParticles (int): How many particles to create. This is not the same as &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;; if you spawn multiple particles using &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;, any [[CEG_Operators]] will be reevaluated for each particle, whereas if you use &amp;lt;code&amp;gt;numParticles&amp;lt;/code&amp;gt; they will not be. However, the spread properties are evaluated separately for each particle regardless of which one you use.&lt;br /&gt;
*particleLife (float): How long each particle lasts. &lt;br /&gt;
*particleLifeSpread (float); For each particle, a random number between 0 and particleLifeSpread is added to the particleLife .&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*This is probably the most versatile class.&lt;br /&gt;
*Anything moving that is not doing so at constant velocity.&lt;br /&gt;
*If you want something that expands (or shrinks) to some size then stops, set sizeMod to something less than 1, and sizeGrowth to something positive. The particle will grow to a size equal to sizeGrowth/ (1 - sizeMod) and stop. The smaller sizeMod is, the faster it will reach this size.&lt;br /&gt;
&lt;br /&gt;
== CSpherePartSpawner ==&lt;br /&gt;
&lt;br /&gt;
Draws an expanding sphere.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
*alpha (float): The alpha of the sphere.&lt;br /&gt;
*ttl (int): How long the sphere lasts.&lt;br /&gt;
*expansionSpeed (float): How quickly the sphere expands.&lt;br /&gt;
*color (float3): The color of the sphere.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Looks like a shockwave.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Calls&amp;diff=3849</id>
		<title>CEG:Calls</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Calls&amp;diff=3849"/>
		<updated>2009-01-02T20:17:29Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
There are three places where you can call a CEG: weapons, COB, and Lua.&lt;br /&gt;
&lt;br /&gt;
== Weapon CEGs ==&lt;br /&gt;
&lt;br /&gt;
There are three weapon tags that can spawn CEGs:&lt;br /&gt;
&lt;br /&gt;
*cegtag: Spawns the CEG every frame at the weapon projectile&#039;s position and direction.&lt;br /&gt;
*explosionGenerator: Spawns the CEG when the weapon hits its target.&lt;br /&gt;
*bounceExplosionGenerator: For bouncing weapons only. Spawns the CEG when the weapon bounces.&lt;br /&gt;
&lt;br /&gt;
You need to set these tags equal to custom:ExplosionGeneratorName. For example, in a .tdf,&lt;br /&gt;
&amp;lt;code&amp;gt;explosionGenerator=custom:ExplosionGeneratorName;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== COB CEGs ==&lt;br /&gt;
&lt;br /&gt;
Calling a CEG from COB requires two steps. First, in the unit&#039;s definition, you need to put&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[sfxtypes] {&lt;br /&gt;
  explosiongenerator0 = custom:ExplosionGeneratorName0;&lt;br /&gt;
  explosiongenerator1 = custom:ExplosionGeneratorName1;&lt;br /&gt;
  //and so on...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for a .fbi, or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sfxtypes = {&lt;br /&gt;
  explosiongenerators = {&lt;br /&gt;
    &amp;quot;custom:ExplosionGeneratorName0&amp;quot;,&lt;br /&gt;
    &amp;quot;custom:ExplosionGeneratorName1&amp;quot;,&lt;br /&gt;
    --and so on...&lt;br /&gt;
  },&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To actually generate the explosion, you need to &amp;lt;code&amp;gt;emit-sfx&amp;lt;/code&amp;gt; 1024 plus the number of the explosion generator in the unit definition (the first one is 0, the next is 1, and so on). The CEG will have the position and direction of the piece you emit it from.&lt;br /&gt;
&lt;br /&gt;
There is another tag, &amp;lt;code&amp;gt;pieceTrailCEGTag&amp;lt;/code&amp;gt;, which is used in &amp;lt;code&amp;gt;explode [piece] FALL;&amp;lt;/code&amp;gt;, but I&#039;m not sure what this does.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CEG_DAMAGE:&#039;&#039;&#039; In a COB script, you can do &amp;lt;code&amp;gt;SET CEG_DAMAGE [value]&amp;lt;/code&amp;gt;. Any &amp;lt;code&amp;gt;emit-sfx&amp;lt;/code&amp;gt; instructions will then use that value for the &amp;quot;damage&amp;quot; (use the &#039;d&#039; operator to access this value).&lt;br /&gt;
&lt;br /&gt;
== Lua CEGs ==&lt;br /&gt;
See [[Lua_SyncedCtrl]].&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Operators&amp;diff=3923</id>
		<title>CEG:Operators</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Operators&amp;diff=3923"/>
		<updated>2009-01-02T01:11:20Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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/ExplosionGenerator.cpp&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
You are not limited to using fixed numbers in CEGs for positions, speeds, and so forth. Instead, you can use operators to change the CEG based on a variety of things.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
Operators are read left to right. The operand is always to the right of the operator. Spaces are ignored, except to separate numbers. A number with no operator defaults to addition.&lt;br /&gt;
&lt;br /&gt;
== The Buffer ==&lt;br /&gt;
CEG provides you with a buffer in which you can store numbers using the yank (&#039;y&#039;) operator. This buffer can store 16 values, numbered 0 to 15.&lt;br /&gt;
&lt;br /&gt;
== Operators ==&lt;br /&gt;
These are listed in the format &amp;quot;Operator Name (operator)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Index (&#039;i&#039;) ===&lt;br /&gt;
Multiplies the operand by the current count index. This index starts at 0 and increments every time the spawn is run, until the spawn has run a number of times equal to its count.&lt;br /&gt;
&lt;br /&gt;
Suggested use: Spawning things in a line.&lt;br /&gt;
&lt;br /&gt;
=== Rand (&#039;r&#039;) ===&lt;br /&gt;
Multiplies the operand by a random float between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Suggested use: Keeping explosions from looking too &amp;quot;perfect&amp;quot;, making explosions look different every time.&lt;br /&gt;
&lt;br /&gt;
=== Damage (&#039;d&#039;) ===&lt;br /&gt;
Multiplies the operand by damage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CEG_DAMAGE:&#039;&#039;&#039; In a COB script, you can do &amp;lt;code&amp;gt;SET CEG_DAMAGE [value]&amp;lt;/code&amp;gt;. Any &amp;lt;code&amp;gt;emit-sfx&amp;lt;/code&amp;gt; instructions will then use that value for the &amp;quot;damage&amp;quot; (use the &#039;d&#039; operator to access this value).&lt;br /&gt;
&lt;br /&gt;
=== Sawtooth (&#039;m&#039;) ===&lt;br /&gt;
Calculates the floating-point remainder of the operand.&lt;br /&gt;
&lt;br /&gt;
=== Discrete (&#039;k&#039;) ===&lt;br /&gt;
Calculates the floor of the operand.&lt;br /&gt;
&lt;br /&gt;
=== Sine (&#039;s&#039;) ===&lt;br /&gt;
Calculates the sine of the operand.&lt;br /&gt;
&lt;br /&gt;
=== Yank (&#039;y&#039;) ===&lt;br /&gt;
Saves the running result into buffer[operand], and resets the running result to zero.&lt;br /&gt;
&lt;br /&gt;
=== Multiply (&#039;x&#039;) ===&lt;br /&gt;
Multiplies the running result by buffer[operand].&lt;br /&gt;
&lt;br /&gt;
=== Add Buffer (&#039;a&#039;) ===&lt;br /&gt;
Adds buffer[operand] to the running result.&lt;br /&gt;
&lt;br /&gt;
=== Power (&#039;p&#039;) ===&lt;br /&gt;
Raises the running result to the operandth power&lt;br /&gt;
&lt;br /&gt;
=== Power Buffer (&#039;q&#039;) ===&lt;br /&gt;
Raises the running result to the buffer[operand]th power.&lt;br /&gt;
&lt;br /&gt;
=== Add (default) ===&lt;br /&gt;
Adds the operand to the running result. This operator is used if no other operator is given.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
i0.03125y0 -0.2x0x0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This multiplies the index by 0.03125 and saves it to buffer[0]. It then multiplies -0.2 by buffer[0] twice. The result is then -0.2 (i * 0.03125)^2. This type of thing is useful for making a series of particles follow a curved path.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Calls&amp;diff=3848</id>
		<title>CEG:Calls</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Calls&amp;diff=3848"/>
		<updated>2009-01-02T01:11:15Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
There are three places where you can call a CEG: weapons, COB, and Lua.&lt;br /&gt;
&lt;br /&gt;
== Weapon CEGs ==&lt;br /&gt;
&lt;br /&gt;
There are three weapon tags that can spawn CEGs:&lt;br /&gt;
&lt;br /&gt;
*cegtag: Spawns the CEG every frame at the weapon projectile&#039;s position and direction.&lt;br /&gt;
*explosionGenerator: Spawns the CEG when the weapon hits its target.&lt;br /&gt;
*bounceExplosionGenerator: For bouncing weapons only. Spawns the CEG when the weapon bounces.&lt;br /&gt;
&lt;br /&gt;
You need to set these tags equal to custom:ExplosionGeneratorName. For example, in a .tdf,&lt;br /&gt;
&amp;lt;code&amp;gt;explosionGenerator=custom:ExplosionGeneratorName;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== COB CEGs ==&lt;br /&gt;
&lt;br /&gt;
Calling a CEG from COB requires two steps. First, in the unit&#039;s definition, you need to put&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[sfxtypes] {&lt;br /&gt;
  explosiongenerator0 = custom:ExplosionGeneratorName0;&lt;br /&gt;
  explosiongenerator1 = custom:ExplosionGeneratorName1;&lt;br /&gt;
  //and so on...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for a .fbi, or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sfxtypes = {&lt;br /&gt;
  explosiongenerators = {&lt;br /&gt;
    &amp;quot;custom:ExplosionGeneratorName0&amp;quot;,&lt;br /&gt;
    &amp;quot;custom:ExplosionGeneratorName1&amp;quot;,&lt;br /&gt;
    --and so on...&lt;br /&gt;
  },&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To actually generate the explosion, you need to &amp;lt;code&amp;gt;emit-sfx&amp;lt;/code&amp;gt; 1024 plus the number of the explosion generator in the unit definition (the first one is 0, the next is 1, and so on). The CEG will have the position and direction of the piece you emit it from.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CEG_DAMAGE:&#039;&#039;&#039; In a COB script, you can do &amp;lt;code&amp;gt;SET CEG_DAMAGE [value]&amp;lt;/code&amp;gt;. Any &amp;lt;code&amp;gt;emit-sfx&amp;lt;/code&amp;gt; instructions will then use that value for the &amp;quot;damage&amp;quot; (use the &#039;d&#039; operator to access this value).&lt;br /&gt;
&lt;br /&gt;
== Lua CEGs ==&lt;br /&gt;
See [[Lua_SyncedCtrl]].&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Calls&amp;diff=3847</id>
		<title>CEG:Calls</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Calls&amp;diff=3847"/>
		<updated>2009-01-02T01:10:53Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
There are three places where you can call a CEG: weapons, COB, and Lua.&lt;br /&gt;
&lt;br /&gt;
== Weapon CEGs ==&lt;br /&gt;
&lt;br /&gt;
There are three weapon tags that can spawn CEGs:&lt;br /&gt;
&lt;br /&gt;
*cegtag: Spawns the CEG every frame at the weapon projectile&#039;s position and direction.&lt;br /&gt;
*explosionGenerator: Spawns the CEG when the weapon hits its target.&lt;br /&gt;
*bounceExplosionGenerator: For bouncing weapons only. Spawns the CEG when the weapon bounces.&lt;br /&gt;
&lt;br /&gt;
You need to set these tags equal to custom:ExplosionGeneratorName. For example, in a .tdf,&lt;br /&gt;
&amp;lt;code&amp;gt;explosionGenerator=custom:ExplosionGeneratorName;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== COB CEGs ==&lt;br /&gt;
&lt;br /&gt;
Calling a CEG from COB requires two steps. First, in the unit&#039;s definition, you need to put&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[sfxtypes] {&lt;br /&gt;
  explosiongenerator0 = custom:ExplosionGeneratorName0;&lt;br /&gt;
  explosiongenerator1 = custom:ExplosionGeneratorName1;&lt;br /&gt;
  //and so on...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for a .fbi, or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sfxtypes = {&lt;br /&gt;
  explosiongenerators = {&lt;br /&gt;
    &amp;quot;custom:ExplosionGeneratorName0&amp;quot;,&lt;br /&gt;
    &amp;quot;custom:ExplosionGeneratorName1&amp;quot;,&lt;br /&gt;
    --and so on...&lt;br /&gt;
  },&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To actually generate the explosion, you need to &amp;lt;code&amp;gt;emit-sfx&amp;lt;/code&amp;gt; 1024 plus the number of the explosion generator in the unit definition (the first one is 0, the next is 1, and so on). The CEG will have the position and direction of the piece you emit it from.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CEG_DAMAGE:&#039;&#039;&#039; In a COB script, you can do &amp;lt;code&amp;gt;SET CEG_DAMAGE [value]&amp;lt;/code&amp;gt;. Any &amp;lt;code&amp;gt;emit-sfx&amp;lt;/code&amp;gt; instructions will then use that value for the &amp;quot;damage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Lua CEGs ==&lt;br /&gt;
See [[Lua_SyncedCtrl]].&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Operators&amp;diff=3922</id>
		<title>CEG:Operators</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Operators&amp;diff=3922"/>
		<updated>2009-01-02T01:10:20Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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/ExplosionGenerator.cpp&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
You are not limited to using fixed numbers in CEGs for positions, speeds, and so forth. Instead, you can use operators to change the CEG based on a variety of things.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
Operators are read left to right. The operand is always to the right of the operator. Spaces are ignored, except to separate numbers. A number with no operator defaults to addition.&lt;br /&gt;
&lt;br /&gt;
== The Buffer ==&lt;br /&gt;
CEG provides you with a buffer in which you can store numbers using the yank (&#039;y&#039;) operator. This buffer can store 16 values, numbered 0 to 15.&lt;br /&gt;
&lt;br /&gt;
== Operators ==&lt;br /&gt;
These are listed in the format &amp;quot;Operator Name (operator)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Index (&#039;i&#039;) ===&lt;br /&gt;
Multiplies the operand by the current count index. This index starts at 0 and increments every time the spawn is run, until the spawn has run a number of times equal to its count.&lt;br /&gt;
&lt;br /&gt;
Suggested use: Spawning things in a line.&lt;br /&gt;
&lt;br /&gt;
=== Rand (&#039;r&#039;) ===&lt;br /&gt;
Multiplies the operand by a random float between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Suggested use: Keeping explosions from looking too &amp;quot;perfect&amp;quot;, making explosions look different every time.&lt;br /&gt;
&lt;br /&gt;
=== Damage (&#039;d&#039;) ===&lt;br /&gt;
Multiplies the operand by damage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Special Note:&#039;&#039;&#039; In a COB script, you can do &amp;lt;code&amp;gt;SET CEG_DAMAGE [value]&amp;lt;/code&amp;gt;. Any &amp;lt;code&amp;gt;emit-sfx&amp;lt;/code&amp;gt; instructions will then use that value for the &amp;quot;damage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Sawtooth (&#039;m&#039;) ===&lt;br /&gt;
Calculates the floating-point remainder of the operand.&lt;br /&gt;
&lt;br /&gt;
=== Discrete (&#039;k&#039;) ===&lt;br /&gt;
Calculates the floor of the operand.&lt;br /&gt;
&lt;br /&gt;
=== Sine (&#039;s&#039;) ===&lt;br /&gt;
Calculates the sine of the operand.&lt;br /&gt;
&lt;br /&gt;
=== Yank (&#039;y&#039;) ===&lt;br /&gt;
Saves the running result into buffer[operand], and resets the running result to zero.&lt;br /&gt;
&lt;br /&gt;
=== Multiply (&#039;x&#039;) ===&lt;br /&gt;
Multiplies the running result by buffer[operand].&lt;br /&gt;
&lt;br /&gt;
=== Add Buffer (&#039;a&#039;) ===&lt;br /&gt;
Adds buffer[operand] to the running result.&lt;br /&gt;
&lt;br /&gt;
=== Power (&#039;p&#039;) ===&lt;br /&gt;
Raises the running result to the operandth power&lt;br /&gt;
&lt;br /&gt;
=== Power Buffer (&#039;q&#039;) ===&lt;br /&gt;
Raises the running result to the buffer[operand]th power.&lt;br /&gt;
&lt;br /&gt;
=== Add (default) ===&lt;br /&gt;
Adds the operand to the running result. This operator is used if no other operator is given.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
i0.03125y0 -0.2x0x0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This multiplies the index by 0.03125 and saves it to buffer[0]. It then multiplies -0.2 by buffer[0] twice. The result is then -0.2 (i * 0.03125)^2. This type of thing is useful for making a series of particles follow a curved path.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3773</id>
		<title>CEG-Classes</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3773"/>
		<updated>2008-12-31T23:44:01Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;
https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Projectiles/Unsynced/&lt;br /&gt;
&lt;br /&gt;
== Common Properties ==&lt;br /&gt;
All classes have the following properties, although not all of them use them:&lt;br /&gt;
&lt;br /&gt;
*pos (float3): The initial position of the spawner.&lt;br /&gt;
*useAirLos (bool): Whether the spawner uses air LoS to determine if it is visible. This may allow the spawner to be seen from a further distance than normal.&lt;br /&gt;
*alwaysVisible (bool): If true, the spawner is always visible, ignoring LoS.&lt;br /&gt;
*speed (float3): The initial speed of the spawner.&lt;br /&gt;
&lt;br /&gt;
== CExpGenSpawner ==&lt;br /&gt;
This is the closest thing CEG has to a function call. Instead of creating a graphical effect on its own, it creates another CEG.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
&lt;br /&gt;
*delay (int): How long to wait before spawning the CEG.&lt;br /&gt;
*dir (float3): The CEG will be called with this direction.&lt;br /&gt;
*damage (float): The CEG will be called with this damage. The CEG doesn&#039;t actually deal any damage, but you can use this as a parameter and read it using the &#039;d&#039; operator.&lt;br /&gt;
*explosionGenerator (string): The name of the CEG you want to spawn.&lt;br /&gt;
&lt;br /&gt;
Suggested Use: &lt;br /&gt;
*If you use a spawner a lot of times, you may want to make it a separate CEG to avoid having to copy-paste many times.&lt;br /&gt;
*This is the only way to truly delay a graphical effect.&lt;br /&gt;
*The spawned CEG still checks conditions, so if you want to, say, spawn an effect only if it is in water &#039;&#039;and&#039;&#039; doesn&#039;t hit a unit, you can give the CExpGenSpawner &amp;lt;code&amp;gt;nounit = 1;&amp;lt;/code&amp;gt; and the spawned &amp;lt;code&amp;gt;CEG water = 1;&amp;lt;/code&amp;gt;.&lt;br /&gt;
*This allows you to give a set of spawners the same (and possibly random) direction.&lt;br /&gt;
*You can animate an explosion flip-book style using delays and several bitmaps.&lt;br /&gt;
&lt;br /&gt;
== CBitmapMuzzleFlame ==&lt;br /&gt;
This creates three rectangular textures at right angles to each other. The &amp;lt;code&amp;gt;frontTexture&amp;lt;/code&amp;gt; has &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; as its normal.&lt;br /&gt;
&lt;br /&gt;
Properties: &lt;br /&gt;
*sideTexture (string)&lt;br /&gt;
*frontTexture (string)&lt;br /&gt;
*dir (float3)&lt;br /&gt;
*colorMap (string)&lt;br /&gt;
*size (float): The initial width of the muzzle flame.&lt;br /&gt;
*length (float): The initial length of the muzzle flame.&lt;br /&gt;
*sizeGrowth (float): By the end of its life, the muzzle flame grows to 1 + sizeGrowth times its initial size and length. The flame grows quickly at first and more slowly toward the end.&lt;br /&gt;
*ttl (int): How long the muzzle flame lasts.&lt;br /&gt;
*frontOffset (float): Where the frontTexture is along the length of the muzzle flame. 0 means it is in the back, 1 is in the front.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Muzzle flames, obviously.&lt;br /&gt;
*You can use an upward-pointing CBitmapMuzzleFlame as a simple splash of water or dirt.&lt;br /&gt;
*Railgun trails.&lt;br /&gt;
*This is the only class that both obeys perspective and allows for a custom texture. All other classes except CExploSpikeProjectile always face directly toward the viewer.&lt;br /&gt;
&lt;br /&gt;
== CExploSpikeProjectile ==&lt;br /&gt;
&lt;br /&gt;
This creates a glowy spike. Note that the spike is two sided, i.e., symmetric about the position of the spawner.&lt;br /&gt;
&lt;br /&gt;
*length (float): The initial length of (half) of the spike.&lt;br /&gt;
*width (float): Half the initial width of of the spike.&lt;br /&gt;
*alpha (float): The starting alpha of the spike.&lt;br /&gt;
*alphaDecay (float): How quickly the alpha of the spike decreases.&lt;br /&gt;
*lengthGrowth (float): How much the spike grows in length every frame. The spike does not grow in width.&lt;br /&gt;
*dir (float3): The direction of the spike.&lt;br /&gt;
*color (float3): The color of the spike.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Anything glowy.&lt;br /&gt;
*For large, slow missiles, you can try using this as an extended engine flame. Set the width to something fairly large.&lt;br /&gt;
*Long and thin spikes will look spiky; meanwhile, shorter and wider spikes look more blobby.&lt;br /&gt;
*The colors of spikes add together, so if you have several spikes and all three color channels are non-zero, it will be white in the center.&lt;br /&gt;
&lt;br /&gt;
== CHeatCloudProjectile ==&lt;br /&gt;
&lt;br /&gt;
Creates an expanding sprite. Simple but effective.&lt;br /&gt;
&lt;br /&gt;
*heat (float)&lt;br /&gt;
*maxheat (float)&lt;br /&gt;
*heatFalloff (float)&lt;br /&gt;
This is really confusing way of representing alpha and alphaDecay. Basically alpha = heat/maxheat, and alphaDecay = heatFalloff/maxHeat.&lt;br /&gt;
*size (float): The initial radius of the heatcloud.&lt;br /&gt;
*sizeGrowth (float): The heatcloud grows by this amount every frame.&lt;br /&gt;
*sizemod (float): The size of the heatcloud is multiplied by 1 - sizemod.&lt;br /&gt;
*sizemodmod (float): Each frame, sizemod is multiplied by sizemodmod.&lt;br /&gt;
*texture (string): The texture used for the heatcloud.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*As the main background to an explosion.&lt;br /&gt;
&lt;br /&gt;
== CSimpleParticleSystem ==&lt;br /&gt;
&lt;br /&gt;
Creates a sprite that can undergo complex motion. Probably the most versatile class. Since there are a lot of properties, I&#039;ll group them:&lt;br /&gt;
&lt;br /&gt;
=== Initial Velocity Properties ===&lt;br /&gt;
*emitVector (float3): The basic direction in which the particle is emitted.&lt;br /&gt;
*emitRot (float): At what angle to emit the particle relative to emitVector. 0 means that the particle will be emitted in emitVector&#039;s direction; 180 will emit the particle in the opposite direction. 90 will emit the particle in a random direction perpendicular to emitVector, which is good for creating rings.&lt;br /&gt;
*emitRotSpread (float): For each particle, a random number between 0 and emitRotSpread is added to the emitRot.&lt;br /&gt;
*emitMul (float3): Scales the initial particle velocity; for this property, +y is considered to be in the direction of emitVector. Good if you want to create an egg-shaped explosion.&lt;br /&gt;
*particleSpeed (float): The particle&#039;s initial speed.&lt;br /&gt;
*particleSpeedSpread (float): For each particle, a random number between 0 and particleSpeedSpread is added to the particleSpeed .&lt;br /&gt;
&lt;br /&gt;
=== Movement Properties ===&lt;br /&gt;
*gravity (float3): This will be added to the particle&#039;s velocity every frame.&lt;br /&gt;
*airdrag (float): The particle&#039;s velocity is multiplied by this every frame.&lt;br /&gt;
&lt;br /&gt;
=== Size Properties ===&lt;br /&gt;
*particleSize (float): The initial size of the particle.&lt;br /&gt;
*particleSizeSpread (float): For each particle, a random number between 0 and particleSizeSpread is added to the particleSize.&lt;br /&gt;
*sizeGrowth (float): How much the particle grows each frame.&lt;br /&gt;
*sizeMod (float): The size of the particle is multiplied by this each frame.&lt;br /&gt;
&lt;br /&gt;
=== Visual Properties ===&lt;br /&gt;
*directional (bool): If true, the particle will point in the direction it is moving.&lt;br /&gt;
*texture (string): The texture to use for the particle.&lt;br /&gt;
*colorMap (string): The colormap to use for the particle.&lt;br /&gt;
&lt;br /&gt;
=== Life Properties ===&lt;br /&gt;
*numParticles (int): How many particles to create. This is not the same as &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;; if you spawn multiple particles using &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;, any [[CEG_Operators]] will be reevaluated for each particle, whereas if you use &amp;lt;code&amp;gt;numParticles&amp;lt;/code&amp;gt; they will not be. However, the spread properties are evaluated separately for each particle regardless of which one you use.&lt;br /&gt;
*particleLife (float): How long each particle lasts. &lt;br /&gt;
*particleLifeSpread (float); For each particle, a random number between 0 and particleLifeSpread is added to the particleLife .&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous ===&lt;br /&gt;
So far as I can tell, CEGs use the blending mode GL_ONE, GL_ONE_MINUS_SRC_ALPHA. This means that you can make a particle&#039;s color more intense or give it &amp;quot;washout&amp;quot; by setting its color channels greater than its alpha. Conversely, if you don&#039;t want washout, make sure none of the color channels exceeds the alpha.&lt;br /&gt;
&lt;br /&gt;
If you have several moving particles with high alpha, you may get z-fighting problems where particles flicker as they move past one another. Reducing the alpha can help with this.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*This is probably the most versatile class.&lt;br /&gt;
*Anything moving that is not doing so at constant velocity.&lt;br /&gt;
*If you want something that expands (or shrinks) to some size then stops, set sizeMod to something less than 1, and sizeGrowth to something positive. The particle will grow to a size equal to sizeGrowth/ (1 - sizeMod) and stop. The smaller sizeMod is, the faster it will reach this size.&lt;br /&gt;
&lt;br /&gt;
== CSpherePartSpawner ==&lt;br /&gt;
&lt;br /&gt;
Draws an expanding sphere.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
*alpha (float): The alpha of the sphere.&lt;br /&gt;
*ttl (int): How long the sphere lasts.&lt;br /&gt;
*expansionSpeed (float): How quickly the sphere expands.&lt;br /&gt;
*color (float3): The color of the sphere.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Looks like a shockwave.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3772</id>
		<title>CEG-Classes</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3772"/>
		<updated>2008-12-31T21:46:07Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;
https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Projectiles/Unsynced/&lt;br /&gt;
&lt;br /&gt;
== Common Properties ==&lt;br /&gt;
All classes have the following properties, although not all of them use them:&lt;br /&gt;
&lt;br /&gt;
*pos (float3): The initial position of the spawner.&lt;br /&gt;
*useAirLos (bool): Whether the spawner uses air LoS to determine if it is visible. This may allow the spawner to be seen from a further distance than normal.&lt;br /&gt;
*alwaysVisible (bool): If true, the spawner is always visible, ignoring LoS.&lt;br /&gt;
*speed (float3): The initial speed of the spawner.&lt;br /&gt;
&lt;br /&gt;
== CExpGenSpawner ==&lt;br /&gt;
This is the closest thing CEG has to a function call. Instead of creating a graphical effect on its own, it creates another CEG.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
&lt;br /&gt;
*delay (int): How long to wait before spawning the CEG.&lt;br /&gt;
*dir (float3): The CEG will be called with this direction.&lt;br /&gt;
*damage (float): The CEG will be called with this damage. The CEG doesn&#039;t actually deal any damage, but you can use this as a parameter and read it using the &#039;d&#039; operator.&lt;br /&gt;
*explosionGenerator (string): The name of the CEG you want to spawn.&lt;br /&gt;
&lt;br /&gt;
Suggested Use: &lt;br /&gt;
*If you use a spawner a lot of times, you may want to make it a separate CEG to avoid having to copy-paste many times.&lt;br /&gt;
*This is the only way to truly delay a graphical effect.&lt;br /&gt;
*The spawned CEG still checks conditions, so if you want to, say, spawn an effect only if it is in water &#039;&#039;and&#039;&#039; doesn&#039;t hit a unit, you can give the CExpGenSpawner &amp;lt;code&amp;gt;nounit = 1;&amp;lt;/code&amp;gt; and the spawned &amp;lt;code&amp;gt;CEG water = 1;&amp;lt;/code&amp;gt;.&lt;br /&gt;
*This allows you to give a set of spawners the same (and possibly random) direction.&lt;br /&gt;
&lt;br /&gt;
== CBitmapMuzzleFlame ==&lt;br /&gt;
This creates three rectangular textures at right angles to each other. The &amp;lt;code&amp;gt;frontTexture&amp;lt;/code&amp;gt; has &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; as its normal.&lt;br /&gt;
&lt;br /&gt;
Properties: &lt;br /&gt;
*sideTexture (string)&lt;br /&gt;
*frontTexture (string)&lt;br /&gt;
*dir (float3)&lt;br /&gt;
*colorMap (string)&lt;br /&gt;
*size (float): The initial width of the muzzle flame.&lt;br /&gt;
*length (float): The initial length of the muzzle flame.&lt;br /&gt;
*sizeGrowth (float): By the end of its life, the muzzle flame grows to 1 + sizeGrowth times its initial size and length. The flame grows quickly at first and more slowly toward the end.&lt;br /&gt;
*ttl (int): How long the muzzle flame lasts.&lt;br /&gt;
*frontOffset (float): Where the frontTexture is along the length of the muzzle flame. 0 means it is in the back, 1 is in the front.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Muzzle flames, obviously.&lt;br /&gt;
*You can use an upward-pointing CBitmapMuzzleFlame as a simple splash of water or dirt.&lt;br /&gt;
*Railgun trails.&lt;br /&gt;
*This is the only class that both obeys perspective and allows for a custom texture. All other classes except CExploSpikeProjectile always face directly toward the viewer.&lt;br /&gt;
&lt;br /&gt;
== CExploSpikeProjectile ==&lt;br /&gt;
&lt;br /&gt;
This creates a glowy spike. Note that the spike is two sided, i.e., symmetric about the position of the spawner.&lt;br /&gt;
&lt;br /&gt;
*length (float): The initial length of (half) of the spike.&lt;br /&gt;
*width (float): Half the initial width of of the spike.&lt;br /&gt;
*alpha (float): The starting alpha of the spike.&lt;br /&gt;
*alphaDecay (float): How quickly the alpha of the spike decreases.&lt;br /&gt;
*lengthGrowth (float): How much the spike grows in length every frame. The spike does not grow in width.&lt;br /&gt;
*dir (float3): The direction of the spike.&lt;br /&gt;
*color (float3): The color of the spike.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Anything glowy.&lt;br /&gt;
*For large, slow missiles, you can try using this as an extended engine flame. Set the width to something fairly large.&lt;br /&gt;
&lt;br /&gt;
== CHeatCloudProjectile ==&lt;br /&gt;
&lt;br /&gt;
Creates an expanding sprite. Simple but effective.&lt;br /&gt;
&lt;br /&gt;
*heat (float)&lt;br /&gt;
*maxheat (float)&lt;br /&gt;
*heatFalloff (float)&lt;br /&gt;
This is really confusing way of representing alpha and alphaDecay. Basically alpha = heat/maxheat, and alphaDecay = heatFalloff/maxHeat.&lt;br /&gt;
*size (float): The initial radius of the heatcloud.&lt;br /&gt;
*sizeGrowth (float): The heatcloud grows by this amount every frame.&lt;br /&gt;
*sizemod (float): The size of the heatcloud is multiplied by 1 - sizemod.&lt;br /&gt;
*sizemodmod (float): Each frame, sizemod is multiplied by sizemodmod.&lt;br /&gt;
*texture (string): The texture used for the heatcloud.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*As the main background to an explosion.&lt;br /&gt;
&lt;br /&gt;
== CSimpleParticleSystem ==&lt;br /&gt;
&lt;br /&gt;
Creates a sprite that can undergo complex motion. Probably the most versatile class. Since there are a lot of properties, I&#039;ll group them:&lt;br /&gt;
&lt;br /&gt;
=== Initial Velocity Properties ===&lt;br /&gt;
*emitVector (float3): The basic direction in which the particle is emitted.&lt;br /&gt;
*emitRot (float): At what angle to emit the particle relative to emitVector. 0 means that the particle will be emitted in emitVector&#039;s direction; 180 will emit the particle in the opposite direction. 90 will emit the particle in a random direction perpendicular to emitVector, which is good for creating rings.&lt;br /&gt;
*emitRotSpread (float): For each particle, a random number between 0 and emitRotSpread is added to the emitRot.&lt;br /&gt;
*emitMul (float3): Scales the initial particle velocity; for this property, +y is considered to be in the direction of emitVector. Good if you want to create an egg-shaped explosion.&lt;br /&gt;
*particleSpeed (float): The particle&#039;s initial speed.&lt;br /&gt;
*particleSpeedSpread (float): For each particle, a random number between 0 and particleSpeedSpread is added to the particleSpeed .&lt;br /&gt;
&lt;br /&gt;
=== Movement Properties ===&lt;br /&gt;
*gravity (float3): This will be added to the particle&#039;s velocity every frame.&lt;br /&gt;
*airdrag (float): The particle&#039;s velocity is multiplied by this every frame.&lt;br /&gt;
&lt;br /&gt;
=== Size Properties ===&lt;br /&gt;
*particleSize (float): The initial size of the particle.&lt;br /&gt;
*particleSizeSpread (float): For each particle, a random number between 0 and particleSizeSpread is added to the particleSize.&lt;br /&gt;
*sizeGrowth (float): How much the particle grows each frame.&lt;br /&gt;
*sizeMod (float): The size of the particle is multiplied by this each frame.&lt;br /&gt;
&lt;br /&gt;
=== Visual Properties ===&lt;br /&gt;
*directional (bool): If true, the particle will point in the direction it is moving.&lt;br /&gt;
*texture (string): The texture to use for the particle.&lt;br /&gt;
*colorMap (string): The colormap to use for the particle.&lt;br /&gt;
&lt;br /&gt;
=== Life Properties ===&lt;br /&gt;
*numParticles (int): How many particles to create. This is not the same as &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;; if you spawn multiple particles using &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;, any [[CEG_Operators]] will be reevaluated for each particle, whereas if you use &amp;lt;code&amp;gt;numParticles&amp;lt;/code&amp;gt; they will not be. However, the spread properties are evaluated separately for each particle regardless of which one you use.&lt;br /&gt;
*particleLife (float): How long each particle lasts. &lt;br /&gt;
*particleLifeSpread (float); For each particle, a random number between 0 and particleLifeSpread is added to the particleLife .&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous ===&lt;br /&gt;
So far as I can tell, CEGs use the blending mode GL_ONE, GL_ONE_MINUS_SRC_ALPHA. This means that you can make a particle&#039;s color more intense or give it &amp;quot;washout&amp;quot; by setting its color channels greater than its alpha. Conversely, if you don&#039;t want washout, make sure none of the color channels exceeds the alpha.&lt;br /&gt;
&lt;br /&gt;
If you have several moving particles with high alpha, you may get z-fighting problems where particles flicker as they move past one another. Reducing the alpha can help with this.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*This is probably the most versatile class.&lt;br /&gt;
*Anything moving that is not doing so at constant velocity.&lt;br /&gt;
&lt;br /&gt;
== CSpherePartSpawner ==&lt;br /&gt;
&lt;br /&gt;
Draws an expanding sphere.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
*alpha (float): The alpha of the sphere.&lt;br /&gt;
*ttl (int): How long the sphere lasts.&lt;br /&gt;
*expansionSpeed (float): How quickly the sphere expands.&lt;br /&gt;
*color (float3): The color of the sphere.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Looks like a shockwave.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Operators&amp;diff=3921</id>
		<title>CEG:Operators</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Operators&amp;diff=3921"/>
		<updated>2008-12-31T21:42:29Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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/ExplosionGenerator.cpp&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
You are not limited to using fixed numbers in CEGs for positions, speeds, and so forth. Instead, you can use operators to change the CEG based on a variety of things.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
Operators are read left to right. The operand is always to the right of the operator. Spaces are ignored, except to separate numbers. A number with no operator defaults to addition.&lt;br /&gt;
&lt;br /&gt;
== The Buffer ==&lt;br /&gt;
CEG provides you with a buffer in which you can store numbers using the yank (&#039;y&#039;) operator. This buffer can store 16 values, numbered 0 to 15.&lt;br /&gt;
&lt;br /&gt;
== Operators ==&lt;br /&gt;
These are listed in the format &amp;quot;Operator Name (operator)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Index (&#039;i&#039;) ===&lt;br /&gt;
Multiplies the operand by the current count index. This index starts at 0 and increments every time the spawn is run, until the spawn has run a number of times equal to its count.&lt;br /&gt;
&lt;br /&gt;
Suggested use: Spawning things in a line.&lt;br /&gt;
&lt;br /&gt;
=== Rand (&#039;r&#039;) ===&lt;br /&gt;
Multiplies the operand by a random float between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Suggested use: Keeping explosions from looking too &amp;quot;perfect&amp;quot;, making explosions look different every time.&lt;br /&gt;
&lt;br /&gt;
=== Damage (&#039;d&#039;) ===&lt;br /&gt;
Multiplies the operand by damage.&lt;br /&gt;
&lt;br /&gt;
=== Sawtooth (&#039;m&#039;) ===&lt;br /&gt;
Calculates the floating-point remainder of the operand.&lt;br /&gt;
&lt;br /&gt;
=== Discrete (&#039;k&#039;) ===&lt;br /&gt;
Calculates the floor of the operand.&lt;br /&gt;
&lt;br /&gt;
=== Sine (&#039;s&#039;) ===&lt;br /&gt;
Calculates the sine of the operand.&lt;br /&gt;
&lt;br /&gt;
=== Yank (&#039;y&#039;) ===&lt;br /&gt;
Saves the running result into buffer[operand], and resets the running result to zero.&lt;br /&gt;
&lt;br /&gt;
=== Multiply (&#039;x&#039;) ===&lt;br /&gt;
Multiplies the running result by buffer[operand].&lt;br /&gt;
&lt;br /&gt;
=== Add Buffer (&#039;a&#039;) ===&lt;br /&gt;
Adds buffer[operand] to the running result.&lt;br /&gt;
&lt;br /&gt;
=== Power (&#039;p&#039;) ===&lt;br /&gt;
Raises the running result to the operandth power&lt;br /&gt;
&lt;br /&gt;
=== Power Buffer (&#039;q&#039;) ===&lt;br /&gt;
Raises the running result to the buffer[operand]th power.&lt;br /&gt;
&lt;br /&gt;
=== Add (default) ===&lt;br /&gt;
Adds the operand to the running result. This operator is used if no other operator is given.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
i0.03125y0 -0.2x0x0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This multiplies the index by 0.03125 and saves it to buffer[0]. It then multiplies -0.2 by buffer[0] twice. The result is then -0.2 (i * 0.03125)^2. This type of thing is useful for making a series of particles follow a curved path.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3771</id>
		<title>CEG-Classes</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3771"/>
		<updated>2008-12-31T21:41:34Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;
https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Projectiles/Unsynced/&lt;br /&gt;
&lt;br /&gt;
== Common Properties ==&lt;br /&gt;
All classes have the following properties, although not all of them use them:&lt;br /&gt;
&lt;br /&gt;
*pos (float3): The initial position of the spawner.&lt;br /&gt;
*useAirLos (bool): Whether the spawner uses air LoS to determine if it is visible. This may allow the spawner to be seen from a further distance than normal.&lt;br /&gt;
*alwaysVisible (bool): If true, the spawner is always visible, ignoring LoS.&lt;br /&gt;
*speed (float3): The initial speed of the spawner.&lt;br /&gt;
&lt;br /&gt;
== CExpGenSpawner ==&lt;br /&gt;
This is the closest thing CEG has to a function call. Instead of creating a graphical effect on its own, it creates another CEG.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
&lt;br /&gt;
*delay (int): How long to wait before spawning the CEG.&lt;br /&gt;
*dir (float3): The CEG will be called with this direction.&lt;br /&gt;
*damage (float): The CEG will be called with this damage. The CEG doesn&#039;t actually deal any damage, but you can use this as a parameter and read it using the &#039;d&#039; operator.&lt;br /&gt;
*explosionGenerator (string): The name of the CEG you want to spawn.&lt;br /&gt;
&lt;br /&gt;
Suggested Use: &lt;br /&gt;
*If you use a spawner a lot of times, you may want to make it a separate CEG to avoid having to copy-paste many times.&lt;br /&gt;
*This is the only way to truly delay a graphical effect.&lt;br /&gt;
*The spawned CEG still checks conditions, so if you want to, say, spawn an effect only if it is in water &#039;&#039;and&#039;&#039; doesn&#039;t hit a unit, you can give the CExpGenSpawner &amp;lt;code&amp;gt;nounit = 1;&amp;lt;/code&amp;gt; and the spawned &amp;lt;code&amp;gt;CEG water = 1;&amp;lt;/code&amp;gt;.&lt;br /&gt;
*This allows you to give a set of spawners the same (and possibly random) direction.&lt;br /&gt;
&lt;br /&gt;
== CBitmapMuzzleFlame ==&lt;br /&gt;
This creates three rectangular textures at right angles to each other. The &amp;lt;code&amp;gt;frontTexture&amp;lt;/code&amp;gt; has &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; as its normal.&lt;br /&gt;
&lt;br /&gt;
Properties: &lt;br /&gt;
*sideTexture (string)&lt;br /&gt;
*frontTexture (string)&lt;br /&gt;
*dir (float3)&lt;br /&gt;
*colorMap (string)&lt;br /&gt;
*size (float): The initial width of the muzzle flame.&lt;br /&gt;
*length (float): The initial length of the muzzle flame.&lt;br /&gt;
*sizeGrowth (float): By the end of its life, the muzzle flame grows to 1 + sizeGrowth times its initial size and length. The flame grows quickly at first and more slowly toward the end.&lt;br /&gt;
*ttl (int): How long the muzzle flame lasts.&lt;br /&gt;
*frontOffset (float): Where the frontTexture is along the length of the muzzle flame. 0 means it is in the back, 1 is in the front.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Muzzle flames, obviously.&lt;br /&gt;
*You can use an upward-pointing CBitmapMuzzleFlame as a simple splash of water or dirt.&lt;br /&gt;
*Railgun trails.&lt;br /&gt;
*This is the only class that both obeys perspective and allows for a custom texture. All other classes except CExploSpikeProjectile always face directly toward the viewer.&lt;br /&gt;
&lt;br /&gt;
== CExploSpikeProjectile ==&lt;br /&gt;
&lt;br /&gt;
This creates a glowy spike. Note that the spike is two sided, i.e., symmetric about the position of the spawner.&lt;br /&gt;
&lt;br /&gt;
*length (float): The initial length of (half) of the spike.&lt;br /&gt;
*width (float): Half the initial width of of the spike.&lt;br /&gt;
*alpha (float): The starting alpha of the spike.&lt;br /&gt;
*alphaDecay (float): How quickly the alpha of the spike decreases.&lt;br /&gt;
*lengthGrowth (float): How much the spike grows in length every frame. The spike does not grow in width.&lt;br /&gt;
*dir (float3): The direction of the spike.&lt;br /&gt;
*color (float3): The color of the spike.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Anything glowy.&lt;br /&gt;
*For large, slow missiles, you can try using this as an extended engine flame. Set the width to something fairly large.&lt;br /&gt;
&lt;br /&gt;
== CHeatCloudProjectile ==&lt;br /&gt;
&lt;br /&gt;
Creates an expanding sprite. Simple but effective.&lt;br /&gt;
&lt;br /&gt;
*heat (float)&lt;br /&gt;
*maxheat (float)&lt;br /&gt;
*heatFalloff (float)&lt;br /&gt;
This is really confusing way of representing alpha and alphaDecay. Basically alpha = heat/maxheat, and alphaDecay = heatFalloff/maxHeat.&lt;br /&gt;
*size (float): The initial radius of the heatcloud.&lt;br /&gt;
*sizeGrowth (float): The heatcloud grows by this amount every frame.&lt;br /&gt;
*sizemod (float): The size of the heatcloud is multiplied by 1 - sizemod.&lt;br /&gt;
*sizemodmod (float): Each frame, sizemod is multiplied by sizemodmod.&lt;br /&gt;
*texture (string): The texture used for the heatcloud.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*As the main background to an explosion.&lt;br /&gt;
&lt;br /&gt;
== CSimpleParticleSystem ==&lt;br /&gt;
&lt;br /&gt;
Creates a sprite that can undergo complex motion. Probably the most versatile class. Since there are a lot of properties, I&#039;ll group them:&lt;br /&gt;
&lt;br /&gt;
=== Initial Velocity Properties ===&lt;br /&gt;
*emitVector (float3): The basic direction in which the particle is emitted.&lt;br /&gt;
*emitRot (float): At what angle to emit the particle relative to emitVector. 0 means that the particle will be emitted in emitVector&#039;s direction; 180 will emit the particle in the opposite direction. 90 will emit the particle in a random direction perpendicular to emitVector, which is good for creating rings.&lt;br /&gt;
*emitRotSpread (float): For each particle, a random number between 0 and emitRotSpread is added to the emitRot.&lt;br /&gt;
*emitMul (float3): Scales the initial particle velocity; for this property, +y is considered to be in the direction of emitVector. Good if you want to create an egg-shaped explosion.&lt;br /&gt;
*particleSpeed (float): The particle&#039;s initial speed.&lt;br /&gt;
*particleSpeedSpread (float): For each particle, a random number between 0 and particleSpeedSpread is added to the particleSpeed .&lt;br /&gt;
&lt;br /&gt;
=== Movement Properties ===&lt;br /&gt;
*gravity (float3): This will be added to the particle&#039;s velocity every frame.&lt;br /&gt;
*airdrag (float): The particle&#039;s velocity is multiplied by this every frame.&lt;br /&gt;
&lt;br /&gt;
=== Size Properties ===&lt;br /&gt;
*particleSize (float): The initial size of the particle.&lt;br /&gt;
*particleSizeSpread (float): For each particle, a random number between 0 and particleSizeSpread is added to the particleSize.&lt;br /&gt;
*sizeGrowth (float): How much the particle grows each frame.&lt;br /&gt;
*sizeMod (float): The size of the particle is multiplied by this each frame.&lt;br /&gt;
&lt;br /&gt;
=== Visual Properties ===&lt;br /&gt;
*directional (bool): If true, the particle will point in the direction it is moving.&lt;br /&gt;
*texture (string): The texture to use for the particle.&lt;br /&gt;
*colorMap (string): The colormap to use for the particle.&lt;br /&gt;
&lt;br /&gt;
=== Life Properties ===&lt;br /&gt;
*numParticles (int): How many particles to create.&lt;br /&gt;
*particleLife (float): How long each particle lasts. &lt;br /&gt;
*particleLifeSpread (float); For each particle, a random number between 0 and particleLifeSpread is added to the particleLife .&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous ===&lt;br /&gt;
So far as I can tell, CEGs use the blending mode GL_ONE, GL_ONE_MINUS_SRC_ALPHA. This means that you can make a particle&#039;s color more intense or give it &amp;quot;washout&amp;quot; by setting its color channels greater than its alpha. Conversely, if you don&#039;t want washout, make sure none of the color channels exceeds the alpha.&lt;br /&gt;
&lt;br /&gt;
If you have several moving particles with high alpha, you may get z-fighting problems where particles flicker as they move past one another. Reducing the alpha can help with this.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*This is probably the most versatile class.&lt;br /&gt;
*Anything moving that is not doing so at constant velocity.&lt;br /&gt;
&lt;br /&gt;
== CSpherePartSpawner ==&lt;br /&gt;
&lt;br /&gt;
Draws an expanding sphere.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
*alpha (float): The alpha of the sphere.&lt;br /&gt;
*ttl (int): How long the sphere lasts.&lt;br /&gt;
*expansionSpeed (float): How quickly the sphere expands.&lt;br /&gt;
*color (float3): The color of the sphere.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Looks like a shockwave.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3770</id>
		<title>CEG-Classes</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3770"/>
		<updated>2008-12-31T21:39:42Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;
https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Projectiles/Unsynced/&lt;br /&gt;
&lt;br /&gt;
== Common Properties ==&lt;br /&gt;
All classes have the following properties, although not all of them use them:&lt;br /&gt;
&lt;br /&gt;
*pos (float3): The initial position of the spawner.&lt;br /&gt;
*useAirLos (bool): Whether the spawner uses air LoS to determine if it is visible. This may allow the spawner to be seen from a further distance than normal.&lt;br /&gt;
*alwaysVisible (bool): If true, the spawner is always visible, ignoring LoS.&lt;br /&gt;
*speed (float3): The initial speed of the spawner.&lt;br /&gt;
&lt;br /&gt;
== CExpGenSpawner ==&lt;br /&gt;
This is the closest thing CEG has to a function call. Instead of creating a graphical effect on its own, it creates another ceg.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
&lt;br /&gt;
*delay (int): How long to wait before spawning the CEG.&lt;br /&gt;
*dir (float3): The CEG will be called with this direction.&lt;br /&gt;
*damage (float): The CEG will be called with this damage. The CEG doesn&#039;t actually deal any damage, but you can use this as a parameter and read it using the &#039;d&#039; operator.&lt;br /&gt;
*explosionGenerator (string): The name of the CEG you want to spawn.&lt;br /&gt;
&lt;br /&gt;
Suggested Use: &lt;br /&gt;
*If you use a spawner a lot of times, you may want to make it a separate CEG to avoid having to copy-paste many times.&lt;br /&gt;
*This is the only way to truly delay a graphical effect.&lt;br /&gt;
*The spawned CEG still checks conditions, so if you want to, say, spawn an effect only if it is in water &#039;&#039;and&#039;&#039; doesn&#039;t hit a unit, you can give the CExpGenSpawner &amp;lt;code&amp;gt;nounit = 1;&amp;lt;/code&amp;gt; and the spawned &amp;lt;code&amp;gt;CEG water = 1;&amp;lt;/code&amp;gt;.&lt;br /&gt;
*This allows you to give a set of spawners the same (and possibly random) direction.&lt;br /&gt;
&lt;br /&gt;
== CBitmapMuzzleFlame ==&lt;br /&gt;
This creates three rectangular textures at right angles to each other. The &amp;lt;code&amp;gt;frontTexture&amp;lt;/code&amp;gt; has &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; as its normal.&lt;br /&gt;
&lt;br /&gt;
Properties: &lt;br /&gt;
*sideTexture (string)&lt;br /&gt;
*frontTexture (string)&lt;br /&gt;
*dir (float3)&lt;br /&gt;
*colorMap (string)&lt;br /&gt;
*size (float): The initial width of the muzzle flame.&lt;br /&gt;
*length (float): The initial length of the muzzle flame.&lt;br /&gt;
*sizeGrowth (float): By the end of its life, the muzzle flame grows to 1 + sizeGrowth times its initial size and length. The flame grows quickly at first and more slowly toward the end.&lt;br /&gt;
*ttl (int): How long the muzzle flame lasts.&lt;br /&gt;
*frontOffset (float): Where the frontTexture is along the length of the muzzle flame. 0 means it is in the back, 1 is in the front.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Muzzle flames, obviously.&lt;br /&gt;
*You can use an upward-pointing CBitmapMuzzleFlame as a simple splash of water or dirt.&lt;br /&gt;
*Railgun trails.&lt;br /&gt;
*This is the only class that both obeys perspective and allows for a custom texture. All other classes except CExploSpikeProjectile always face directly toward the viewer.&lt;br /&gt;
&lt;br /&gt;
== CExploSpikeProjectile ==&lt;br /&gt;
&lt;br /&gt;
This creates a glowy spike. Note that the spike is two sided, i.e., symmetric about the position of the spawner.&lt;br /&gt;
&lt;br /&gt;
*length (float): The initial length of (half) of the spike.&lt;br /&gt;
*width (float): Half the initial width of of the spike.&lt;br /&gt;
*alpha (float): The starting alpha of the spike.&lt;br /&gt;
*alphaDecay (float): How quickly the alpha of the spike decreases.&lt;br /&gt;
*lengthGrowth (float): How much the spike grows in length every frame. The spike does not grow in width.&lt;br /&gt;
*dir (float3): The direction of the spike.&lt;br /&gt;
*color (float3): The color of the spike.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Anything glowy.&lt;br /&gt;
*For large, slow missiles, you can try using this as an extended engine flame. Set the width to something fairly large.&lt;br /&gt;
&lt;br /&gt;
== CHeatCloudProjectile ==&lt;br /&gt;
&lt;br /&gt;
Creates an expanding sprite. Simple but effective.&lt;br /&gt;
&lt;br /&gt;
*heat (float)&lt;br /&gt;
*maxheat (float)&lt;br /&gt;
*heatFalloff (float)&lt;br /&gt;
This is really confusing way of representing alpha and alphaDecay. Basically alpha = heat/maxheat, and alphaDecay = heatFalloff/maxHeat.&lt;br /&gt;
*size (float): The initial radius of the heatcloud.&lt;br /&gt;
*sizeGrowth (float): The heatcloud grows by this amount every frame.&lt;br /&gt;
*sizemod (float): The size of the heatcloud is multiplied by 1 - sizemod.&lt;br /&gt;
*sizemodmod (float): Each frame, sizemod is multiplied by sizemodmod.&lt;br /&gt;
*texture (string): The texture used for the heatcloud.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*As the main background to an explosion.&lt;br /&gt;
&lt;br /&gt;
== CSimpleParticleSystem ==&lt;br /&gt;
&lt;br /&gt;
Creates a sprite that can undergo complex motion. Probably the most versatile class. Since there are a lot of properties, I&#039;ll group them:&lt;br /&gt;
&lt;br /&gt;
=== Initial Velocity Properties ===&lt;br /&gt;
*emitVector (float3): The basic direction in which the particle is emitted.&lt;br /&gt;
*emitRot (float): At what angle to emit the particle relative to emitVector. 0 means that the particle will be emitted in emitVector&#039;s direction; 180 will emit the particle in the opposite direction. 90 will emit the particle in a random direction perpendicular to emitVector, which is good for creating rings.&lt;br /&gt;
*emitRotSpread (float): For each particle, a random number between 0 and emitRotSpread is added to the emitRot.&lt;br /&gt;
*emitMul (float3): Scales the initial particle velocity; for this property, +y is considered to be in the direction of emitVector. Good if you want to create an egg-shaped explosion.&lt;br /&gt;
*particleSpeed (float): The particle&#039;s initial speed.&lt;br /&gt;
*particleSpeedSpread (float): For each particle, a random number between 0 and particleSpeedSpread is added to the particleSpeed .&lt;br /&gt;
&lt;br /&gt;
=== Movement Properties ===&lt;br /&gt;
*gravity (float3): This will be added to the particle&#039;s velocity every frame.&lt;br /&gt;
*airdrag (float): The particle&#039;s velocity is multiplied by this every frame.&lt;br /&gt;
&lt;br /&gt;
=== Size Properties ===&lt;br /&gt;
*particleSize (float): The initial size of the particle.&lt;br /&gt;
*particleSizeSpread (float): For each particle, a random number between 0 and particleSizeSpread is added to the particleSize.&lt;br /&gt;
*sizeGrowth (float): How much the particle grows each frame.&lt;br /&gt;
*sizeMod (float): The size of the particle is multiplied by this each frame.&lt;br /&gt;
&lt;br /&gt;
=== Visual Properties ===&lt;br /&gt;
*directional (bool): If true, the particle will point in the direction it is moving.&lt;br /&gt;
*texture (string): The texture to use for the particle.&lt;br /&gt;
*colorMap (string): The colormap to use for the particle.&lt;br /&gt;
&lt;br /&gt;
=== Life Properties ===&lt;br /&gt;
*numParticles (int): How many particles to create.&lt;br /&gt;
*particleLife (float): How long each particle lasts. &lt;br /&gt;
*particleLifeSpread (float); For each particle, a random number between 0 and particleLifeSpread is added to the particleLife .&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous ===&lt;br /&gt;
So far as I can tell, CEGs use the blending mode GL_ONE, GL_ONE_MINUS_SRC_ALPHA. This means that you can make a particle&#039;s color more intense or give it &amp;quot;washout&amp;quot; by setting its color channels greater than its alpha. Conversely, if you don&#039;t want washout, make sure none of the color channels exceeds the alpha.&lt;br /&gt;
&lt;br /&gt;
If you have several moving particles with high alpha, you may get z-fighting problems where particles flicker as they move past one another. Reducing the alpha can help with this.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*This is probably the most versatile class.&lt;br /&gt;
*Anything moving that is not doing so at constant velocity.&lt;br /&gt;
&lt;br /&gt;
== CSpherePartSpawner ==&lt;br /&gt;
&lt;br /&gt;
Draws an expanding sphere.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
*alpha (float): The alpha of the sphere.&lt;br /&gt;
*ttl (int): How long the sphere lasts.&lt;br /&gt;
*expansionSpeed (float): How quickly the sphere expands.&lt;br /&gt;
*color (float3): The color of the sphere.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Looks like a shockwave.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3769</id>
		<title>CEG-Classes</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3769"/>
		<updated>2008-12-31T21:38:15Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;
https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Projectiles/Unsynced/&lt;br /&gt;
&lt;br /&gt;
== Common Properties ==&lt;br /&gt;
All classes have the following properties, although not all of them use them:&lt;br /&gt;
&lt;br /&gt;
*pos (float3): The initial position of the spawner.&lt;br /&gt;
*useAirLos (bool): Whether the spawner uses air LoS to determine if it is visible. This may allow the spawner to be seen from a further distance than normal.&lt;br /&gt;
*alwaysVisible (bool): If true, the spawner is always visible, ignoring LoS.&lt;br /&gt;
*speed (float3): The initial speed of the spawner.&lt;br /&gt;
&lt;br /&gt;
== CExpGenSpawner ==&lt;br /&gt;
This is the closest thing CEG has to a function call. Instead of creating a graphical effect on its own, it creates another ceg.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
&lt;br /&gt;
*delay (int): How long to wait before spawning the CEG.&lt;br /&gt;
*dir (float3): The CEG will be called with this direction.&lt;br /&gt;
*damage (float): The CEG will be called with this damage. The CEG doesn&#039;t actually deal any damage, but you can use this as a parameter and read it using the &#039;d&#039; operator.&lt;br /&gt;
*explosionGenerator (string): The name of the CEG you want to spawn.&lt;br /&gt;
&lt;br /&gt;
Suggested Use: &lt;br /&gt;
*If you use a spawner a lot of times, you may want to make it a separate CEG to avoid having to copy-paste many times.&lt;br /&gt;
*This is the only way to truly delay a graphical effect.&lt;br /&gt;
*The spawned CEG still checks conditions, so if you want to, say, spawn an effect only if it is in water &#039;&#039;and&#039;&#039; doesn&#039;t hit a unit, you can give the CExpGenSpawner &amp;lt;code&amp;gt;nounit = 1;&amp;lt;/code&amp;gt; and the spawned &amp;lt;code&amp;gt;CEG water = 1;&amp;lt;/code&amp;gt;.&lt;br /&gt;
*This allows you to give a set of spawners the same (and possibly random) direction.&lt;br /&gt;
&lt;br /&gt;
== CBitmapMuzzleFlame ==&lt;br /&gt;
This creates three rectangular textures at right angles to each other. The &amp;lt;code&amp;gt;frontTexture&amp;lt;/code&amp;gt; has &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; as its normal.&lt;br /&gt;
&lt;br /&gt;
Properties: &lt;br /&gt;
*sideTexture (string)&lt;br /&gt;
*frontTexture (string)&lt;br /&gt;
*dir (float3)&lt;br /&gt;
*colorMap (string)&lt;br /&gt;
*size (float): The initial width of the muzzle flame.&lt;br /&gt;
*length (float): The initial length of the muzzle flame.&lt;br /&gt;
*sizeGrowth (float): By the end of its life, the muzzle flame grows to 1 + sizeGrowth times its initial size and length. The flame grows quickly at first and more slowly toward the end.&lt;br /&gt;
*ttl (int): How long the muzzle flame lasts.&lt;br /&gt;
*frontOffset (float): Where the frontTexture is along the length of the muzzle flame. 0 means it is in the back, 1 is in the front.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Muzzle flames, obviously.&lt;br /&gt;
*You can use an upward-pointing CBitmapMuzzleFlame as a simple splash of water or dirt.&lt;br /&gt;
*Railgun trails.&lt;br /&gt;
*This is the only class that both obeys perspective and allows for a custom texture. All other classes except CExploSpikeProjectile always face directly toward the viewer.&lt;br /&gt;
&lt;br /&gt;
== CExploSpikeProjectile ==&lt;br /&gt;
&lt;br /&gt;
This creates a glowy spike. Note that the spike is two sided, i.e., symmetric about the position of the spawner.&lt;br /&gt;
&lt;br /&gt;
*length (float): The initial length of (half) of the spike.&lt;br /&gt;
*width (float): Half the initial width of of the spike.&lt;br /&gt;
*alpha (float): The starting alpha of the spike.&lt;br /&gt;
*alphaDecay (float): How quickly the alpha of the spike decreases.&lt;br /&gt;
*lengthGrowth (float): How much the spike grows in length every frame. The spike does not grow in width.&lt;br /&gt;
*dir (float3): The direction of the spike.&lt;br /&gt;
*color (float3): The color of the spike.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Anything glowy.&lt;br /&gt;
*For large, slow missiles, you can try using this as an extended engine flame. Set the width to something fairly large.&lt;br /&gt;
&lt;br /&gt;
== CHeatCloudProjectile ==&lt;br /&gt;
&lt;br /&gt;
Creates an expanding sprite. Simple but effective.&lt;br /&gt;
&lt;br /&gt;
*heat (float)&lt;br /&gt;
*maxheat (float)&lt;br /&gt;
*heatFalloff (float)&lt;br /&gt;
This is really confusing way of representing alpha and alphaDecay. Basically alpha = heat/maxheat, and alphaDecay = heatFalloff/maxHeat.&lt;br /&gt;
*size (float): The initial radius of the heatcloud.&lt;br /&gt;
*sizeGrowth (float): The heatcloud grows by this amount every frame.&lt;br /&gt;
*sizemod (float): The size of the heatcloud is multiplied by 1 - sizemod.&lt;br /&gt;
*sizemodmod (float): Each frame, sizemod is multiplied by sizemodmod.&lt;br /&gt;
*texture (string): The texture used for the heatcloud.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*As the main background to an explosion.&lt;br /&gt;
&lt;br /&gt;
== CSimpleParticleSystem ==&lt;br /&gt;
&lt;br /&gt;
Creates a sprite that can undergo complex motion. Probably the most versatile class. Since there are a lot of properties, I&#039;ll group them:&lt;br /&gt;
&lt;br /&gt;
=== Initial Velocity Properties ===&lt;br /&gt;
*emitVector (float3): The basic direction in which the particle is emitted.&lt;br /&gt;
*emitRot (float): At what angle to emit the particle relative to emitVector. 0 means that the particle will be emitted in emitVector&#039;s direction; 180 will emit the particle in the opposite direction. 90 will emit the particle in a random direction perpendicular to emitVector, which is good for creating rings.&lt;br /&gt;
*emitRotSpread (float): For each particle, a random number between 0 and emitRotSpread is added to the emitRot.&lt;br /&gt;
*emitMul (float3): Scales the initial particle velocity; for this property, +y is considered to be in the direction of emitVector. Good if you want to create an egg-shaped explosion.&lt;br /&gt;
*particleSpeed (float): The particle&#039;s initial speed.&lt;br /&gt;
*particleSpeedSpread (float): For each particle, a random number between 0 and particleSpeedSpread is added to the particleSpeed .&lt;br /&gt;
&lt;br /&gt;
=== Movement Properties ===&lt;br /&gt;
*gravity (float3): This will be added to the particle&#039;s velocity every frame.&lt;br /&gt;
*airdrag (float): The particle&#039;s velocity is multiplied by this every frame.&lt;br /&gt;
&lt;br /&gt;
=== Size Properties ===&lt;br /&gt;
*particleSize (float): The initial size of the particle.&lt;br /&gt;
*particleSizeSpread (float): For each particle, a random number between 0 and particleSizeSpread is added to the particleSize.&lt;br /&gt;
*sizeGrowth (float): How much the particle grows each frame.&lt;br /&gt;
*sizeMod (float): The size of the particle is multiplied by this each frame.&lt;br /&gt;
&lt;br /&gt;
=== Visual Properties ===&lt;br /&gt;
*directional (bool): If true, the particle will point in the direction it is moving.&lt;br /&gt;
*texture (string): The texture to use for the particle.&lt;br /&gt;
*colorMap (string): The colormap to use for the particle.&lt;br /&gt;
&lt;br /&gt;
=== Life Properties ===&lt;br /&gt;
*numParticles (int): How many particles to create.&lt;br /&gt;
*particleLife (float): How long each particle lasts. &lt;br /&gt;
*particleLifeSpread (float); For each particle, a random number between 0 and particleLifeSpread is added to the particleLife .&lt;br /&gt;
&lt;br /&gt;
=== Blending ===&lt;br /&gt;
Not a property, but worth mentioning. So far as I can tell, CEGs use the blending mode GL_ONE, GL_ONE_MINUS_SRC_ALPHA. This means that you can make a particle&#039;s color more intense or give it &amp;quot;washout&amp;quot; by setting its color channels greater than its alpha. Conversely, if you don&#039;t want washout, make sure none of the color channels exceeds the alpha.&lt;br /&gt;
&lt;br /&gt;
*If you set the color components of a CEG higher than the alpha, &lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*This is probably the most versatile class.&lt;br /&gt;
*Anything moving that is not doing so at constant velocity.&lt;br /&gt;
&lt;br /&gt;
== CSpherePartSpawner ==&lt;br /&gt;
&lt;br /&gt;
Draws an expanding sphere.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
*alpha (float): The alpha of the sphere.&lt;br /&gt;
*ttl (int): How long the sphere lasts.&lt;br /&gt;
*expansionSpeed (float): How quickly the sphere expands.&lt;br /&gt;
*color (float3): The color of the sphere.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Looks like a shockwave.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3768</id>
		<title>CEG-Classes</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3768"/>
		<updated>2008-12-31T21:33:56Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;
https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Projectiles/Unsynced/&lt;br /&gt;
&lt;br /&gt;
== Common Properties ==&lt;br /&gt;
All classes have the following properties, although not all of them use them:&lt;br /&gt;
&lt;br /&gt;
*pos (float3): The initial position of the spawner.&lt;br /&gt;
*useAirLos (bool): Whether the spawner uses air LoS to determine if it is visible. This may allow the spawner to be seen from a further distance than normal.&lt;br /&gt;
*alwaysVisible (bool): If true, the spawner is always visible, ignoring LoS.&lt;br /&gt;
*speed (float3): The initial speed of the spawner.&lt;br /&gt;
&lt;br /&gt;
== CExpGenSpawner ==&lt;br /&gt;
This is the closest thing CEG has to a function call. Instead of creating a graphical effect on its own, it creates another ceg.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
&lt;br /&gt;
*delay (int): How long to wait before spawning the CEG.&lt;br /&gt;
*dir (float3): The CEG will be called with this direction.&lt;br /&gt;
*damage (float): The CEG will be called with this damage. The CEG doesn&#039;t actually deal any damage, but you can use this as a parameter and read it using the &#039;d&#039; operator.&lt;br /&gt;
*explosionGenerator (string): The name of the CEG you want to spawn.&lt;br /&gt;
&lt;br /&gt;
Suggested Use: &lt;br /&gt;
*If you use a spawner a lot of times, you may want to make it a separate CEG to avoid having to copy-paste many times.&lt;br /&gt;
*This is the only way to truly delay a graphical effect.&lt;br /&gt;
*The spawned CEG still checks conditions, so if you want to, say, spawn an effect only if it is in water &#039;&#039;and&#039;&#039; doesn&#039;t hit a unit, you can give the CExpGenSpawner &amp;lt;code&amp;gt;nounit = 1;&amp;lt;/code&amp;gt; and the spawned &amp;lt;code&amp;gt;CEG water = 1;&amp;lt;/code&amp;gt;.&lt;br /&gt;
*This allows you to give a set of spawners the same (and possibly random) direction.&lt;br /&gt;
&lt;br /&gt;
== CBitmapMuzzleFlame ==&lt;br /&gt;
This creates three rectangular textures at right angles to each other. The &amp;lt;code&amp;gt;frontTexture&amp;lt;/code&amp;gt; has &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; as its normal.&lt;br /&gt;
&lt;br /&gt;
Properties: &lt;br /&gt;
*sideTexture (string)&lt;br /&gt;
*frontTexture (string)&lt;br /&gt;
*dir (float3)&lt;br /&gt;
*colorMap (string)&lt;br /&gt;
*size (float): The initial width of the muzzle flame.&lt;br /&gt;
*length (float): The initial length of the muzzle flame.&lt;br /&gt;
*sizeGrowth (float): By the end of its life, the muzzle flame grows to 1 + sizeGrowth times its initial size and length. The flame grows quickly at first and more slowly toward the end.&lt;br /&gt;
*ttl (int): How long the muzzle flame lasts.&lt;br /&gt;
*frontOffset (float): Where the frontTexture is along the length of the muzzle flame. 0 means it is in the back, 1 is in the front.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Muzzle flames, obviously.&lt;br /&gt;
*You can use an upward-pointing CBitmapMuzzleFlame as a simple splash of water or dirt.&lt;br /&gt;
*Railgun trails.&lt;br /&gt;
*This is the only class that both obeys perspective and allows for a custom texture. All other classes except CExploSpikeProjectile always face directly toward the viewer.&lt;br /&gt;
&lt;br /&gt;
== CExploSpikeProjectile ==&lt;br /&gt;
&lt;br /&gt;
This creates a glowy spike. Note that the spike is two sided, i.e., symmetric about the position of the spawner.&lt;br /&gt;
&lt;br /&gt;
*length (float): The initial length of (half) of the spike.&lt;br /&gt;
*width (float): Half the initial width of of the spike.&lt;br /&gt;
*alpha (float): The starting alpha of the spike.&lt;br /&gt;
*alphaDecay (float): How quickly the alpha of the spike decreases.&lt;br /&gt;
*lengthGrowth (float): How much the spike grows in length every frame. The spike does not grow in width.&lt;br /&gt;
*dir (float3): The direction of the spike.&lt;br /&gt;
*color (float3): The color of the spike.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Anything glowy.&lt;br /&gt;
*For large, slow missiles, you can try using this as an extended engine flame. Set the width to something fairly large.&lt;br /&gt;
&lt;br /&gt;
== CHeatCloudProjectile ==&lt;br /&gt;
&lt;br /&gt;
Creates an expanding sprite. Simple but effective.&lt;br /&gt;
&lt;br /&gt;
*heat (float)&lt;br /&gt;
*maxheat (float)&lt;br /&gt;
*heatFalloff (float)&lt;br /&gt;
This is really confusing way of representing alpha and alphaDecay. Basically alpha = heat/maxheat, and alphaDecay = heatFalloff/maxHeat.&lt;br /&gt;
*size (float): The initial radius of the heatcloud.&lt;br /&gt;
*sizeGrowth (float): The heatcloud grows by this amount every frame.&lt;br /&gt;
*sizemod (float): The size of the heatcloud is multiplied by 1 - sizemod.&lt;br /&gt;
*sizemodmod (float): Each frame, sizemod is multiplied by sizemodmod.&lt;br /&gt;
*texture (string): The texture used for the heatcloud.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*As the main background to an explosion.&lt;br /&gt;
&lt;br /&gt;
== CSimpleParticleSystem ==&lt;br /&gt;
&lt;br /&gt;
Creates a sprite that can undergo complex motion. Probably the most versatile class. Since there are a lot of properties, I&#039;ll group them:&lt;br /&gt;
&lt;br /&gt;
=== Initial Velocity Properties ===&lt;br /&gt;
*emitVector (float3): The basic direction in which the particle is emitted.&lt;br /&gt;
*emitRot (float): At what angle to emit the particle relative to emitVector. 0 means that the particle will be emitted in emitVector&#039;s direction; 180 will emit the particle in the opposite direction. 90 will emit the particle in a random direction perpendicular to emitVector, which is good for creating rings.&lt;br /&gt;
*emitRotSpread (float): For each particle, a random number between 0 and emitRotSpread is added to the emitRot.&lt;br /&gt;
*emitMul (float3): Scales the initial particle velocity; for this property, +y is considered to be in the direction of emitVector. Good if you want to create an egg-shaped explosion.&lt;br /&gt;
*particleSpeed (float): The particle&#039;s initial speed.&lt;br /&gt;
*particleSpeedSpread (float): For each particle, a random number between 0 and particleSpeedSpread is added to the particleSpeed .&lt;br /&gt;
&lt;br /&gt;
=== Movement Properties ===&lt;br /&gt;
*gravity (float3): This will be added to the particle&#039;s velocity every frame.&lt;br /&gt;
*airdrag (float): The particle&#039;s velocity is multiplied by this every frame.&lt;br /&gt;
&lt;br /&gt;
=== Size Properties ===&lt;br /&gt;
*particleSize (float): The initial size of the particle.&lt;br /&gt;
*particleSizeSpread (float): For each particle, a random number between 0 and particleSizeSpread is added to the particleSize.&lt;br /&gt;
*sizeGrowth (float): How much the particle grows each frame.&lt;br /&gt;
*sizeMod (float): The size of the particle is multiplied by this each frame.&lt;br /&gt;
&lt;br /&gt;
=== Visual Properties ===&lt;br /&gt;
*directional (bool): If true, the particle will point in the direction it is moving.&lt;br /&gt;
*texture (string): The texture to use for the particle.&lt;br /&gt;
*colorMap (string): The colormap to use for the particle.&lt;br /&gt;
&lt;br /&gt;
=== Life Properties ===&lt;br /&gt;
*numParticles (int): How many particles to create.&lt;br /&gt;
*particleLife (float): How long each particle lasts. &lt;br /&gt;
*particleLifeSpread (float); For each particle, a random number between 0 and particleLifeSpread is added to the particleLife .&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*This is probably the most versatile class.&lt;br /&gt;
*Anything moving that is not doing so at constant velocity.&lt;br /&gt;
&lt;br /&gt;
== CSpherePartSpawner ==&lt;br /&gt;
&lt;br /&gt;
Draws an expanding sphere.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
*alpha (float): The alpha of the sphere.&lt;br /&gt;
*ttl (int): How long the sphere lasts.&lt;br /&gt;
*expansionSpeed (float): How quickly the sphere expands.&lt;br /&gt;
*color (float3): The color of the sphere.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Looks like a shockwave.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3767</id>
		<title>CEG-Classes</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3767"/>
		<updated>2008-12-31T21:32:04Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;
https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Projectiles/Unsynced/&lt;br /&gt;
&lt;br /&gt;
== Common Properties ==&lt;br /&gt;
All classes have the following properties, although not all of them use them:&lt;br /&gt;
&lt;br /&gt;
*pos (float3): The initial position of the spawner.&lt;br /&gt;
*useAirLos (bool): Whether the spawner uses air LoS to determine if it is visible. This may allow the spawner to be seen from a further distance than normal.&lt;br /&gt;
*alwaysVisible (bool): If true, the spawner is always visible, ignoring LoS.&lt;br /&gt;
*speed (float3): The initial speed of the spawner.&lt;br /&gt;
&lt;br /&gt;
== CExpGenSpawner ==&lt;br /&gt;
This is the closest thing CEG has to a function call. Instead of creating a graphical effect on its own, it creates another ceg.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
&lt;br /&gt;
*delay (int): How long to wait before spawning the CEG.&lt;br /&gt;
*dir (float3): The CEG will be called with this direction.&lt;br /&gt;
*damage (float): The CEG will be called with this damage. The CEG doesn&#039;t actually deal any damage, but you can use this as a parameter and read it using the &#039;d&#039; operator.&lt;br /&gt;
*explosionGenerator (string): The name of the CEG you want to spawn.&lt;br /&gt;
&lt;br /&gt;
Suggested Use: &lt;br /&gt;
*If you use a spawner a lot of times, you may want to make it a separate CEG to avoid having to copy-paste many times.&lt;br /&gt;
*This is the only way to truly delay a graphical effect.&lt;br /&gt;
*The spawned CEG still checks conditions, so if you want to, say, spawn an effect only if it is in water &#039;&#039;and&#039;&#039; doesn&#039;t hit a unit, you can give the CExpGenSpawner &amp;lt;code&amp;gt;nounit = 1;&amp;lt;/code&amp;gt; and the spawned &amp;lt;code&amp;gt;CEG water = 1;&amp;lt;/code&amp;gt;.&lt;br /&gt;
*This allows you to give a set of spawners the same (and possibly random) direction.&lt;br /&gt;
&lt;br /&gt;
== CBitmapMuzzleFlame ==&lt;br /&gt;
This creates three rectangular textures at right angles to each other. The &amp;lt;code&amp;gt;frontTexture&amp;lt;/code&amp;gt; has &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; as its normal.&lt;br /&gt;
&lt;br /&gt;
Properties: &lt;br /&gt;
*sideTexture (string)&lt;br /&gt;
*frontTexture (string)&lt;br /&gt;
*dir (float3)&lt;br /&gt;
*colorMap (string)&lt;br /&gt;
*size (float): The initial width of the muzzle flame.&lt;br /&gt;
*length (float): The initial length of the muzzle flame.&lt;br /&gt;
*sizeGrowth (float): By the end of its life, the muzzle flame grows to 1 + sizeGrowth times its initial size and length. The flame grows quickly at first and more slowly toward the end.&lt;br /&gt;
*ttl (int): How long the muzzle flame lasts.&lt;br /&gt;
*frontOffset (float): Where the frontTexture is along the length of the muzzle flame. 0 means it is in the back, 1 is in the front.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Muzzle flames, obviously.&lt;br /&gt;
*You can use an upward-pointing CBitmapMuzzleFlame as a simple splash of water or dirt.&lt;br /&gt;
*Railgun trails.&lt;br /&gt;
*This is the only class that both obeys perspective and allows for a custom texture. All other classes except CExploSpikeProjectile always face directly toward the viewer.&lt;br /&gt;
&lt;br /&gt;
== CExploSpikeProjectile ==&lt;br /&gt;
&lt;br /&gt;
This creates a glowy spike. Note that the spike is two sided, i.e., symmetric about the position of the spawner.&lt;br /&gt;
&lt;br /&gt;
*length (float): The initial length of (half) of the spike.&lt;br /&gt;
*width (float): Half the initial width of of the spike.&lt;br /&gt;
*alpha (float): The starting alpha of the spike.&lt;br /&gt;
*alphaDecay (float): How quickly the alpha of the spike decreases.&lt;br /&gt;
*lengthGrowth (float): How much the spike grows in length every frame. The spike does not grow in width.&lt;br /&gt;
*dir (float3): The direction of the spike.&lt;br /&gt;
*color (float3): The color of the spike.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Anything glowy.&lt;br /&gt;
*For large, slow missiles, you can try using this as an extended engine flame. Set the width to something fairly large.&lt;br /&gt;
&lt;br /&gt;
== CHeatCloudProjectile ==&lt;br /&gt;
&lt;br /&gt;
Creates an expanding sprite. Simple but effective.&lt;br /&gt;
&lt;br /&gt;
*heat (float)&lt;br /&gt;
*maxheat (float)&lt;br /&gt;
*heatFalloff (float)&lt;br /&gt;
This is really confusing way of representing alpha and alphaDecay. Basically alpha = heat/maxheat, and alphaDecay = heatFalloff/maxHeat.&lt;br /&gt;
*size (float): The initial radius of the heatcloud.&lt;br /&gt;
*sizeGrowth (float): The heatcloud grows by this amount every frame.&lt;br /&gt;
*sizemod (float): The size of the heatcloud is multiplied by 1 - sizemod.&lt;br /&gt;
*sizemodmod (float): Each frame, sizemod is multiplied by sizemodmod.&lt;br /&gt;
*texture (string): The texture used for the heatcloud.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*As the main background to an explosion.&lt;br /&gt;
&lt;br /&gt;
== CSimpleParticleSystem ==&lt;br /&gt;
&lt;br /&gt;
Creates a sprite that can undergo complex motion. Probably the most versatile class. Since there are a lot of properties, I&#039;ll group them:&lt;br /&gt;
&lt;br /&gt;
=== Initial Velocity Properties ===&lt;br /&gt;
*emitVector (float3): The basic direction in which the particle is emitted.&lt;br /&gt;
*emitRot (float): At what angle to emit the particle relative to emitVector. 0 means that the particle will be emitted in emitVector&#039;s direction; 180 will emit the particle in the opposite direction. 90 will emit the particle in a random direction perpendicular to emitVector, which is good for creating rings.&lt;br /&gt;
*emitRotSpread (float): For each particle, a random number between 0 and emitRotSpread is added to the emitRot.&lt;br /&gt;
*emitMul (float3): Scales the initial particle velocity.&lt;br /&gt;
*particleSpeed (float): The particle&#039;s initial speed.&lt;br /&gt;
*particleSpeedSpread (float): For each particle, a random number between 0 and particleSpeedSpread is added to the particleSpeed .&lt;br /&gt;
&lt;br /&gt;
=== Movement Properties ===&lt;br /&gt;
*gravity (float3): This will be added to the particle&#039;s velocity every frame.&lt;br /&gt;
*airdrag (float): The particle&#039;s velocity is multiplied by this every frame.&lt;br /&gt;
&lt;br /&gt;
=== Size Properties ===&lt;br /&gt;
*particleSize (float): The initial size of the particle.&lt;br /&gt;
*particleSizeSpread (float): For each particle, a random number between 0 and particleSizeSpread is added to the particleSize.&lt;br /&gt;
*sizeGrowth (float): How much the particle grows each frame.&lt;br /&gt;
*sizeMod (float): The size of the particle is multiplied by this each frame.&lt;br /&gt;
&lt;br /&gt;
=== Visual Properties ===&lt;br /&gt;
*directional (bool): If true, the particle will point in the direction it is moving.&lt;br /&gt;
*texture (string): The texture to use for the particle.&lt;br /&gt;
*colorMap (string): The colormap to use for the particle.&lt;br /&gt;
&lt;br /&gt;
=== Life Properties ===&lt;br /&gt;
*numParticles (int): How many particles to create.&lt;br /&gt;
*particleLife (float): How long each particle lasts. &lt;br /&gt;
*particleLifeSpread (float); For each particle, a random number between 0 and particleLifeSpread is added to the particleLife .&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*This is probably the most versatile class.&lt;br /&gt;
*Anything moving that is not doing so at constant velocity.&lt;br /&gt;
&lt;br /&gt;
== CSpherePartSpawner ==&lt;br /&gt;
&lt;br /&gt;
Draws an expanding sphere.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
*alpha (float): The alpha of the sphere.&lt;br /&gt;
*ttl (int): How long the sphere lasts.&lt;br /&gt;
*expansionSpeed (float): How quickly the sphere expands.&lt;br /&gt;
*color (float3): The color of the sphere.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Looks like a shockwave.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3766</id>
		<title>CEG-Classes</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3766"/>
		<updated>2008-12-31T21:13:49Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;
https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Projectiles/Unsynced/&lt;br /&gt;
&lt;br /&gt;
== Common Properties ==&lt;br /&gt;
All classes have the following properties, although not all of them use them:&lt;br /&gt;
&lt;br /&gt;
*pos (float3): The initial position of the spawner.&lt;br /&gt;
*useAirLos (bool): Whether the spawner uses air LoS to determine if it is visible. This may allow the spawner to be seen from a further distance than normal.&lt;br /&gt;
*alwaysVisible (bool): If true, the spawner is always visible, ignoring LoS.&lt;br /&gt;
*speed (float3): The initial speed of the spawner.&lt;br /&gt;
&lt;br /&gt;
== CExpGenSpawner ==&lt;br /&gt;
This is the closest thing CEG has to a function call. Instead of creating a graphical effect on its own, it creates another ceg.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
&lt;br /&gt;
*delay (int): How long to wait before spawning the CEG.&lt;br /&gt;
*dir (float3): The CEG will be called with this direction.&lt;br /&gt;
*damage (float): The CEG will be called with this damage. The CEG doesn&#039;t actually deal any damage, but you can use this as a parameter and read it using the &#039;d&#039; operator.&lt;br /&gt;
*explosionGenerator (string): The name of the CEG you want to spawn.&lt;br /&gt;
&lt;br /&gt;
Suggested Use: &lt;br /&gt;
*If you use a spawner a lot of times, you may want to make it a separate CEG to avoid having to copy-paste many times.&lt;br /&gt;
*This is the only way to truly delay a graphical effect.&lt;br /&gt;
*The spawned CEG still checks conditions, so if you want to, say, spawn an effect only if it is in water &#039;&#039;and&#039;&#039; doesn&#039;t hit a unit, you can give the CExpGenSpawner &amp;lt;code&amp;gt;nounit = 1;&amp;lt;/code&amp;gt; and the spawned &amp;lt;code&amp;gt;CEG water = 1;&amp;lt;/code&amp;gt;.&lt;br /&gt;
*This allows you to give a set of spawners the same (and possibly random) direction.&lt;br /&gt;
&lt;br /&gt;
== CBitmapMuzzleFlame ==&lt;br /&gt;
This creates three rectangular textures at right angles to each other. The &amp;lt;code&amp;gt;frontTexture&amp;lt;/code&amp;gt; has &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; as its normal.&lt;br /&gt;
&lt;br /&gt;
Properties: &lt;br /&gt;
*sideTexture (string)&lt;br /&gt;
*frontTexture (string)&lt;br /&gt;
*dir (float3)&lt;br /&gt;
*colorMap (string)&lt;br /&gt;
*size (float): The initial width of the muzzle flame.&lt;br /&gt;
*length (float): The initial length of the muzzle flame.&lt;br /&gt;
*sizeGrowth (float): By the end of its life, the muzzle flame grows to 1 + sizeGrowth times its initial size and length. The flame grows quickly at first and more slowly toward the end.&lt;br /&gt;
*ttl (int): How long the muzzle flame lasts.&lt;br /&gt;
*frontOffset (float): Where the frontTexture is along the length of the muzzle flame. 0 means it is in the back, 1 is in the front.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Muzzle flames, obviously.&lt;br /&gt;
*You can use an upward-pointing CBitmapMuzzleFlame as a simple splash of water or dirt.&lt;br /&gt;
*Railgun trails.&lt;br /&gt;
*This is the only class that obeys perspective. All other classes always face directly toward the viewer.&lt;br /&gt;
&lt;br /&gt;
== CExploSpikeProjectile ==&lt;br /&gt;
&lt;br /&gt;
This creates a glowy spike. Note that the spike is two sided, i.e., symmetric about the position of the spawner.&lt;br /&gt;
&lt;br /&gt;
*length (float): The initial length of (half) of the spike.&lt;br /&gt;
*width (float): Half the initial width of of the spike.&lt;br /&gt;
*alpha (float): The starting alpha of the spike.&lt;br /&gt;
*alphaDecay (float): How quickly the alpha of the spike decreases.&lt;br /&gt;
*lengthGrowth (float): How much the spike grows in length every frame. The spike does not grow in width.&lt;br /&gt;
*dir (float3): The direction of the spike.&lt;br /&gt;
*color (float3): The color of the spike.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Anything glowy.&lt;br /&gt;
*For large, slow missiles, you can try using this as an extended engine flame. Set the width to something fairly large.&lt;br /&gt;
&lt;br /&gt;
== CHeatCloudProjectile ==&lt;br /&gt;
&lt;br /&gt;
*heat (float)&lt;br /&gt;
*maxheat (float)&lt;br /&gt;
*heatFalloff (float)&lt;br /&gt;
This is really confusing way of representing alpha and alphaDecay. Basically alpha = heat/maxheat, and alphaDecay = heatFalloff/maxHeat.&lt;br /&gt;
*size (float): The initial radius of the heatcloud.&lt;br /&gt;
*sizeGrowth (float): The heatcloud grows by this amount every frame.&lt;br /&gt;
*sizemod (float): The size of the heatcloud is multiplied by 1 - sizemod.&lt;br /&gt;
*sizemodmod (float): Each frame, sizemod is multiplied by sizemodmod.&lt;br /&gt;
*texture (string)&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*As the main background to an explosion.&lt;br /&gt;
&lt;br /&gt;
== CSimpleParticleSystem ==&lt;br /&gt;
&lt;br /&gt;
*emitVector (float3)&lt;br /&gt;
*emitMul (float3)&lt;br /&gt;
*gravity (float3)&lt;br /&gt;
*colorMap (string)&lt;br /&gt;
*texture (string)&lt;br /&gt;
*airdrag (float)&lt;br /&gt;
*particleLife (float)&lt;br /&gt;
*particleLifeSpread (float)&lt;br /&gt;
*numParticles (int)&lt;br /&gt;
*particleSpeed (float)&lt;br /&gt;
*particleSpeedSpread (float)&lt;br /&gt;
*particleSize (float)&lt;br /&gt;
*particleSizeSpread (float)&lt;br /&gt;
*emitRot (float)&lt;br /&gt;
*emitRotSpread (float)&lt;br /&gt;
*directional (bool)&lt;br /&gt;
*sizeGrowth (float)&lt;br /&gt;
*sizeMod (float)&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*This is probably the most versatile class.&lt;br /&gt;
*Anything moving that is not doing so at constant velocity.&lt;br /&gt;
&lt;br /&gt;
== CSpherePartSpawner ==&lt;br /&gt;
&lt;br /&gt;
Draws an expanding sphere.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
*alpha (float): The alpha of the sphere.&lt;br /&gt;
*ttl (int): How long the sphere lasts.&lt;br /&gt;
*expansionSpeed (float): How quickly the sphere expands.&lt;br /&gt;
*color (float3): The color of the sphere.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Looks like a shockwave.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3765</id>
		<title>CEG-Classes</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3765"/>
		<updated>2008-12-31T21:07:54Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;
https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Projectiles/Unsynced/&lt;br /&gt;
&lt;br /&gt;
== Common Properties ==&lt;br /&gt;
All classes have the following properties, although not all of them use them:&lt;br /&gt;
&lt;br /&gt;
*pos (float3): The initial position of the spawner.&lt;br /&gt;
*useAirLos (bool): Whether the spawner uses air LoS to determine if it is visible. This may allow the spawner to be seen from a further distance than normal.&lt;br /&gt;
*alwaysVisible (bool): If true, the spawner is always visible, ignoring LoS.&lt;br /&gt;
*speed (float3): The initial speed of the spawner.&lt;br /&gt;
&lt;br /&gt;
== CExpGenSpawner ==&lt;br /&gt;
This is the closest thing CEG has to a function call. Instead of creating a graphical effect on its own, it creates another ceg.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
&lt;br /&gt;
*delay (int): How long to wait before spawning the CEG.&lt;br /&gt;
*dir (float3): The CEG will be called with this direction.&lt;br /&gt;
*damage (float): The CEG will be called with this damage. The CEG doesn&#039;t actually deal any damage, but you can use this as a parameter and read it using the &#039;d&#039; operator.&lt;br /&gt;
*explosionGenerator (string): The name of the CEG you want to spawn.&lt;br /&gt;
&lt;br /&gt;
Suggested Use: &lt;br /&gt;
*If you use a spawner a lot of times, you may want to make it a separate CEG to avoid having to copy-paste many times.&lt;br /&gt;
*This is the only way to truly delay a graphical effect.&lt;br /&gt;
*The spawned CEG still checks conditions, so if you want to, say, spawn an effect only if it is in water &#039;&#039;and&#039;&#039; doesn&#039;t hit a unit, you can give the CExpGenSpawner &amp;lt;code&amp;gt;nounit = 1;&amp;lt;/code&amp;gt; and the spawned &amp;lt;code&amp;gt;CEG water = 1;&amp;lt;/code&amp;gt;.&lt;br /&gt;
*This allows you to give a set of spawners the same (and possibly random) direction.&lt;br /&gt;
&lt;br /&gt;
== CBitmapMuzzleFlame ==&lt;br /&gt;
This creates three rectangular textures at right angles to each other. The &amp;lt;code&amp;gt;frontTexture&amp;lt;/code&amp;gt; has &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; as its normal.&lt;br /&gt;
&lt;br /&gt;
Properties: &lt;br /&gt;
*sideTexture (string)&lt;br /&gt;
*frontTexture (string)&lt;br /&gt;
*dir (float3)&lt;br /&gt;
*colorMap (string)&lt;br /&gt;
*size (float): The initial width of the muzzle flame.&lt;br /&gt;
*length (float): The initial length of the muzzle flame.&lt;br /&gt;
*sizeGrowth (float): By the end of its life, the muzzle flame grows to 1 + sizeGrowth times its initial size and length. The flame grows quickly at first and more slowly toward the end.&lt;br /&gt;
*ttl (int): How long the muzzle flame lasts.&lt;br /&gt;
*frontOffset (float): Where the frontTexture is along the length of the muzzle flame. 0 means it is in the back, 1 is in the front.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Muzzle flames, obviously.&lt;br /&gt;
*You can use an upward-pointing CBitmapMuzzleFlame as a simple splash of water or dirt.&lt;br /&gt;
*Railgun trails.&lt;br /&gt;
*This is the only class that obeys perspective. All other classes always face directly toward the viewer.&lt;br /&gt;
&lt;br /&gt;
== CExploSpikeProjectile ==&lt;br /&gt;
&lt;br /&gt;
This creates a glowy spike. Note that the spike is two sided, i.e., symmetric about the position of the spawner.&lt;br /&gt;
&lt;br /&gt;
*length (float): The initial length of (half) of the spike.&lt;br /&gt;
*width (float): Half the initial width of of the spike.&lt;br /&gt;
*alpha (float): The starting alpha of the spike.&lt;br /&gt;
*alphaDecay (float): How quickly the alpha of the spike decreases.&lt;br /&gt;
*lengthGrowth (float): How much the spike grows in length every frame. The spike does not grow in width.&lt;br /&gt;
*dir (float3): The direction of the spike.&lt;br /&gt;
*color (float3): The color of the spike.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Anything glowy.&lt;br /&gt;
*For large, slow missiles, you can try using this as an extended engine flame. Set the width to something fairly large.&lt;br /&gt;
&lt;br /&gt;
== CHeatCloudProjectile ==&lt;br /&gt;
&lt;br /&gt;
*heat (float)&lt;br /&gt;
*maxheat (float)&lt;br /&gt;
*heatFalloff (float)&lt;br /&gt;
*size (float)&lt;br /&gt;
*sizeGrowth (float)&lt;br /&gt;
*sizemod (float)&lt;br /&gt;
*sizemodmod (float)&lt;br /&gt;
*texture (string)&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*As the main background to an explosion.&lt;br /&gt;
&lt;br /&gt;
== CSimpleParticleSystem ==&lt;br /&gt;
&lt;br /&gt;
*emitVector (float3)&lt;br /&gt;
*emitMul (float3)&lt;br /&gt;
*gravity (float3)&lt;br /&gt;
*colorMap (string)&lt;br /&gt;
*texture (string)&lt;br /&gt;
*airdrag (float)&lt;br /&gt;
*particleLife (float)&lt;br /&gt;
*particleLifeSpread (float)&lt;br /&gt;
*numParticles (int)&lt;br /&gt;
*particleSpeed (float)&lt;br /&gt;
*particleSpeedSpread (float)&lt;br /&gt;
*particleSize (float)&lt;br /&gt;
*particleSizeSpread (float)&lt;br /&gt;
*emitRot (float)&lt;br /&gt;
*emitRotSpread (float)&lt;br /&gt;
*directional (bool)&lt;br /&gt;
*sizeGrowth (float)&lt;br /&gt;
*sizeMod (float)&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*This is probably the most versatile class.&lt;br /&gt;
*Anything moving.&lt;br /&gt;
&lt;br /&gt;
== CSpherePartSpawner ==&lt;br /&gt;
&lt;br /&gt;
Draws an expanding sphere.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
*alpha (float)&lt;br /&gt;
*ttl (int)&lt;br /&gt;
*expansionSpeed (float)&lt;br /&gt;
*color (float3)&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Looks like a shockwave.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3764</id>
		<title>CEG-Classes</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3764"/>
		<updated>2008-12-31T21:03:21Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;
https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Projectiles/Unsynced/&lt;br /&gt;
&lt;br /&gt;
== Common Properties ==&lt;br /&gt;
All classes have the following properties, although not all of them use them:&lt;br /&gt;
&lt;br /&gt;
*pos (float3): The initial position of the spawner.&lt;br /&gt;
*useAirLos (bool): Whether the spawner uses air LoS to determine if it is visible. This may allow the spawner to be seen from a further distance than normal.&lt;br /&gt;
*alwaysVisible (bool): If true, the spawner is always visible, ignoring LoS.&lt;br /&gt;
*speed (float3): The initial speed of the spawner.&lt;br /&gt;
&lt;br /&gt;
== CExpGenSpawner ==&lt;br /&gt;
This is the closest thing CEG has to a function call. Instead of creating a graphical effect on its own, it creates another ceg.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
&lt;br /&gt;
*delay (int): How long to wait before spawning the CEG.&lt;br /&gt;
*dir (float3): The CEG will be called with this direction.&lt;br /&gt;
*damage (float): The CEG will be called with this damage. The CEG doesn&#039;t actually deal any damage, but you can use this as a parameter and read it using the &#039;d&#039; operator.&lt;br /&gt;
*explosionGenerator (string): The name of the CEG you want to spawn.&lt;br /&gt;
&lt;br /&gt;
Suggested Use: &lt;br /&gt;
*If you use a spawner a lot of times, you may want to make it a separate CEG to avoid having to copy-paste many times.&lt;br /&gt;
*This is the only way to truly delay a graphical effect.&lt;br /&gt;
*The spawned CEG still checks conditions, so if you want to, say, spawn an effect only if it is in water &#039;&#039;and&#039;&#039; doesn&#039;t hit a unit, you can give the CExpGenSpawner &amp;lt;code&amp;gt;nounit = 1;&amp;lt;/code&amp;gt; and the spawned &amp;lt;code&amp;gt;CEG water = 1;&amp;lt;/code&amp;gt;.&lt;br /&gt;
*This allows you to give a set of spawners the same (and possibly random) direction.&lt;br /&gt;
&lt;br /&gt;
== CBitmapMuzzleFlame ==&lt;br /&gt;
This creates three rectangular textures at right angles to each other. The &amp;lt;code&amp;gt;frontTexture&amp;lt;/code&amp;gt; has &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; as its normal.&lt;br /&gt;
&lt;br /&gt;
Properties: &lt;br /&gt;
*sideTexture (string)&lt;br /&gt;
*frontTexture (string)&lt;br /&gt;
*dir (float3)&lt;br /&gt;
*colorMap (string)&lt;br /&gt;
*size (float): The initial width of the muzzle flame.&lt;br /&gt;
*length (float): The initial length of the muzzle flame.&lt;br /&gt;
*sizeGrowth (float): By the end of its life, the muzzle flame grows to 1 + sizeGrowth times its initial size and length.&lt;br /&gt;
*ttl (int): How long the muzzle flame lasts.&lt;br /&gt;
*frontOffset (float): Where the frontTexture is along the length of the muzzle flame. 0 means it is in the back, 1 is in the front.&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Muzzle flames, obviously.&lt;br /&gt;
*You can use an upward-pointing CBitmapMuzzleFlame as a simple splash of water or dirt.&lt;br /&gt;
*Railgun trails.&lt;br /&gt;
*This is the only class that obeys perspective. All other classes always face directly toward the viewer.&lt;br /&gt;
&lt;br /&gt;
== CExploSpikeProjectile ==&lt;br /&gt;
&lt;br /&gt;
*length (float)&lt;br /&gt;
*width (float)&lt;br /&gt;
*alpha (float)&lt;br /&gt;
*alphaDecay (float)&lt;br /&gt;
*lengthGrowth (float)&lt;br /&gt;
*dir (float3)&lt;br /&gt;
*color (float3)&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Anything glowy.&lt;br /&gt;
*For large, slow missiles, you can try using this as an extended engine flame. Set the width to something fairly large.&lt;br /&gt;
&lt;br /&gt;
== CHeatCloudProjectile ==&lt;br /&gt;
&lt;br /&gt;
*heat (float)&lt;br /&gt;
*maxheat (float)&lt;br /&gt;
*heatFalloff (float)&lt;br /&gt;
*size (float)&lt;br /&gt;
*sizeGrowth (float)&lt;br /&gt;
*sizemod (float)&lt;br /&gt;
*sizemodmod (float)&lt;br /&gt;
*texture (string)&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*As the main background to an explosion.&lt;br /&gt;
&lt;br /&gt;
== CSimpleParticleSystem ==&lt;br /&gt;
&lt;br /&gt;
*emitVector (float3)&lt;br /&gt;
*emitMul (float3)&lt;br /&gt;
*gravity (float3)&lt;br /&gt;
*colorMap (string)&lt;br /&gt;
*texture (string)&lt;br /&gt;
*airdrag (float)&lt;br /&gt;
*particleLife (float)&lt;br /&gt;
*particleLifeSpread (float)&lt;br /&gt;
*numParticles (int)&lt;br /&gt;
*particleSpeed (float)&lt;br /&gt;
*particleSpeedSpread (float)&lt;br /&gt;
*particleSize (float)&lt;br /&gt;
*particleSizeSpread (float)&lt;br /&gt;
*emitRot (float)&lt;br /&gt;
*emitRotSpread (float)&lt;br /&gt;
*directional (bool)&lt;br /&gt;
*sizeGrowth (float)&lt;br /&gt;
*sizeMod (float)&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*This is probably the most versatile class.&lt;br /&gt;
*Anything moving.&lt;br /&gt;
&lt;br /&gt;
== CSpherePartSpawner ==&lt;br /&gt;
&lt;br /&gt;
Draws an expanding sphere.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
*alpha (float)&lt;br /&gt;
*ttl (int)&lt;br /&gt;
*expansionSpeed (float)&lt;br /&gt;
*color (float3)&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Looks like a shockwave.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Format&amp;diff=3794</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=3794"/>
		<updated>2008-12-31T20:57:48Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;&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;/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;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3763</id>
		<title>CEG-Classes</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3763"/>
		<updated>2008-12-31T20:53:45Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;
https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Projectiles/Unsynced/&lt;br /&gt;
&lt;br /&gt;
== Common Properties ==&lt;br /&gt;
All classes have the following properties, although not all of them use them:&lt;br /&gt;
&lt;br /&gt;
*pos (float3): The initial position of the spawner.&lt;br /&gt;
*useAirLos (bool): Whether the spawner uses air LoS to determine if it is visible. This may allow the spawner to be seen from a further distance than normal.&lt;br /&gt;
*alwaysVisible (bool): If true, the spawner is always visible, ignoring LoS.&lt;br /&gt;
*speed (float3): The initial speed of the spawner.&lt;br /&gt;
&lt;br /&gt;
== CExpGenSpawner ==&lt;br /&gt;
This is the closest thing CEG has to a function call. Instead of creating a graphical effect on its own, it creates another ceg.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
&lt;br /&gt;
*delay (int): How long to wait before spawning the CEG.&lt;br /&gt;
*dir (float3): The CEG will be called with this direction.&lt;br /&gt;
*damage (float): The CEG will be called with this damage. The CEG doesn&#039;t actually deal any damage, but you can use this as a parameter and read it using the &#039;d&#039; operator.&lt;br /&gt;
*explosionGenerator (string): The name of the CEG you want to spawn.&lt;br /&gt;
&lt;br /&gt;
Suggested Use: &lt;br /&gt;
*If you use a spawner a lot of times, you may want to make it a separate CEG to avoid having to copy-paste many times.&lt;br /&gt;
*This is the only way to truly delay a graphical effect.&lt;br /&gt;
*The spawned CEG still checks conditions, so if you want to, say, spawn an effect only if it is in water &#039;&#039;and&#039;&#039; doesn&#039;t hit a unit, you can give the CExpGenSpawner &amp;lt;code&amp;gt;nounit = 1;&amp;lt;/code&amp;gt; and the spawned &amp;lt;code&amp;gt;CEG water = 1;&amp;lt;/code&amp;gt;.&lt;br /&gt;
*This allows you to give a set of spawners the same (and possibly random) direction.&lt;br /&gt;
&lt;br /&gt;
== CBitmapMuzzleFlame ==&lt;br /&gt;
This creates three rectangular textures at right angles to each other. The &amp;lt;code&amp;gt;frontTexture&amp;lt;/code&amp;gt; has &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; as its normal.&lt;br /&gt;
&lt;br /&gt;
Properties: &lt;br /&gt;
*sideTexture (string)&lt;br /&gt;
*frontTexture (string)&lt;br /&gt;
*dir (float3)&lt;br /&gt;
*colorMap (string)&lt;br /&gt;
*size (float)&lt;br /&gt;
*length (float)&lt;br /&gt;
*sizeGrowth (float)&lt;br /&gt;
*ttl (int)&lt;br /&gt;
*frontOffset (float)&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Muzzle flames, obviously.&lt;br /&gt;
*You can use an upward-pointing CBitmapMuzzleFlame as a simple splash of water or dirt.&lt;br /&gt;
*Railgun trails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CExploSpikeProjectile ==&lt;br /&gt;
&lt;br /&gt;
*length (float)&lt;br /&gt;
*width (float)&lt;br /&gt;
*alpha (float)&lt;br /&gt;
*alphaDecay (float)&lt;br /&gt;
*lengthGrowth (float)&lt;br /&gt;
*dir (float3)&lt;br /&gt;
*color (float3)&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Anything glowy.&lt;br /&gt;
*For large, slow missiles, you can try using this as an extended engine flame. Set the width to something fairly large.&lt;br /&gt;
&lt;br /&gt;
== CHeatCloudProjectile ==&lt;br /&gt;
&lt;br /&gt;
*heat (float)&lt;br /&gt;
*maxheat (float)&lt;br /&gt;
*heatFalloff (float)&lt;br /&gt;
*size (float)&lt;br /&gt;
*sizeGrowth (float)&lt;br /&gt;
*sizemod (float)&lt;br /&gt;
*sizemodmod (float)&lt;br /&gt;
*texture (string)&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*As the main background to an explosion.&lt;br /&gt;
&lt;br /&gt;
== CSimpleParticleSystem ==&lt;br /&gt;
&lt;br /&gt;
*emitVector (float3)&lt;br /&gt;
*emitMul (float3)&lt;br /&gt;
*gravity (float3)&lt;br /&gt;
*colorMap (string)&lt;br /&gt;
*texture (string)&lt;br /&gt;
*airdrag (float)&lt;br /&gt;
*particleLife (float)&lt;br /&gt;
*particleLifeSpread (float)&lt;br /&gt;
*numParticles (int)&lt;br /&gt;
*particleSpeed (float)&lt;br /&gt;
*particleSpeedSpread (float)&lt;br /&gt;
*particleSize (float)&lt;br /&gt;
*particleSizeSpread (float)&lt;br /&gt;
*emitRot (float)&lt;br /&gt;
*emitRotSpread (float)&lt;br /&gt;
*directional (bool)&lt;br /&gt;
*sizeGrowth (float)&lt;br /&gt;
*sizeMod (float)&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*This is probably the most versatile class.&lt;br /&gt;
*Anything moving.&lt;br /&gt;
&lt;br /&gt;
== CSpherePartSpawner ==&lt;br /&gt;
&lt;br /&gt;
Draws an expanding sphere.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
*alpha (float)&lt;br /&gt;
*ttl (int)&lt;br /&gt;
*expansionSpeed (float)&lt;br /&gt;
*color (float3)&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Looks like a shockwave.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3762</id>
		<title>CEG-Classes</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3762"/>
		<updated>2008-12-31T20:49:43Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;
https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Projectiles/Unsynced/&lt;br /&gt;
&lt;br /&gt;
== Common Properties ==&lt;br /&gt;
All classes have the following properties, although not all of them use them:&lt;br /&gt;
&lt;br /&gt;
*pos (float3): The initial position of the spawner.&lt;br /&gt;
*useAirLos (bool): Whether the spawner uses air LoS to determine if it is visible. This may allow the spawner to be seen from a further distance than normal.&lt;br /&gt;
*alwaysVisible (bool): If true, the spawner is always visible, ignoring LoS.&lt;br /&gt;
*speed (float3): The initial speed of the spawner.&lt;br /&gt;
&lt;br /&gt;
== CExpGenSpawner ==&lt;br /&gt;
This is the closest thing CEG has to a function call. Instead of creating a graphical effect on its own, it creates another ceg.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
&lt;br /&gt;
*delay (int): How long to wait before spawning the CEG.&lt;br /&gt;
*dir (float3): The CEG will be called with this direction.&lt;br /&gt;
*damage (float): The CEG will be called with this damage. The CEG doesn&#039;t actually deal any damage, but you can use this as a parameter and read it using the &#039;d&#039; operator.&lt;br /&gt;
*explosionGenerator (string): The name of the CEG you want to spawn.&lt;br /&gt;
&lt;br /&gt;
Suggested Use: &lt;br /&gt;
*If you use a spawner a lot of times, you may want to make it a separate CEG to avoid having to copy-paste many times.&lt;br /&gt;
*This is the only way to truly delay a graphical effect.&lt;br /&gt;
*The spawned CEG still checks conditions, so if you want to, say, spawn an effect only if it is in water &#039;&#039;and&#039;&#039; doesn&#039;t hit a unit, you can give the CExpGenSpawner &amp;lt;code&amp;gt;nounit = 1;&amp;lt;/code&amp;gt; and the spawned &amp;lt;code&amp;gt;CEG water = 1;&amp;lt;/code&amp;gt;.&lt;br /&gt;
*This allows you to give a set of spawners the same (and possibly random) direction.&lt;br /&gt;
&lt;br /&gt;
== CBitmapMuzzleFlame ==&lt;br /&gt;
This creates three rectangular textures at right angles to each other. The &amp;lt;code&amp;gt;frontTexture&amp;lt;/code&amp;gt; has &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; as its normal.&lt;br /&gt;
&lt;br /&gt;
Properties: &lt;br /&gt;
*sideTexture (string)&lt;br /&gt;
*frontTexture (string)&lt;br /&gt;
*dir (float3)&lt;br /&gt;
*colorMap (string)&lt;br /&gt;
*size (float)&lt;br /&gt;
*length (float)&lt;br /&gt;
*sizeGrowth (float)&lt;br /&gt;
*ttl (int)&lt;br /&gt;
*frontOffset (float)&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Muzzle flames, obviously.&lt;br /&gt;
*You can use an upward-pointing CBitmapMuzzleFlame as a simple splash of water or dirt.&lt;br /&gt;
*Railgun trails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CExploSpikeProjectile ==&lt;br /&gt;
&lt;br /&gt;
*length&lt;br /&gt;
*width&lt;br /&gt;
*alpha&lt;br /&gt;
*alphaDecay&lt;br /&gt;
*lengthGrowth&lt;br /&gt;
*dir&lt;br /&gt;
*color&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Anything glowy.&lt;br /&gt;
*For large, slow missiles, you can try using this as an extended engine flame. Set the width to something fairly large.&lt;br /&gt;
&lt;br /&gt;
== CHeatCloudProjectile ==&lt;br /&gt;
&lt;br /&gt;
*heat&lt;br /&gt;
*maxheat&lt;br /&gt;
*heatFalloff&lt;br /&gt;
*size&lt;br /&gt;
*sizeGrowth&lt;br /&gt;
*sizemod&lt;br /&gt;
*sizemodmod&lt;br /&gt;
*texture&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*As the main background to an explosion.&lt;br /&gt;
&lt;br /&gt;
== CSimpleParticleSystem ==&lt;br /&gt;
&lt;br /&gt;
*emitVector&lt;br /&gt;
*emitMul&lt;br /&gt;
*gravity&lt;br /&gt;
*colorMap&lt;br /&gt;
*texture&lt;br /&gt;
*airdrag&lt;br /&gt;
*particleLife&lt;br /&gt;
*particleLifeSpread&lt;br /&gt;
*numParticles&lt;br /&gt;
*particleSpeed&lt;br /&gt;
*particleSpeedSpread&lt;br /&gt;
*particleSize&lt;br /&gt;
*particleSizeSpread&lt;br /&gt;
*emitRot&lt;br /&gt;
*emitRotSpread&lt;br /&gt;
*directional&lt;br /&gt;
*sizeGrowth&lt;br /&gt;
*sizeMod&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*This is probably the most versatile class.&lt;br /&gt;
*Anything moving.&lt;br /&gt;
&lt;br /&gt;
== CSpherePartSpawner ==&lt;br /&gt;
&lt;br /&gt;
Draws an expanding sphere.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
*alpha (float in [0, 1])&lt;br /&gt;
*ttl (int)&lt;br /&gt;
*expansionSpeed (float)&lt;br /&gt;
*color (float3)&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Looks like a shockwave.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3761</id>
		<title>CEG-Classes</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3761"/>
		<updated>2008-12-30T08:34:31Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;
https://spring.clan-sy.com/svn/spring/trunk/rts/Sim/Projectiles/Unsynced/&lt;br /&gt;
&lt;br /&gt;
== Common Properties ==&lt;br /&gt;
All classes have the following properties, although not all of them use them:&lt;br /&gt;
&lt;br /&gt;
*pos (float3): The initial position of the spawner.&lt;br /&gt;
*useAirLos (bool): Whether the spawner uses air LoS to determine if it is visible. This may allow the spawner to be seen from a further distance than normal.&lt;br /&gt;
*alwaysVisible (bool): If true, the spawner is always visible, ignoring LoS.&lt;br /&gt;
*speed (float3): The initial speed of the spawner.&lt;br /&gt;
&lt;br /&gt;
== CExpGenSpawner ==&lt;br /&gt;
This is the closest thing CEG has to a function call. Instead of creating a graphical effect on its own, it creates another ceg.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
&lt;br /&gt;
*delay (int): How long to wait before spawning the CEG.&lt;br /&gt;
*dir (float3): The CEG will be called with this direction.&lt;br /&gt;
*damage (float): The CEG will be called with this damage. The CEG doesn&#039;t actually deal any damage, but you can use this as a parameter and read it using the &#039;d&#039; operator.&lt;br /&gt;
*explosionGenerator (string): The name of the CEG you want to spawn.&lt;br /&gt;
&lt;br /&gt;
Suggested Use: &lt;br /&gt;
*If you use a spawner a lot of times, you may want to make it a separate CEG to avoid having to copy-paste many times.&lt;br /&gt;
*This is the only way to truly delay a graphical effect.&lt;br /&gt;
*The spawned CEG still checks conditions, so if you want to, say, spawn an effect only if it is in water &#039;&#039;and&#039;&#039; doesn&#039;t hit a unit, you can give the CExpGenSpawner &amp;lt;code&amp;gt;nounit = 1;&amp;lt;/code&amp;gt; and the spawned &amp;lt;code&amp;gt;CEG water = 1;&amp;lt;/code&amp;gt;.&lt;br /&gt;
*This allows you to give a set of spawners the same (and possibly random) direction.&lt;br /&gt;
&lt;br /&gt;
== CBitmapMuzzleFlame ==&lt;br /&gt;
This creates three rectangular textures at right angles to each other. The &amp;lt;code&amp;gt;frontTexture&amp;lt;/code&amp;gt; has &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt; as its normal.&lt;br /&gt;
&lt;br /&gt;
Properties: &lt;br /&gt;
*sideTexture (string)&lt;br /&gt;
*frontTexture (string)&lt;br /&gt;
*dir (float3)&lt;br /&gt;
*colorMap (string)&lt;br /&gt;
*size (float)&lt;br /&gt;
*length (float)&lt;br /&gt;
*sizeGrowth (float)&lt;br /&gt;
*ttl (int)&lt;br /&gt;
*frontOffset (float)&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Muzzle flames, obviously.&lt;br /&gt;
*You can use an upward-pointing CBitmapMuzzleFlame as a simple splash of water or dirt.&lt;br /&gt;
*Railgun trails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CExploSpikeProjectile ==&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Anything glowy.&lt;br /&gt;
*For large, slow missiles, you can try using this as an extended engine flame. Set the width to something fairly large.&lt;br /&gt;
&lt;br /&gt;
== CHeatCloudProjectile ==&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*As the main background to an explosion.&lt;br /&gt;
&lt;br /&gt;
== CSimpleParticleSystem ==&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Anything undergoing motion that is at all complex.&lt;br /&gt;
&lt;br /&gt;
== CSpherePartSpawner ==&lt;br /&gt;
&lt;br /&gt;
Draws an expanding sphere.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
*alpha (float in [0, 1])&lt;br /&gt;
*ttl (int)&lt;br /&gt;
*expansionSpeed (float)&lt;br /&gt;
*color (float3)&lt;br /&gt;
&lt;br /&gt;
Suggested Use:&lt;br /&gt;
*Looks like a shockwave.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3760</id>
		<title>CEG-Classes</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3760"/>
		<updated>2008-12-30T08:23:39Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Common Properties ==&lt;br /&gt;
All classes have the following properties, although not all of them use them:&lt;br /&gt;
&lt;br /&gt;
*pos (float3): The initial position of the spawner.&lt;br /&gt;
*useAirLos (bool): Whether the spawner uses air LoS to determine if it is visible. This may allow the spawner to be seen from a further distance than normal.&lt;br /&gt;
*alwaysVisible (bool): If true, the spawner is always visible, ignoring LoS.&lt;br /&gt;
*speed (float3): The initial speed of the spawner.&lt;br /&gt;
&lt;br /&gt;
== CExpGenSpawner ==&lt;br /&gt;
This is the closest thing CEG has to a function call. Instead of creating a graphical effect on its own, it creates another ceg.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
&lt;br /&gt;
*delay (int): How long to wait before spawning the CEG.&lt;br /&gt;
*dir (float3): The CEG will be called with this direction.&lt;br /&gt;
*damage (float): The CEG will be called with this damage. The CEG doesn&#039;t actually deal any damage, but you can use this as a parameter and read it using the &#039;d&#039; operator.&lt;br /&gt;
*explosionGenerator (string): The name of the CEG you want to spawn.&lt;br /&gt;
&lt;br /&gt;
Suggested Use: &lt;br /&gt;
*If you use a spawner a lot of times, you may want to make it a separate CEG to avoid having to copy-paste many times.&lt;br /&gt;
*This is the only way to truly delay a graphical effect.&lt;br /&gt;
*The spawned CEG still checks conditions, so if you want to, say, spawn an effect only if it is in water &#039;&#039;and&#039;&#039; doesn&#039;t hit a unit, you can give the CExpGenSpawner &amp;lt;code&amp;gt;nounit = 1;&amp;lt;/code&amp;gt; and the spawned &amp;lt;code&amp;gt;CEG water = 1;&amp;lt;/code&amp;gt;.&lt;br /&gt;
*This allows you to give a set of spawners the same (and possibly random) direction.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3759</id>
		<title>CEG-Classes</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Classes&amp;diff=3759"/>
		<updated>2008-12-30T08:16:31Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: New page: == Common Properties == All classes have the following properties, although not all of them use them:  *pos (float3): The initial position of the spawner. *useAirLos (bool): Whether the sp...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Common Properties ==&lt;br /&gt;
All classes have the following properties, although not all of them use them:&lt;br /&gt;
&lt;br /&gt;
*pos (float3): The initial position of the spawner.&lt;br /&gt;
*useAirLos (bool): Whether the spawner uses air LoS to determine if it is visible. This may allow the spawner to be seen from a further distance than normal.&lt;br /&gt;
*alwaysVisible (bool): If true, the spawner is always visible, ignoring LoS.&lt;br /&gt;
*speed (float3): The initial speed of the spawner.&lt;br /&gt;
&lt;br /&gt;
== CExpGenSpawner ==&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Format&amp;diff=3793</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=3793"/>
		<updated>2008-12-30T08:10:45Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;&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;/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.&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;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Calls&amp;diff=3846</id>
		<title>CEG:Calls</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Calls&amp;diff=3846"/>
		<updated>2008-12-30T08:09:41Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
There are three places where you can call a CEG: weapons, COB, and Lua.&lt;br /&gt;
&lt;br /&gt;
== Weapon CEGs ==&lt;br /&gt;
&lt;br /&gt;
There are three weapon tags that can spawn CEGs:&lt;br /&gt;
&lt;br /&gt;
*cegtag: Spawns the CEG every frame at the weapon projectile&#039;s position and direction.&lt;br /&gt;
*explosionGenerator: Spawns the CEG when the weapon hits its target.&lt;br /&gt;
*bounceExplosionGenerator: For bouncing weapons only. Spawns the CEG when the weapon bounces.&lt;br /&gt;
&lt;br /&gt;
You need to set these tags equal to custom:ExplosionGeneratorName. For example, in a .tdf,&lt;br /&gt;
&amp;lt;code&amp;gt;explosionGenerator=custom:ExplosionGeneratorName;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== COB CEGs ==&lt;br /&gt;
&lt;br /&gt;
Calling a CEG from COB requires two steps. First, in the unit&#039;s definition, you need to put&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[sfxtypes] {&lt;br /&gt;
  explosiongenerator0 = custom:ExplosionGeneratorName0;&lt;br /&gt;
  explosiongenerator1 = custom:ExplosionGeneratorName1;&lt;br /&gt;
  //and so on...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for a .fbi, or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sfxtypes = {&lt;br /&gt;
  explosiongenerators = {&lt;br /&gt;
    &amp;quot;custom:ExplosionGeneratorName0&amp;quot;,&lt;br /&gt;
    &amp;quot;custom:ExplosionGeneratorName1&amp;quot;,&lt;br /&gt;
    --and so on...&lt;br /&gt;
  },&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To actually generate the explosion, you need to &amp;lt;code&amp;gt;emit-sfx&amp;lt;/code&amp;gt; 1024 plus the number of the explosion generator in the unit definition (the first one is 0, the next is 1, and so on). The CEG will have the position and direction of the piece you emit it from.&lt;br /&gt;
&lt;br /&gt;
== Lua CEGs ==&lt;br /&gt;
See [[Lua_SyncedCtrl]].&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Calls&amp;diff=3845</id>
		<title>CEG:Calls</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Calls&amp;diff=3845"/>
		<updated>2008-12-30T08:08:36Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: New page: == Overview == There are three places where you can call a CEG: weapons, COB, and Lua.  == Weapon CEGs ==  There are three weapon tags that can spawn CEGs:  *cegtag: Spawns the CEG every f...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
There are three places where you can call a CEG: weapons, COB, and Lua.&lt;br /&gt;
&lt;br /&gt;
== Weapon CEGs ==&lt;br /&gt;
&lt;br /&gt;
There are three weapon tags that can spawn CEGs:&lt;br /&gt;
&lt;br /&gt;
*cegtag: Spawns the CEG every frame at the weapon projectile&#039;s position and direction.&lt;br /&gt;
*explosionGenerator: Spawns the CEG when the weapon hits its target.&lt;br /&gt;
*bounceExplosionGenerator: For bouncing weapons only. Spawns the CEG when the weapon bounces.&lt;br /&gt;
&lt;br /&gt;
You need to set these tags equal to custom:ExplosionGeneratorName. For example, in a .tdf,&lt;br /&gt;
&amp;lt;code&amp;gt;explosionGenerator=custom:ExplosionGeneratorName;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== COB CEGs ==&lt;br /&gt;
&lt;br /&gt;
Calling a CEG from COB requires two steps. First, in the unit&#039;s definition, you need to put&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[sfxtypes] {&lt;br /&gt;
  explosiongenerator0 = custom:ExplosionGeneratorName0;&lt;br /&gt;
  explosiongenerator1 = custom:ExplosionGeneratorName1;&lt;br /&gt;
  //and so on...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for a .fbi, or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sfxtypes = {&lt;br /&gt;
  explosiongenerators = {&lt;br /&gt;
    &amp;quot;custom:ExplosionGeneratorName0&amp;quot;,&lt;br /&gt;
    &amp;quot;custom:ExplosionGeneratorName1&amp;quot;,&lt;br /&gt;
    --and so on...&lt;br /&gt;
  },&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To actually generate the explosion, you need to &amp;lt;code&amp;gt;emit-sfx&amp;lt;/code&amp;gt; 1024 plus the number of the explosion generator in the unit definition (the first one is 0, the next is 1, and so on). The CEG will have the position and direction of the piece you emit it from.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Format&amp;diff=3792</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=3792"/>
		<updated>2008-12-30T08:00:59Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;&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;/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 any 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.&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;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Main&amp;diff=3893</id>
		<title>CEG:Main</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Main&amp;diff=3893"/>
		<updated>2008-12-30T07:58:43Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;
== Introduction ==&lt;br /&gt;
CEG stands for Custom Explosion Generator, a scripting language for creating graphical effects. These are most commonly used to draw a graphical effect when a weapon hits a target, but can also be called from COB and Lua .&lt;br /&gt;
&lt;br /&gt;
== Files Needed ==&lt;br /&gt;
The actual CEGs are defined in .tdf or .lua files in gamedata/explosions/. You will also need a resources.tdf or .lua in gamedata/ to define textures, as well as the actual textures in bitmaps/. Finally, you need the weapon, unit, COB, and or Lua files that you are calling the CEGs from.&lt;br /&gt;
&lt;br /&gt;
== What Can Call a CEG? ==&lt;br /&gt;
*A weapon, through cegtag, explosiongenerator, bounceexplosiongenerator.&lt;br /&gt;
*A COB script, though emit-sfx 1024 + X.&lt;br /&gt;
*A Lua script, through Spring.SpawnCEG.&lt;br /&gt;
&lt;br /&gt;
See [[CEG_Calls]] for details.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Main&amp;diff=3892</id>
		<title>CEG:Main</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Main&amp;diff=3892"/>
		<updated>2008-12-30T07:57:19Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;
== Introduction ==&lt;br /&gt;
CEG stands for Custom Explosion Generator, a scripting language for creating graphical effects. These are most commonly used to draw a graphical effect when a weapon hits a target, but can also be called from COB and Lua .&lt;br /&gt;
&lt;br /&gt;
== Files Needed ==&lt;br /&gt;
The actual CEGs are defined in .tdf or .lua files in gamedata/explosions/. You will also need a resources.tdf or .lua in gamedata/ to define textures, as well as the actual textures in bitmaps/. Finally, you need the weapon, unit, COB, and or Lua files that you are calling the CEGs from.&lt;br /&gt;
&lt;br /&gt;
== What Can Call a CEG? ==&lt;br /&gt;
*A weapon, through cegtag or explosiongenerator.&lt;br /&gt;
*A COB script, though emit-sfx 1024 + X.&lt;br /&gt;
*A Lua script, through Spring.SpawnCEG.&lt;br /&gt;
&lt;br /&gt;
See [[CEG_Calls]] for details.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Format&amp;diff=3791</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=3791"/>
		<updated>2008-12-30T07:56:28Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;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;&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 any 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.&lt;br /&gt;
*string: Used for colormaps and texture names.&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;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Format&amp;diff=3790</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=3790"/>
		<updated>2008-12-30T07:56:03Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;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;&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 any 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;
Good for: 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.&lt;br /&gt;
*string: Used for colormaps and texture names.&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;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Format&amp;diff=3789</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=3789"/>
		<updated>2008-12-30T07:54:40Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;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;&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 any 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;
=== 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.&lt;br /&gt;
*string: Used for colormaps and texture names.&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;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Game_and_Unit_development&amp;diff=7961</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=7961"/>
		<updated>2008-12-30T07:47:25Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Mod development=&lt;br /&gt;
Mods, next to Maps, is the content used in Spring.&amp;lt;br&amp;gt;&lt;br /&gt;
A mod is simply a combined file containing a small structure of files and directories holding all the data required.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Mod_Development | Mod Development]] wiki is a starting page, linking to very useful information on the files included in a mod, their hierarchy and more.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Almost the entire mod developing is the creation of units. Which isn&#039;t an easy job.&amp;lt;br&amp;gt;&lt;br /&gt;
Information about the creation of units are everywere, but not combined.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a gathered list of all Tutorials and helpfull forums threads I could find:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==General==&lt;br /&gt;
*[[Mod Development]]&lt;br /&gt;
*[[Mod specification]]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://spring.clan-sy.com/phpbb/viewtopic.php?t=6015 What do I need to create a mod]&lt;br /&gt;
*[[Simple Mod Tutorial]]&lt;br /&gt;
*[[Freely available and reusable content|Freely available and reusable content/games/mods]]&lt;br /&gt;
&lt;br /&gt;
==Unit Development==&lt;br /&gt;
====Automated Mod Creation====&lt;br /&gt;
* [[TA2Spring]] - Automatically adds and converts Total Annihilation unit packs (.ufo files, etc..) into Spring mods (requires a base modification for the game rules, XTA is recommended)&lt;br /&gt;
====Models - s3o Files====&lt;br /&gt;
*[http://user.supradigital.org/jcnossen/UpspringInstaller-1.54-EulerAngles.exe UpSpring, our second-gen import / export / rigging / animation tool.]&lt;br /&gt;
* [http://lassie.student.utwente.nl/vliet/springtut.pdf Maestro&#039;s tutorial of Upspring and textures].&lt;br /&gt;
* [[Basic s3o unit making guide]]&lt;br /&gt;
* [[Simple Mod Tutorial]]&lt;br /&gt;
* [[Units:CreateModel|UV Mapping in Wings3D]]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?t=10612 Wings UV Mapping Tutorial]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?f=9&amp;amp;t=12354 Saving polygons in Wings3d Tutorial]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?t=10947 Greeble Tutorial 1]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?f=9&amp;amp;t=12356 Greeble Tutorial 2]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?p=75495 various things about unit making. (Also contains an illustrated alpha-channel tut)]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?t=10503 Runecrafter&#039;s 3DS Max UV Mapping Tutorial]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?f=9&amp;amp;t=15106 Argh&#039;s UpSpring Easy Workflow Guide]&lt;br /&gt;
* [[Trouble-shooting s3o units]]&lt;br /&gt;
&lt;br /&gt;
====Models - 3do Files====&lt;br /&gt;
outdated model format used by OTA&amp;lt;br&amp;gt;&lt;br /&gt;
(Note: UpSpring has some problems with empty objects and groundplates)&lt;br /&gt;
*use [http://spring.clan-sy.com/phpbb/viewtopic.php?f=12&amp;amp;t=7208&amp;amp;p=126129&amp;amp;hilit=upspring#p126129 UpSpring] and [http://www.fileuniverse.com/?p=show&amp;amp;a=it&amp;amp;id=305 3doBuilder] to edit those files&lt;br /&gt;
&lt;br /&gt;
====Scripting and Animation - COB/BOS Files====&lt;br /&gt;
*[[Units0:.bos ]] some examples&lt;br /&gt;
*[[COB_Overview]]&lt;br /&gt;
*[[COB_Animation]]&lt;br /&gt;
*[[COB_Callins]]&lt;br /&gt;
*[[COB_Constants]]&lt;br /&gt;
*[[COB_Threads]]&lt;br /&gt;
*[[COB_HitByWeaponID]]&lt;br /&gt;
*[http://www.planetannihilation.com/tadc/tut_unit_01_1.asp PlanetAnnihilation] has a nice tutorial&lt;br /&gt;
*[[Units:LuaCOB]] - how to interface COB with LUA&lt;br /&gt;
*[[CEG_For_Units|Mod Development:Calling basic CEGs from COB]]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?p=132943#132943 GPL-compliant sourcecode, scripting code examples, and other things.]&lt;br /&gt;
&lt;br /&gt;
====Units - FBI Files====&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;
====Weapons - TDF Files====&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;
*[[All_Weapons_variable_values:_min%2C_max%2C_default%2C_type|Weapon datatype list]] : All weapon variables min/max/default values and datatypes listed.&lt;br /&gt;
*[[Weapons:Antinukes]]: All about antinukes.&lt;br /&gt;
&lt;br /&gt;
====Explosions====&lt;br /&gt;
*[[CEG_Overview]]&lt;br /&gt;
*[[CEG_Calls]]&lt;br /&gt;
*[[CEG_Format]]&lt;br /&gt;
*[[CEG_Classes]]&lt;br /&gt;
*[[CEG_Operators]]&lt;br /&gt;
*[[CustomExplosionGenerators|Old CEG page]]&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]]&lt;br /&gt;
*[[Mod Development:Cursors]]&lt;br /&gt;
*[[Mod Development:Archives]]&lt;br /&gt;
*[[Mod Development:Sidepics]]&lt;br /&gt;
*[[CustomUnitIcons|Mod Development:Custom unit icons]]&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Format&amp;diff=3788</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=3788"/>
		<updated>2008-12-30T07:46:58Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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;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;&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 any 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;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG-Format&amp;diff=3787</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=3787"/>
		<updated>2008-12-30T07:34:57Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: New page: == Overall Format ==  A CEG file contains one or more CEGs. Each CEG follows this format:  &amp;lt;pre&amp;gt; [ceg_name] {   [spawner_name_0] {      class=CClassName;      [properties] {        propert...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overall Format ==&lt;br /&gt;
&lt;br /&gt;
A CEG file contains one or more CEGs. Each CEG follows this format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ceg_name] {&lt;br /&gt;
  [spawner_name_0] {&lt;br /&gt;
     class=CClassName;&lt;br /&gt;
     [properties] {&lt;br /&gt;
       property0 = value;&lt;br /&gt;
       property1 = value;&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;&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Game_and_Unit_development&amp;diff=7960</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=7960"/>
		<updated>2008-12-30T07:29:51Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Mod development=&lt;br /&gt;
Mods, next to Maps, is the content used in Spring.&amp;lt;br&amp;gt;&lt;br /&gt;
A mod is simply a combined file containing a small structure of files and directories holding all the data required.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Mod_Development | Mod Development]] wiki is a starting page, linking to very useful information on the files included in a mod, their hierarchy and more.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Almost the entire mod developing is the creation of units. Which isn&#039;t an easy job.&amp;lt;br&amp;gt;&lt;br /&gt;
Information about the creation of units are everywere, but not combined.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a gathered list of all Tutorials and helpfull forums threads I could find:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==General==&lt;br /&gt;
*[[Mod Development]]&lt;br /&gt;
*[[Mod specification]]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://spring.clan-sy.com/phpbb/viewtopic.php?t=6015 What do I need to create a mod]&lt;br /&gt;
*[[Simple Mod Tutorial]]&lt;br /&gt;
*[[Freely available and reusable content|Freely available and reusable content/games/mods]]&lt;br /&gt;
&lt;br /&gt;
==Unit Development==&lt;br /&gt;
====Automated Mod Creation====&lt;br /&gt;
* [[TA2Spring]] - Automatically adds and converts Total Annihilation unit packs (.ufo files, etc..) into Spring mods (requires a base modification for the game rules, XTA is recommended)&lt;br /&gt;
====Models - s3o Files====&lt;br /&gt;
*[http://user.supradigital.org/jcnossen/UpspringInstaller-1.54-EulerAngles.exe UpSpring, our second-gen import / export / rigging / animation tool.]&lt;br /&gt;
* [http://lassie.student.utwente.nl/vliet/springtut.pdf Maestro&#039;s tutorial of Upspring and textures].&lt;br /&gt;
* [[Basic s3o unit making guide]]&lt;br /&gt;
* [[Simple Mod Tutorial]]&lt;br /&gt;
* [[Units:CreateModel|UV Mapping in Wings3D]]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?t=10612 Wings UV Mapping Tutorial]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?f=9&amp;amp;t=12354 Saving polygons in Wings3d Tutorial]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?t=10947 Greeble Tutorial 1]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?f=9&amp;amp;t=12356 Greeble Tutorial 2]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?p=75495 various things about unit making. (Also contains an illustrated alpha-channel tut)]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?t=10503 Runecrafter&#039;s 3DS Max UV Mapping Tutorial]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?f=9&amp;amp;t=15106 Argh&#039;s UpSpring Easy Workflow Guide]&lt;br /&gt;
* [[Trouble-shooting s3o units]]&lt;br /&gt;
&lt;br /&gt;
====Models - 3do Files====&lt;br /&gt;
outdated model format used by OTA&amp;lt;br&amp;gt;&lt;br /&gt;
(Note: UpSpring has some problems with empty objects and groundplates)&lt;br /&gt;
*use [http://spring.clan-sy.com/phpbb/viewtopic.php?f=12&amp;amp;t=7208&amp;amp;p=126129&amp;amp;hilit=upspring#p126129 UpSpring] and [http://www.fileuniverse.com/?p=show&amp;amp;a=it&amp;amp;id=305 3doBuilder] to edit those files&lt;br /&gt;
&lt;br /&gt;
====Scripting and Animation - COB/BOS Files====&lt;br /&gt;
*[[Units0:.bos ]] some examples&lt;br /&gt;
*[[COB_Overview]]&lt;br /&gt;
*[[COB_Animation]]&lt;br /&gt;
*[[COB_Callins]]&lt;br /&gt;
*[[COB_Constants]]&lt;br /&gt;
*[[COB_Threads]]&lt;br /&gt;
*[[COB_HitByWeaponID]]&lt;br /&gt;
*[http://www.planetannihilation.com/tadc/tut_unit_01_1.asp PlanetAnnihilation] has a nice tutorial&lt;br /&gt;
*[[Units:LuaCOB]] - how to interface COB with LUA&lt;br /&gt;
*[[CEG_For_Units|Mod Development:Calling basic CEGs from COB]]&lt;br /&gt;
* [http://spring.clan-sy.com/phpbb/viewtopic.php?p=132943#132943 GPL-compliant sourcecode, scripting code examples, and other things.]&lt;br /&gt;
&lt;br /&gt;
====Units - FBI Files====&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;
====Weapons - TDF Files====&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;
*[[All_Weapons_variable_values:_min%2C_max%2C_default%2C_type|Weapon datatype list]] : All weapon variables min/max/default values and datatypes listed.&lt;br /&gt;
*[[Weapons:Antinukes]]: All about antinukes.&lt;br /&gt;
&lt;br /&gt;
====Explosions====&lt;br /&gt;
*[[CEG_Overview]]&lt;br /&gt;
*[[CEG_Format]]&lt;br /&gt;
*[[CEG_Classes]]&lt;br /&gt;
*[[CEG_Operators]]&lt;br /&gt;
*[[CustomExplosionGenerators|Old CEG page]]&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]]&lt;br /&gt;
*[[Mod Development:Cursors]]&lt;br /&gt;
*[[Mod Development:Archives]]&lt;br /&gt;
*[[Mod Development:Sidepics]]&lt;br /&gt;
*[[CustomUnitIcons|Mod Development:Custom unit icons]]&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Operators&amp;diff=3920</id>
		<title>CEG:Operators</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Operators&amp;diff=3920"/>
		<updated>2008-12-29T23:39:58Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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/ExplosionGenerator.cpp&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
You are not limited to using fixed numbers in CEGs for positions, speeds, and so forth. Instead, you can use operators to change the CEG based on a variety of things.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
Operators are read left to right. The operand is always to the right of the operator. Spaces are ignored, except to separate numbers. A number with no operator defaults to addition.&lt;br /&gt;
&lt;br /&gt;
== The Buffer ==&lt;br /&gt;
CEG provides you with a buffer in which you can store numbers using the yank (&#039;y&#039;) operator. This buffer can store 16 values, numbered 0 to 15.&lt;br /&gt;
&lt;br /&gt;
== Operators ==&lt;br /&gt;
These are listed in the format &amp;quot;Operator Name (operator)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Index (&#039;i&#039;) ===&lt;br /&gt;
Multiplies the operand by the current count index. This index starts at 0 and increments every time the spawn is run, until the spawn has run a number of times equal to its count.&lt;br /&gt;
&lt;br /&gt;
Suggested use: Spawning things in a line.&lt;br /&gt;
&lt;br /&gt;
=== Rand (&#039;r&#039;) ===&lt;br /&gt;
Multiplies the operand by a random float between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Suggested use: Keeping explosions from looking too &amp;quot;perfect&amp;quot;, making explosions look different every time.&lt;br /&gt;
&lt;br /&gt;
=== Damage (&#039;d&#039;) ===&lt;br /&gt;
Multiplies the operand by damage.&lt;br /&gt;
&lt;br /&gt;
=== Sawtooth (&#039;m&#039;) ===&lt;br /&gt;
Calculates the floating-point remainder of the operand.&lt;br /&gt;
&lt;br /&gt;
=== Discrete (&#039;k&#039;) ===&lt;br /&gt;
Calculates the floor of the operand.&lt;br /&gt;
&lt;br /&gt;
=== Sine (&#039;s&#039;) ===&lt;br /&gt;
Calculates the sine of the operand.&lt;br /&gt;
&lt;br /&gt;
=== Yank (&#039;y&#039;) ===&lt;br /&gt;
Saves the running result into buffer[operand], and resets the running result to zero.&lt;br /&gt;
&lt;br /&gt;
=== Multiply (&#039;x&#039;) ===&lt;br /&gt;
Multiplies the running result by buffer[operand].&lt;br /&gt;
&lt;br /&gt;
=== Add Buffer (&#039;a&#039;) ===&lt;br /&gt;
Adds buffer[operand] to the running result.&lt;br /&gt;
&lt;br /&gt;
=== Power (&#039;p&#039;) ===&lt;br /&gt;
Raises the running result to the operandth power&lt;br /&gt;
&lt;br /&gt;
=== Power Buffer (&#039;q&#039;) ===&lt;br /&gt;
Raises the running result to the buffer[operand]th power.&lt;br /&gt;
&lt;br /&gt;
=== Add (default) ===&lt;br /&gt;
Adds the operand to the running result. This operator is used if no other operator is given.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
i0.03125y0 -0.2x0x0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This multiplies the index by 0.03125 and saves it to buffer[0]. It then multiplies -0.2 by buffer[0] twice. The result is then -0.2 (i * 0.03125)^2.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Operators&amp;diff=3919</id>
		<title>CEG:Operators</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Operators&amp;diff=3919"/>
		<updated>2008-12-29T23:39:45Z</updated>

		<summary type="html">&lt;p&gt;Evil4zerggin: &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/ExplosionGenerator.cpp&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
You are not limited to using fixed numbers in CEGs for positions, speeds, and so forth. Instead, you can use operators to change the CEG based on a variety of things.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
Operators are read left to right. The operand is always to the right of the operator. Spaces are ignored, except to separate numbers. A number with no operator defaults to addition.&lt;br /&gt;
&lt;br /&gt;
== The Buffer ==&lt;br /&gt;
CEG provides you with a buffer in which you can store numbers using the yank (&#039;y&#039;) operator. This buffer can store 16 values, numbered 0 to 15.&lt;br /&gt;
&lt;br /&gt;
== Operators ==&lt;br /&gt;
These are listed in the format &amp;quot;Operator Name (operator)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Index (i) ===&lt;br /&gt;
Multiplies the operand by the current count index. This index starts at 0 and increments every time the spawn is run, until the spawn has run a number of times equal to its count.&lt;br /&gt;
&lt;br /&gt;
Suggested use: Spawning things in a line.&lt;br /&gt;
&lt;br /&gt;
=== Rand (r) ===&lt;br /&gt;
Multiplies the operand by a random float between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Suggested use: Keeping explosions from looking too &amp;quot;perfect&amp;quot;, making explosions look different every time.&lt;br /&gt;
&lt;br /&gt;
=== Damage (&#039;d&#039;) ===&lt;br /&gt;
Multiplies the operand by damage.&lt;br /&gt;
&lt;br /&gt;
=== Sawtooth (&#039;m&#039;) ===&lt;br /&gt;
Calculates the floating-point remainder of the operand.&lt;br /&gt;
&lt;br /&gt;
=== Discrete (&#039;k&#039;) ===&lt;br /&gt;
Calculates the floor of the operand.&lt;br /&gt;
&lt;br /&gt;
=== Sine (&#039;s&#039;) ===&lt;br /&gt;
Calculates the sine of the operand.&lt;br /&gt;
&lt;br /&gt;
=== Yank (&#039;y&#039;) ===&lt;br /&gt;
Saves the running result into buffer[operand], and resets the running result to zero.&lt;br /&gt;
&lt;br /&gt;
=== Multiply (&#039;x&#039;) ===&lt;br /&gt;
Multiplies the running result by buffer[operand].&lt;br /&gt;
&lt;br /&gt;
=== Add Buffer (&#039;a&#039;) ===&lt;br /&gt;
Adds buffer[operand] to the running result.&lt;br /&gt;
&lt;br /&gt;
=== Power (&#039;p&#039;) ===&lt;br /&gt;
Raises the running result to the operandth power&lt;br /&gt;
&lt;br /&gt;
=== Power Buffer (&#039;q&#039;) ===&lt;br /&gt;
Raises the running result to the buffer[operand]th power.&lt;br /&gt;
&lt;br /&gt;
=== Add (default) ===&lt;br /&gt;
Adds the operand to the running result. This operator is used if no other operator is given.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
i0.03125y0 -0.2x0x0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This multiplies the index by 0.03125 and saves it to buffer[0]. It then multiplies -0.2 by buffer[0] twice. The result is then -0.2 (i * 0.03125)^2.&lt;/div&gt;</summary>
		<author><name>Evil4zerggin</name></author>
	</entry>
</feed>