Thank you, Alco!
I'm using similar code for rain, this is cut from it:
(you have to edit this before using, I cut it unchanged from my proj.)
Code:

...
bmap rain_mist_pic = <smoke.tga>;
function rain_mist_()
{
my.alpha -= 5 * time;
if(my.alpha < 0)
{
my.lifespan = 0;
return;
}
my.size += 2*time;//*0.5
}
function rain_mist()
{
temp.x = random(2) - 1;
temp.y = random(2) - 1;
temp.z = random(0.5) + 0.5; // play with this value
vec_set(my.vel_x,temp);
my.bmap = rain_mist_pic;
my.size = 5+random(5);//5
my.flare = on;
my.bright = on;
my.move = on;
my.gravity = 0;
my.alpha = 70;//70
my.function = rain_mist_;
}

bmap raindrop = <drop5.tga>;

//RAIN effect function
Function eff_rain_()
{
if(content(my.x) == content_solid) // the particle is inside a solid?
{
effect(rain_mist, 1, my.x, nullvector); // generate mist
// generate mist
my.lifespan = 0; // don't allow the particles to continue their movement if they have hit something solid
return;
}
my.skill_b += 0.06;//0.03
my.skill_a = 1 - my.skill_b;//6
if(my.skill_a < 0) {
my.lifespan = 0;
}
}

Function eff_rain()
{
if(my.skill_a < 0) { my.skill_a = 0; my.skill_b = 0; }
my.bmap = raindrop;
my.vel_x = random( 10 )-5;
my.vel_y = random( 10 )-5;
my.vel_z = -40 ;
my.size =14 ;
my.move =1 ;
my.alpha = 100 ;
my.x += random(CELL_SIZE * 16)-CELL_SIZE * 8;
my.y += random(CELL_SIZE * 16)-CELL_SIZE * 8;
my.z += random(CELL_SIZE * 2)-CELL_SIZE;
my.transparent = on ;
my.gravity =0 ;
my.bright =on;
my.function = eff_rain_;
my.flare =1 ;
}
...
...
var myPos[3];
while(1) {
while(RAIN_NEEDED==on)&&(MAP_VIEW_ACTIVE==off) {
vec_set(myPOS,camera.x);
temp.x = COS(camera.pan);
temp.y = SIN(camera.pan);
temp.Z = 600*COS(camera.tilt);
MyPos.X = myPos.X + temp.Z*temp.X;
MyPos.Y = myPos.Y + temp.Z*temp.Y;;
// MyPos.Z = myPos.Z + 600*SIN(camera.TILT);
MyPos.Z = Camera.Z + 100;//800;200
effect(eff_rain,50 ,MyPOS,nullvector);
if (moon.alpha > 50) { moon.alpha-=time; }
moon.alpha = max(moon.alpha,0);
if (moon_flare.alpha > 50) { moon_flare.alpha-=time; }
moon_flare.alpha = max(moon_flare.alpha,0);
wait(1);
}
...