///////////////////////////////////////////////////////////////////
BMAP* flame_particle = "flame.tga"; // set here your particle image
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
var start_color[3]; // start color of the particle
var end_color[3]; // end color of the particle
var current_color[3]; // current color of the particle
var flame_lifespan = 10;
///////////////////////////////////////////////////////////////////
// helper function: sets the vector to random direction and length
function flame_randomize (var* vec, var range)
{
vec[0] = random(1) - 0.5;
vec[1] = random(1) - 0.5;
vec[2] = random(3) + 0.5;
vec_normalize(vec,random(range));
}
// helper function: fades out a particle
function flame_alphafade(PARTICLE *p)
{
start_color[0] = 200;
start_color[1] = 180;
start_color[2] = 100;
end_color[0] = 128;
end_color[1] = 50;
end_color[2] = 50;
vec_lerp(current_color[0], end_color[0], start_color[0], p.lifespan / flame_lifespan);
p.red = current_color[0];
p.green = current_color[1];
p.blue = current_color[2];
p.alpha = p.lifespan / flame_lifespan * 100 * 0.3;
if (p.alpha <= 0) p.lifespan = 0;
}
// particle function: generates a fading explosion into vel direction
function effect_flame(PARTICLE *p)
{
var temp[3];
flame_randomize(temp, 5);
vec_add (p.vel_x, temp);
p.bmap = flame_particle;
p.flags |= (BRIGHT | MOVE | TRANSLUCENT);
p.lifespan = flame_lifespan;
p.size = 12;
p.event = flame_alphafade; // change to a shorter, faster function
}