Particle Forge

Particle Forge is the official tool for editing the graphical appearance of weapons, explosions, abilities, and flair effects in Sins of a Solar Empire.
__TOC__
== Installation ==
After downloading and unzipping the tool from the Sins website, make sure to copy the contents of the Particle Forge folder (minus the PipelineEffects) into the game's root \Program Files\Sins of a Solar Empire\ directory. This must be done so that Particle Forge has direct access to the Mesh, Textures, and TextureAnimations folders. Otherwise, the program will not load the textures automatically, and the preview window will unhelpfully show every particle as a solid square.
== Usage ==
After clicking File -> Open..., browse to the \Sins of a Solar Empire\Particle\ folder. This is where Sins stores its .particle files, the type of file that Particle Forge edits.
== Settings ==
The first entry in the editor window controls miscellaneous Settings for the particle preview.
*Backdrop
**BackdropColor: The background color in the preview window. Used only if no skybox is selected.
**Skybox.Detail: Select a SkyboxBackdrop*.Mesh file from the Mesh folder to display a skybox background.
**Skybox.Stars: Select the SkyboxStars.Mesh file from the Mesh folder to display a starfield background.
**WorldAxisLineLength: The length of the secondary 3D axis, enabled below.
*General
**ShowControllerAxis: Displays the 3D axis.
**ShowStats: Displays the frames per second.
**ShowWorldAxis: Displays another 3D axis, length controlled above.
*Mesh settings: Allows a ship's or structure's mesh to be displayed. Useful when working with explosions.
*Sphere settings: Allows a sphere of configurable size to be displayed.
== Particle Data ==
Beneath the Settings entry is the name of the open particle file. This is where all the data for the actual particle effect begins.
=== Global Properties ===
*HasInfiniteTime: If true, the particle lasts forever. If false, the particle effect dies after TotalLifeTime seconds.
*Length: Only needed for long weapon travel effects. Used to kill the particle when it collides at the given length (rather than the center axis). If left '0' for long weapon projectile effects, the projectile will look like it is going through the target! Value needed is the distance from the center axis to the impact-end of the particle.
*TotalLifeTime: Number of seconds the particle effect lasts. Ignored if HasInfiniteTime is true.
== Emitters ==
These are what emit the particles for the effect. There are three types: points, which create particles at a single point, spheres, which create particles anywhere within a sphere-like shape, and rings, which create particles within a ring-like shape.
The properties below are present in all three kinds of emitters.
*Design
**Enabled: Provides a quick way to disable an emitter without erasing it.
**Name: Use this to rename the emitter for clarity.
**Type: Cannot be changed. Displays whether the emitter is a point, sphere, or ring.
*Emitter
**EmitCount.IsInfinite: Allows the emitter to ignore EmitCount.Max & emit an unlimited number of particles.
**EmitCount.Max: Sets the maximum number of particles to emit.
**ImitIntervals.HasInterval: Enables the following ImitIntervals values, allowing particle creation in periodic bursts.
**ImitIntervals.RunDuration: Number of seconds to emit particles.
**ImitIntervals.WaitDuration: Number of seconds to wait before emitting particles again.
**EmitRate: Number of particles emitted per second.
**Position: Position of the emitter's center in x,y,z coordinates.
**Rotation.Cross: ?
**Rotation.Forward: ?
**Rotation.Up: ?
**Texture.Primary: The texture file that gives the particle its appearance.
**Texture.Secondary: Secondary texture file, used only when the GsExhaust shader is selected.
**TextureAnimation.FPS: If a texture animation is selected below, the number of frames per second the animation is played at.
**TextureAnimation.Name: A texture animation file.
**TextureAnimation.SpawnType: If a texture animation is selected above, whether it plays sequentially from the first frame (FirstFrame), sequentially from a random start frame (SequentialFrames), or randomly from a random start frame (RandomFrames). ((Or is FirstFrame playing randomly from the first frame & SequentialFrames playing sequentially from the first frame??? Need clarification!))
**Time.Duration: Number of seconds the emitter lasts.
**Time.IsInfinite: Allows the emitter to ignore Time.Duration and last forever.
**Time.Start: Number of seconds to delay the start of the emitter.
*Particle 
**Billboard.Anchor: Controls how the 2D particles are anchored.
**Billboard.Facing: Controls the direction the 2D particles face.
**Color: The color of the particle in RGB. This will also filter the colors of the primary texture.
**IsAttachedToEmitter: Uncertain of the importance of this parameter.
**Lifetime: Number of seconds each particle lasts.
**Mass: ? Probably only needed when using Force affectors.
**Rotation.Direction: Controls which direction(s) the particle can rotate.
**Rotation.Enabled: Enables or disables rotation.
**Rotation.Speed - Min and Rotation.Speed + Max: Particles will rotate at a speed between the minimum and maximum. Values in degrees per second.
**Rotation.Start - Min and Rotation.Start + Max: Particles will start out rotated at an angle between the minimum and maximum. Values in degrees.
**Shader: How the particle is rendered. In most cases, leave it at ParticleAdditive. To prevent particles from being influenced by the background light, use ParticleNotAdditive. When using non-additive rendering, make sure the texture uses transparency or you will end up with a rectangular particle. To achieve a higher-contrast "glowy" particle, you can use GsExhaust. Note that this shader requires a secondary texture and diminishes the filtering effect of the Color value above.
**Size - Width and Size + Height: The dimensions of the 2D particle.
**Speed Linear - Min and Speed Linear + Max: Particles will spawn with a velocity between the minimum and maximum (relative to the emitter).
*ParticleMesh data: Used when a particle effect also consists of a mesh, such as in a missile travel effect.
**FileName: Name of the .mesh file.
**RotationAxis:
**RotationAxisType:
== Emitter types ==
=== Point ===
*Emitter:Point 
**AngleVariance: How many degrees a particle's velocity can vary from the emitter's forward direction.
=== Sphere ===
*Emitter:Sphere 
**RadiusX/Y/Z - Min/+ Max: The minimum and maximum radius in which particles will spawn. Using equal minimums and maximums forms a thin shell, while using minimums of 0 forms a full sphere.
**SpawnAngle.Latitudinal/Longitudinal - Min/+ Max: Controls in what angles of the sphere particles will spawn. Values in degrees. This is where you would form, for example, a half-sphere by restricting one set to 0 through 180 degrees, while permitting the other set to be a full 0 through 360.
**Speed.AzimuthalTangential/PolarTangential: Gives particles velocity away from the center of the sphere, on the equatorial (azimuthal) or polar planes.
=== Ring ===
*Emitter:Ring 
**RadiusX/Y - Min/+ Max: The X & Y radii allow creation of rings that have a wider or longer radius -- ovals. The Min and Max specify the inner & outer rings that the particles will spawn between.
**ScaleStartSpeedsByRadius:
**SpawnAngle - Min/+ Max: Degrees between which particles can spawn.
**SpawnControl.IsAngleRandom:
**SpawnControl.NonRandomLoopParticleCount:
**SpawnDirectionIsParallelToPlane:
**SpawnHeight - Min/+ Max: Used to turn the ring into a cylinder of specified (Max minus Min) length.
**Speed.AlongNormal/Tangent: Gives particles velocity away from the center of the ring, either in the direction normal (perpendicular) or tangent (same) to the ring's plane.
== Affectors ==
These affect the particles emitted in various ways, depending on the type of affector chosen. Note that the order of affectors matters! Those later in the list will overrule those earlier in the list. Unfortunately, Particle Forge does not let you reorder affectors; it limits you to copying an effector to the bottom of the list & removing the original.
Note, too, that affectors will not do anything until you attach an emitter to them. To do this, right-click on an affector, click "Attached Emitters...", then attach any specific ones or all of them. This indicates what particles will be affected.
The properties below are present in all effector types.
*Design
**Enabled: Provides a quick way to disable an emitter without erasing it.
**Name: Use this to rename the emitter for clarity.
**Type: Cannot be changed. Displays which of the below types the affector is.
*Affector 
**Attached:
**OnlyAfter.Enabled: Enables or disables OnlyAfter.Time.
**OnlyAfter.Time: Start affecting particles after they are this many seconds old.
**OnlyBefore.Enabled: Enables or disables OnlyBefore.Time.
**OnlyBefore.Time: Stop affecting particles after they are this many seconds old.
**Time.Duration: How many seconds the affector lasts.
**Time.IsInfinite: Ignores Time.Duration if set to True.
**Time.Start: Number of seconds to delay the start of the affector.
== Affector types ==
=== Color Oscillator ===
*Affector:ColorOscillator
**Alpha.Begin/End: Opacity values to cycle between. Values can range from 1.00 to 0.00.
**Color.Begin/End: Colors to cycle between in RGB.
**TransitionPeriod: Seconds for one cycle.
=== Drag ===
*Affector:Drag
**DragCoefficient:
=== Fade ===
*Affector:Fade
**FadeIn.Enabled: Enables or disables FadeIn.Time.
**FadeIn.Time: Seconds it takes the particle to fade in. This value can be larger than the Lifetime value.
**FadeOut.Enabled: Enables or disables FadeOut.Time.
**FadeOut.Time: Seconds it takes the particle to fade out. Uses the particle's end of lifetime as the end of the fade, NOT the start of the fade. This value can be larger than the Lifetime value.
=== Jitter ===
*Affector:Jitter
**Force:
**UseCommonForceDirection:
=== Kill Particles Near Point ===
*Affector:KillParticlesNearPoint
**DistanceThreshold:
**Point:
=== Linear Force In Direction ===
*Affector:LinearForceInDirection
**Direction:
**Force - Min/+ Max:
=== Linear Force To Point ===
*Affector:LinearForceToPoint
**Force - Min/+ Max:
**Point:
=== Linear Inflate ===
*Affector:LinearInflate
**InflateRate.Height/Width: Increase of the particle's dimensions in distance-units per second. To decrease size, use negative values.
=== Linear Bounded Inflate ===
*Affector:LinearBoundedInflate
**Height/Width - Min/+ Max: ???
=== Rotate About Axis ===
*Affector:RotateAboutAxis
**Axis:
**Origin:
**Radius:
**Speed:
=== Size Oscillator ===
*Affector:SizeOscillator
**SizeX/Y.Begin/End: Particle dimensions to cycle between.
**TransitionPeriod: Seconds in one cycle.
== Links ==
Particle Forge download page
Category:Modding Tools