function smokefnc(PARTICLE *p)
{
p.alpha -= p.skill_a*time_step;
p.size += p.skill_a*time_step;
if (p.blue > 0) { p.blue -= p.skill_a*time_step*2; }
if (p.red > 0) { p.red -= p.skill_a*time_step*2; }
if (p.green > 0) { p.green -= p.skill_a*time_step*2; }
if (p.alpha <= 0) p.lifespan = 0;
}
function smoke(PARTICLE* p)
{
vec_set(p.blue,vector(150,150,150));
set(p, MOVE | BRIGHT | TRANSLUCENT);
p.alpha = 50+random(20);
p.size = 0.1+random(1.5);
p.gravity = -0.025;
p.skill_a = 2; // fade factor
p.event = smokefnc;
}
effect(smoke,1,my.x,nullvector);