iw6-scripts/maps/_weather.gsc
2024-02-13 13:20:49 +01:00

292 lines
7.3 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
rainhard( var_0 )
{
level notify( "rain_change", "hard", var_0 );
level thread raineffectchange( 10, var_0 );
wait( var_0 * 0.5 );
level.ambient_modifier["rain"] = "";
wait( var_0 * 0.5 );
}
rainmedium( var_0 )
{
level notify( "rain_change", "hard", var_0 );
level thread raineffectchange( 8, var_0 );
wait( var_0 * 0.5 );
level.ambient_modifier["rain"] = "";
wait( var_0 * 0.5 );
}
rainlight( var_0 )
{
level notify( "rain_change", "light", var_0 );
level thread raineffectchange( 5, var_0 );
wait( var_0 * 0.5 );
level.ambient_modifier["rain"] = "light";
wait( var_0 * 0.5 );
}
rainnone( var_0 )
{
level notify( "rain_change", "none", var_0 );
level thread raineffectchange( 0, var_0 );
wait( var_0 * 0.5 );
level.ambient_modifier["rain"] = "norain";
wait( var_0 * 0.5 );
}
raininit( var_0 )
{
common_scripts\utility::flag_init( "_weather_lightning_enabled" );
common_scripts\utility::flag_set( "_weather_lightning_enabled" );
if ( var_0 == "none" )
{
level.rainlevel = 0;
level._effect["rain_drops"] = level._effect["rain_" + level.rainlevel];
rainnone( 0.1 );
}
else if ( var_0 == "light" )
{
level.rainlevel = 5;
level._effect["rain_drops"] = level._effect["rain_" + level.rainlevel];
rainlight( 0.1 );
}
else
{
level.rainlevel = 10;
level._effect["rain_drops"] = level._effect["rain_" + level.rainlevel];
rainhard( 0.1 );
}
}
lightning( var_0, var_1 )
{
[[ var_0 ]]();
waittillframeend;
for (;;)
lightningthink( var_0, var_1 );
}
raineffectchange( var_0, var_1 )
{
level notify( "rain_level_change" );
level endon( "rain_level_change" );
if ( level.rainlevel > var_0 )
{
var_2 = level.rainlevel - var_0;
var_1 = var_1 / var_2;
for ( var_3 = 0; var_3 < var_2; var_3++ )
{
wait( var_1 );
level.rainlevel--;
level._effect["rain_drops"] = level._effect["rain_" + level.rainlevel];
}
}
if ( level.rainlevel < var_0 )
{
var_2 = var_0 - level.rainlevel;
var_1 = var_1 / var_2;
for ( var_3 = 0; var_3 < var_2; var_3++ )
{
wait( var_1 );
level.rainlevel++;
level._effect["rain_drops"] = level._effect["rain_" + level.rainlevel];
}
}
}
addlightningexploder( var_0 )
{
if ( !isdefined( level.lightningexploder ) )
{
level.lightningexploder = [];
level.lightningexploderindex = 0;
}
level.lightningexploder[level.lightningexploder.size] = var_0;
}
playerweather()
{
var_0 = getentarray( "player", "classname" )[0];
for (;;)
{
playfx( level._effect["rain_drops"], var_0.origin + ( 0, 0, 650 ), var_0.origin + ( 0, 0, 680 ) );
wait 0.3;
}
}
rainlevelrandomwait()
{
if ( level.rainlevel == 0 )
return randomfloat( 30 );
else if ( level.rainlevel == 1 )
return randomfloat( 24 );
else if ( level.rainlevel == 2 )
return randomfloat( 20 );
else if ( level.rainlevel == 3 )
return randomfloat( 15 );
else if ( level.rainlevel == 4 )
return randomfloat( 12 );
else if ( level.rainlevel == 5 )
return randomfloat( 9 );
else if ( level.rainlevel == 6 )
return randomfloat( 8 );
else if ( level.rainlevel == 7 )
return randomfloat( 8 );
else if ( level.rainlevel == 8 )
return randomfloat( 7 );
else if ( level.rainlevel == 9 )
return randomfloat( 6 );
else if ( level.rainlevel == 10 )
return randomfloat( 5 );
}
rainlevelwait()
{
if ( level.rainlevel == 0 )
return 20;
else if ( level.rainlevel == 1 )
return 18;
else if ( level.rainlevel == 2 )
return 16;
else if ( level.rainlevel == 3 )
return 14;
else if ( level.rainlevel == 4 )
return 12;
else if ( level.rainlevel == 5 )
return 10;
else if ( level.rainlevel == 6 )
return 9;
else if ( level.rainlevel == 7 )
return 8;
else if ( level.rainlevel == 8 )
return 7;
else if ( level.rainlevel == 9 )
return 6;
else if ( level.rainlevel == 10 )
return 5;
}
lightningthink( var_0, var_1 )
{
level endon( "rain_change" );
var_2 = gettime() + ( rainlevelwait() + rainlevelrandomwait() ) * 1000;
if ( var_2 < level.nextlightning )
level.nextlightning = var_2;
for (;;)
{
common_scripts\utility::flag_wait( "_weather_lightning_enabled" );
var_3 = ( level.nextlightning - gettime() ) * 0.001;
if ( var_3 > 0 )
wait( var_3 );
if ( !common_scripts\utility::flag( "_weather_lightning_enabled" ) )
continue;
lightningflash( var_0, var_1 );
level.nextlightning = gettime() + ( rainlevelwait() + rainlevelrandomwait() ) * 1000;
}
}
fogflash( var_0 )
{
if ( isdefined( level.lightningexploderindex ) )
common_scripts\utility::exploder( level.lightningexploder[level.lightningexploderindex] );
[[ var_0 ]]();
}
lightningflash( var_0, var_1, var_2 )
{
var_3[0] = "quick";
var_3[1] = "double";
var_3[2] = "triple";
thread thunder();
if ( !isdefined( var_2 ) )
var_2 = randomint( var_3.size );
var_4 = 0;
if ( isdefined( level.lightningexploderindex ) )
{
while ( var_4 == level.lightningexploderindex )
var_4 = randomint( level.lightningexploder.size );
level.lightningexploderindex = var_4;
}
switch ( var_3[var_2] )
{
case "quick":
fogflash( var_1 );
break;
case "double":
fogflash( var_1 );
wait 0.05;
fogflash( var_1 );
break;
case "triple":
fogflash( var_1 );
wait 0.05;
fogflash( var_1 );
wait 0.5;
fogflash( var_1 );
break;
}
}
thunder()
{
if ( level.rainlevel == 0 )
wait( 6 + randomfloat( 2 ) );
else if ( level.rainlevel == 1 )
wait( 5 + randomfloat( 1.8 ) );
else if ( level.rainlevel == 2 )
wait( 4.5 + randomfloat( 1.6 ) );
else if ( level.rainlevel == 3 )
wait( 4 + randomfloat( 1.6 ) );
else if ( level.rainlevel == 4 )
wait( 3.5 + randomfloat( 1.5 ) );
else if ( level.rainlevel == 5 )
wait( 3 + randomfloat( 1.5 ) );
else if ( level.rainlevel == 6 )
wait( 2.5 + randomfloat( 1.2 ) );
else if ( level.rainlevel == 7 )
wait( 2 + randomfloat( 1 ) );
else if ( level.rainlevel == 8 )
wait( 1.9 + randomfloat( 0.5 ) );
else if ( level.rainlevel == 9 )
wait 1.5;
else if ( level.rainlevel == 10 )
wait 1;
var_0 = spawn( "script_origin", ( 0, 0, 0 ) );
var_0.origin = level.player.origin + ( 0, 0, 60 );
var_0 linkto( level.player );
if ( level.rainlevel <= 8 )
var_0 playsound( "elm_thunder_distant", "sounddone" );
else
{
var_0 playsound( "elm_thunder_distant", "sounddone" );
var_0 thread maps\_utility::play_sound_on_entity( "elm_thunder_strike" );
}
var_0 waittill( "sounddone" );
var_0 delete();
}