//// Particle movement handling ///////
function vec_randomize (var* vec, var range)
{
vec[0] = random(0.5) - 0.25;
vec[1] = random(0.5) - 0.25;
vec[2] = random(1) - 0.25;
vec_normalize(vec,random(range));
}
//// particle alpha handling ////////
function part_alphafade(PARTICLE *p)
{
p.alpha -= 20*time_step;
if (p.alpha <= 0) p.lifespan = 0;
}
///// particle creating /////////
function effect_smokes(PARTICLE *p)
{
p.blue = 46.191;
p.green = 86.840;
p.red = 253.129;
var temp[3];
vec_randomize(temp,3);
vec_inverse(temp);
vec_rotate(temp,ball.pan);
vec_add (p.vel_x, temp);
p.size = 2.770 ;
p.gravity = 0 ;
p.alpha = 50 + random(15);
p.bmap = particle_map;
p.flags |= (MOVE | BRIGHT | BEAM | TRANSLUCENT);
p.event = part_alphafade; // change to a shorter, faster function
}