just call the functions snow_start() or rain_start() in your main function or where ever you want it to start


/////////snow script///////////////////
DEFINE Weather_snow,2;

VAR Snow_strenght = 20; //strenght of snow
VAR Snow_Radius = 400; //radius of snow
VAR Snow_Fallspeed = -15; //fallspeed snow

FUNCTION snow_start(); //starts snowfall

BMAP bsnow = <snow.tga>;

FUNCTION s_spec()
{
my.skill_b += 0.3 * time;
my.skill_a = 30 - my.skill_b;
if(my.skill_a < 0) { my.lifespan = 0; }
}

FUNCTION s_effect()
{
my.skill_a = 0;
my.skill_b = 0;

my.bmap = bsnow;
my.vel_x = 0;
my.vel_y = 0;
my.vel_z = -4 ;
my.size =4 ;
my.move =1 ;
my.alpha = 100 ;
my.x += random(1000)-500;
my.y += random(1000)-500;
my.z += random(100)-50;
my.transparent = 1 ;
my.gravity =0 ;
my.streak =0 ;
my.bright =1 ;
my.function = s_spec;
my.flare =1 ;
}

FUNCTION snow_start()
{
if(Weather_mode == Weather_snow) { return; }
VAR myPos[3];
Weather_Mode = Weather_snow;

while(Weather_Mode == Weather_snow)
{
vec_set(myPOS,camera.x);
MyPos.X = myPos.X - 100;
MyPos.Y = myPos.Y + 100;
MyPos.Z = myPos.Z ;
MyPos.Z = Camera.Z + 80;

effect(s_effect,Snow_strenght ,MyPOS,nullvector);
wait(1 );
}
}

/////////////////////////////////////////////////////////////////////////
//////////rain//////////////////////////////////////////////////////////

VAR Weather_Mode = 3;

DEFINE Weather_rain,1;

VAR Rain_strenght = 20; //Strenght of Rain
VAR Rain_Radius = 2000; //Raidus of Rain
VAR Rain_Fallspeed = -40; //Fallspeed of the raindrops

VAR Rain_sound = 75; //reserved

SOUND sd_rain = <rain.wav>; //Sound of raining

VAR sd_handle;

FUNCTION rain_start(); //Starts normal raining

BMAP brain = <drop.pcx>;


//Rain

FUNCTION r_spec()
{
my.skill_b += 0.3 * time;
my.skill_a = 10 - my.skill_b;
if(my.skill_a < 0) { my.lifespan = 0; }
}


FUNCTION r_effect()
{
my.skill_a = 0;
my.skill_b = 0;

my.bmap = brain;
my.vel_x = 0;
my.vel_y = 0;
my.vel_z = Rain_fallspeed;
my.size = 14;
my.move = 1;
my.alpha = 100 ;
my.x += random(Rain_Radius)-Rain_Radius/2;
my.y += random(Rain_Radius)-Rain_Radius/2;
my.z += random(100)-50;
my.transparent = 1 ;
my.gravity =0 ;
my.streak =0 ;
my.bright =1 ;
my.function = r_spec;
my.flare =1 ;
}


FUNCTION rain_fun(storm)
{
if(Weather_mode == Weather_rain ) { return; }

VAR myPos[3];

Weather_Mode = Weather_rain;

sd_handle = snd_loop (sd_rain,100,0);

while(Weather_Mode == Weather_rain )
{
vec_set(myPOS,camera.x);
MyPos.X = myPos.X ;
MyPos.Y = myPos.Y ;
MyPos.Z = myPos.Z ;
MyPos.Z = Camera.Z + 80;

effect(r_effect,Rain_strenght ,MyPOS,nullvector);


wait(1 );
}
}



FUNCTION rain_start()
{
rain_fun(0);
}