The fx.xml.bin file stores the data of all particle effects in World of Goo.
They are used to create fire, smoke, rain, leaves falling in the wind, goo drops and trails, and a lot of other visual goo-dness.

There are 2 types of effect...
Point Source: Particles appear from a single point. eg. Fire, Trails, Explosions etc. Details here
Ambient: Particles appear at random positions and cover the whole screen. eg. Rain, Leaves, Snow Details here
The Level Editor Reference Guide has videos showing the different effects of each type.


root of fx.xml
children: All the available <ambientparticleeffect> and <particleeffect>


Ambient effects can only be used in levels in a <particles> item.
children: 1 or more <particle>

name : Required : String
Unique name / identifier for this effect
maxparticles : Required : Integer : minimum= 1
Maximum number of particles that are active at any time.
margin : Optional : Integer : Default: ~50 Examples= 384; 400; 1000
The distance outside the screen edge where the particles are created and destroyed.
Used mainly with large images to prevent them suddenly appearing or disappearing while still on screen.
If set to 0, particles are destroyed when their centre point reaches the screen edge, and a replacement particle is immediately created and appears at random somewhere else on edge of the screen.
Can be negative, but this looks strange because the particles only appear in the middle of the screen and not near the edges.


Point Source particle effects can be used in levels (in particles, fire and signpost items) and they can also be used in Goo Balls.
children: 1 or more <particle>

name : Required : String
identifies this effect
maxparticles : Required : Integer : minimum= 1
maximum of particles active at any time.
rate : Optional : Float : minimum= 0.00001
Rate at which new particles are produced, seems to be per "frame".
Set to 0.02, new particles are created at exactly 1 per second
If a new particle is created when there are maxparticles on screen, then the oldest particle is removed.


A single particle effect may contain a number of different elements which act in different ways. Smoke and Fire for example.
This tag sets the values for one particular type of particle in the effect.
children: [0-n] Any number (or none) <axialsinoffset>

image : [list-of]{Image Resource} : Required : String
the resource id that represents the image of this particle type.
If you specify a single image then the game will use this for every particle.
If you specify multiple images as a comma-separated list, the game will select one at random for each new particle.
The resources for particle effect images are stored in /properties/resources.xml.bin
additive : Optional : true / false : Default= False
sets the particle image colors additive: the more particles overlap, the brighter it gets.
dampening : Optional : Float
Motion dampening factor from 0 to 1, can be used to make the particles slow (to a stop) once created.
directed : Optional : true / false : Default = false
Particle image is always aligned with the direction of motion. used on Rain, some Mist, smoke and goo splatter effects.
When set to True, the rotation and rotspeed attributes (see below) are ignored.
fade : Optional : true / false : Default= false
The particle fades out over its lifespan
lifespan : {min lifespan},{max lifespan} : Optional : Float
The particle's lifetime (in seconds) it will be destroyed after that time.
The fade and finalscale attributes are affected by this value.
NB: If maxparticles is reached, older particles will disappear regardless of whether they have reached their lifespan.
scale : {min scale},{max scale} : Required : Float
Sets the (initial) size of a particle, can be changed over time to "finalscale"
finalscale : Optional : Float : Default not set.
if set, the particle grows/shrinks from its original scale to finalscale over its lifespan.
speed : {min speed},{max speed} : Required : Float
range of the particle's (initial) speed, can be changed over time by acceleration and dampening
acceleration : x-axis , y-axis : Optional : Default= ( 0,0 ) no acceleration
50x per second these values are added to the speed of the particle.
Each value can be positive or negative.
Negative values on the y axis around -0.01 gives a reasonable impression of gravity
movedir : Optional : Integer : Default = 0 (Right)
Initial direction the particle moves in in degrees.
0 = Right, 90 = Up, 180 = Left, 270 = Down
movedirvar : Required : Integer
Variation of the direction in degrees. The initial movedir varies randomly by + or - this amount.
rotation : {min rotation},{max rotation} : Optional : Integer : Default= 0 : Example= "-180,180"
inital rotation of the particle (image) in degrees.
Ignored if the particle has directed=true
rotspeed : {min rotspeed},{max rotspeed} : Optional : Float
range of rotation speed, in radians per second... or something close


Axial Sin Offset adds extra components to the motion of the particle on either the x or y axis. The original particle effects use at most 1 axialsinoffset on each axis, however you can have more than one on any axis if you wish.

amp : {min amplitude},{max amplitude} : Required :
range of amplitude in pixels
axis : "x" or "y" : Required
The axis for the motion
freq : {min frequency},{max frequency} : Required
The speed of oscillation in Radians per second
A value of 6.28 completes a whole cycle in 1 second.
phaseshift : {min shift},{max shift} : Required :
range of phase shift in radians 0 -> 6.28