<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.fightorder.net/wiki/index.php?action=history&amp;feed=atom&amp;title=CEG%3ADefs</id>
	<title>CEG:Defs - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.fightorder.net/wiki/index.php?action=history&amp;feed=atom&amp;title=CEG%3ADefs"/>
	<link rel="alternate" type="text/html" href="https://www.fightorder.net/wiki/index.php?title=CEG:Defs&amp;action=history"/>
	<updated>2026-04-21T02:29:27Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://www.fightorder.net/wiki/index.php?title=CEG:Defs&amp;diff=656&amp;oldid=prev</id>
		<title>Qrow: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://www.fightorder.net/wiki/index.php?title=CEG:Defs&amp;diff=656&amp;oldid=prev"/>
		<updated>2025-11-14T05:21:30Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:21, 13 November 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Qrow</name></author>
	</entry>
	<entry>
		<id>https://www.fightorder.net/wiki/index.php?title=CEG:Defs&amp;diff=655&amp;oldid=prev</id>
		<title>Interwiki&gt;Silentwings: /* Overall Format */</title>
		<link rel="alternate" type="text/html" href="https://www.fightorder.net/wiki/index.php?title=CEG:Defs&amp;diff=655&amp;oldid=prev"/>
		<updated>2020-05-13T14:35:13Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Overall Format&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= CEG Definitions =&lt;br /&gt;
&lt;br /&gt;
==Source== &lt;br /&gt;
The engine source code which loads the tags from these files is viewable here:&lt;br /&gt;
&lt;br /&gt;
* {{sourcelink|file=rts/Sim/Projectiles/}} &lt;br /&gt;
* {{sourcelink|file=rts/Sim/Projectiles/Unsynced/}}&lt;br /&gt;
* {{sourcelink|file=rts/Rendering/GroundFlash.cpp}}&lt;br /&gt;
&lt;br /&gt;
== Data Types ==&lt;br /&gt;
CEGs use the following data types:&lt;br /&gt;
{{DataTypes}}&lt;br /&gt;
&lt;br /&gt;
You can use [[CEG:Operators]] to define floats that are not fixed.&lt;br /&gt;
&lt;br /&gt;
== CEG Textures ==&lt;br /&gt;
&lt;br /&gt;
* Textures on CEG definitions are referenced by name.&lt;br /&gt;
* The list of available textures and their names should be in [[resources.lua]]&lt;br /&gt;
* Texture definitions to be used in projectile classes should be placed within the &amp;lt;code&amp;gt;projectiletextures&amp;lt;/code&amp;gt; category and textures to be used with [[#CSimpleGroundFlash]] class should be placed within the &amp;lt;code&amp;gt;groundfx&amp;lt;/code&amp;gt; category.&lt;br /&gt;
* Texture images are usually placed in the &amp;quot;bitmaps&amp;quot; subfolder.&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;
return {&lt;br /&gt;
  [&amp;quot;ceg_name&amp;quot;] = {&lt;br /&gt;
    -- EXPLOSION LEVEL&lt;br /&gt;
    useDefaultExplosions = false,&lt;br /&gt;
&lt;br /&gt;
    spawner1_name = {&lt;br /&gt;
      -- SPAWNER LEVEL&lt;br /&gt;
      class         = &amp;quot;CClassName&amp;quot;,&lt;br /&gt;
      count              = 1,&lt;br /&gt;
      air                = true,&lt;br /&gt;
      ground             = true,&lt;br /&gt;
      water              = true,&lt;br /&gt;
      properties = {&lt;br /&gt;
        -- CLASS LEVEL&lt;br /&gt;
        },&lt;br /&gt;
      },&lt;br /&gt;
    },&lt;br /&gt;
    spawner2_name = {&lt;br /&gt;
      -- SPAWNER LEVEL&lt;br /&gt;
      -- each spawner follows the above format&lt;br /&gt;
    },&lt;br /&gt;
    groundflash = {&lt;br /&gt;
      -- groundflash is a special spawner name; it always generates a CStandardGroundFlash&lt;br /&gt;
      -- CStandardGroundFlash properties&lt;br /&gt;
    },&lt;br /&gt;
    -- other special spawner names exist, although their use is discouraged in favour of class=&amp;quot;CSomeClass&amp;quot;&lt;br /&gt;
    -- see https://github.com/spring/spring/blob/develop/cont/base/springcontent/gamedata/explosion_alias.lua#L61&lt;br /&gt;
  },&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explosion Level Tags ==&lt;br /&gt;
{{tag&lt;br /&gt;
|name = useDefaultExplosions&lt;br /&gt;
|type = bool&lt;br /&gt;
|default = false&lt;br /&gt;
|description = 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. The default explosions are sometimes very performance heavy, especially for large damage values (leading to higher particle counts).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Spawner Level Tags ==&lt;br /&gt;
A CEG can contain any number of spawners. The name of the spawners don&amp;#039;t really matter, as long as it&amp;#039;s not &amp;lt;code&amp;gt;groundflash&amp;lt;/code&amp;gt;, 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;
{{tag&lt;br /&gt;
|name = class&lt;br /&gt;
|type = string&lt;br /&gt;
|default = spawner_name&lt;br /&gt;
|description = 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. Currently available classes are:&lt;br /&gt;
* [[#CExpGenSpawner|CExpGenSpawner]]&lt;br /&gt;
* [[#CBitmapMuzzleFlame|CBitmapMuzzleFlame]]&lt;br /&gt;
* [[#CExploSpikeProjectile|CExploSpikeProjectile]] &lt;br /&gt;
* [[#CHeatCloudProjectile|CHeatCloudProjectile]]&lt;br /&gt;
* [[#CSimpleParticleSystem|CSimpleParticleSystem]]&lt;br /&gt;
* [[#CSpherePartSpawner|CSpherePartSpawner]]&lt;br /&gt;
* [[#CSimpleGroundFlash|CSimpleGroundFlash]]&lt;br /&gt;
* [[#CStandardGroundFlash|CStandardGroundFlash]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = count&lt;br /&gt;
|type = int&lt;br /&gt;
|default = 1&lt;br /&gt;
|description = The count determines the number of times the spawner will run.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Visibility Conditions ===&lt;br /&gt;
These determine under what conditions the spawner will run. If you set the condition to true, the spawner will run if the explosion takes place under that condition. If you set more than one condition, the spawner will run if &amp;#039;&amp;#039;any&amp;#039;&amp;#039; of them are true. If you want a spawner to run only if two or more conditions are &amp;#039;&amp;#039;all&amp;#039;&amp;#039; true, you have to do a little trick with the [[#CExpGenSpawner]] class as explained in &amp;quot;suggested use&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = air&lt;br /&gt;
|type = bool&lt;br /&gt;
|default = false&lt;br /&gt;
|description = The CEG will run if at least 20 [[elmo]]s above ground/sea level.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = water&lt;br /&gt;
|type = bool&lt;br /&gt;
|default = false&lt;br /&gt;
|description = The CEG will run if in water to a depth of -5 [[elmo]]s.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = underwater&lt;br /&gt;
|type = bool&lt;br /&gt;
|default = false&lt;br /&gt;
|description = The CEG will run if under water deeper than 5 [[elmo]]s.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = ground&lt;br /&gt;
|type = bool&lt;br /&gt;
|default = false&lt;br /&gt;
|description = The CEG will run if less than 20 [[elmo]]s above ground.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = unit&lt;br /&gt;
|type = bool&lt;br /&gt;
|default = false&lt;br /&gt;
|description = The CEG will run if the weapon hits a unit.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = nounit&lt;br /&gt;
|type = bool&lt;br /&gt;
|default = false&lt;br /&gt;
|description = The CEG will run if the weapon does not hit a unit.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Class Level Tags ==&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;
{{tag&lt;br /&gt;
|name = alwaysVisible&lt;br /&gt;
|type = bool&lt;br /&gt;
|default = false&lt;br /&gt;
|description = If true, the spawner is always visible, ignoring LoS. Note that prior to 98.0 this did not work correctly.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = useAirLos&lt;br /&gt;
|type = bool&lt;br /&gt;
|default = false&lt;br /&gt;
|description = 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;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = pos &lt;br /&gt;
|type = float[3]&lt;br /&gt;
|default = {0.0, 0.0, 0.0}&lt;br /&gt;
|description = The initial position vector of the spawner.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = speed&lt;br /&gt;
|type = float[3]&lt;br /&gt;
|default = {0.0, 0.0, 0.0}&lt;br /&gt;
|description = The initial speed vector of the spawner.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = dir&lt;br /&gt;
|type = float[3]&lt;br /&gt;
|description = The initial direction vector of the spawner.&lt;br /&gt;
}}&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;
==== 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 &amp;#039;&amp;#039;and&amp;#039;&amp;#039; doesn&amp;#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;
==== Properties ====&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = delay&lt;br /&gt;
|type = int&lt;br /&gt;
|default = 1&lt;br /&gt;
|description = How long to wait (in frames?) before spawning the CEG.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = damage&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The CEG will be called with this damage. The CEG doesn&amp;#039;t actually deal any damage, but you can use this as a parameter and read it using the [[CEG:Operators#Damage_.28.27d.27.29|&amp;#039;d&amp;#039; operator]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = explosionGenerator&lt;br /&gt;
|type = string&lt;br /&gt;
|default = &amp;quot;&amp;quot;&lt;br /&gt;
|description = The name of the CEG you want to spawn.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CBitmapMuzzleFlame ===&lt;br /&gt;
This creates three rectangular textures at right angles to each other. The {{taglink|frontTexture}} has {{taglink|dir}} as its normal.&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;
==== Properties ====&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = sideTexture&lt;br /&gt;
|type = string&lt;br /&gt;
|default = &amp;quot;&amp;quot;&lt;br /&gt;
|description = Texture as viewed from the side.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = frontTexture&lt;br /&gt;
|type = string&lt;br /&gt;
|default = &amp;quot;&amp;quot;&lt;br /&gt;
|description = Texture as viewed from the front.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = colorMap&lt;br /&gt;
|type = string&lt;br /&gt;
|default = &amp;quot;&amp;quot;&lt;br /&gt;
|description = See [[CColorMap]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = size&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The initial width of the muzzle flame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = length&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The initial length of the muzzle flame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = sizeGrowth &lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = By the end of its life, the muzzle flame grows to &amp;lt;code&amp;gt;1 + sizeGrowth&amp;lt;/code&amp;gt; times its initial {{taglink|size}} and {{taglink|length}}. The flame grows quickly at first and more slowly toward the end.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = ttl&lt;br /&gt;
|type = int&lt;br /&gt;
|default = 0&lt;br /&gt;
|description = How long the muzzle flame lasts.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = frontOffset&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = Where the frontTexture is along the length of the muzzle flame. &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; means it is in the back, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; is in the front.&lt;br /&gt;
}}&lt;br /&gt;
&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;
==== 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;
* The length growth of the spike depends on the norm of the dir vector. The spike does not grow in width.&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
{{tag&lt;br /&gt;
|name = length&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The initial length of (half) of the spike (multiplied by {{taglink|dir}}).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = lengthGrowth&lt;br /&gt;
|type = float&lt;br /&gt;
|default = dir.Length() * (0.5 + RandFloat() * 0.4)&lt;br /&gt;
|description = How much the length increases by per update.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = width&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = Half the initial width of of the spike. This is an absolute value.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = alpha&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The starting alpha of the spike.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = alphaDecay&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = How quickly the alpha of the spike decreases.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = color&lt;br /&gt;
|type = rgb&lt;br /&gt;
|default = {1.0, 0.8, 0.5}&lt;br /&gt;
|description = The color of the spike.&lt;br /&gt;
}}&lt;br /&gt;
&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;
==== Suggested Use ====&lt;br /&gt;
* As the main background to an explosion.&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
{{tag&lt;br /&gt;
|name = heat&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = Used in alpha calculations. See {{taglink|heatFalloff}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = maxheat&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = Used in alpha calculations. See {{taglink|heatFalloff}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = heatFalloff&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = This is really confusing way of representing alpha and alphaDecay. Basically &amp;lt;code&amp;gt;alpha = &amp;lt;/code&amp;gt;{{taglink|heat}}&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;{{taglink|maxheat}}, and &amp;lt;code&amp;gt;alphaDecay = &amp;lt;/code&amp;gt;{{taglink|heatFalloff}}&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;{{taglink|maxHeat}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = size&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The initial radius of the heatcloud.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = sizeGrowth&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The heatcloud grows by this amount every frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = sizeMod&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The size of the heatcloud is multiplied by &amp;lt;code&amp;gt;1 - sizeMod&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = sizeModMod&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = Each frame, {{taglink|sizeMod}} is multiplied by {{taglink|sizeModMod}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = texture&lt;br /&gt;
|type = string&lt;br /&gt;
|default = &amp;quot;heatcloud&amp;quot; as referenced in [[resources.lua]]&lt;br /&gt;
|description = The texture used for the heatcloud.&lt;br /&gt;
}}&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.&lt;br /&gt;
&lt;br /&gt;
==== Suggested Use ====&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 {{taglink|sizeMod}} to something less than &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, and {{taglink|sizeGrowth}} to something positive. The particle will grow to a size equal to &amp;lt;code&amp;gt;sizeGrowth / (1 - sizeMod)&amp;lt;/code&amp;gt; and stop. The smaller {{taglink|sizeMod}} is, the faster it will reach this size.&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
===== Initial Velocity Properties =====&lt;br /&gt;
{{tag&lt;br /&gt;
|name = emitVector&lt;br /&gt;
|type = float[3]&lt;br /&gt;
|default = {0.0, 0.0, 0.0}&lt;br /&gt;
|description = The initial direction vector in which the particle is emitted. When spawning CEGs via EmitSfx you can make the particles go into the direction of the emiting piece with {{taglink|emitvector|dir}}. This is useful for e.g. fire coming out of a gun barrel.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = emitRot&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = At what angle to emit the particle relative to {{taglink|emitVector}}. &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; means that the particle will be emitted in {{taglink|emitVector}}&amp;#039;s direction; &amp;lt;code&amp;gt;180&amp;lt;/code&amp;gt; will emit the particle in the opposite direction. &amp;lt;code&amp;gt;90&amp;lt;/code&amp;gt; will emit the particle in a random direction perpendicular to {{taglink|emitVector}}, which is good for creating rings.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = emitRotSpread&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = For each particle, a random number between &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; and {{taglink|emitRotSpread}} is added to the {{taglink|emitRot}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = emitMul&lt;br /&gt;
|type = float[3]&lt;br /&gt;
|default = {1.0, 1.0, 1.0}&lt;br /&gt;
|description = Scales the initial particle velocity; for this property, +y is considered to be in the direction of {{taglink|emitVector}}. Good if you want to create an egg-shaped explosion.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = particleSpeed &lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The particle&amp;#039;s initial speed.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = particleSpeedSpread&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = For each particle, a random number between &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; and {{taglink|particleSpeedSpread}} is added to the {{taglink|particleSpeed}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== Movement Properties =====&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = gravity&lt;br /&gt;
|type = float[3]&lt;br /&gt;
|default = {0.0, 0.0, 0.0}&lt;br /&gt;
|description = This will be added to the particle&amp;#039;s velocity every frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = airdrag&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The particle&amp;#039;s velocity is multiplied by this every frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== Size Properties =====&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = particleSize &lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The initial size of the particle.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = particleSizeSpread&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = For each particle, a random number between &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; and {{taglink|particleSizeSpread}} is added to the {{taglink|particleSize}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = sizeGrowth&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = How much the particle grows each frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = sizeMod&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The size of the particle is multiplied by this each frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== Visual Properties =====&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = directional&lt;br /&gt;
|type = bool&lt;br /&gt;
|default = false&lt;br /&gt;
|description = If true, the particle will point in the direction it is moving.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = texture&lt;br /&gt;
|type = string&lt;br /&gt;
|default = &amp;quot;&amp;quot;&lt;br /&gt;
|description = The texture to use for the particle.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = colorMap&lt;br /&gt;
|type = string&lt;br /&gt;
|default = &amp;quot;&amp;quot;&lt;br /&gt;
|description = See [[CColorMap]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== Life Properties =====&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = numParticles&lt;br /&gt;
|type = int&lt;br /&gt;
|default = 0&lt;br /&gt;
|description = 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 re-evaluated for each particle, whereas if you use {{taglink|numParticles}} they will not be. However, the spread properties are evaluated separately for each particle regardless of which one you use.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = particleLife&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = How long each particle lasts. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = particleLifeSpread&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = For each particle, a random number between &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; and {{taglink|particleLifeSpread}} is added to the {{taglink|particleLife}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== CSpherePartSpawner ===&lt;br /&gt;
&lt;br /&gt;
Draws an expanding sphere.&lt;br /&gt;
&lt;br /&gt;
==== Suggested Use ====&lt;br /&gt;
*Looks like a shockwave.&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = alpha&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The alpha of the sphere.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = ttl&lt;br /&gt;
|type = int&lt;br /&gt;
|default = 0&lt;br /&gt;
|description = Time to live, in frames(?).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = expansionSpeed&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = How quickly the sphere expands.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = color&lt;br /&gt;
|type = rgb&lt;br /&gt;
|default = {0.0, 0.0, 0.0}&lt;br /&gt;
|description = The color of the sphere.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CSimpleGroundFlash ===&lt;br /&gt;
&lt;br /&gt;
Draws an expanding ground texture.&lt;br /&gt;
&lt;br /&gt;
==== Suggested Use ====&lt;br /&gt;
* 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;
==== Properties ====&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = size&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The radius of the particle.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = sizeGrowth&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = How much the particle grows each frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = ttl&lt;br /&gt;
|type = int&lt;br /&gt;
|default = 0&lt;br /&gt;
|description = Time to live, in frames(?).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = texture&lt;br /&gt;
|type = string&lt;br /&gt;
|default = &amp;quot;&amp;quot;&lt;br /&gt;
|description = The texture to use for the particle.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = colorMap&lt;br /&gt;
|type = string&lt;br /&gt;
|default = &amp;quot;&amp;quot;&lt;br /&gt;
|description = See [[CColorMap]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== CStandardGroundFlash ===&lt;br /&gt;
If you name a spawner &amp;quot;groundflash,&amp;quot; it will always generate a standard groundflash. &lt;br /&gt;
&lt;br /&gt;
==== Suggested Use ====&lt;br /&gt;
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;
==== Properties ====&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = flashSize&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The radius of the groundflash.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = flashAlpha &lt;br /&gt;
|type = float&lt;br /&gt;
|range = [0, 1]&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = How transparent the groundflash is. Generally the higher the brighter.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = circleGrowth &lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = A groundflash can have an additional circle that expands outwards. This controls how fast the circle grows.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = circleAlpha&lt;br /&gt;
|type = float&lt;br /&gt;
|range = [0, 1]&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = How transparent the circle is.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = ttl&lt;br /&gt;
|type = int&lt;br /&gt;
|default = 0&lt;br /&gt;
|description = How long the groundflash lasts.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = color&lt;br /&gt;
|type = rgb&lt;br /&gt;
|default = {1.0, 1.0, 0.8}&lt;br /&gt;
|description = The color of the groundflash.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CSmokeProjectile2 ===&lt;br /&gt;
( {{FIXME}} newly added to wiki. someone cross-check then remove this note )&lt;br /&gt;
&lt;br /&gt;
Particles that begin with a hard-coded yellow-red colorfade and then fade to monochrom. (shades of grey)&lt;br /&gt;
&lt;br /&gt;
Movement is influenced by the random wind.&lt;br /&gt;
Finer details of visual and position update are best explained by looking at the formulas in &amp;lt;code&amp;gt;CSmokeProjectile2::Update() &amp;amp; CSmokeProjectile2::Draw()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Suggested Use ====&lt;br /&gt;
Smoke. Smokestacks, rocket exhaust, burning wreckage,...&lt;br /&gt;
&lt;br /&gt;
For a nicer stream of smoke spawn it frequently over multiple frames, otherwise it looks rather bland.&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
{{tag&lt;br /&gt;
|name = color&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.5&lt;br /&gt;
|description = How dark the final monochrom color of a particle is. 0 is black.&lt;br /&gt;
(Use &amp;gt;1 for slightly bugged funnies, like slightly non-monochrome colors or interessting black/white changes.)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = size&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = Size of a particle.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = ageSpeed&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.5&lt;br /&gt;
|description = How fast the particle ages. Every frame: &amp;lt;code&amp;gt;age += ageSpeed&amp;lt;/code&amp;gt; The particle is deleted at &amp;lt;code&amp;gt;if (age &amp;gt; 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = glowFalloff&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = How fast the particle fades to monochrom.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = wantedPos&lt;br /&gt;
|type = float3&lt;br /&gt;
|default = &amp;quot;0,0,0&amp;quot;&lt;br /&gt;
|description = In which direction the smoke tends to drift. Less effective in y-coordinate and influenced by random wind. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = speed&lt;br /&gt;
|type = float3&lt;br /&gt;
|default = &amp;quot;0,0,0&amp;quot;&lt;br /&gt;
|description = &amp;lt;code&amp;gt;wantedPos += speed;&amp;lt;/code&amp;gt; How fast and in which vector the particles move.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = texture&lt;br /&gt;
|type = hardcoded&lt;br /&gt;
|default = randomly chosen. &lt;br /&gt;
|description = Particles randomly pick one of the smoke textures (bitmaps\smoke) and remain with it until death.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CSmokeProjectile ===&lt;br /&gt;
Monochrome particles that fade out.&lt;br /&gt;
A more &amp;quot;primitive&amp;quot; version of CSmokeProjectile2. &lt;br /&gt;
No hardcoded red-yellow start but it misses wantedPos to tweak the look a bit more detailed.&lt;br /&gt;
&lt;br /&gt;
==== Suggested Use ====&lt;br /&gt;
Smoke. &lt;br /&gt;
For a nicer stream of smoke spawn it frequently over multiple frames, otherwise it looks rather bland.&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
{{tag&lt;br /&gt;
|name = color&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.5&lt;br /&gt;
|description = Brightness of the particle. 0 is black.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = size&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = Size of a particle&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = ageSpeed&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.5&lt;br /&gt;
|description = How fast the particle ages. Every frame: &amp;lt;code&amp;gt;age += ageSpeed&amp;lt;/code&amp;gt; The particle is deleted at &amp;lt;code&amp;gt;if (age &amp;gt; 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = speed&lt;br /&gt;
|type = float3&lt;br /&gt;
|default = &amp;quot;0,0,0&amp;quot;&lt;br /&gt;
|description = &amp;lt;code&amp;gt;pos += speed;&amp;lt;/code&amp;gt; How fast and in which vector the particles move.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = texture&lt;br /&gt;
|type = hardcoded&lt;br /&gt;
|default = randomly chosen. &lt;br /&gt;
|description = Particles randomly pick one of the smoke textures (bitmaps\smoke) and remain with it until death.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- can&amp;#039;t use the following until all games use effects/ rather than gamedata/explosions&lt;br /&gt;
{{ExampleRepoLinks&lt;br /&gt;
|path = effects/&lt;br /&gt;
|entity = CEGs&lt;br /&gt;
}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
[http://imolarpg.dyndns.org/trac/balatest/browser/trunk/gamedata/explosions &amp;#039;Balanced Annihilation&amp;#039; CEGs] (TDF format)&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/conflictterra/source/browse/#svn%2Fgames%2FCT%2Fgamedata%2Fexplosions &amp;#039;Conflict Terra&amp;#039; CEGs]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/EvolutionRTS/Evolution-RTS/tree/master/Gamedata/explosions &amp;#039;Evolution RTS&amp;#039; CEGs]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/imperialwinter/swiw.sdd/tree/master/gamedata/explosions &amp;#039;Imperial Winter&amp;#039; CEGs] (TDF format)&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/journeywar/source/browse/#svn%2Ftrunk%2Fgamedata%2Fexplosions &amp;#039;Journeywar&amp;#039; CEGs]&lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/p/mwspring/code/HEAD/tree/effects/ &amp;#039;MechCommander: Legacy&amp;#039; CEGs] (TDF format)&lt;br /&gt;
&lt;br /&gt;
[https://github.com/spring1944/spring1944/tree/master/effects &amp;#039;Spring: 1944&amp;#039; CEGs] (TDF format)&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/springtutorialgame/source/browse/#svn%2Ftrunk%2FSpringTutorialGame.sdd%2FGamedata%2Fexplosions &amp;#039;Spring Tutorial Game&amp;#039; CEGs]&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/xta-springrts/source/browse/#svn%2Ftrunk%2Fgamedata%2Fexplosions &amp;#039;XTA&amp;#039; CEGs] (TDF format)&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ZeroK-RTS/Zero-K/tree/master/effects &amp;#039;ZeroK&amp;#039; CEGs]&lt;br /&gt;
&lt;br /&gt;
[[Category:CEG]]&lt;/div&gt;</summary>
		<author><name>Interwiki&gt;Silentwings</name></author>
	</entry>
</feed>