1116 lines
28 KiB
Plaintext
1116 lines
28 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
init()
|
|
{
|
|
var_0 = getentarray( "generic_flickering", "targetname" );
|
|
var_1 = getentarray( "generic_pulsing", "targetname" );
|
|
var_2 = getentarray( "generic_double_strobe", "targetname" );
|
|
var_3 = getentarray( "burning_trash_fire", "targetname" );
|
|
var_4 = getentarray( "scripted_light", "targetname" );
|
|
common_scripts\utility::array_thread( var_0, ::generic_flickering );
|
|
common_scripts\utility::array_thread( var_1, ::generic_pulsing );
|
|
common_scripts\utility::array_thread( var_2, ::generic_double_strobe );
|
|
common_scripts\utility::array_thread( var_3, ::burning_trash_fire );
|
|
common_scripts\utility::array_thread( var_4, ::init_scripted_light );
|
|
}
|
|
|
|
is_light_entity( var_0 )
|
|
{
|
|
return var_0.classname == "light_spot" || var_0.classname == "light_omni" || var_0.classname == "light";
|
|
}
|
|
|
|
flickerlight( var_0, var_1, var_2, var_3 )
|
|
{
|
|
self endon( "kill_flicker" );
|
|
var_4 = var_0;
|
|
var_5 = 0.0;
|
|
maps\_utility::ent_flag_init( "stop_flicker" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( maps\_utility::ent_flag( "stop_flicker" ) )
|
|
{
|
|
wait 0.05;
|
|
continue;
|
|
}
|
|
|
|
var_6 = var_4;
|
|
var_4 = var_0 + ( var_1 - var_0 ) * randomfloat( 1.0 );
|
|
|
|
if ( var_2 != var_3 )
|
|
var_5 = var_5 + randomfloatrange( var_2, var_3 );
|
|
else
|
|
var_5 = var_5 + var_2;
|
|
|
|
if ( var_5 == 0 )
|
|
var_5 = var_5 + 0.0000001;
|
|
|
|
for ( var_7 = ( var_6 - var_4 ) * ( 1 / var_5 ); var_5 > 0 && !maps\_utility::ent_flag( "stop_flicker" ); var_5 = var_5 - 0.05 )
|
|
{
|
|
self setlightcolor( var_4 + var_7 * var_5 );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
}
|
|
|
|
kill_flicker_when_damaged( var_0 )
|
|
{
|
|
var_1 = getentarray( var_0, "script_noteworthy" );
|
|
var_2 = undefined;
|
|
var_3 = 100000000.0;
|
|
|
|
foreach ( var_5 in var_1 )
|
|
{
|
|
var_6 = distance( self.origin, var_5.origin );
|
|
|
|
if ( var_6 < var_3 )
|
|
{
|
|
var_2 = var_5;
|
|
var_3 = var_6;
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
var_2 waittill( "damage", var_8, var_9, var_10, var_11, var_12, var_13, var_14 );
|
|
self notify( "kill_flicker" );
|
|
wait 0.05;
|
|
self setlightcolor( ( 0, 0, 0 ) );
|
|
}
|
|
}
|
|
|
|
generic_pulsing()
|
|
{
|
|
if ( getdvar( "r_reflectionProbeGenerate" ) == "1" )
|
|
{
|
|
self setlightintensity( 0 );
|
|
return;
|
|
}
|
|
|
|
var_0 = self getlightintensity();
|
|
var_1 = 0.05;
|
|
var_2 = var_0;
|
|
var_3 = 0.3;
|
|
var_4 = 0.6;
|
|
var_5 = ( var_0 - var_1 ) / ( var_3 / 0.05 );
|
|
var_6 = ( var_0 - var_1 ) / ( var_4 / 0.05 );
|
|
|
|
for (;;)
|
|
{
|
|
var_7 = 0;
|
|
|
|
while ( var_7 < var_4 )
|
|
{
|
|
var_2 = var_2 - var_6;
|
|
var_2 = clamp( var_2, 0, 100 );
|
|
self setlightintensity( var_2 );
|
|
var_7 = var_7 + 0.05;
|
|
wait 0.05;
|
|
}
|
|
|
|
wait 1;
|
|
var_7 = 0;
|
|
|
|
while ( var_7 < var_3 )
|
|
{
|
|
var_2 = var_2 + var_5;
|
|
var_2 = clamp( var_2, 0, 100 );
|
|
self setlightintensity( var_2 );
|
|
var_7 = var_7 + 0.05;
|
|
wait 0.05;
|
|
}
|
|
|
|
wait 0.5;
|
|
}
|
|
}
|
|
|
|
generic_double_strobe()
|
|
{
|
|
if ( getdvar( "r_reflectionProbeGenerate" ) == "1" )
|
|
{
|
|
self setlightintensity( 0 );
|
|
return;
|
|
}
|
|
|
|
var_0 = self getlightintensity();
|
|
var_1 = 0.05;
|
|
var_2 = 0;
|
|
var_3 = undefined;
|
|
var_4 = undefined;
|
|
var_5 = 0;
|
|
var_6 = [];
|
|
|
|
if ( isdefined( self.script_noteworthy ) )
|
|
{
|
|
var_7 = getentarray( self.script_noteworthy, "targetname" );
|
|
|
|
for ( var_8 = 0; var_8 < var_7.size; var_8++ )
|
|
{
|
|
if ( is_light_entity( var_7[var_8] ) )
|
|
{
|
|
var_5 = 1;
|
|
var_6[var_6.size] = var_7[var_8];
|
|
}
|
|
|
|
if ( var_7[var_8].classname == "script_model" )
|
|
{
|
|
var_3 = var_7[var_8];
|
|
var_4 = getent( var_3.target, "targetname" );
|
|
var_2 = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
self setlightintensity( var_1 );
|
|
|
|
if ( var_2 )
|
|
{
|
|
var_3 hide();
|
|
var_4 show();
|
|
}
|
|
|
|
wait 0.8;
|
|
self setlightintensity( var_0 );
|
|
|
|
if ( var_2 )
|
|
{
|
|
var_3 show();
|
|
var_4 hide();
|
|
}
|
|
|
|
wait 0.1;
|
|
self setlightintensity( var_1 );
|
|
|
|
if ( var_2 )
|
|
{
|
|
var_3 hide();
|
|
var_4 show();
|
|
}
|
|
|
|
wait 0.12;
|
|
self setlightintensity( var_0 );
|
|
|
|
if ( var_2 )
|
|
{
|
|
var_3 show();
|
|
var_4 hide();
|
|
}
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
getclosests_flickering_model( var_0 )
|
|
{
|
|
var_1 = getentarray( "light_flicker_model", "targetname" );
|
|
var_2 = [];
|
|
var_3 = common_scripts\utility::getclosest( var_0, var_1 );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_2[0] = var_3;
|
|
|
|
return var_2;
|
|
}
|
|
|
|
generic_flickering()
|
|
{
|
|
if ( getdvar( "r_reflectionProbeGenerate" ) == "1" )
|
|
{
|
|
self setlightintensity( 0 );
|
|
return;
|
|
}
|
|
|
|
self endon( "stop_dynamic_light_behavior" );
|
|
self endon( "death" );
|
|
self.linked_models = 0;
|
|
self.lit_models = undefined;
|
|
self.unlit_models = undefined;
|
|
self.linked_lights = 0;
|
|
self.linked_light_ents = [];
|
|
self.linked_prefab_ents = undefined;
|
|
self.linked_things = [];
|
|
|
|
if ( isdefined( self.script_linkto ) )
|
|
{
|
|
self.linked_prefab_ents = common_scripts\utility::get_linked_ents();
|
|
|
|
foreach ( var_1 in self.linked_prefab_ents )
|
|
{
|
|
if ( isdefined( var_1.script_noteworthy ) && var_1.script_noteworthy == "on" )
|
|
{
|
|
if ( !isdefined( self.lit_models ) )
|
|
self.lit_models[0] = var_1;
|
|
else
|
|
self.lit_models[self.lit_models.size] = var_1;
|
|
|
|
continue;
|
|
}
|
|
|
|
if ( isdefined( var_1.script_noteworthy ) && var_1.script_noteworthy == "off" )
|
|
{
|
|
if ( !isdefined( self.unlit_models ) )
|
|
self.unlit_models[0] = var_1;
|
|
else
|
|
self.unlit_models[self.unlit_models.size] = var_1;
|
|
|
|
self.unlit_model = var_1;
|
|
continue;
|
|
}
|
|
|
|
if ( is_light_entity( var_1 ) )
|
|
{
|
|
self.linked_lights = 1;
|
|
self.linked_light_ents[self.linked_light_ents.size] = var_1;
|
|
}
|
|
}
|
|
|
|
self.linked_models = 1;
|
|
}
|
|
|
|
if ( isdefined( self.script_noteworthy ) )
|
|
self.linked_things = getentarray( self.script_noteworthy, "targetname" );
|
|
|
|
if ( !self.linked_things.size && !isdefined( self.linked_prefab_ents ) )
|
|
self.linked_things = getclosests_flickering_model( self.origin );
|
|
|
|
for ( var_3 = 0; var_3 < self.linked_things.size; var_3++ )
|
|
{
|
|
if ( is_light_entity( self.linked_things[var_3] ) )
|
|
{
|
|
self.linked_lights = 1;
|
|
self.linked_light_ents[self.linked_light_ents.size] = self.linked_things[var_3];
|
|
}
|
|
|
|
if ( self.linked_things[var_3].classname == "script_model" )
|
|
{
|
|
var_4 = self.linked_things[var_3];
|
|
|
|
if ( !isdefined( self.lit_models ) )
|
|
self.lit_models[0] = var_4;
|
|
else
|
|
self.lit_models[self.lit_models.size] = var_4;
|
|
|
|
if ( !isdefined( self.unlit_models ) )
|
|
self.unlit_models[0] = getent( var_4.target, "targetname" );
|
|
else
|
|
self.unlit_models[self.unlit_models.size] = getent( var_4.target, "targetname" );
|
|
|
|
self.linked_models = 1;
|
|
}
|
|
}
|
|
|
|
if ( isdefined( self.lit_models ) )
|
|
{
|
|
foreach ( var_4 in self.lit_models )
|
|
{
|
|
if ( isdefined( var_4 ) && isdefined( var_4.script_fxid ) )
|
|
{
|
|
var_4.effect = common_scripts\utility::createoneshoteffect( var_4.script_fxid );
|
|
var_6 = ( 0, 0, 0 );
|
|
var_7 = ( 0, 0, 0 );
|
|
|
|
if ( isdefined( var_4.script_parameters ) )
|
|
{
|
|
var_8 = strtok( var_4.script_parameters, ", " );
|
|
|
|
if ( var_8.size < 3 )
|
|
{
|
|
|
|
}
|
|
else if ( var_8.size == 6 )
|
|
{
|
|
var_9 = float( var_8[0] );
|
|
var_10 = float( var_8[1] );
|
|
var_11 = float( var_8[2] );
|
|
var_6 = ( var_9, var_10, var_11 );
|
|
var_9 = float( var_8[3] );
|
|
var_10 = float( var_8[4] );
|
|
var_11 = float( var_8[5] );
|
|
var_7 = ( var_9, var_10, var_11 );
|
|
}
|
|
else
|
|
{
|
|
var_9 = float( var_8[0] );
|
|
var_10 = float( var_8[1] );
|
|
var_11 = float( var_8[2] );
|
|
var_6 = ( var_9, var_10, var_11 );
|
|
}
|
|
}
|
|
|
|
var_4.effect.v["origin"] = var_4.origin + var_6;
|
|
var_4.effect.v["angles"] = var_4.angles + var_7;
|
|
}
|
|
}
|
|
}
|
|
|
|
thread generic_flicker_msg_watcher();
|
|
thread generic_flicker();
|
|
}
|
|
|
|
generic_flicker_msg_watcher()
|
|
{
|
|
maps\_utility::ent_flag_init( "flicker_on" );
|
|
|
|
if ( isdefined( self.script_light_startnotify ) && self.script_light_startnotify != "nil" )
|
|
{
|
|
for (;;)
|
|
{
|
|
level waittill( self.script_light_startnotify );
|
|
maps\_utility::ent_flag_set( "flicker_on" );
|
|
|
|
if ( isdefined( self.script_light_stopnotify ) && self.script_light_stopnotify != "nil" )
|
|
{
|
|
level waittill( self.script_light_stopnotify );
|
|
maps\_utility::ent_flag_clear( "flicker_on" );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
maps\_utility::ent_flag_set( "flicker_on" );
|
|
}
|
|
|
|
generic_flicker_pause()
|
|
{
|
|
var_0 = self getlightintensity();
|
|
|
|
if ( !maps\_utility::ent_flag( "flicker_on" ) )
|
|
{
|
|
if ( self.linked_models )
|
|
{
|
|
if ( isdefined( self.lit_models ) )
|
|
{
|
|
foreach ( var_2 in self.lit_models )
|
|
{
|
|
var_2 hide();
|
|
|
|
if ( isdefined( var_2.effect ) )
|
|
var_2.effect common_scripts\utility::pauseeffect();
|
|
}
|
|
}
|
|
|
|
if ( isdefined( self.unlit_models ) )
|
|
{
|
|
foreach ( var_5 in self.unlit_models )
|
|
var_5 show();
|
|
}
|
|
}
|
|
|
|
self setlightintensity( 0 );
|
|
|
|
if ( self.linked_lights )
|
|
{
|
|
for ( var_7 = 0; var_7 < self.linked_light_ents.size; var_7++ )
|
|
self.linked_light_ents[var_7] setlightintensity( 0 );
|
|
}
|
|
|
|
maps\_utility::ent_flag_wait( "flicker_on" );
|
|
self setlightintensity( var_0 );
|
|
|
|
if ( self.linked_lights )
|
|
{
|
|
for ( var_7 = 0; var_7 < self.linked_light_ents.size; var_7++ )
|
|
self.linked_light_ents[var_7] setlightintensity( var_0 );
|
|
}
|
|
|
|
if ( self.linked_models )
|
|
{
|
|
if ( isdefined( self.lit_models ) )
|
|
{
|
|
foreach ( var_2 in self.lit_models )
|
|
{
|
|
var_2 show();
|
|
|
|
if ( isdefined( var_2.effect ) )
|
|
var_2.effect maps\_utility::restarteffect();
|
|
}
|
|
}
|
|
|
|
if ( isdefined( self.unlit_models ) )
|
|
{
|
|
foreach ( var_5 in self.unlit_models )
|
|
var_5 hide();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
generic_flicker()
|
|
{
|
|
self endon( "stop_dynamic_light_behavior" );
|
|
self endon( "death" );
|
|
var_0 = 0.2;
|
|
var_1 = 1.5;
|
|
var_2 = self getlightintensity();
|
|
var_3 = 0;
|
|
var_4 = var_2;
|
|
var_5 = 0;
|
|
|
|
while ( isdefined( self ) )
|
|
{
|
|
generic_flicker_pause();
|
|
|
|
for ( var_5 = randomintrange( 1, 10 ); var_5; var_5-- )
|
|
{
|
|
generic_flicker_pause();
|
|
wait( randomfloatrange( 0.05, 0.1 ) );
|
|
|
|
if ( var_4 > 0.2 )
|
|
{
|
|
var_4 = randomfloatrange( 0, 0.3 );
|
|
|
|
if ( self.linked_models )
|
|
{
|
|
foreach ( var_7 in self.lit_models )
|
|
{
|
|
var_7 hide();
|
|
|
|
if ( isdefined( var_7.effect ) )
|
|
var_7.effect common_scripts\utility::pauseeffect();
|
|
}
|
|
}
|
|
|
|
if ( isdefined( self.unlit_models ) )
|
|
{
|
|
foreach ( var_10 in self.unlit_models )
|
|
var_10 show();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var_4 = var_2;
|
|
|
|
if ( self.linked_models )
|
|
{
|
|
if ( isdefined( self.lit_models ) )
|
|
{
|
|
foreach ( var_7 in self.lit_models )
|
|
{
|
|
var_7 show();
|
|
|
|
if ( isdefined( var_7.effect ) )
|
|
var_7.effect maps\_utility::restarteffect();
|
|
}
|
|
}
|
|
|
|
if ( isdefined( self.unlit_models ) )
|
|
{
|
|
foreach ( var_10 in self.unlit_models )
|
|
var_10 hide();
|
|
}
|
|
}
|
|
}
|
|
|
|
self setlightintensity( var_4 );
|
|
|
|
if ( self.linked_lights )
|
|
{
|
|
for ( var_16 = 0; var_16 < self.linked_light_ents.size; var_16++ )
|
|
self.linked_light_ents[var_16] setlightintensity( var_4 );
|
|
}
|
|
}
|
|
|
|
generic_flicker_pause();
|
|
self setlightintensity( var_2 );
|
|
|
|
if ( self.linked_lights )
|
|
{
|
|
for ( var_16 = 0; var_16 < self.linked_light_ents.size; var_16++ )
|
|
self.linked_light_ents[var_16] setlightintensity( var_2 );
|
|
}
|
|
|
|
if ( self.linked_models )
|
|
{
|
|
if ( isdefined( self.lit_models ) )
|
|
{
|
|
foreach ( var_7 in self.lit_models )
|
|
{
|
|
var_7 show();
|
|
|
|
if ( isdefined( var_7.effect ) )
|
|
var_7.effect maps\_utility::restarteffect();
|
|
}
|
|
}
|
|
|
|
if ( isdefined( self.unlit_models ) )
|
|
{
|
|
foreach ( var_10 in self.unlit_models )
|
|
var_10 hide();
|
|
}
|
|
}
|
|
|
|
wait( randomfloatrange( var_0, var_1 ) );
|
|
}
|
|
}
|
|
|
|
generic_spot()
|
|
{
|
|
for (;;)
|
|
level common_scripts\utility::waitframe();
|
|
}
|
|
|
|
flickerlightintensity( var_0, var_1 )
|
|
{
|
|
var_2 = self getlightintensity();
|
|
var_3 = 0;
|
|
var_4 = var_2;
|
|
var_5 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
for ( var_5 = randomintrange( 1, 10 ); var_5; var_5-- )
|
|
{
|
|
wait( randomfloatrange( 0.05, 0.1 ) );
|
|
|
|
if ( var_4 > 0.2 )
|
|
var_4 = randomfloatrange( 0, 0.3 );
|
|
else
|
|
var_4 = var_2;
|
|
|
|
self setlightintensity( var_4 );
|
|
}
|
|
|
|
self setlightintensity( var_2 );
|
|
wait( randomfloatrange( var_0, var_1 ) );
|
|
}
|
|
}
|
|
|
|
burning_trash_fire()
|
|
{
|
|
if ( getdvar( "r_reflectionProbeGenerate" ) == "1" )
|
|
{
|
|
self setlightintensity( 0 );
|
|
return;
|
|
}
|
|
|
|
var_0 = self getlightintensity();
|
|
var_1 = var_0;
|
|
|
|
for (;;)
|
|
{
|
|
var_2 = randomfloatrange( var_0 * 0.7, var_0 * 1.2 );
|
|
var_3 = randomfloatrange( 0.3, 0.6 );
|
|
var_3 = var_3 * 20;
|
|
|
|
for ( var_4 = 0; var_4 < var_3; var_4++ )
|
|
{
|
|
var_5 = var_2 * ( var_4 / var_3 ) + var_1 * ( ( var_3 - var_4 ) / var_3 );
|
|
self setlightintensity( var_5 );
|
|
wait 0.05;
|
|
}
|
|
|
|
var_1 = var_2;
|
|
}
|
|
}
|
|
|
|
strobelight( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = 360 / var_2;
|
|
var_5 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
var_6 = sin( var_5 * var_4 ) * 0.5 + 0.5;
|
|
self setlightintensity( var_0 + ( var_1 - var_0 ) * var_6 );
|
|
wait 0.05;
|
|
var_5 = var_5 + 0.05;
|
|
|
|
if ( var_5 > var_2 )
|
|
var_5 = var_5 - var_2;
|
|
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
if ( common_scripts\utility::flag( var_3 ) )
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
changelightcolorto( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 0;
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = 0;
|
|
|
|
thread changelightcolortoworkerthread( var_0, var_1, var_2, var_3 );
|
|
}
|
|
|
|
changelightcolortoworkerthread( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = self getlightcolor();
|
|
var_5 = 1 / ( var_1 * 2 - ( var_2 + var_3 ) );
|
|
var_6 = 0;
|
|
|
|
if ( var_6 < var_2 )
|
|
{
|
|
for ( var_7 = var_5 / var_2; var_6 < var_2; var_6 = var_6 + 0.05 )
|
|
{
|
|
var_8 = var_7 * var_6 * var_6;
|
|
self setlightcolor( vectorlerp( var_4, var_0, var_8 ) );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
while ( var_6 < var_1 - var_3 )
|
|
{
|
|
var_8 = var_5 * ( 2 * var_6 - var_2 );
|
|
self setlightcolor( vectorlerp( var_4, var_0, var_8 ) );
|
|
wait 0.05;
|
|
var_6 = var_6 + 0.05;
|
|
}
|
|
|
|
var_6 = var_1 - var_6;
|
|
|
|
if ( var_6 > 0 )
|
|
{
|
|
for ( var_7 = var_5 / var_3; var_6 > 0; var_6 = var_6 - 0.05 )
|
|
{
|
|
var_8 = 1 - var_7 * var_6 * var_6;
|
|
self setlightcolor( vectorlerp( var_4, var_0, var_8 ) );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
self setlightcolor( var_0 );
|
|
}
|
|
|
|
television()
|
|
{
|
|
thread tv_changes_intensity();
|
|
thread tv_changes_color();
|
|
}
|
|
|
|
tv_changes_intensity()
|
|
{
|
|
self endon( "light_off" );
|
|
var_0 = self getlightintensity();
|
|
var_1 = var_0;
|
|
|
|
for (;;)
|
|
{
|
|
var_2 = randomfloatrange( var_0 * 0.7, var_0 * 1.2 );
|
|
var_3 = randomfloatrange( 0.3, 1.2 );
|
|
var_3 = var_3 * 20;
|
|
|
|
for ( var_4 = 0; var_4 < var_3; var_4++ )
|
|
{
|
|
var_5 = var_2 * ( var_4 / var_3 ) + var_1 * ( ( var_3 - var_4 ) / var_3 );
|
|
self setlightintensity( var_5 );
|
|
wait 0.05;
|
|
}
|
|
|
|
var_1 = var_2;
|
|
}
|
|
}
|
|
|
|
tv_changes_color()
|
|
{
|
|
self endon( "light_off" );
|
|
var_0 = 0.5;
|
|
var_1 = 0.5;
|
|
var_2 = [];
|
|
var_3 = [];
|
|
|
|
for ( var_4 = 0; var_4 < 3; var_4++ )
|
|
{
|
|
var_2[var_4] = 0;
|
|
var_3[var_4] = 0;
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
for ( var_4 = 0; var_4 < var_2.size; var_4++ )
|
|
{
|
|
var_3[var_4] = var_2[var_4];
|
|
var_2[var_4] = randomfloat( var_0 ) + var_1;
|
|
}
|
|
|
|
var_5 = randomfloatrange( 0.3, 1.2 );
|
|
var_5 = var_5 * 20;
|
|
|
|
for ( var_4 = 0; var_4 < var_5; var_4++ )
|
|
{
|
|
var_6 = [];
|
|
|
|
for ( var_7 = 0; var_7 < var_2.size; var_7++ )
|
|
var_6[var_7] = var_2[var_7] * ( var_4 / var_5 ) + var_3[var_7] * ( ( var_5 - var_4 ) / var_5 );
|
|
|
|
self setlightcolor( ( var_6[0], var_6[1], var_6[2] ) );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
}
|
|
|
|
sun_shadow_trigger( var_0 )
|
|
{
|
|
var_1 = 1;
|
|
|
|
if ( isdefined( var_0.script_duration ) )
|
|
var_1 = var_0.script_duration;
|
|
|
|
for (;;)
|
|
{
|
|
var_0 waittill( "trigger", var_2 );
|
|
var_0 set_sun_shadow_params( var_1 );
|
|
}
|
|
}
|
|
|
|
set_sun_shadow_params( var_0 )
|
|
{
|
|
var_1 = getdvarint( "sm_sunenable", 1 );
|
|
var_2 = getdvarfloat( "sm_sunshadowscale", 1.0 );
|
|
var_3 = getdvarint( "sm_spotlimit", 4 );
|
|
var_4 = getdvarfloat( "sm_sunsamplesizenear", 0.25 );
|
|
var_5 = getdvarfloat( "sm_qualityspotshadow", 1.0 );
|
|
|
|
if ( isdefined( self.script_sunenable ) )
|
|
var_1 = self.script_sunenable;
|
|
|
|
if ( isdefined( self.script_sunshadowscale ) )
|
|
var_2 = self.script_sunshadowscale;
|
|
|
|
if ( isdefined( self.script_spotlimit ) )
|
|
var_3 = self.script_spotlimit;
|
|
|
|
if ( isdefined( self.script_sunsamplesizenear ) )
|
|
var_4 = self.script_sunsamplesizenear;
|
|
|
|
var_4 = min( max( 0.016, var_4 ), 32 );
|
|
|
|
if ( isdefined( self.script_qualityspotshadow ) )
|
|
var_5 = self.script_qualityspotshadow;
|
|
|
|
var_6 = getdvarint( "sm_sunenable", 1 );
|
|
var_7 = getdvarfloat( "sm_sunshadowscale", 1.0 );
|
|
var_8 = getdvarint( "sm_spotlimit", 4 );
|
|
var_9 = getdvarint( "sm_qualityspotshadow", 1.0 );
|
|
setsaveddvar( "sm_sunenable", var_1 );
|
|
setsaveddvar( "sm_sunshadowscale", var_2 );
|
|
setsaveddvar( "sm_spotlimit", var_3 );
|
|
setsaveddvar( "sm_qualityspotshadow", var_5 );
|
|
lerp_sunsamplesizenear_overtime( var_4, var_0 );
|
|
}
|
|
|
|
lerp_sunsamplesizenear_overtime( var_0, var_1 )
|
|
{
|
|
level notify( "changing_sunsamplesizenear" );
|
|
level endon( "changing_sunsamplesizenear" );
|
|
var_2 = getdvarfloat( "sm_sunSampleSizeNear", 0.25 );
|
|
|
|
if ( var_0 == var_2 )
|
|
return;
|
|
|
|
var_3 = var_0 - var_2;
|
|
var_4 = var_1 / 0.05;
|
|
|
|
if ( var_4 > 0 )
|
|
{
|
|
var_5 = var_3 / var_4;
|
|
var_6 = var_2;
|
|
|
|
for ( var_7 = 0; var_7 < var_4; var_7++ )
|
|
{
|
|
var_6 = var_6 + var_5;
|
|
setsaveddvar( "sm_sunSampleSizeNear", var_6 );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
setsaveddvar( "sm_sunSampleSizeNear", var_0 );
|
|
}
|
|
|
|
init_scripted_light()
|
|
{
|
|
init_linked_ents();
|
|
init_light_def();
|
|
}
|
|
|
|
init_linked_ents()
|
|
{
|
|
self.lit_models = [];
|
|
self.unlit_models = [];
|
|
self.linked_lights = [];
|
|
|
|
if ( isdefined( self.target ) )
|
|
{
|
|
var_0 = getentarray( self.target, "targetname" );
|
|
|
|
if ( var_0.size == 0 )
|
|
return;
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( is_light_entity( var_2 ) )
|
|
{
|
|
self.linked_lights[self.linked_lights.size] = var_2;
|
|
var_2 init_linked_ents();
|
|
continue;
|
|
}
|
|
|
|
var_3 = 1;
|
|
|
|
if ( isdefined( var_2.script_noteworthy ) )
|
|
{
|
|
if ( var_2.script_noteworthy == "on" )
|
|
{
|
|
var_3 = 0;
|
|
init_lit_model( var_2 );
|
|
}
|
|
else if ( var_2.script_noteworthy == "off" )
|
|
{
|
|
var_3 = 0;
|
|
self.unlit_models[self.unlit_models.size] = var_2;
|
|
}
|
|
}
|
|
|
|
if ( var_3 )
|
|
{
|
|
init_lit_model( var_2 );
|
|
var_4 = getentarray( var_2.target, "targetname" );
|
|
|
|
foreach ( var_6 in var_4 )
|
|
self.unlit_models[self.unlit_models.size] = var_6;
|
|
}
|
|
}
|
|
|
|
foreach ( var_2 in self.lit_models )
|
|
var_2.visible = 1;
|
|
|
|
foreach ( var_2 in self.unlit_models )
|
|
{
|
|
var_2.visible = 0;
|
|
var_2 hide();
|
|
}
|
|
}
|
|
}
|
|
|
|
init_lit_model( var_0 )
|
|
{
|
|
self.lit_models[self.lit_models.size] = var_0;
|
|
var_1 = undefined;
|
|
var_2 = undefined;
|
|
var_3 = undefined;
|
|
|
|
if ( isdefined( var_0.script_fxid ) )
|
|
{
|
|
var_1 = self.script_fxid;
|
|
var_2 = var_0.origin;
|
|
var_3 = var_0.angles;
|
|
}
|
|
else if ( isdefined( var_0.target ) )
|
|
{
|
|
var_4 = common_scripts\utility::getstruct( var_0.target, "targetname" );
|
|
|
|
if ( isdefined( var_4 ) && isdefined( var_4.script_fxid ) )
|
|
{
|
|
var_1 = var_4.script_fxid;
|
|
var_2 = var_4.origin;
|
|
var_3 = ( 0, 0, 0 );
|
|
|
|
if ( isdefined( var_4.angles ) )
|
|
var_3 = var_4.angles;
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
var_0.effect = common_scripts\utility::createoneshoteffect( var_1 );
|
|
var_0.effect.v["origin"] = var_2;
|
|
var_0.effect.v["angles"] = var_3;
|
|
}
|
|
}
|
|
|
|
pulse_think()
|
|
{
|
|
self endon( "stop_scripted_light" );
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
maps\_utility::script_wait();
|
|
var_0 = self.script_intensity_min;
|
|
var_1 = self.script_intensity_min + ( self.script_intensity_max - self.script_intensity_min ) * 0.4;
|
|
var_2 = self.script_intensity_max - ( self.script_intensity_max - self.script_intensity_min ) * 0.4;
|
|
var_3 = self.script_intensity_max;
|
|
var_4 = randomintrange( self.script_count_min, self.script_count_max );
|
|
|
|
for ( var_5 = 0; var_5 < var_4; var_5++ )
|
|
{
|
|
var_6 = randomfloatrange( var_0, var_1 );
|
|
lerp_intensity( var_6, get_delay() );
|
|
maps\_utility::script_delay();
|
|
var_6 = randomfloatrange( var_2, var_3 );
|
|
lerp_intensity( var_6, get_delay() );
|
|
}
|
|
|
|
lerp_intensity( self.script_intensity_max, get_delay() );
|
|
}
|
|
}
|
|
|
|
lerp_intensity( var_0, var_1 )
|
|
{
|
|
var_2 = int( var_1 * 20 );
|
|
var_3 = self getlightintensity();
|
|
var_4 = ( var_0 - var_3 ) / var_2;
|
|
|
|
for ( var_5 = 0; var_5 < var_2; var_5++ )
|
|
{
|
|
thread handle_linked_ents( var_0 );
|
|
self setlightintensity( var_3 + var_5 * var_4 );
|
|
wait 0.05;
|
|
}
|
|
|
|
var_6[0] = self;
|
|
|
|
if ( isdefined( self.linked_lights ) )
|
|
var_6 = common_scripts\utility::array_combine( var_6, self.linked_lights );
|
|
|
|
foreach ( var_8 in var_6 )
|
|
{
|
|
var_8 thread handle_linked_ents( var_0 );
|
|
var_8 setlightintensity( var_0 );
|
|
}
|
|
}
|
|
|
|
handle_linked_ents( var_0 )
|
|
{
|
|
var_1 = var_0 > self.script_threshold;
|
|
|
|
foreach ( var_3 in self.lit_models )
|
|
{
|
|
if ( var_1 && !var_3.visible )
|
|
{
|
|
var_3.visible = var_1;
|
|
var_3 show();
|
|
|
|
if ( isdefined( var_3.effect ) )
|
|
var_3.effect thread maps\_utility::restarteffect();
|
|
|
|
continue;
|
|
}
|
|
|
|
if ( !var_1 && var_3.visible )
|
|
{
|
|
var_3.visible = var_1;
|
|
var_3 hide();
|
|
|
|
if ( isdefined( var_3.effect ) )
|
|
var_3.effect thread common_scripts\utility::pauseeffect();
|
|
}
|
|
}
|
|
|
|
foreach ( var_3 in self.unlit_models )
|
|
{
|
|
if ( !var_1 && !var_3.visible )
|
|
{
|
|
var_3.visible = 1;
|
|
var_3 show();
|
|
continue;
|
|
}
|
|
|
|
if ( var_1 && var_3.visible )
|
|
{
|
|
var_3.visible = 0;
|
|
var_3 hide();
|
|
}
|
|
}
|
|
}
|
|
|
|
get_delay()
|
|
{
|
|
return randomfloatrange( self.script_delay_min, self.script_delay_max );
|
|
}
|
|
|
|
init_light_def()
|
|
{
|
|
var_0["pulse"] = ::def_pulse;
|
|
var_0["neon"] = ::def_neon;
|
|
var_0["fire"] = ::def_fire;
|
|
[[ var_0[self.script_light] ]]();
|
|
}
|
|
|
|
def_pulse()
|
|
{
|
|
set_delays( 0.1, 0.2 );
|
|
set_waits( 1, 4 );
|
|
set_counts( 3, 6 );
|
|
set_threshold( 0.5 );
|
|
var_0 = self getlightintensity();
|
|
set_intensities( var_0 * 0.25, var_0 );
|
|
thread pulse_think();
|
|
}
|
|
|
|
def_neon()
|
|
{
|
|
set_delays( 0.05, 0.1 );
|
|
set_waits( 2, 5 );
|
|
set_counts( 1, 3 );
|
|
set_threshold( 0.5 );
|
|
var_0 = self getlightintensity();
|
|
set_intensities( var_0 * 0.1, var_0 );
|
|
thread pulse_think();
|
|
}
|
|
|
|
def_fire()
|
|
{
|
|
set_delays( 0.05, 0.1 );
|
|
set_waits( 0.05, 0.1 );
|
|
set_counts( 1, 2 );
|
|
set_threshold( 0.5 );
|
|
var_0 = self getlightintensity();
|
|
set_intensities( var_0 * 0.75, var_0 );
|
|
thread pulse_think();
|
|
}
|
|
|
|
set_threshold( var_0 )
|
|
{
|
|
if ( !isdefined( self.script_threshold ) )
|
|
self.script_threshold = var_0;
|
|
|
|
foreach ( var_2 in self.linked_lights )
|
|
{
|
|
if ( !isdefined( var_2.script_threshold ) )
|
|
var_2.script_threshold = self.script_threshold;
|
|
}
|
|
}
|
|
|
|
set_delays( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( self.script_delay_min ) )
|
|
self.script_delay_min = var_0;
|
|
|
|
if ( !isdefined( self.script_delay_max ) )
|
|
self.script_delay_max = var_1;
|
|
}
|
|
|
|
set_waits( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( self.script_wait_min ) )
|
|
self.script_wait_min = var_0;
|
|
|
|
if ( !isdefined( self.script_wait_max ) )
|
|
self.script_wait_max = var_1;
|
|
}
|
|
|
|
set_counts( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( self.script_count_min ) )
|
|
self.script_count_min = var_0;
|
|
|
|
if ( !isdefined( self.script_count_max ) )
|
|
self.script_count_max = var_1;
|
|
}
|
|
|
|
set_intensities( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( self.script_intensity_min ) )
|
|
self.script_intensity_min = var_0;
|
|
|
|
if ( !isdefined( self.script_intensity_max ) )
|
|
self.script_intensity_max = var_1;
|
|
}
|