Overview

Creating Special Effects

Special effects are used to represent graphical effects such as fire, smoke, rain, steam, exhaust, and similar short term and highly animated effects. The Special Effects tool is a dialog based utility, accessed from the Tools menu. It is used to help create and refine the emitter and particle based effects.

This document describes the Special Effects tool (FX Tool), the special effects file format, the controller file format, and how to add special effects to ESP.

See Also

Table of Contents

  • Setup
  • The FX Tool Dialog
  • The Effects File Format
  • A Simple .fx File
  • More Complex .fx Files
  • The Controller File Format
  • How to add special effects to ESP
  • Testing Effects
  • Step 1: Create an XML file for the Effect
  • Step 2: Create a BGL file for the Effect
  • Step 3: Move the BGL file into ESP

Setup

The tool itself is coded in visualfxtool.dll, and can be found in the Environment Kit\Special Effects SDK folder. To install a new library first locate the dll.xml file. On Windows XP this should be in the C:\Documents and Settings\<user name>\Application Data\Microsoft\ESP folder. For Windows Vista the file should be in the C:\Users\<user name>\AppData\Roaming\Microsoft\ESP folder. The dll.xml file defines all the libraries that are to be loaded along with the simulation, not just the one for special effects.

If the dll.xml file already exists in this folder, check it contains the following lines that are in bold -- and ensure that the Disabled parameter is set to False. If the file exists, but no reference is made to the visualfxtool.dll, then add the bold lines to the file. If the dll.xml file does not already exist in the right folder, then copy the dll.xml from the Special Effects SDK folder over to the folder mentioned above.

<?xml version="1.0" encoding="Windows-1252"?>
<SimBase.Document Type="Launch" version="1,0">
<Descr>Launch</Descr>
<Filename>dll.xml</Filename>
<Disabled>False</Disabled>
<ManualLoad>False</ManualLoad>

<Launch.Addon>
<Name>Special Effects Tool </Name>
<Disabled>False</Disabled>
<Path>SDK\Environment Kit\Special Effects SDK\visualfxtool.dll</Path>
</Launch.Addon>

 
</SimBase.Document>

Note that the Path parameter is either absolute, or relative to the installation Microsoft ESP/1.0/ folder. The path given above might change if the SDK or ESP were not installed to their default folders. If there are other addons that need to be loaded, such as the Object Placement Tool, then they will also need Launch.Addon entries.

This is all the setup that is necessary. The tool can be run simply be selecting FX Tool from the Tools menu.

Notes

The tool contains a bewildering collection of fields, documented in the next section.

Special effect files all reside in the effects folder, a sub-folder of the main Microsoft ESP/1.0/ folder. Special effects are stored in a specific XML file format. The files can be edited directly, but the advantage of using the tool over editing the file is that using the tool will allow you to view changes to the effects without having to exit and restart ESP each time.

No programming knowledge is needed; however, it may take some practice using the parameters to understand how all the fields control the effects.

To attach special effects to aircraft refer to documentation on aircraft configuration files, and the AttachTool described in Using Modeling Tools.

Many of the effects file parameters require two values separated by a comma. The first value is the minimum number that the simulation engine will use; the second value is the maximum number. Every second, the simulation engine randomly chooses a number somewhere between these two values, thus randomizing effects. For example, if you have a lifetime of 5.00, 7.00, some particles will live for 5 seconds while others may live for 6, 7, or 5.2 seconds. The first number must be less than the second number, or the effect will not work.

A forest fire sample effect is supplied with this SDK, but all the effects files in the Microsoft ESP/1.0/effects folder are readable and can be examined as examples of effects.

An existing effect can be disabled by replacing it with fx_dummy.fx, which is an empty effect.

The FX Tool Dialog

  • File Menu
  • Edit Menu
  • View Menu
  • Insert Menu
  • Main Dialog
  • Particle Tab
  • Emitter Tab
  • Main Dialog
Main Item
Item
Description
Effect File Parameter
File Menu
New Clear the dialog back to the defaults.  
  Open...
Load an existing effect.  
  Save,
Save As
Save or Save as options.  
       
Edit Menu
Copy Current Tab Makes an identical copy of both the current particle and current emitter, and adds them to the effect.  
  Delete Current Tab Removes the current particle and current emitter.  
  Tab Name A small dialog will appear allowing you to enter a descriptive name. This name will be used both for the particle and the emitter.  
  Stop Animations Freezes any running animation.  
       
View Menu
Always on Top Check this to keep the tool dialog in focus.  
       
Insert Menu
Sprite Particles use 2D square sprites as the basic element.  
  Debris Debris allows an effect to emit a library object. Refer to the list of objects in Library Objects.  
       
       
       
Main Dialog
Friendly Name A name can be entered here to help identify the effect. Display Name=friendly name
  Show Location If this is checked a cross-hair will appear at the point of the emitter.  
  Offset
x,y,z
This allows the special effect to be moved from its actual position to a better position simply for viewing while being edited. The range of each of the options is -50m to +50m.  
  Radius The maximal size of the effect. You must give an effect a radius for it to show up as scenery. Measured in meters. Radius=0
  Priority The number of particles drawn in any one scene can be limited by the various performance settings. Setting Priority to 0 maximizes the chances of the effect being drawn. Setting it to another number will lower the chances of the full effect being drawn if there are performance issues. Priority=0
  Has Sound Set this check box if there is an audio file that should be played each time a particle is emitted.  
  Looping Set this check box to loop the audio file. The file will be played for the lifetime of the particle. Looping=TRUE
  Min Attenuation Distance The distance from the source of the sound, that the sound will no longer be heard, in meters. MinAttenuationDistance=300.0
  .WAV file The filename of the sound. The file should be placed in the Microsoft ESP/1.0/sound folder. FileName=filename
  Do Effect Runs the effect.  
       
Particle N tab
Lifetime The lifetime of the particle in seconds. The actual value selected by the effects engine will be chosen at random within the minimum and maximum range entered. If zeros are entered here the particles will have an infinite life. Lifetime=0.00, 0.00
  X scale The width of the particle in meters. X Scale=0.00
  Y scale The height of the particle in meters. Y Scale=0.00
 
Note: Z Scale=0.00 is ignored in the effects file, as particles are all two dimensional.
  Rate The rate at which a particle grows from zero to its scale goal size. The larger the number, the faster the scaling. X Scale Rate=0.00
Y Scale Rate=0.00
Z Scale Rate=0.00
 
Note: Z Scale Rate is ignored. Edit the effects file directly if different Y and X rates are required, as the tool will not allow you to do this.
  Scale Goal The final size of the particle, in meters. X Scale Goal=0.00
Y Scale Goal=0.00
Z Scale Goal=0.00
 
Note: Z Scale Goal is ignored. Edit the effects file directly if different Y and X goals are required, as the tool will not allow you to do this.
  Offset
x, y, z
The distance that the emitted particles are offset from the emitter in the X, Y, and Z directions. These parameters can be combined with the Emitter Rotation parameters to create swirling particle effects. They can also be used to spread particles out over an area. X Offset=0.00, 0.00
Y Offset=0.00, 0.00
Z Offset=0.00, 0.00
  Color Start
Red, Green, Blue, Alpha
The initial color of a particle. Use the color dialog, or input the values directly.
The alpha value here applies throughout. The alpha value in the XML file for Color End is ignored.
Color Start= 0, 0, 0, 0
  Color Goal
Red, Green, Blue
The final color of a particle. Use the color dialog, or input the values directly. Color End=0, 0, 0, 0
 
  Rate The first value gives the percentage of the lifetime of the particle that the particle will be colored with Color Start, between the first and second values the colors will cross-fade, and the second value gives the percentage of the lifetime after which the particle is colored Color Goal. Color Rate=0.00, 0.00
  Extrude Extrusions are generally effects of great length, such as wakes and contrails. Extrusions work, but they can be very processor intensive. For the best results, start with very long extrusion lengths and short times, and then tweak as necessary.  
  Extrude Length The length of each portion of an extruded effect.. Extrude Length=0.00
  Extrude Pitch The pitch angle at which point the extrusion creates a new section. The smaller the number, the smoother the curves of your extrusions. Extrude Pitch Max=0.00
  Extrude Heading The heading angle at which point the extrusion creates a new section. Extrude Heading Max=0.00
  Facing
Pitch, Bank, Heading
The direction that the particles face. Pitch, bank, and heading are the constraints for the particles’ facing movement. These are on/off switches because the particles either move in the corresponding direction, or they do not.
To have the particles face the user, set these to 1,1,1. If one of the values is 0, then the particles will be constrained in the corresponding axis. To have the particles remain perpendicular to the ground but still turn and face the user, set them to 0,0,1.
Ground Normal=0
Face=1,1,1
 
  Align to ground If this is checked the particle will be rendered parallel to the ground surface. This is for such effects as wake, rotor wash, burn marks, and similar ground effects. If this box is checked the Facing options become inactive (Pitch, Bank and Heading). Ground Normal=1
  Bounce The reaction of a particle when it collides with the ground. The larger the number, the greater the bounce. If the Bounce parameter is set to 0, no reaction occurs. If it is set to 1.0 then it will come off the ground at the same velocity that it hit it. Use a value less than 1.0 to simulate the loss of energy due to the impact. Bounce=0.00
  Drag Drag defines the effect of wind and gravity on the particles. Negative numbers impart more drag. For positive numbers, don’t use a value greater than 1.00. For a reasonable effect of wind on dust particles use a value around -0.5 Drag=0.00, 0.00
  Rotation The rotation of a particle. It is best to use a negative number first and then a positive number to get the most variation in the amount of rotation. Rotation=0.00, 0.00
  Jitter Dist The distance that the particles jitter. If you don't want the particles to jitter, set the parameter to 0. Jitter Distance=0.00
  Jitter Time The length of the delay before particles start to jitter. Measured in seconds. Jitter Time=0.00
  Temp The temperature of the particles, which defines how fast they rise or sink. To approximate room temperature, where particles neither rise nor sink, set Temp to 107 degrees. To make the particles rise, specify a temperature greater than 107; to make the particles sink, specify a temperature less than 107. TempK=0.00
  Temp Rate The rate at which the particles cool or heat up. A negative value represents temperatures that are cooling. The faster particles cool, the sooner they fall back to the ground. A positive value represents temperatures that are rising. The faster particles heat up, the sooner they accelerate into the sky. TempRate=0.00
  Emits Light Check this if the particle emits light, such as fire, lights or fireworks. Light=1
  Shaded at night Check this if the particle is darkened at night. It is used for night shading. Shade=1
  Turn off in distance Check this if the particle is small and should be turned off at a distance (to help improve performance). LOD=1
  Static If this is checked, makes the particle attach itself to the emitter and shuts off the emitter after the first particle. This parameter was used extensively in creating the lights for the planes. Use this parameter when you need one particle that must stay in a fixed location relative to the emitter (for example, signs and lights).
Particle offsets do not work on static particles, use emitter offsets instead.
Static=1
  Emit Effect Check this if the particle initiates another special effect. This second effect will be initiated and have the same parameters (velocity etc.) as if it were a particle being emitted.  
  Effect Name The name of the effect file to run. EmittedEffectName=filename.fx
  Texture The texture file to use with the particle. This file should reside in the effects\texture folder. Texture=filename.bmp
  Animate Check this if the effect is to cycle through a series of images in a texture file. If this is checked, then UV co-ordinates are not entered.  
 
  uv1
u, v
The location of the lower-left corner of the texture on the texture page (X, Y) expressed as a value between 0.0 and 1.0.

uv1=0.00, 0.50
  uv2
u, v
The location of the upper-right corner of the texture lies on the texture page (X, Y) expressed as a value between 0.0 and 1.0. See diagram above.
uv2=0.50, 1.00
  fps The frames per second at which the animation changes textures. For example, a value of 8 means that every eight of a second the animation will advance from one texture cell to the next. FPS=0.00
  cycle Two integers. The first is the location of the first frame of animation on your texture. The code parses your texture from lower left to upper right (horizontally) stepping by the size of the cell. The value of 0 defines the absolute lower left cell of the texture.
The second value is the location of the last frame of animation on your texture. For example, if you specify a texture size of 256 and a cell size of 64, the texture is broken into 16 cells. In this case, a value of 7 defines the cell that is halfway up the texture and all the way to the right. A value of 15 defines the cell that is in the upper right.
For a four-frame animation set texture size to 256 and cell size to 128.
Typically a 16 cell animation would be used, using the following layout:

CellStart=0
CellEnd=15
  tex size The size of the texture (in pixels) that is used for animation. Textures must be square and their size must be a power of two, for example, 256, 512, or 1024. Larger sizes should be avoided because of the lack of support in graphics cards. TextureSize=256
  cell size The size of each frame of animation (for example 64 would mean each cell of the texture is 64 by 64 pixels). CellSize=64
  Alpha blending Specifies which blending mode to use to display the texture, one of: No Alpha, Alpha, Additive or Multiply.
 
No Alpha is the default.
 
Alpha textures are full color and include a transparency mask (alpha channel).
Additive textures, on the other hand, have no alpha channel. The transparency of an additive texture is based off of color values within the texture. Color values in the texture are added to the background color. If an additive texture is triggered against pure white, nothing happens because the values are already maximized at 255, 255, 255, which represents the RGB value for white. Any part of the texture that you want to be invisible must be pure black (or else you’ll just get expanding squares). Additive textures are best used when the effect is simulating something bright—like fire or a light.
Blend Mode=0
(valid entries are 0,1,2,3)
  Fade In The moment during its lifetime that a particle fades in. Expressed as a percentage of total lifetime. Fade In=0.00, 0.00
  Fade Out The moment during its lifetime that a particle fades out. Expressed as a percentage of total lifetime. Fade Out=0.00, 0.00
       
Emitter N tab
Active Set this check box to see the effects from this emitter. Uncheck it to turn off the emitter. This is to assist with the testing of effects.  
  Lifetime The length of time that an emitter emits particles. Measured in seconds. If zeros are entered here the particles will have an infinite life. Lifetime= 0.00, 0.00
  Delay The length of delay before the emitter begins emitting particles. Measured in seconds Delay= 0.00, 1.00
  Rate The rate at which particles are emitted. Measured in particles per second. Rate=1.00, 2.00
  Don't Interpolate If this is checked, interpolation code is not used. Interpolation code attempts to avoid the graphics anomaly of a continuous stream appearing as a sequence of puffs, because the emitter of the stream is moving much faster than the frame rate. Sometimes this interpolation makes the effect appear detached from the emitter, so checking Don't Interpolate is one way of “attaching” an effect to an object securely. The default is to interpolate. No Interpolate=1
  Emitter Velocity
x, y, z
The movement of the emitter in meters per second, in the x, y and z directions. X Emitter Velocity=0.00, 0.00
Y Emitter Velocity=0.00, 0.00
Z Emitter Velocity=0.00, 0.00
  Particle Velocity
x, y, z
The initial velocity of the particles (in meters per second) produced by the emitter, in the x, y, and z directions. X Particle Velocity=0.00, 0.00
Y Particle Velocity=0.00, 0.00
Z Particle Velocity=0.00, 0.00
  Offset
x, y, z
The distance that the emitter is offset from its point of origin, in meters.. X Offset=0.00, 0.00
Y Offset=0.00, 0.00
Z Offset=0.00, 0.00
  Rotation
x, y, z
The rotation of the emitter in degrees per second. To create particles that rotate around a center, combine these Rotation parameters with the Offset parameters. The greater the offset and the greater the rotation, the more dramatic the effect. For example, some of the spectacular fireworks effects in ESP were created making use of these two parameters. X Rotation=0.00, 0.00
Y Rotation=0.00, 0.00
Z Rotation=0.00, 0.00
  Orientation
p, b, h
The initial orientation of the emitter, given as degrees, from the axes of pitch, bank and heading. Pitch=0.00, 0.00
Bank=0.00, 0.00
Heading=0.00, 0.00
  Drag Drag defines the affect of wind and gravity on the emitter. Negative numbers impart more drag Drag=0.00, 0.00
  Bounce If this is set to zero the emitter will remain at ground level if it comes into contact with the ground. If this is set to a higher value that zero, the emitter will bounce if it impacts the ground. Bounce=0.00
  Use min/max temperatures Set the check box if outside temperature is a factor. If so, the particles will only be emitted if the outside temperature is within the min/max range. This can be used to prevent, for example, steam appearing when the outside temperature is too warm for it to be visible.
TemperatureRangeC=0.00, 0.00
       
Notes
  • If an edit box in the tool appears in red, it means that this value must be changed from the value shown for the effect to work.

Effects File Format

Effects files can be opened and edited in Notepad or another editor that reads and saves plain text files. You will usually create a separate .fx file for each special effect that you want to create, though one special effect can contain any number of emitters.

A Simple .fx File

The structure of a simple .fx file is as follows:

  • [Library Effect] This section contains general information about the effect.
  • [sound] This sections contains a reference to a single sound file.
  • [Properties] This section just contains properties concerning which views (cockpit, spot-plane etc.) the effect should be visible from.
  • [Emitter.0] This section contains properties (position, velocity, rate of particle emission etc.) of the emitter.
  • [Particle.0] This section contains properties (lifetime, scaling, rotation etc.) of the particles.
  • [ParticleAttribues.0] This section contains more properties (texture, coloring, animation etc.) of the particles.

Comments

To add comments to a special effects file use the notation “//” to start a comment line. For example:

// comment text

More Complex fx Files

With multiple emitters the structure of the .fx file is as follows:

[Library Effect]

[sound]
[Properties]
[Emitter.0]
[Particle.0]
[ParticleAttribues.0]
[Emitter.1]
[Particle.1]
[ParticleAttribues.1]
[Emitter.2]
[Particle.2]
[ParticleAttribues.2]

There is no limit to the number of emitters that can be added to an effect.

Effects file section or property
Description
Examples
[Library Effect]
The [Library Effect] section defines several general parameters.  
Lifetime=5 A value that is part of an internal (reserved) process. Do not edit this parameter. Lifetime=5 is the only value recognized. Cntrl_Barn.fx( Lifetime=5 )
Version=2.00 The version number of the internal effects tool. Do not edit this parameter. The version number can be 1.00, 2.00 or 3.00. Cntrl_Barn.fx( Version=1.00 )
fx_animaldust.fx( Version=2.00 )
Display Name= An internal naming process that does not affect anything displayed to the user, but may help you keep track of effects files as you work on them. fx_Aurora1.fx( Display Name=Aurora Outside - small )
fx_Aurora2.fx( Display Name=Aurora Outside - Medium )
fx_Aurora3.fx( Display Name=Aurora_large )
fx_beacong.fx( Display Name=Obstruction Light 2 )
fx_BelgFount1.fx( Display Name=Vegas_Belagio Foutain )
fx_BelgFount2.fx( Display Name=foutain placement )
fx_BldStm_lrg.fx( Display Name=Building steam medium )
fx_explosionFire.fx( Display Name=Explosion Fire )
fx_firework1.fx( Display Name=fw_orange/purple cross )
fx_firework10.fx( Display Name=fw_teal sphere )
Radius=200 The maximal size of the effect. You must give an effect a radius for it to show up as scenery. Measured in meters. Cntrl_Barn.fx( Radius=200 )
Cntrl_bldstm.fx( Radius=10000 )
fx_Aurora1.fx( Radius=500 )
fx_Barnstorm.fx( Radius=-1 )
fx_BldStm_lrg.fx( Radius=100 )
fx_CampFire.fx( Radius=0 )
fx_cloudlightning01.fx( Radius=100000 )
fx_DDfire.fx( Radius=1000 )
fx_firework1.fx( Radius=25 )
fx_firework11.fx( Radius=130 )
Priority=N The number of particles drawn in any one scene can be limited by the various performance settings. Setting Priority to 0 maximizes the chances of the effect being drawn. Setting it to another number will lower the chances of the full effect being drawn if there are performance issues. Cntrl_Barn.fx( Priority=0 )
fx_Ngafalls_lrg.fx( Priority=5 )
fx_rtr_cmnt.fx( Priority=9 )
fx_steam1.fx( Priority=4 )
Sound=5
Sound param=0
These values are legacy and should not be used. See the [sound] section below.  
Damage, HitPoints, Magnitude, Time, Range These are values you may see in some legacy effects, and are ignored.  
     
[Properties]
The [Property] section defines the view modes in which the effect will be displayed.  
Cockpit=0/1
VirtualCockpit=0/1
Spot=0/1
Tower=0/1
Map=0/1
The FX tool sets all these values to 1. Changing them to zero will have no effect, as these settings are unimplemented.
fx_animaldust.fx( Cockpit=1 )
fx_animaldust.fx( VirtualCockpit=1 )
fx_animaldust.fx( Spot=1 )
fx_animaldust.fx( Tower=1 )
fx_animaldust.fx( Map=1 )
stoptemp Legacy do not use this. fx_SmokeStack.fx( StopTemp=10.00 )
     
[Emitter.0]
The [Emitter.0] section defines the start of the emitter portion of an effect. An emitter creates a flow of particles, like water from a spigot, which are displayed in the effect.  
Lifetime=0.00, 0.00 The length of time that an emitter emits particles. Measured in seconds. fx_animaldust.fx( Lifetime=0.00, 0.00 )
fx_Aurora1.fx( Lifetime=10.00, 10.00 )
fx_Aurora2.fx( Lifetime=15.10, 15.10 )
fx_Barnstorm.fx( Lifetime=0.50, 1.00 )
fx_beacong.fx( Lifetime=1.00, 1.00 )
fx_BelgFount1.fx( Lifetime=5.00, 7.00 )
fx_BelgFount2.fx( Lifetime=3.00, 4.00 )
fx_blowHole.fx( Lifetime=0.50, 0.70 )
fx_cloudlightning01.fx( Lifetime=0.30, 0.40 )
fx_cloudlightning02.fx( Lifetime=0.20, 0.30 )
Delay=0.00, 0.00 The length of delay before the emitter begins emitting particles. Measured in seconds. fx_animaldust.fx( Delay=0.00, 0.00 )
fx_Aurora1.fx( Delay=5.00, 5.00 )
fx_beaconb.fx( Delay=0.50, 0.50 )
fx_BelgFount1.fx( Delay=8.00, 8.00 )
fx_CampFire.fx( Delay=0.02, 0.02 )
fx_cloudlightning01.fx( Delay=0.10, 0.10 )
fx_contrail_l.fx( Delay=0.30, 0.32 )
fx_dirtspray_l.fx( Delay=0.10, 0.11 )
fx_EmergencyLights.fx( Delay=0.20, 0.20 )
fx_engFire.fx( Delay=0.30, 0.30 )
Bounce=0.00 The reaction of an emitter when it collides with the ground. The higher the number, the larger the bounce. If the parameter is set to 0, no reaction occurs. fx_animaldust.fx( Bounce=0.00 )
fx_Ngafalls_lrg.fx( Bounce=1.00 )
LOD = 0/1 Set the level of detail (LOD) to be 1 if you want the effect to disappear at a distance. Use this to improve performance, and apply it to small localized effects. The default is 0. fx_engFire.fx( LOD=1 )
Light = 0/1 If this is set to 1, the effect is treated as a light source. For example beacons and fireworks have this value set to 1. The default is 0. fx_beacon.fx( Light=1 )
No Interpolate = 0/1 If this is set to 1, interpolation code is not used. Interpolation code attempts to avoid the graphics anomaly of a continuous stream appearing as a sequence of puffs, because the emitter of the stream is moving much faster than the frame rate. Sometimes this interpolation makes the effect appear detached from the emitter, so setting No Interpolate to 1 is one way of "attaching" an effect to an object securely. The default is 0. fx_beacon.fx( No Interpolate=1 )
Rate=0.00, 0.00 The rate at which particles are emitted. Measured in particles per second. fx_animaldust.fx( Rate=20.00, 30.00 )
fx_Aurora1.fx( Rate=3.00, 3.00 )
fx_Aurora2.fx( Rate=2.00, 2.00 )
fx_Barnstorm.fx( Rate=200.00, 250.00 )
fx_beacong.fx( Rate=0.50, 0.50 )
fx_BelgFount1.fx( Rate=32.00, 32.00 )
fx_BelgFount2.fx( Rate=10.00, 10.00 )
fx_BilgePump.fx( Rate=5.00, 10.00 )
fx_BldStm_lrg.fx( Rate=10.00, 15.00 )
fx_blowHole.fx( Rate=40.00, 80.00 )
X Emitter Velocity=0.00, 0.00 The X Emitter Velocity, Y Emitter Velocity, and Z Emitter Velocity parameters define the velocity of the launched emitter in the X, Y, and Z directions, respectively. (The Y direction corresponds to vertical.) The larger the number, the greater the velocity of the emitter. fx_animaldust.fx( X Emitter Velocity=0.00, 0.00 )
fx_explosion.fx( X Emitter Velocity=-2.10, 2.10 )
fx_flare.fx( X Emitter Velocity=-10.00, 10.00 )
fx_launch.fx( X Emitter Velocity=-2.00, 2.00 )
fx_launch2.fx( X Emitter Velocity=0.00, 2.00 )
fx_watercrash.fx( X Emitter Velocity=-1.00, 1.00 )
Y Emitter Velocity=0.00, 0.00   fx_animaldust.fx( Y Emitter Velocity=0.00, 0.00 )
fx_dustcloud_l.fx( Y Emitter Velocity=2.00, 2.00 )
fx_explosion.fx( Y Emitter Velocity=3.00, 4.00 )
fx_firework15.fx( Y Emitter Velocity=8.00, 8.00 )
fx_flare.fx( Y Emitter Velocity=80.00, 80.00 )
fx_launch.fx( Y Emitter Velocity=10.00, 10.00 )
fx_launch2.fx( Y Emitter Velocity=32.00, 32.00 )
fx_launch3.fx( Y Emitter Velocity=42.00, 42.00 )
fx_lightningFire.fx( Y Emitter Velocity=3.00, 5.00 )
fx_watercrash.fx( Y Emitter Velocity=4.50, 4.50 )
Z Emitter Velocity=0.00, 0.00   fx_animaldust.fx( Z Emitter Velocity=0.00, 0.00 )
fx_explosion.fx( Z Emitter Velocity=-2.10, 2.10 )
fx_flare.fx( Z Emitter Velocity=-10.00, 10.00 )
fx_launch.fx( Z Emitter Velocity=-2.00, 2.00 )
fx_launch2.fx( Z Emitter Velocity=0.00, 2.00 )
fx_watercrash.fx( Z Emitter Velocity=-1.00, 1.00 )
Drag=0.00, 0.00 Drag defines the affect of wind and gravity on the emitter. Negative numbers impart more drag. fx_animaldust.fx( Drag=0.00, 0.00 )
fx_contrail_l.fx( Drag=0.00, 0.01 )
fx_dirtspray_l.fx( Drag=-1.00, -0.98 )
fx_firework15.fx( Drag=-1.00, -1.00 )
fx_flare.fx( Drag=-3.00, -3.00 )
fx_launch2.fx( Drag=-1.00, -0.50 )
X Particle Velocity=-0.00, 0.00 The velocity at which particles travel in the X, Y, and Z directions, respectively. fx_animaldust.fx( X Particle Velocity=-0.30, 0.30 )
fx_Aurora1.fx( X Particle Velocity=0.00, 0.00 )
fx_Barnstorm.fx( X Particle Velocity=-10.00, 10.00 )
fx_BelgFount1.fx( X Particle Velocity=-1.00, 1.00 )
fx_BilgePump.fx( X Particle Velocity=-0.20, 0.20 )
fx_BldStm_lrg.fx( X Particle Velocity=-2.00, 2.00 )
fx_deicing.fx( X Particle Velocity=-15.00, -10.00 )
fx_dirtcrash.fx( X Particle Velocity=-5.00, 5.00 )
fx_dirtspray_l.fx( X Particle Velocity=-3.00, 3.00 )
fx_dustcloud_l.fx( X Particle Velocity=2.50, 3.00 )
Y Particle Velocity=0.00, 0.00   fx_animaldust.fx( Y Particle Velocity=0.00, 0.00 )
fx_Barnstorm.fx( Y Particle Velocity=4.00, 10.00 )
fx_BelgFount1.fx( Y Particle Velocity=80.00, 90.00 )
fx_BelgFount2.fx( Y Particle Velocity=100.00, 120.00 )
fx_BilgePump.fx( Y Particle Velocity=1.00, 1.50 )
fx_BldStm_lrg.fx( Y Particle Velocity=5.00, 15.00 )
fx_blowHole.fx( Y Particle Velocity=2.00, 6.00 )
fx_CampFire.fx( Y Particle Velocity=0.80, 1.00 )
fx_DDfire.fx( Y Particle Velocity=-1.00, 1.00 )
fx_deicing.fx( Y Particle Velocity=-8.00, -5.00 )
Z Particle Velocity=-0.00, 0.00   fx_animaldust.fx( Z Particle Velocity=-0.30, 0.30 )
fx_Aurora1.fx( Z Particle Velocity=0.00, 0.00 )
fx_Barnstorm.fx( Z Particle Velocity=20.00, 25.00 )
fx_BelgFount1.fx( Z Particle Velocity=-1.00, 1.00 )
fx_BilgePump.fx( Z Particle Velocity=1.00, 2.00 )
fx_BldStm_lrg.fx( Z Particle Velocity=-2.00, 2.00 )
fx_dirtcrash.fx( Z Particle Velocity=-10.00, 10.00 )
fx_dirtspray_l.fx( Z Particle Velocity=-3.00, 3.00 )
fx_dustcloud_l.fx( Z Particle Velocity=-5.00, 5.00 )
fx_engFire.fx( Z Particle Velocity=0.00, 0.50 )
X Rotation=0.00, 0.00 The rate at which an effect rotates in the X, Y, or Z plane. To create particles that rotate around a center, combine these Rotation parameters with the Particle Offset parameters. The greater the offset and the greater the rotation, the more dramatic the effect. For example, some of the spectacular fireworks effects were done using these two parameters. fx_animaldust.fx( X Rotation=0.00, 0.00 )
fx_firework13.fx( X Rotation=250.00, 250.00 )
fx_firework15.fx( X Rotation=-100.00, 100.00 )
Y Rotation=0.00, 0.00   fx_animaldust.fx( Y Rotation=0.00, 0.00 )
fx_Aurora1.fx( Y Rotation=0.00, 1110.00 )
fx_BelgFount1.fx( Y Rotation=120.00, 120.00 )
fx_firework13.fx( Y Rotation=250.00, 250.00 )
fx_firework15.fx( Y Rotation=-100.00, 100.00 )
fx_rtr_cmnt.fx( Y Rotation=2000.00, 2000.00 )
Z Rotation=0.00, 0.00   fx_animaldust.fx( Z Rotation=0.00, 0.00 )
fx_firework10.fx( Z Rotation=10.00, 10.00 )
fx_firework13.fx( Z Rotation=250.00, 250.00 )
fx_firework15.fx( Z Rotation=-250.00, 250.00 )
fx_tchdwn.fx( Z Rotation=0.00, 2360.00 )
X Offset=0.00, 0.00 The distance that the emitter is offset from its point of origin in the X, Y, and Z directions. fx_animaldust.fx( X Offset=0.00, 0.00 )
fx_Aurora1.fx( X Offset=-300.00, 300.00 )
fx_Aurora2.fx( X Offset=-400.00, 400.00 )
fx_Aurora3.fx( X Offset=-500.00, 500.00 )
fx_Barnstorm.fx( X Offset=4.00, 4.00 )
fx_EmergencyLights.fx( X Offset=-0.50, -0.50 )
fx_firework6.fx( X Offset=-50.00, 50.00 )
fx_ForestBurntHuge.fx( X Offset=-40.00, 40.00 )
fx_kilauea1.fx( X Offset=-20.00, 20.00 )
fx_navgre.fx( X Offset=0.68, 0.68 )
Y Offset=0.00, 0.00   fx_animaldust.fx( Y Offset=0.00, 0.00 )
fx_Aurora1.fx( Y Offset=100.00, 100.00 )
fx_beacon.fx( Y Offset=0.05, 0.05 )
fx_beaconb.fx( Y Offset=-0.05, -0.05 )
fx_CampFire.fx( Y Offset=0.20, 0.20 )
fx_engFire.fx( Y Offset=1.00, 1.00 )
fx_engstrt_cub.fx( Y Offset=-0.50, -0.50 )
fx_firework6.fx( Y Offset=-50.00, 50.00 )
fx_ForestFireHuge.fx( Y Offset=0.00, 100.00 )
fx_luxbeam1.fx( Y Offset=3150.00, 3150.00 )
Z Offset=0.00, 0.00   fx_animaldust.fx( Z Offset=0.00, 0.00 )
fx_beacon.fx( Z Offset=0.05, 0.05 )
fx_engFire.fx( Z Offset=1.00, 1.00 )
fx_engstrt_jenny.fx( Z Offset=-1.00, -1.00 )
fx_firework6.fx( Z Offset=-50.00, 50.00 )
fx_ForestBurntHuge.fx( Z Offset=-40.00, 40.00 )
fx_kilauea1.fx( Z Offset=-20.00, 20.00 )
fx_navgre.fx( Z Offset=-0.18, -0.18 )
fx_Ngafalls_lrg.fx( Z Offset=10.00, 10.00 )
fx_Ngafalls_sml.fx( Z Offset=-10.00, 0.00 )
Pitch=0.00, 0.00 The angle at which the emitter is tilted. A tilted emitter emits particles at an angle, a feature that is especially helpful when working with static particles. Measured in degrees. fx_animaldust.fx( Pitch=0.00, 0.00 )
fx_cloudlightning01.fx( Pitch=80.00, 100.00 )
fx_Ngastatic_lrg.fx( Pitch=46.00, 46.00 )
Bank=0.00, 0.00 The bank angle of the emitter. fx_animaldust.fx( Bank=0.00, 0.00 )
Heading=0.00, 0.00 The heading angle of the emitter. fx_animaldust.fx( Heading=-10.00, 10.00 )
fx_Aurora1.fx( Heading=0.00, 0.00 )
fx_cloudlightning01.fx( Heading=0.00, 360.00 )
temperaturerangec Set the check box if outside temperature is a factor. If so, the particles will only be emitted if the outside temperature is within the min/max range. This can be used to prevent, for example, steam appearing when the outside temperature is too warm for it to be visible. fx_BldStm_lrg.fx( TemperatureRangeC=-9999.0, 0.0 )
fx_BldStm_med.fx( TemperatureRangeC=0.0, 5.0 )
fx_BldStm_sml.fx( TemperatureRangeC=5.0, 10.0 )
rendertype This value is specific for wake effects. Set it to 1 for wake. fx_wake_l.fx( RenderType=1 )
     
[Particle.0]
The [Particle.0] section defines the start of the first particle and the particle's behavior after it has been emitted. You can include sections for more than one particle (for example, [Particle.0], [Particle.1], and [Particle.2]).  
Name= It is often helpful to give the particle a name, such as "smoke puff", "fireball", or whatever. fx_dirtspray_l.fx( Name=Dust Cloud )
fx_dirtspray_m.fx( Name=Dirt )
fx_dirtspray_s.fx( Name=Plume )
fx_engstrt.fx( Name=Smoke Puff 1 )
Lifetime=0.00, 0.00 The length of time that the particle exists, in seconds. fx_animaldust.fx( Lifetime=4.00, 6.00 )
fx_Aurora1.fx( Lifetime=3.00, 4.00 )
fx_Aurora2.fx( Lifetime=3.00, 6.00 )
fx_Barnstorm.fx( Lifetime=1.75, 2.00 )
fx_beacon.fx( Lifetime=0.10, 0.10 )
fx_beaconb.fx( Lifetime=0.01, 0.01 )
fx_beacong.fx( Lifetime=0.00, 0.00 )
fx_BelgFount1.fx( Lifetime=0.75, 1.60 )
fx_BelgFount2.fx( Lifetime=1.75, 3.00 )
fx_BilgePump.fx( Lifetime=1.00, 3.00 )
Type=19 For normal particles the type should be set to 19. Some specific effects require a different number:
# Effect
3 Lightning
21 Extrusions (such as wake)
22 Debris (the emission of library objects)
25 Light sources
26 Effects emitting effects
fx_animaldust.fx( Type=19 )
fx_beacong.fx( Type=25 )
fx_cloudlightning01.fx( Type=3 )
fx_contrail_l.fx( Type=21 )
fx_flare.fx( Type=26 )
fx_object_test.fx( Type=22 )
X Scale=0.00, 0.00 The starting size of the particle in the X, Y, and Z directions. Measured in meters. fx_animaldust.fx( X Scale=0.10, 0.30 )
fx_Aurora1.fx( X Scale=3000.00, 3500.00 )
fx_Aurora2.fx( X Scale=2500.00, 3000.00 )
fx_Aurora3.fx( X Scale=2500.00, 3500.00 )
fx_Barnstorm.fx( X Scale=1.00, 1.50 )
fx_beacon.fx( X Scale=3.00, 3.00 )
fx_beaconb.fx( X Scale=5.00, 5.00 )
fx_beacong.fx( X Scale=3.20, 3.20 )
fx_beaconh.fx( X Scale=1.75, 1.75 )
fx_beaconwhi.fx( X Scale=1.50, 1.50 )
Y Scale=0.00, 0.00   fx_animaldust.fx( Y Scale=0.10, 0.30 )
fx_Aurora1.fx( Y Scale=3000.00, 3500.00 )
fx_Aurora2.fx( Y Scale=2500.00, 3000.00 )
fx_Aurora3.fx( Y Scale=2500.00, 3500.00 )
fx_Barnstorm.fx( Y Scale=1.00, 1.50 )
fx_beacon.fx( Y Scale=3.00, 3.00 )
fx_beaconb.fx( Y Scale=5.00, 5.00 )
fx_beacong.fx( Y Scale=3.20, 3.20 )
fx_beaconh.fx( Y Scale=1.75, 1.75 )
fx_beaconwhi.fx( Y Scale=1.50, 1.50 )
Z Scale=0.00, 0.00   fx_animaldust.fx( Z Scale=0.00, 0.00 )
fx_object_test.fx( Z Scale=1.00, 5.00 )
X Scale Rate=0.00, 0.00 The rate at which a particle grows from zero to its scale goal (see the [ParticleAttributes] section) in the X, Y, and Z directions. The larger the number, the faster the scaling. fx_animaldust.fx( X Scale Rate=0.25, 0.30 )
fx_Aurora1.fx( X Scale Rate=0.00, 0.10 )
fx_Barnstorm.fx( X Scale Rate=0.00, 0.00 )
fx_BelgFount1.fx( X Scale Rate=0.40, 0.40 )
fx_BelgFount2.fx( X Scale Rate=0.50, 0.50 )
fx_BilgePump.fx( X Scale Rate=0.10, 0.20 )
fx_BldStm_lrg.fx( X Scale Rate=0.20, 0.20 )
fx_blowHole.fx( X Scale Rate=0.58, 1.00 )
fx_CampFire.fx( X Scale Rate=0.01, 0.01 )
fx_cloudlightning01.fx( X Scale Rate=1.00, 20.00 )
Y Scale Rate=0.00, 0.00   fx_animaldust.fx( Y Scale Rate=0.25, 0.30 )
fx_Aurora1.fx( Y Scale Rate=0.00, 0.10 )
fx_Barnstorm.fx( Y Scale Rate=0.00, 0.00 )
fx_BelgFount1.fx( Y Scale Rate=0.40, 0.40 )
fx_BelgFount2.fx( Y Scale Rate=0.50, 0.50 )
fx_BilgePump.fx( Y Scale Rate=0.10, 0.20 )
fx_BldStm_lrg.fx( Y Scale Rate=0.20, 0.20 )
fx_blowHole.fx( Y Scale Rate=0.58, 1.00 )
fx_CampFire.fx( Y Scale Rate=0.01, 0.01 )
fx_cloudlightning01.fx( Y Scale Rate=1.00, 20.00 )
Z Scale Rate=0.00, 0.00   fx_animaldust.fx( Z Scale Rate=0.00, 0.00 )
fx_object_test.fx( Z Scale Rate=-1.00, 1.00 )
Drag=0.00, 0.00 Drag defines the effect of wind and gravity on the particles. Negative numbers impart more drag. For positive numbers, don't use a value greater than 1.00. For a reasonable effect of wind on dust particles use a value around -0.5. fx_animaldust.fx( Drag=-0.50, -0.50 )
fx_Aurora1.fx( Drag=0.00, 0.00 )
fx_BelgFount1.fx( Drag=-1.00, -0.98 )
fx_BelgFount2.fx( Drag=-2.00, -1.98 )
fx_BldStm_lrg.fx( Drag=-1.50, -1.50 )
fx_blowHole.fx( Drag=-0.20, -0.20 )
fx_contrail_l.fx( Drag=-999.00, -999.00 )
fx_dirtspray_l.fx( Drag=-1.50, -1.49 )
fx_dirtspray_m.fx( Drag=-2.00, -1.95 )
fx_firework1.fx( Drag=-1.00, -1.00 )
Color Rate=0.00, 0.00 The first value gives the percentage of the lifetime of the particle that the particle will be colored with Color Start, between the first and second values the colors will cross-fade, and the second value gives the percentage of the lifetime after which the particle is colored Color End. The percentages are expressed as fractions, for example: 0.50 is 50 percent. fx_animaldust.fx( Color Rate=0.50, 0.80 )
fx_Aurora1.fx( Color Rate=0.30, 0.60 )
fx_Barnstorm.fx( Color Rate=0.00, 0.00 )
fx_BelgFount1.fx( Color Rate=0.50, 0.50 )
fx_BelgFount2.fx( Color Rate=0.10, 0.50 )
fx_BilgePump.fx( Color Rate=0.20, 0.50 )
fx_blowHole.fx( Color Rate=0.00, 1.00 )
fx_CampFire.fx( Color Rate=0.90, 0.95 )
fx_contrail_l.fx( Color Rate=0.33, 0.45 )
fx_contrail_s.fx( Color Rate=0.10, 0.20 )
X Offset=0.00, 0.00 The distance that the emitted particles are offset from the emitter in the X, Y, and Z directions. These parameters can be combined with the Emitter Rotation parameters to create swirling particle effects. They can also be used to spread particles out over an area. fx_animaldust.fx( X Offset=0.00, 0.00 )
fx_Barnstorm.fx( X Offset=-7.00, 7.00 )
fx_BelgFount1.fx( X Offset=-10.00, 10.00 )
fx_BelgFount2.fx( X Offset=-70.00, -70.00 )
fx_BilgePump.fx( X Offset=-0.20, 0.20 )
fx_deicing.fx( X Offset=-4.24, -4.24 )
fx_engFire.fx( X Offset=-0.30, 0.30 )
fx_explosion.fx( X Offset=-2.00, 2.00 )
fx_firework13.fx( X Offset=44.00, 45.00 )
fx_FlamingDebris.fx( X Offset=-1.00, 1.00 )
Y Offset=0.00, 0.00   fx_animaldust.fx( Y Offset=0.00, 0.00 )
fx_BilgePump.fx( Y Offset=0.90, 0.90 )
fx_blowHole.fx( Y Offset=0.00, 1.00 )
fx_deicing.fx( Y Offset=13.21, 13.21 )
fx_DolphinSpray.fx( Y Offset=-5.00, -5.00 )
fx_engFire.fx( Y Offset=-0.30, 0.30 )
fx_engstrt_vega.fx( Y Offset=-1.20, -1.20 )
fx_explosionOiltank.fx( Y Offset=5.00, 5.00 )
fx_firework13.fx( Y Offset=54.00, 55.00 )
fx_firework15.fx( Y Offset=45.00, 45.00 )
Z Offset=0.00, 0.00   fx_animaldust.fx( Z Offset=0.00, 0.00 )
fx_Barnstorm.fx( Z Offset=0.00, 3.00 )
fx_BelgFount1.fx( Z Offset=10.00, 10.00 )
fx_BelgFount2.fx( Z Offset=-35.00, -35.00 )
fx_BilgePump.fx( Z Offset=1.00, 1.00 )
fx_deicing.fx( Z Offset=-0.04, -0.04 )
fx_engsmoke2.fx( Z Offset=5.00, 5.00 )
fx_engstrt_vega.fx( Z Offset=-2.00, -2.00 )
fx_explosion.fx( Z Offset=-2.00, 2.00 )
fx_explosionOiltank.fx( Z Offset=-10.00, 10.00 )
Fade In=0.00, 0.00 The moment during its lifetime that a particle fades in. Expressed as a percentage of total lifetime. fx_animaldust.fx( Fade In=0.10, 0.20 )
fx_Aurora1.fx( Fade In=0.30, 0.30 )
fx_Barnstorm.fx( Fade In=0.00, 0.00 )
fx_BelgFount1.fx( Fade In=0.10, 0.10 )
fx_BilgePump.fx( Fade In=0.20, 0.20 )
fx_blowHole.fx( Fade In=0.00, 0.05 )
fx_CampFire.fx( Fade In=0.05, 0.10 )
fx_contrail_l.fx( Fade In=0.22, 0.25 )
fx_contrail_s.fx( Fade In=0.15, 0.15 )
fx_DDfire.fx( Fade In=0.50, 0.60 )
Fade Out=0.00, 0.00 The moment during its lifetime that a particle fades out. Expressed as a percentage of total lifetime. fx_animaldust.fx( Fade Out=0.60, 0.80 )
fx_Aurora1.fx( Fade Out=0.71, 0.71 )
fx_Barnstorm.fx( Fade Out=0.70, 0.80 )
fx_beacon.fx( Fade Out=0.00, 0.00 )
fx_BelgFount1.fx( Fade Out=0.40, 0.51 )
fx_BilgePump.fx( Fade Out=0.50, 0.51 )
fx_BldStm_lrg.fx( Fade Out=0.50, 0.50 )
fx_blowHole.fx( Fade Out=0.10, 0.20 )
fx_CampFire.fx( Fade Out=0.20, 0.40 )
fx_contrail_l.fx( Fade Out=0.75, 0.75 )
Rotation=-0.00, 0.00 The rotation of a particle. It is best to use a negative number first and then a positive number to get the most variation in the amount of rotation. fx_animaldust.fx( Rotation=-100.00, 100.00 )
fx_Aurora1.fx( Rotation=-2.00, -2.00 )
fx_Aurora2.fx( Rotation=3.00, 3.00 )
fx_Barnstorm.fx( Rotation=-1000.00, 1000.00 )
fx_beacon.fx( Rotation=0.00, 0.00 )
fx_BelgFount1.fx( Rotation=-20.00, 20.00 )
fx_CampFire.fx( Rotation=-15.00, 15.00 )
fx_contrail_l.fx( Rotation=-60.00, 60.00 )
fx_DDfire.fx( Rotation=-200.00, 200.00 )
fx_deicing.fx( Rotation=-50.00, 50.00 )
Shade=0/1 An on/off toggle that determines whether the particle is darkened at night. It is used for night shading. fx_animaldust.fx( Shade=1 )
Static=0/1 An on/off toggle that, when turned on, makes the particle attach itself to the emitter and shuts off the emitter after the first particle. This parameter was used extensively in creating the lights for the planes. Use this parameter when you need one particle that must stay in a fixed location relative to the emitter (for example, signs or anything that needs to "stick" to the plane).
Particle offsets do not work on static particles, use emitter offsets instead.
fx_beacon.fx( Static=1 )
Face=0/1, 0/1, 0/1 The direction that the particles face. Pitch, bank, and heading are the constraints for the particles' facing movement. These are on/off switches because the particles either move in the corresponding direction, or they do not. To have the particles face you, use 1,1,1. If one of the values is 0, then the particles will be constrained in the corresponding axis. To have the particles remain perpendicular to the ground but still turn and face you, use 0,0,1. fx_animaldust.fx( Face=1, 1, 1 )
fx_Aurora1.fx( Face=0, 0, 0 )
fx_Aurora2.fx( Face=0, 1, 1 )
fx_cloudlightning01.fx( Face=0, 1, 0 )
fx_dirtspray_l.fx( Face=0, 0, 1 )
fx_DolphinSpray.fx( Face=1, 0, 1 )
ground normal If this is set to 1 the particle will be rendered parallel to the ground surface. This is for such effects as wake, rotor wash, burn marks, and similar ground effects. If this is set then the Facing options above (Pitch, Bank and Heading) are ignored.  
emittedeffectname The name of the effect initiated by this effect. fx_flare.fx( EmittedEffectName=fx_flareEffect.fx )
rotation pitch The pitch to apply to the library object emitted by the effect. This applies only to the Debris tab.
fx_object_test.fx( Rotation Pitch=30.00, 30.00 )
rotation bank The bank to apply to the library object emitted by the effect. fx_object_test.fx( Rotation Bank=0.00, 0.00 )
rotation heading The heading to apply to the library object emitted by the effect. fx_object_test.fx( Rotation Heading=0.00, 0.00 )
     
[ParticleAttributes.0]
The [ParticleAttributes] section defines the special attributes of a particle, such as color and texture.  
Blend Mode=1/2/3 Blend mode specifies which blending mode is used to display the texture, which should be one of:
0: No Alpha
1: Alpha blending
2: Additive blending
3: Multiply blending
 
Alpha textures are full color and include a transparency mask (alpha channel).

Additive textures, on the other hand, have no alpha channel. The transparency of an additive texture is based off of color values within the texture. Color values in the texture are added to the background color. If an additive texture is triggered against pure white, nothing happens because the values are already maximized at 255, 255, 255, which represents the RGB value for white. Any part of the texture that you want to be invisible must be pure black (or else you’ll just get expanding squares). Additive textures are best used when the effect is simulating something bright—like fire or a light.
fx_animaldust.fx( Blend Mode=1 )
fx_beacon.fx( Blend Mode=0 )
fx_beaconb.fx( Blend Mode=2 )
fx_dirtcrash.fx( Blend Mode=3 )
Texture=texturename.bmp The name of the texture to reference in your textures folder. fx_animaldust.fx( Texture=fx_1.bmp )
fx_Aurora1.fx( Texture=fx_aurora.bmp )
fx_Barnstorm.fx( Texture=fx_barnstorm.bmp )
fx_beacon.fx( Texture=fx_2.bmp )
fx_BelgFount1.fx( Texture=fx_5.bmp )
fx_CampFire.fx( Texture=fx_Firesheet01.bmp )
fx_cloudlightning01.fx( Texture=fx_flash.bmp )
fx_cloudlightning02.fx( Texture=fx_lightning1.bmp )
fx_contrail_l.fx( Texture=fx_smoke.bmp )
fx_DDfire.fx( Texture=fx_fireAdd.bmp )
Bounce=0.00 The reaction of a particle when it collides with the ground. The larger the number, the greater the bounce. If the parameter is set to 0, no reaction occurs. If it is set to 1.0 then it will come off the ground at the same velocity that it hit it. Use a value less than 1.0 to simulate the loss of energy due to the impact. fx_animaldust.fx( Bounce=0.00 )
fx_BilgePump.fx( Bounce=0.20 )
fx_CampFire.fx( Bounce=1.00 )
fx_WaterFall.fx( Bounce=0.50 )
Color Start=000, 000, 000, 000 The initial color of a particle. The first three numbers define the red, green, and blue (RGB) values and the fourth number specifies the amount of alpha transparency (R, G, B, [00-255]). fx_animaldust.fx( Color Start=166, 148, 130, 100 )
fx_Aurora1.fx( Color Start=154, 176, 79, 55 )
fx_Aurora2.fx( Color Start=154, 176, 79, 65 )
fx_Aurora3.fx( Color Start=154, 176, 79, 155 )
fx_Barnstorm.fx( Color Start=255, 255, 255, 255 )
fx_beacon.fx( Color Start=30, 8, 0, 0 )
fx_beaconb.fx( Color Start=120, 20, 0, 180 )
fx_beacong.fx( Color Start=0, 200, 50, 180 )
fx_beaconh.fx( Color Start=150, 70, 0, 255 )
fx_beaconwhi.fx( Color Start=200, 200, 255, 180 )
Color End=000, 000, 000, 000 The final color of a particle. The first three numbers specify the red, green, and blue (RGB) values, and the fourth number specifies the amount of alpha transparency (R, G, B, [00-255]). fx_animaldust.fx( Color End=153, 140, 125, 255 )
fx_Aurora1.fx( Color End=82, 194, 150, 255 )
fx_Aurora2.fx( Color End=202, 181, 62, 255 )
fx_Aurora3.fx( Color End=196, 132, 68, 255 )
fx_Barnstorm.fx( Color End=255, 255, 255, 0 )
fx_beacon.fx( Color End=60, 8, 0, 0 )
fx_beaconb.fx( Color End=120, 20, 0, 0 )
fx_beacong.fx( Color End=0, 200, 50, 0 )
fx_beaconh.fx( Color End=150, 70, 0, 0 )
fx_beaconwhi.fx( Color End=200, 200, 255, 0 )
Jitter Distance=0.00 The distance that the particles jitter. If you don't want the particles to jitter, set the parameter to 0. fx_animaldust.fx( Jitter Distance=0.02 )
fx_Aurora1.fx( Jitter Distance=0.00 )
fx_Barnstorm.fx( Jitter Distance=0.05 )
fx_BelgFount1.fx( Jitter Distance=0.03 )
fx_contrail_l.fx( Jitter Distance=0.20 )
fx_contrail_s.fx( Jitter Distance=1.00 )
fx_DDfire.fx( Jitter Distance=0.10 )
fx_dustcloud_m.fx( Jitter Distance=0.01 )
fx_firework13.fx( Jitter Distance=0.50 )
Jitter Time=0.00 The length of the delay before particles start to jitter. Measured in seconds. fx_animaldust.fx( Jitter Time=1.00 )
fx_Aurora1.fx( Jitter Time=0.00 )
fx_Barnstorm.fx( Jitter Time=0.25 )
fx_BelgFount1.fx( Jitter Time=3.00 )
fx_BldStm_lrg.fx( Jitter Time=0.30 )
fx_contrail_s.fx( Jitter Time=5.00 )
fx_dustcloud_l.fx( Jitter Time=2.00 )
fx_engFire.fx( Jitter Time=11.00 )
fx_firework13.fx( Jitter Time=0.50 )
fx_wtrspray_l.fx( Jitter Time=0.20 )
FPS=0.00 The frames per second at which the animation changes textures. For example, a value of 8 means that every eight of a second the animation will advance from one texture cell to the next. fx_Barnstorm.fx( FPS=30.00 )
fx_CampFire.fx( FPS=16.00 )
fx_DDfire.fx( FPS=8.00 )
fx_ForestFireHuge.fx( FPS=12.00 )
fx_lakewaves.fx( FPS=6.00 )
TextureSize=256/512/1024 The size of the texture (in pixels) that is used for animation. Textures must be square and their size must be a power of two, for example, 256, 512, or 1024. Larger sizes should be avoided because of the lack of support in graphics cards. fx_Barnstorm.fx( TextureSize=256 )
fx_ForestFireHuge.fx( TextureSize=512 )
CellSize=64 The size of each frame of animation (in this case, 64 pixels by 64 pixels). fx_Barnstorm.fx( CellSize=64 )
fx_ForestFireHuge.fx( CellSize=128 )
CellStart=0 The location of the first frame of animation on your texture. The code parses your texture from lower left to upper right (horizontally) stepping by CellSize. The value of 0 defines the absolute lower left cell of the texture. fx_Barnstorm.fx( CellStart=0 )
fx_Ngastatic_sml.fx( CellStart=1 )
CellEnd=7 The location of the last frame of animation on your texture. For example, if you specify TextureSize=256 and CellSize=64, the texture is broken into 16 cells. In this case, a CellEnd value of 7 defines the cell that is halfway up the texture and all the way to the right. A CellEnd value of 15 defines the cell that is in the upper right. You could make a four-frame animation by setting TextureSize=256 and CellSize=128. fx_Barnstorm.fx( CellEnd=7 )
fx_CampFire.fx( CellEnd=15 )
fx_GenevaFountain.fx( CellEnd=4 )
fx_lakewaves.fx( CellEnd=3 )
fx_TropLights.fx( CellEnd=2 )
TempK=000.00 The temperature of the particles, which defines how fast they rise or sink. To approximate room temperature, where particles neither rise nor sink, set TempK to 107 degrees. To make the particles rise, specify a temperature greater than 107; to make the particles sink, specify a temperature less than 107. fx_Barnstorm.fx( TempK=100.00 )
fx_BilgePump.fx( TempK=106.00 )
fx_BldStm_lrg.fx( TempK=109.50 )
fx_blowHole.fx( TempK=105.00 )
fx_CampFire.fx( TempK=107.00 )
fx_DDfire.fx( TempK=110.00 )
fx_dirtcrash.fx( TempK=90.00 )
fx_dustcloud_l.fx( TempK=108.00 )
fx_explosion.fx( TempK=70.00 )
fx_explosionFire.fx( TempK=120.00 )
TempRate=-0.00 The rate at which the particles cool or heat up. A negative value represents temperatures that are cooling. The faster particles cool, the sooner they fall back to the ground. A positive value represents temperatures that are rising. The faster particles heat up, the sooner they accelerate into the sky. fx_Barnstorm.fx( TempRate=0.01 )
fx_BelgFount1.fx( TempRate=-0.21 )
fx_BilgePump.fx( TempRate=-1.00 )
fx_BldStm_lrg.fx( TempRate=0.11 )
fx_blowHole.fx( TempRate=0.00 )
fx_CampFire.fx( TempRate=-0.02 )
fx_dirtcrash.fx( TempRate=-0.10 )
fx_dustcloud_l.fx( TempRate=-0.01 )
fx_engFire.fx( TempRate=0.02 )
fx_explosionFire.fx( TempRate=-0.20 )
uv1=0.00, 0.50 The location of the lower-left corner of the texture on the texture page (X, Y) expressed as percentages. The lower-left corner of this texture starts at the left side of the page and 50 percent up its side. fx_animaldust.fx( uv1=0.00, 0.50 )
fx_Aurora1.fx( uv1=0.00, 0.00 )
fx_Barnstorm.fx( uv1=0.50, 0.50 )
fx_BelgFount1.fx( uv1=0.50, 0.75 )
fx_BelgFount2.fx( uv1=0.50, 0.00 )
fx_cloudlightning01.fx( uv1=0.75, 0.00 )
fx_cloudlightning02.fx( uv1=0.25, 0.00 )
fx_dustcloud_l.fx( uv1=0.25, 0.75 )
fx_firework1.fx( uv1=0.75, 0.50 )
fx_FlourBombLand.fx( uv1=0.25, 0.50 )
uv2=0.50, 1.00 The location of the upper-right corner of the texture lies on the texture page (X, Y) expressed as percentages. The upper-right corner of this texture is 50 percent to the right and at the very top of the page. See the diagram below. fx_animaldust.fx( uv2=0.50, 1.00 )
fx_Aurora1.fx( uv2=1.00, 1.00 )
fx_beacon.fx( uv2=0.00, 0.00 )
fx_beaconb.fx( uv2=0.50, 0.50 )
fx_BelgFount1.fx( uv2=0.75, 1.00 )
fx_BelgFount2.fx( uv2=1.00, 0.50 )
fx_cloudlightning03.fx( uv2=0.25, 1.00 )
fx_dirtspray_l.fx( uv2=0.75, 0.75 )
fx_dustcloud_l.fx( uv2=0.38, 0.88 )
fx_explosionFire.fx( uv2=1.00, 0.25 )
X Scale Goal=0.00 The maximum size in the X, Y, and Z directions that a particle scales to based on its scale rates in the X, Y, and Z directions, respectively. fx_animaldust.fx( X Scale Goal=2.00 )
fx_Aurora1.fx( X Scale Goal=0.00 )
fx_BelgFount1.fx( X Scale Goal=65.50 )
fx_BilgePump.fx( X Scale Goal=32.50 )
fx_BldStm_lrg.fx( X Scale Goal=300.00 )
fx_blowHole.fx( X Scale Goal=3.00 )
fx_CampFire.fx( X Scale Goal=1.00 )
fx_cloudlightning01.fx( X Scale Goal=200.00 )
fx_contrail_l.fx( X Scale Goal=20.00 )
fx_DDfire.fx( X Scale Goal=10.00 )
Y Scale Goal=0.00   fx_animaldust.fx( Y Scale Goal=2.00 )
fx_Aurora1.fx( Y Scale Goal=0.00 )
fx_BelgFount1.fx( Y Scale Goal=65.50 )
fx_BilgePump.fx( Y Scale Goal=32.50 )
fx_BldStm_lrg.fx( Y Scale Goal=300.00 )
fx_blowHole.fx( Y Scale Goal=3.00 )
fx_CampFire.fx( Y Scale Goal=1.00 )
fx_cloudlightning01.fx( Y Scale Goal=200.00 )
fx_contrail_l.fx( Y Scale Goal=20.00 )
fx_DDfire.fx( Y Scale Goal=10.00 )
Z Scale Goal=0.00   fx_animaldust.fx( Z Scale Goal=0.00 )
Extrude Length=0.00 The length of each portion of an extruded effect. fx_animaldust.fx( Extrude Length=0.00 )
fx_contrail_l.fx( Extrude Length=500.00 )
fx_contrail_s.fx( Extrude Length=50.00 )
fx_DolphinSpray.fx( Extrude Length=2.00 )
fx_flareEffect.fx( Extrude Length=20.00 )
fx_skidmark.fx( Extrude Length=5.00 )
fx_trailingFlame.fx( Extrude Length=10.00 )
fx_wake.fx( Extrude Length=40.00 )
fx_wake_l.fx( Extrude Length=60.00 )
fx_wake_m.fx( Extrude Length=70.00 )
Extrude Pitch Max=0.00 The pitch angle at which point the extrusion creates a new section. The smaller the number, the smoother the curves of your extrusions. fx_animaldust.fx( Extrude Pitch Max=0.00 )
fx_contrail_l.fx( Extrude Pitch Max=2.00 )
fx_DolphinSpray.fx( Extrude Pitch Max=15.00 )
fx_skidmark.fx( Extrude Pitch Max=10.00 )
fx_SnowSkiTrack.fx( Extrude Pitch Max=5.00 )
fx_wake.fx( Extrude Pitch Max=90.00 )
Extrude Heading Max=0.00 The heading angle at which point the extrusion creates a new section. fx_animaldust.fx( Extrude Heading Max=0.00 )
fx_contrail_l.fx( Extrude Heading Max=2.00 )
fx_DolphinSpray.fx( Extrude Heading Max=15.00 )
fx_skidmark.fx( Extrude Heading Max=10.00 )
fx_SnowSkiTrack.fx( Extrude Heading Max=5.00 )
guid GUID of the Library Object to be emitted by the effect. Applies only to the Debris tab. Note that the GUID must be enclosed by curly brackets. fx_object_test.fx( GUID={guid} )
     
[sound]
   
looping Set to TRUE to loop the audio file. The file will be played for the lifetime of the particle. fx_Barnstorm.fx( Looping=FALSE )
fx_BilgePump.fx( Looping=TRUE )
minattenuationdistance The distance from the source of the sound, that the sound will no longer be heard, in meters. fx_Barnstorm.fx( MinAttenuationDistance=300 )
fx_BilgePump.fx( MinAttenuationDistance=10.00 )
fx_explosion.fx( MinAttenuationDistance=500.00 )
fx_explosionOiltank.fx( MinAttenuationDistance=700.00 )
fx_explosionOiltankSmall.fx( MinAttenuationDistance=600.00 )
fx_FireExhaust_JetTruck.fx( MinAttenuationDistance=180.00 )
fx_FireJets_JetTruck.fx( MinAttenuationDistance=300.00 )
fx_fire_OilRig.fx( MinAttenuationDistance=200.00 )
fx_FlourBombLand.fx( MinAttenuationDistance=50.00 )
fx_OilFireMedium.fx( MinAttenuationDistance=100.00 )
filename The file should be placed in the Microsoft ESP/1.0/sound folder. fx_Barnstorm.fx( FileName=barn_fx )
fx_BilgePump.fx( FileName=BoatWaterLOOP.wav )
fx_explosion.fx( FileName=Exp_Gen02.wav )
fx_explosionFire.fx( FileName=Exp_Gen01.wav )
fx_explosionOiltank.fx( FileName=Exp_OilRig02.wav )
fx_explosionOiltankHorizontal.fx( FileName=Exp_OilRig03.wav )
fx_explosionOiltankSmall.fx( FileName=Exp_OilRig01.wav )
fx_FireExhaust_JetTruck.fx( FileName=JetTruckIdleMIX.wav )
fx_FireJets_JetTruck.fx( FileName=Rocket02.wav )
fx_firework1.fx( FileName=firework )

The Controller File Format

The Controller is a powerful feature that lets you create sequences of various effects that can be triggered from one place. Essentially, a controller sets up a series of effects (or other controllers), and then it either repeatedly cycles through the effects or randomly selects and triggers some of them. Because controllers are effects themselves, you can spawn controllers from within controllers (just like any other effect). You can use this feature to create a great randomization effect or huge sequences of events that last over long time periods. The only limitation is how many particles you can render onscreen before affecting the frame rate.

There is no tool to create controllers, you will have to create them in a text editing tool, such as Notepad or Visual Studio.

Controller File Format

The format of a controller file is:

[Library Effect]

[Properties]

[Controller.0]

...

[Controller.n]

Effects file section or property
Description
Examples
[Library Effect]
The parameters in the [Library Effect] section are the same as for a regular effects file.  
[Properties]
The parameters in the [Properties] section are the same as for a regular effects file.  
     
[controller.0]
The controller number. You can spawn multiple controllers: [controller.1], [controller.2], and so on.  
Lifetime=0.00, 0.00 The length of time that the controller exists and emits effects. A Lifetime parameter value of 0.00 creates a controller that has an infinite lifetime. If a controller has an infinite lifetime, the effects engine continues to step through the list of effects until the scenery engine shuts off the controller. A short lifetime can mean that the controller steps through the list of effects only once or twice. Cntrl_Barn.fx( lifetime=0.0, 0.0 )
Cntrl_fireworks.fx( lifetime=0.01, 0.01 )
Cntrl_ForestFireSingle.fx( lifetime=1.00, 1.00 )
FW_show1.fx( lifetime=0.00, 0.00 )
lakewavecontroller.fx( lifetime=0,0 )
Type=0/1/2/3 This parameter determines how the controller steps through the list of effects. There are four different types:
 
Type=0 is the Standard controller. The controller steps through each effect in the list sequentially.
 
Type=1 is the Random controller. This type works together with the Random count parameter described below. The controller takes the random count value that is generated and uses it to determine how many effects in the list to play. Each time through the list of effects, it selects a new random batch.
 
Type=2 is the Line controller. This type was used to create the waves (using vector data as lines). The line controller uses the X, Y, and Z Offset described below.
 
Type=3 is the Distance controller. This option works with the Distance parameter, which sets the distance at which this effect becomes visible or audible.
Cntrl_Barn.fx( type=3 )
Cntrl_bldstm.fx( type=1 )
Cntrl_ForestFireSingle.fx( type=0 )
lakewavecontroller.fx( type=2 )
Delay=0.00, 0.00 The time delay that occurs after the controller steps through all of the effects. (The effects are listed in the table below.) After the delay, the control steps through the effects again. Cntrl_Barn.fx( delay=10.00, 10.00 )
Cntrl_bldstm.fx( delay=1200.00, 1500.00 )
Cntrl_Deicing.fx( delay=0.20, 0.20 )
Cntrl_fireworks.fx( delay=0.00, 5.00 )
Cntrl_KilaueaEruption.fx( delay=42.00, 43.00 )
Cntrl_KilaueaSteam.fx( delay=45.00, 60.00 )
Cntrl_LV_fnt.fx( delay=25.00, 25.00 )
Cntrl_LV_vol.fx( delay=16.00, 17.00 )
Cntrl_OldFaithfull.fx( delay=300.00, 400.00 )
FW_show1.fx( delay=60.00, 60.00 )
X Offset=0.00, 0.00 Used with the Line controller. The particles are generated this offset distance from the line in the X, Y, or Z direction. Cntrl_Barn.fx( x offset=0.00, 0.00 )
lakewavecontroller.fx( x offset=0,0 )
Y Offset=0.00, 0.00   Cntrl_Barn.fx( y offset=0.00, 0.00 )
lakewavecontroller.fx( y offset=0,0 )
Z Offset=0.00, 0.00   Cntrl_Barn.fx( z offset=0.00, 0.00 )
lakewavecontroller.fx( z offset=50,60 )
Frequency=0.00, 0.00 Determines how many particles appear along each section of line. If your lines (vector data) are of fairly even length, you can very accurately fill in along the line. lakewavecontroller.fx( Frequency=60,60 )
Random Count=0, 0 Picks a random value between the min/max values (in whole numbers) and then randomly chooses that number of effects to run. Use this parameter with the Random Controller (see Type above). Cntrl_bldstm.fx( random count=1, 1 )
Cntrl_ForestFireSingle.fx( random count=0, 0 )
Distance=0 Determines how close the user has to be before this effect is either visible or audible. You can use this parameter to create location specific sound effects. Use this parameter with the Distance Controller (see Type above). Cntrl_Barn.fx( distance=15.00, 15.00 )
Cntrl_Deicing.fx( distance=35.00, 35.00 )
effect.0=fx_launch, -10.00, 0.00, -10.00, 10.00, 0.00, 10.00, 0.00, 1.00 The first effect in the list. The format is:
effect.#=effect name, X min, Y min, Z min, X max, Y max, Z max, delay min, delay max
Cntrl_Barn.fx( effect.0=fx_Barnstorm, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 )
Cntrl_bldstm.fx( effect.0=fx_dummy, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 300.00 )
Cntrl_Deicing.fx( effect.0=fx_deicing, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 )
Cntrl_fireworks.fx( effect.0=fw_show1, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00 )
Cntrl_ForestFireSingle.fx( effect.0=fx_ForestFireHuge, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 )
Cntrl_KilaueaEruption.fx( effect.0=fx_Kilauea1, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00 )
Cntrl_KilaueaSteam.fx( effect.0=fx_Kilsteam, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00 )
Cntrl_LightningFire.fx( effect.0=fx_lightningFire, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 )
Cntrl_LV_fnt.fx( effect.0=fx_BelgFount2, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00 )
Cntrl_LV_vol.fx( effect.0=fx_MirVolc, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00 )
effect.#=effect name The effect number and what effect (located in the effects folder) is to be played. You can also trigger another controller from here. Cntrl_bldstm.fx( effect.1=fx_dummy, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 300.00 )
Cntrl_fireworks.fx( effect.1=fw_show2, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00 )
Cntrl_ForestFireSingle.fx( effect.1=fx_ForestFireSmoke, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 )
Cntrl_LightningFire.fx( effect.1=fx_ForestFireMedium, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00 )
Cntrl_LV_fnt.fx( effect.1=fx_BelgFount1, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00 )
FW_show1.fx( effect.1=fx_launch, -10.00, 0.00, -10.00, 10.00, 0.00, 10.00, 0.00, 1.00 )
FW_show3.fx( effect.1=fx_launch, -5.00, 0.00, -5.00, 5.00, 0.00, 5.00, 0.00, 1.00 )
X min The minimum offset value of the effect in the X direction. These are used to randomize (or specify exactly) the location of the effect when it is played.  
Y min The minimum offset value of the effect in the Y direction.  
Z min The minimum offset value of the effect in the Z direction.  
X max The maximum offset value of the effect in the X direction.  
Y max The maximum offset value of the effect in the Y direction.  
Z max The maximum offset value of the effect in the Z direction.  
Delay min
Delay max
The minimum and maximum delays, in seconds, between when the effect is called (when the controller steps through it) and when it actually gets played. The delays are helpful because the controller steps through the effects list quickly (almost instantaneously), so if you want the effects to proceed in a slower sequence, use delays to augment trigger times.  

How to Place Effects in ESP

Like all scenery placement in the simulated world, effects placement is now handled by an XML file and BGLComp.  BGLComp is a tool that will parse an XML stream and extract relevant data such as Latitude and Longitude and create a placement file (BGL file) that will place an object or effect in the world.

As an example, we will place a small forest fire near Seattle.  Before you can place the effect, make sure it is copied to the correct folder. Copy the fx_ForestFire.fx file from the Special Effects SDK/samples folder to the Microsoft ESP/1.0/effects folder.

Note: In the simulation some special effects such as smoke and haze will be rendered behind clouds regardless of their actual relative location. This is a known issue.

Testing Effects

To test an effect place it at a location that is viewable at the very start of a flight. For example, if the flight you select starts at Seattle-Tacoma (Sea-Tac) airport, then the Lat/Long of the starting position of the plane is usually Lat N 47 25.89 Long W 122 18.48. If you place the effect you want to test just a little offset from this, then you can quickly view it and then make adjustments accordingly.

A good place to view an effect is just off the runway to the north of the default aircraft location:

  • Latitude = 47.432
  • Longitude = -122.308

Step 1: Create an XML file for the effect

The effects\samples folder contains one XML file required for this tutorial: ForestFire.XML. Placing an effect requires BGLComp.exe and BGLComp.xsd.  These are located in the BGLComp SDK.  Copy BGLComp.exe and BGLComp.xsd into the samples folder next to the ForestFire.XML. The BGLComp.exe application allows you to place an effect in the simulated world. BGLComp requires an XML file in order to place an effect.  Double-click on ForestFire.XML file, its contents should look like this:

<?xml version="1.0" encoding="ISO-8859-1" ?>
 
<FSData version="9.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="bglcomp.xsd">
 
<SceneryObject lat="47.432" lon="-122.308" alt="0" pitch="0" bank="0" heading="0" altitudeIsAgl="TRUE" imageComplexity="NORMAL">
 
<Effect effectName="fx_ForestFire" />
 
</SceneryObject> 
 
</FSData>

The XML file is case sensitive.  If you are editing the file be sure to follow the structure of the XML in the sample exactly. The only XML parameters that we will be dealing with are those located within the SceneryObject tag and those within the Effect tag.  Here is what each of the parameters means:

The SceneryObject section:
  • lat=  The latitude where you want to place the effect.  This can be in decimal degrees (as it is above) or degrees minutes seconds (N47 25.92).
  • lon=  The longitude where you want to place the effect.  This can be in decimal degrees (as it is above) or degrees minutes seconds (W122 18.50).
  • alt=  The altitude at which you want the effect to spawn (in meters).
  • pitch= The pitch of the effect (in degrees).
  • bank= The bank of the effect (in degrees).
  • heading= The heading of the effect (in degrees).

 

Notes
The value of the Pitch field is expressed in degrees, from 0-360. Use this field with effects that have a directional alignment along the x-axis.

The value of the Bank field is expressed in degrees, from 0-360. Use this field with effects that have a directional alignment along the z-axis.

The value of the Heading field is expressed in degrees, from 0-360, with 0 degrees being true north. Use this field with effects that have a directional alignment along the y-axis.

altitudeIsAgl = Whether the altitude is represented in AGL (actual ground level) or MSL (median sea level).  “true” is AGL. “false” is MSL.  If you want the object to snap to the ground, make “Alt=0” and “Altitude is AGL=true”. Almost all scenery effects will use AGL. 

imageComplexity= The minimum scenery complexity in the display settings for this object to show up.  They are: “Very Sparse”, “Sparse”, “Normal”, “Dense”, “Very Dense” and “Extremely Dense”.

The Effect section:

effectName=  The name of the effect to be placed at this location.  (This is the full effect name minus the .fx suffix).

effectParams=  The parameters of the effect.  For example, the following effect will appear at midnight on January 1st every year and exist for 20 minutes:

<Effect effectName="fx_ForestFire" effectParams="MOY=01,01;DOM=01,01;HOD=00,00;MOH=00,20;"/>

The following parameters can be specified in the Effect section of the XML file:

Parameter
Description
RANDOM=random_range,random_threshold; Specifies that the effect occurs randomly. A random number is generated between 0 and random_range; if the number generated is less than random_threshold, the effect is not created.
For example:
RANDOM=10,9 (10% chance of seeing the effect)
RANDOM=10,6 (40% chance of seeing the effect)
YEAR=year_begin,year_end; Specifies that the effect occurs only if the simulation time is within the year range, inclusively. To have an effect play for the year 1989, the parameter would be written as:
YEAR=1989,1989
MOY=moy_begin,moy_end; Specifies the months of the year (MOY), days of the month (DOM), hours of the day (HOD), minutes of the hour (MOH), and seconds of the minute (SOM) for which the effect occurs. All ranges are inclusive. Any combination of these ranges may be used; the more that are used, the fewer valid date/times the effect occurs. All times are in the local time-zone.
MOY range: 1,12;Where "1"= January, and "12"= December
DOM=dom_begin,dom_end; DOM range: 1,31;Where "1"= first day of the month, and "31"= last possible day of the month
HOD=hod_begin,hod_end; HOD range: 0,23;Where "0"= would be midnight, and “23” is 11pm.
MOH=moh_begin,moh_end; MOH range: 0,59;Where "0"= would be the start of the duration of 60 minutes
SOM=som_begin,som_end; SOM range: 0,59;Where "0"= would be the start of the duration of 60 seconds
DAWN=1|0;
DAY=1|0;
DUSK=1|0;
NIGHT=1|0;
Specifies that the effect should only occur during certain periods of the day. If the value is 1, the effect will occur. If the value is 0, it will not. If none of these parameters are specified, the effect will occur the entire day.
DURATION=seconds; Specifies, in seconds, the duration of the effect. This parameter may be a non-integer; i.e. 2.5.
Notes: Parameter Precedence
  • "RANDOM" takes highest precedence, then periods of the day (for example, "DAWN")., and then times of the day (for example, "HOD”).
  • "RANDOM" is determined when the scenery is first loaded. If the random check fails, the effect will not occur at all until the scenery is completely reloaded (at which point it may fail the random check again).
  • It is possible to set up an effect's parameters such that the effect never occurs. If any of the "DAWN," "DAY," etc. parameters are specified, they take precedence over "HOD," "MOH," and "SOM." Therefore if you set "NIGHT=0;" and "HOD=22;", the effect will not show at 10:00PM because it should not appear at night.
Multiple Effects

You can add many different effects to one XML file.  Just create multiple SceneryObject tags, for example (creating two forest fires):

<?xml version="1.0" encoding="ISO-8859-1"?>

<FSData version="9.0" xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation="bglcomp.xsd">

      <SceneryObject lat="47.432" lon="-122.308" alt="0" pitch="0" bank="0" heading="0" altitudeIsAgl="TRUE" imageComplexity="NORMAL">

            <Effect effectName="fx_ForestFire" />

      </SceneryObject>

      <SceneryObject lat="47.505" lon="-122.308" alt="0" pitch="0" bank="0" heading="0" altitudeIsAgl="TRUE" imageComplexity="NORMAL">

            <Effect effectName="fx_ForestFire" />

      </SceneryObject>

</FSData>

Step 2: Create a BGL File for the Effect

After you have created the ForestFire.XML file, you must run it through the BGLComp compiler to create a new file, ForestFire.bgl.

To compile the BGL
  1. Navigate to the Effects_placement folder on your C:\ drive.
  2. Select the ForestFire.XML file and drag it onto the bglcomp.exe.
  3. bglcomp.exe will compile the .XML file into a new .BGL file called ForestFire.BGL.

If you are having troubles getting your XML to successfully create a BGL file, you might want to do it in the Command Prompt window in order to see the errors generated.  Do this by opening a Command Prompt window and navigating to the folder in which you have placed the ForestFire.XML and the BGLComp.exe.  Then simply type:  “bglcomp ForestFire.XML” at the command prompt.  The command-line BGLComp application will warn you if any of the tags in the XML file are invalid.

Step 3: Move the BGL File into ESP

Before you can see the effect, you must move the compiled ForestFire.BGL file to the proper folder.

To move the BGL File into ESP:

  1. Navigate to the folder ...\Special Effects SDK\Samples.
  2. Copy ForestFire.BGL.
  3. Paste ForestFire.BGL into the scenery area add-on folder named ...Microsoft ESP\1.0\Addon Scenery\scenery
  4. Copy the fx_ForestFire.fx file to the Microsoft ESP\1.0\effects folder. 
  5. Fly from Sea-Tac airport (KSEA) to view the effect.