This is a follow up on the weather types, it will change the intensity of the weather.

Open your mapname.csc and add this in the main function.


level.weather_intensity = 0.3;
clientfield::register( "world", "weather_intensity", VERSION_SHIP, 2, "int", &weather_intensity, !CF_HOST_ONLY, !CF_CALLBACK_ZERO_ON_NEW_ENT );

Replace the old while function where the fx got played with this.

while(1)
{
	if(level.weather_intensity == 0)
	{
		wait .1;
		continue;
	}
	PlayFX( localClientNum, SNOW_FX, self.origin );
	wait level.weather_intensity;
}

Now add this function as well.

function weather_intensity( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
{
	// If value = 0 that will stop the weather
	// Lower the numbers to increase intensity ( Cannot go below 0 )

	switch(newVal)
	{
		case 0:
			level.weather_intensity = 0;
			break;
		case 1:
			level.weather_intensity = 0.3;
			break;
		case 2:
			level.weather_intensity = 0.15;
			break;
		case 3:
			level.weather_intensity = 0.05;
			break;
	}
}

Now we move onto mapname.gsc, add this in the main function.


clientfield::register( "world", "weather_intensity", VERSION_SHIP, 2, "int" );

thread weather_intensity();

And add this function as well.


function weather_intensity()
{
	weather_intensity = 1; // Starting weather type

	while(1)
	{
		wait RandomIntRange(120, 360);
		intensity = RandomInt(4); // Generates a number from 0 - 3

		while(intensity == weather_intensity) // Don't want repeating intensity
		{
			intensity = RandomInt(4);
			WAIT_SERVER_FRAME;
		}

		level clientfield::set("weather_intensity", intensity);
		weather_intensity = intensity;
	}
}