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

1430 lines
41 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
init_lights();
level.spec_cg = 3.3;
level.spec_ng = 15.0;
maps\_utility::setsaveddvar_cg_ng( "r_specularcolorscale", level.spec_cg, level.spec_ng );
maps\_utility::setsaveddvar_cg_ng( "r_diffusecolorscale", 1.5, 1.5 );
level.spec_cg_fireworks_low = 2;
level.spec_cg_fireworks_high = 2.6;
level.spec_ng_fireworks_low = 1.5;
level.spec_ng_fireworks_high = 1.8;
}
init_post_main()
{
thread horizontal_sunlight();
thread setup_fixtures();
}
init_lights()
{
var_0 = getentarray( "cnd_fire_rappel_light", "targetname" );
common_scripts\utility::array_thread( var_0, ::cnd_fire_rappel_light );
var_1 = getentarray( "cnd_fire_horizontal_light", "targetname" );
common_scripts\utility::array_thread( var_1, ::cnd_fire_horizontal_light );
var_2 = getentarray( "cnd_shaft_flickering", "targetname" );
common_scripts\utility::array_thread( var_2, ::cnd_shaft_flickering );
}
lerp_dof()
{
}
virus_dynamic_dof( var_0 )
{
}
horizontal_sunlight()
{
common_scripts\utility::flag_wait( "teleport" );
thread horizontal_sunlight_flicker();
}
horizontal_sunlight_flicker()
{
var_0 = ( 1, 0.58, 0.3 );
var_1 = 0.65;
var_2 = 1.5;
var_3 = 0.1;
var_4 = 0.37;
for (;;)
{
var_5 = randomfloatrange( var_1, var_2 );
var_6 = randomfloatrange( var_3, var_4 );
var_7 = var_0 * var_5;
var_8 = var_0;
sun_lerp_value( var_8, var_7, var_6 );
var_6 = randomfloatrange( var_3, var_4 );
sun_lerp_value( var_7, var_8, var_6 );
}
}
sun_lerp_value( var_0, var_1, var_2 )
{
var_3 = var_2;
var_4 = 0;
while ( var_3 > 0 )
{
var_3 = var_3 - 0.05;
var_4 = ( var_2 - var_3 ) / var_2;
var_5 = var_0 + ( var_1 - var_0 ) * var_4;
setsunlight( var_5[0], var_5[1], var_5[2] );
level.currentsunlightcolor = ( var_5[0], var_5[1], var_5[2] );
common_scripts\utility::waitframe();
}
}
cnd_reception_elevator()
{
var_0 = getent( "rec_elevator_light", "targetname" );
var_1 = var_0 getlightintensity();
var_0 setlightintensity( 0.01 );
var_2 = var_0 getlightintensity();
var_3 = var_1 / 20;
common_scripts\utility::flag_wait( "courtyard_intro_elevator_opening" );
wait 0.4;
for ( var_4 = 0; var_4 < 19; var_4++ )
{
var_0 setlightintensity( var_2 + var_3 );
var_2 = var_0 getlightintensity();
common_scripts\utility::waitframe();
}
}
cnd_fire_rappel_light()
{
var_0 = self getlightintensity();
var_1 = var_0;
for (;;)
{
var_2 = randomfloatrange( var_0 * 0.3, var_0 * 1.5 );
var_3 = randomfloatrange( 0.05, 0.1 );
var_3 = var_3 * 15;
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.02;
}
var_1 = var_2;
}
}
cnd_fire_horizontal_light()
{
var_0 = self getlightintensity();
var_1 = var_0;
for (;;)
{
var_2 = randomfloatrange( var_0 * 1.1, var_0 * 1.8 );
var_3 = randomfloatrange( 0.05, 0.2 );
var_3 = var_3 * 15;
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.02;
}
var_1 = var_2;
}
}
cnd_restarteffect()
{
common_scripts\_createfx::restart_fx_looper();
}
cnd_ent_flag_clear( var_0 )
{
if ( self.ent_flag[var_0] )
{
self.ent_flag[var_0] = 0;
self notify( var_0 );
}
}
cnd_ent_flag_set( var_0 )
{
self.ent_flag[var_0] = 1;
self notify( var_0 );
}
cnd_ent_flag_init( var_0 )
{
if ( !isdefined( self.ent_flag ) )
{
self.ent_flag = [];
self.ent_flags_lock = [];
}
self.ent_flag[var_0] = 0;
}
cnd_is_light_entity( var_0 )
{
return var_0.classname == "light_spot" || var_0.classname == "light_omni" || var_0.classname == "light";
}
cnd_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;
}
cnd_shaft_flickering()
{
self endon( "stop_dynamic_light_behavior" );
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_noteworthy ) )
self.linked_things = getentarray( self.script_noteworthy, "targetname" );
if ( !self.linked_things.size && !isdefined( self.linked_prefab_ents ) )
self.linked_things = cnd_getclosests_flickering_model( self.origin );
for ( var_0 = 0; var_0 < self.linked_things.size; var_0++ )
{
if ( cnd_is_light_entity( self.linked_things[var_0] ) )
{
self.linked_lights = 1;
self.linked_light_ents[self.linked_light_ents.size] = self.linked_things[var_0];
}
if ( self.linked_things[var_0].classname == "script_model" )
{
var_1 = self.linked_things[var_0];
if ( !isdefined( self.lit_models ) )
self.lit_models[0] = var_1;
else
self.lit_models[self.lit_models.size] = var_1;
if ( !isdefined( self.unlit_models ) )
self.unlit_models[0] = getent( var_1.target, "targetname" );
else
self.unlit_models[self.unlit_models.size] = getent( var_1.target, "targetname" );
self.linked_models = 1;
}
}
if ( isdefined( self.lit_models ) )
{
foreach ( var_1 in self.lit_models )
{
if ( isdefined( var_1 ) && isdefined( var_1.script_fxid ) )
{
var_1.effect = common_scripts\utility::createoneshoteffect( var_1.script_fxid );
var_3 = ( 0, 0, 0 );
var_4 = ( 0, 0, 0 );
if ( isdefined( var_1.script_parameters ) )
{
var_5 = strtok( var_1.script_parameters, ", " );
if ( var_5.size < 3 )
{
}
else if ( var_5.size == 6 )
{
var_6 = float( var_5[0] );
var_7 = float( var_5[1] );
var_8 = float( var_5[2] );
var_3 = ( var_6, var_7, var_8 );
var_6 = float( var_5[3] );
var_7 = float( var_5[4] );
var_8 = float( var_5[5] );
var_4 = ( var_6, var_7, var_8 );
}
else
{
var_6 = float( var_5[0] );
var_7 = float( var_5[1] );
var_8 = float( var_5[2] );
var_3 = ( var_6, var_7, var_8 );
}
}
var_1.effect.v["origin"] = var_1.origin + var_3;
var_1.effect.v["angles"] = var_1.angles + var_4;
}
}
}
thread cnd_generic_flicker_msg_watcher();
thread cnd_generic_flicker();
}
cnd_generic_flicker_msg_watcher()
{
cnd_ent_flag_init( "flicker_on" );
if ( isdefined( self.script_light_startnotify ) && self.script_light_startnotify != "nil" )
{
for (;;)
{
level waittill( self.script_light_startnotify );
cnd_ent_flag_set( "flicker_on" );
if ( isdefined( self.script_light_stopnotify ) && self.script_light_stopnotify != "nil" )
{
level waittill( self.script_light_stopnotify );
cnd_ent_flag_clear( "flicker_on" );
}
}
}
else
cnd_ent_flag_set( "flicker_on" );
}
cnd_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 );
}
self waittill( "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 cnd_restarteffect();
}
}
if ( isdefined( self.unlit_models ) )
{
foreach ( var_5 in self.unlit_models )
var_5 hide();
}
}
}
}
cnd_generic_flicker()
{
self endon( "stop_dynamic_light_behavior" );
self endon( "death" );
var_0 = 0.2;
var_1 = 1.0;
var_2 = self getlightintensity();
var_3 = 0;
var_4 = var_2;
var_5 = 0;
while ( isdefined( self ) )
{
cnd_generic_flicker_pause();
for ( var_5 = randomintrange( 1, 10 ); var_5; var_5-- )
{
cnd_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 cnd_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 );
}
}
cnd_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 cnd_restarteffect();
}
}
if ( isdefined( self.unlit_models ) )
{
foreach ( var_10 in self.unlit_models )
var_10 hide();
}
}
wait( randomfloatrange( var_0, var_1 ) );
}
}
setup_fixtures()
{
var_0 = getentarray( "hvt_office_light_fixture_off", "targetname" );
foreach ( var_2 in var_0 )
var_2 hide();
var_0 = getentarray( "stairwell_light_fixture_off", "targetname" );
foreach ( var_2 in var_0 )
var_2 hide();
}
hvt_office_light()
{
var_0 = getentarray( "hvt_office_light", "targetname" );
var_1 = getentarray( "hvt_office_light_fixture_on", "targetname" );
var_2 = getentarray( "hvt_office_light_fixture_off", "targetname" );
var_3 = 0.5;
var_4 = 1.65;
var_5 = 18;
var_6 = 0.03;
var_7 = 0.12;
var_8 = 0.05;
var_9 = 0.15;
thread fixture_blink_lights( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
}
stairwell_light( var_0 )
{
var_1 = getentarray( "stairwell_light_blink", "targetname" );
var_2 = getentarray( "stairwell_light_fixture_on", "targetname" );
var_3 = getentarray( "stairwell_light_fixture_off", "targetname" );
var_4 = 0.5;
var_5 = 1.45;
var_6 = var_0;
var_7 = 0.06;
var_8 = 0.12;
var_9 = 0.05;
var_10 = 0.1;
thread fixture_blink_lights( var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10 );
}
fixture_blink_lights( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
level notify( "stop_blinking_fixtures" );
level endon( "stop_blinking_fixtures" );
thread cleanup_fixtures( var_0, var_1, var_2, var_4, "stop_blinking_fixtures" );
for ( var_10 = 0; var_10 < var_5; var_10++ )
{
foreach ( var_12 in var_0 )
var_12 setlightintensity( 0 );
foreach ( var_15 in var_1 )
var_15 hide();
foreach ( var_15 in var_2 )
var_15 show();
wait( randomfloatrange( var_6, var_7 ) );
var_19 = randomfloatrange( var_3, var_4 );
foreach ( var_12 in var_0 )
var_12 setlightintensity( var_19 );
foreach ( var_15 in var_1 )
var_15 show();
foreach ( var_15 in var_2 )
var_15 hide();
wait( randomfloatrange( var_8, var_9 ) );
}
level notify( "stop_blinking_fixtures" );
}
cleanup_fixtures( var_0, var_1, var_2, var_3, var_4 )
{
level waittill( var_4 );
foreach ( var_6 in var_0 )
var_6 setlightintensity( var_3 );
foreach ( var_9 in var_1 )
var_9 show();
foreach ( var_9 in var_2 )
var_9 hide();
}
fireworks_intro()
{
var_0 = "intro";
common_scripts\utility::waitframe();
fireworks_init( var_0 );
fireworks_finale( 66 );
var_1 = 0;
thread _fireworks_internal( var_0, var_1 );
thread _fireworks_meteor_internal( var_0, var_1 );
}
fireworks_intro_post()
{
common_scripts\utility::waitframe();
thread fireworks_start( "intro" );
}
fireworks_stealth_rappel()
{
common_scripts\utility::waitframe();
thread fireworks_start( "stealth" );
}
fireworks_courtyard()
{
var_0 = "courtyard";
fireworks_init( var_0 );
common_scripts\utility::waitframe();
thread fireworks_courtyard_stairs();
var_1 = 0;
thread _fireworks_internal( var_0, var_1 );
thread _fireworks_meteor_internal( var_0, var_1 );
}
fireworks_courtyard_post()
{
common_scripts\utility::waitframe();
thread fireworks_start( "courtyard_stairs" );
}
fireworks_courtyard_stairs()
{
common_scripts\utility::flag_wait( "move_to_courtyard_entrance" );
thread fireworks_start( "courtyard_stairs" );
}
fireworks_junction()
{
var_0 = "junction";
fireworks_init( var_0 );
common_scripts\utility::waitframe();
var_1 = 0;
thread _fireworks_internal( var_0, var_1 );
thread _fireworks_meteor_internal( var_0, var_1 );
}
fireworks_junction_post()
{
common_scripts\utility::waitframe();
thread fireworks_start( "junction" );
}
firework_light( var_0, var_1, var_2, var_3, var_4 )
{
if ( !isdefined( var_2 ) )
var_2 = ( 0, 0, 0 );
if ( !isdefined( var_3 ) )
var_3 = 0.8;
if ( !isdefined( var_4 ) )
var_4 = 2.8;
var_5 = 20 * var_3;
if ( !isdefined( self.script_parameters ) )
var_6 = 10.0;
else
var_6 = int( self.script_parameters );
var_7 = self getlightintensity();
self setlightcolor( var_2 );
var_8 = ( var_6 - var_7 ) / var_5;
var_9 = 20 * var_4;
var_10 = var_6 / var_9;
var_11 = level.fireworklightindextracker[var_0];
for ( var_12 = 0; var_12 < var_5; var_12++ )
{
if ( !( level.fireworklightindextracker[var_0] == var_11 ) )
break;
var_7 = var_7 + var_8;
self setlightintensity( min( var_7, var_6 ) );
wait 0.05;
}
if ( level.fireworklightindextracker[var_0] == var_11 )
{
for ( var_12 = 0; var_12 < var_9; var_12++ )
{
if ( !( level.fireworklightindextracker[var_0] == var_11 ) )
break;
var_7 = var_7 - var_10;
self setlightintensity( max( 0.01, var_7 ) );
wait 0.05;
}
}
}
startfireworklightsonsection( var_0, var_1 )
{
if ( var_0 >= 0 && var_0 <= 3 )
{
var_2 = level.fireworklights[var_0];
level.fireworklightindextracker[var_0] = level.fireworklightindextracker[var_0] + 1;
if ( level.fireworklightindextracker[var_0] > 48 )
level.fireworklightindextracker[var_0] = 0;
for ( var_3 = 0; var_3 < level.fireworklights[var_0].size; var_3++ )
level.fireworklights[var_0][var_3] thread firework_light( var_0, var_3, var_1 );
}
}
fireworks_start( var_0 )
{
var_1 = isdefined( level.fireworks ) || isdefined( level.meteorfireworks ) || isdefined( level.fireworkstructs ) || isdefined( level.meteorfireworkstructs );
fireworks_init( var_0 );
if ( var_1 )
return;
thread _fireworks_internal( var_0 );
thread _fireworks_meteor_internal( var_0 );
}
fireworks_stop()
{
if ( !isdefined( level.fireworks ) || !isdefined( level.meteorfireworks ) || !isdefined( level.fireworkstructs ) || !isdefined( level.meteorfireworkstructs ) )
return;
level notify( "stop_fireworks" );
thread _fireworks_cleanup();
}
fireworks_init( var_0 )
{
level.fireworks = [];
level.fireworkstructs = [];
level.meteorfireworks = [];
level.meteorfireworkstructs = [];
level.currentfireworkslocation = var_0;
if ( maps\_utility::is_gen4() )
{
var_1 = ( 0.792969, 0.5625, 0.332031 );
var_2 = ( 0.878906, 0.539062, 0.03125 );
var_3 = ( 0.582031, 0.917969, 0.933594 );
var_4 = ( 0.648438, 0.351562, 0.75 );
var_5 = ( 0.503906, 0.945312, 0.375 );
var_6 = ( 0.996094, 0.605469, 0.214844 );
}
else
{
var_1 = ( 0.792969, 0.5625, 0.332031 );
var_2 = ( 0.878906, 0.628906, 0.710938 );
var_3 = ( 0.628906, 0.746094, 0.878906 );
var_4 = ( 0.652344, 0, 0.898438 );
var_5 = ( 0.628906, 0.878906, 0.707031 );
var_6 = ( 0.75, 0.75, 0.75 );
}
var_7 = 0;
var_8 = 1;
var_9 = 2;
var_10 = -1;
if ( var_0 == "intro" )
{
if ( maps\_utility::is_gen4() )
var_11 = ( 0.819608, 0.976471, 1 );
else
var_11 = ( 0.823529, 0.980392, 1 );
var_12 = 0.6;
var_1 = ( var_11 + var_1 * var_12 ) / 2;
var_2 = ( var_11 + var_2 * var_12 ) / 2;
var_3 = ( var_11 + var_3 * var_12 ) / 2;
var_4 = ( var_11 + var_4 * var_12 ) / 2;
var_5 = ( var_11 + var_5 * var_12 ) / 2;
var_6 = ( var_11 + var_6 * var_12 ) / 2;
}
level.fireworklights[var_7] = getentarray( "firework_light_02", "targetname" );
level.fireworklights[var_8] = getentarray( "firework_light_01", "targetname" );
level.fireworklights[var_9] = getentarray( "firework_light_03", "targetname" );
for ( var_13 = 0; var_13 < 3; var_13++ )
{
level.fireworklightindextracker[var_13] = 0;
for ( var_14 = 0; var_14 < level.fireworklights[var_13].size; var_14++ )
{
var_15 = level.fireworklights[var_13][var_14] getlightintensity();
level.fireworklights[var_13][var_14].script_parameters = var_15;
level.fireworklights[var_13][var_14] setlightintensity( 0.01 );
}
}
var_16 = [ var_1, var_2, var_3, var_4, var_5, var_6 ];
if ( var_0 == "intro" )
{
var_17 = [ ( -32596, 53993, 14595 ), ( 2067, 37400.8, 17595.8 ), ( 35664, 7879.75, 16595.8 ) ];
var_18 = [ ( 271, 360, 0 ), ( 271, 360, 0 ), ( 271, 360, 0 ) ];
var_19 = [ 0, 1, 2 ];
setup_current_fireworks( var_17, var_18, var_19, var_16 );
var_17 = [ ( -15299, 46161, 19744 ), ( 5834, 14505.8, 21545.8 ) ];
setup_current_fireworks( var_17, var_18, [ 0.5, 1.5 ], var_16, 1 );
}
else if ( var_0 == "junction" )
{
var_17 = [ ( -67465, 8665, 21595 ), ( -40058, 48365.8, 21595 ) ];
var_18 = [ ( 271, 360, 0 ), ( 271, 360, 0 ) ];
var_19 = [ -1, 2 ];
setup_current_fireworks( var_17, var_18, var_19, var_16 );
}
else if ( var_0 == "garden" )
{
var_17 = [ ( -34561, 42696, 21595 ), ( 9465, 30726, 21595 ), ( 18776, -870, 21595 ) ];
var_18 = [ ( 271, 360, 0 ), ( 271, 360, 0 ), ( 271, 360, 0 ) ];
var_19 = [ 0, 1, 2 ];
setup_current_fireworks( var_17, var_18, var_19, var_16 );
}
else if ( var_0 == "stealth" )
{
var_17 = [ ( 13800, -7987.75, 19595.8 ) ];
var_18 = [ ( 271, 360, 0 ) ];
var_19 = [ 2 ];
setup_current_fireworks( var_17, var_18, var_19, var_16 );
var_17 = [ ( -54000, -20000, 16500 ) ];
var_18 = [ ( 271, 360, 0 ) ];
var_19 = [ -1 ];
setup_current_fireworks( var_17, var_18, var_19, var_16, undefined, 1 );
}
else if ( var_0 == "courtyard" || var_0 == "courtyard_stairs" )
{
var_17 = [ ( -30321, 49026, 21595 ), ( 3630, 32949, 21595 ), ( 30216, 500, 21595 ) ];
var_18 = [ ( 271, 360, 0 ), ( 271, 360, 0 ), ( 271, 360, 0 ) ];
var_19 = [ 0, 1, 2 ];
setup_current_fireworks( var_17, var_18, var_19, var_16 );
}
else
{
}
level.fireworks_sun = _get_location_sunlight( var_0 );
level.fireworks_location = var_0;
}
setup_current_fireworks( var_0, var_1, var_2, var_3, var_4, var_5 )
{
var_6 = var_3[0];
var_7 = var_3[1];
var_8 = var_3[2];
var_9 = var_3[3];
var_10 = var_3[4];
var_11 = var_3[5];
var_12 = 0;
if ( !isdefined( var_5 ) )
{
if ( !isdefined( var_4 ) )
{
foreach ( var_14 in var_2 )
{
var_15 = var_0[var_12];
var_16 = anglestoforward( var_1[var_12] );
var_17 = anglestoup( var_1[var_12] );
var_18 = spawnfx( level._effect["fireworks_blue_lrg"], var_15, var_16, var_17 );
var_19 = spawnfx( level._effect["fireworks_red_lrg"], var_15, var_16, var_17 );
var_20 = spawnfx( level._effect["fireworks_green_lrg"], var_15, var_16, var_17 );
var_21 = spawnfx( level._effect["fireworks_white_lrg"], var_15, var_16, var_17 );
var_22 = spawnfx( level._effect["fireworks_blue"], var_15, var_16, var_17 );
var_23 = spawnfx( level._effect["fireworks_red"], var_15, var_16, var_17 );
var_24 = spawnfx( level._effect["fireworks_green"], var_15, var_16, var_17 );
var_25 = spawnfx( level._effect["fireworks_white"], var_15, var_16, var_17 );
var_26 = spawnfx( level._effect["vfx_fireworks_ground_straight"], var_15, var_16, var_17 );
var_27 = spawnfx( level._effect["fireworks_popping"], var_15, var_16, var_17 );
var_28 = spawnfx( level._effect["vfx_fireworks_groundflare_oneshot3"], var_15, var_16, var_17 );
var_29 = spawnfx( level._effect["vfx_fireworks_groundflare_oneshot2"], var_15, var_16, var_17 );
var_30 = spawnfx( level._effect["vfx_fireworks_groundflare_oneshot"], var_15, var_16, var_17 );
var_31 = spawnfx( level._effect["vfx_fireworks_ground_straight_single"], var_15, var_16, var_17 );
var_32 = spawnfx( level._effect["vfx_fireworks_meteors_trails"], var_15, var_16, var_17 );
add_large_firework( var_18, var_8, var_14, 6 );
add_large_firework( var_19, var_7, var_14, 6 );
add_large_firework( var_20, var_10, var_14, 6 );
add_large_firework( var_21, var_11, var_14, 6 );
add_small_firework( var_22, var_8, var_14, 8 );
add_small_firework( var_23, var_7, var_14, 8 );
add_small_firework( var_24, var_10, var_14, 8 );
add_small_firework( var_25, var_11, var_14, 8 );
add_meteor_firework( var_26, var_6, var_14, 4 );
add_meteor_firework( var_27, var_6, var_14, 4 );
add_meteor_firework( var_28, var_6, var_14, 4 );
add_meteor_firework( var_29, var_6, var_14, 4 );
add_meteor_firework( var_30, var_6, var_14, 4 );
add_meteor_firework( var_31, var_6, var_14, 4 );
add_meteor_firework( var_32, var_6, var_14, 4 );
var_12 = var_12 + 1;
}
return;
}
var_12 = 0;
foreach ( var_14 in var_2 )
{
var_15 = var_0[var_12];
var_16 = anglestoforward( var_1[var_12] );
var_17 = anglestoup( var_1[var_12] );
var_18 = spawnfx( level._effect["fireworks_blue_lrg"], var_15, var_16, var_17 );
var_19 = spawnfx( level._effect["fireworks_red_lrg"], var_15, var_16, var_17 );
var_20 = spawnfx( level._effect["fireworks_green_lrg"], var_15, var_16, var_17 );
var_21 = spawnfx( level._effect["fireworks_white_lrg"], var_15, var_16, var_17 );
var_22 = spawnfx( level._effect["fireworks_blue"], var_15, var_16, var_17 );
var_23 = spawnfx( level._effect["fireworks_red"], var_15, var_16, var_17 );
var_24 = spawnfx( level._effect["fireworks_green"], var_15, var_16, var_17 );
var_25 = spawnfx( level._effect["fireworks_white"], var_15, var_16, var_17 );
add_small_firework( var_18, var_8, var_14, 1 );
add_small_firework( var_19, var_7, var_14, 1 );
add_small_firework( var_20, var_10, var_14, 1 );
add_small_firework( var_21, var_11, var_14, 1 );
add_small_firework( var_22, var_8, var_14, 2 );
add_small_firework( var_23, var_7, var_14, 2 );
add_small_firework( var_24, var_10, var_14, 2 );
add_small_firework( var_25, var_11, var_14, 2 );
var_12 = var_12 + 1;
}
return;
}
else
{
foreach ( var_14 in var_2 )
{
var_15 = var_0[var_12];
var_16 = anglestoforward( var_1[var_12] );
var_17 = anglestoup( var_1[var_12] );
var_22 = spawnfx( level._effect["fireworks_blue_sm"], var_15, var_16, var_17 );
var_23 = spawnfx( level._effect["fireworks_red_sm"], var_15, var_16, var_17 );
var_24 = spawnfx( level._effect["fireworks_green_sm"], var_15, var_16, var_17 );
var_25 = spawnfx( level._effect["fireworks_white_sm"], var_15, var_16, var_17 );
var_37 = spawnfx( level._effect["fireworks_all_sm"], var_15, var_16, var_17 );
add_small_firework( var_22, var_8, var_14, 4 );
add_small_firework( var_23, var_7, var_14, 4 );
add_small_firework( var_24, var_10, var_14, 4 );
add_small_firework( var_25, var_11, var_14, 4 );
add_small_firework( var_37, var_11, var_14, 8 );
var_12 = var_12 + 1;
}
}
}
add_meteor_firework( var_0, var_1, var_2, var_3 )
{
if ( !var_3 )
var_3 = 1;
for ( var_4 = 0; var_4 < var_3; var_4++ )
setup_meteor_firework( var_0, var_1, 2.5, "meteor", 1, var_2 );
}
add_small_firework( var_0, var_1, var_2, var_3 )
{
if ( !var_3 )
var_3 = 1;
for ( var_4 = 0; var_4 < var_3; var_4++ )
setup_firework( var_0, var_1, 3, "small", 2, var_2 );
}
add_large_firework( var_0, var_1, var_2, var_3 )
{
if ( !var_3 )
var_3 = 1;
for ( var_4 = 0; var_4 < var_3; var_4++ )
setup_firework( var_0, var_1, 6, "large", 3, var_2 );
}
setup_firework( var_0, var_1, var_2, var_3, var_4, var_5 )
{
var_6 = level.fireworks.size;
level.fireworkstructs[var_6] = spawnstruct();
level.fireworkstructs[var_6].color = var_1;
level.fireworkstructs[var_6].time = var_2;
level.fireworkstructs[var_6].type = var_3;
level.fireworkstructs[var_6].girth = var_4;
level.fireworkstructs[var_6].loc = var_5;
level.fireworks[var_6] = var_0;
}
setup_meteor_firework( var_0, var_1, var_2, var_3, var_4, var_5 )
{
var_6 = level.meteorfireworks.size;
level.meteorfireworkstructs[var_6] = spawnstruct();
level.meteorfireworkstructs[var_6].color = var_1;
level.meteorfireworkstructs[var_6].time = var_2;
level.meteorfireworkstructs[var_6].type = var_3;
level.meteorfireworkstructs[var_6].girth = var_4;
level.meteorfireworkstructs[var_6].loc = var_5;
level.meteorfireworks[var_6] = var_0;
}
fireworks_finale( var_0 )
{
thread fireworks_finale_streamers( var_0 / 3 );
thread fireworks_finale_explosions( var_0 );
}
fireworks_finale_streamers( var_0 )
{
var_1 = 0;
wait 0.5;
for ( var_2 = 0; var_2 < var_0; var_2++ )
{
var_1 = get_random_streamer_num( var_1 );
activate_firework( var_1, "meteor" );
wait( randomfloatrange( 0.55, 0.71 ) );
}
}
fireworks_finale_explosions( var_0 )
{
var_1 = level.fireworks_sun;
if ( var_1 != level.fireworks_sun )
var_1 = level.fireworks_sun;
var_2 = 0;
wait 0.5;
for ( var_3 = 0; var_3 < var_0; var_3++ )
{
var_2 = get_random_firework_num( var_2 );
if ( level.fireworkstructs[var_2].type == "large" )
{
thread _firework_sunlight( var_2, var_1 );
if ( maps\_utility::is_gen4() )
{
if ( level.fireworkstructs[var_2].loc != -1 )
{
if ( level.fireworkstructs[var_2].loc == 0.5 )
{
level thread startfireworklightsonsection( 0, level.fireworkstructs[var_2].color );
level thread startfireworklightsonsection( 1, level.fireworkstructs[var_2].color );
}
else if ( level.fireworkstructs[var_2].loc == 1.5 )
{
level thread startfireworklightsonsection( 1, level.fireworkstructs[var_2].color );
level thread startfireworklightsonsection( 2, level.fireworkstructs[var_2].color );
}
else
level thread startfireworklightsonsection( level.fireworkstructs[var_2].loc, level.fireworkstructs[var_2].color );
}
}
}
activate_firework( var_2 );
wait( randomfloatrange( 0.4, 0.51 ) );
}
}
_fireworks_internal( var_0, var_1 )
{
level endon( "stop_fireworks" );
var_2 = 0;
for (;;)
{
var_3 = level.fireworks_sun;
if ( var_3 != level.fireworks_sun )
var_3 = level.fireworks_sun;
if ( var_0 != level.fireworks_location )
{
var_0 = level.fireworks_location;
var_2 = get_random_firework_num();
}
if ( level.fireworkstructs[var_2].type == "large" )
{
thread _firework_sunlight( var_2, var_3 );
if ( maps\_utility::is_gen4() )
{
if ( level.fireworkstructs[var_2].loc != -1 )
{
if ( level.fireworkstructs[var_2].loc == 0.5 )
{
level thread startfireworklightsonsection( 0, level.fireworkstructs[var_2].color );
level thread startfireworklightsonsection( 1, level.fireworkstructs[var_2].color );
}
else if ( level.fireworkstructs[var_2].loc == 1.5 )
{
level thread startfireworklightsonsection( 1, level.fireworkstructs[var_2].color );
level thread startfireworklightsonsection( 2, level.fireworkstructs[var_2].color );
}
else
level thread startfireworklightsonsection( level.fireworkstructs[var_2].loc, level.fireworkstructs[var_2].color );
}
}
}
activate_firework( var_2, "explosion" );
var_4 = get_random_firework_num( var_2 );
_firework_wait( var_2, var_4, var_0, "explosion" );
var_2 = var_4;
wait 0.05;
}
}
_fireworks_meteor_internal( var_0, var_1 )
{
level endon( "stop_fireworks" );
var_2 = 0;
for (;;)
{
if ( var_0 != level.fireworks_location )
{
var_0 = level.fireworks_location;
var_2 = get_random_streamer_num();
}
activate_firework( var_2, "meteor" );
var_3 = get_random_streamer_num( var_2 );
_firework_wait( var_2, var_3, var_0, "meteor" );
var_2 = var_3;
wait 0.05;
}
}
activate_firework( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = "explosion";
if ( var_1 == "explosion" )
{
if ( var_0 == -1 )
var_0 = get_random_firework_num();
if ( var_0 >= level.fireworkstructs.size )
var_0 = level.fireworkstructs.size - 1;
var_2 = level.fireworks[var_0];
triggerfx( var_2 );
}
else if ( var_1 == "meteor" )
{
if ( var_0 == -1 )
var_0 = get_random_streamer_num();
if ( var_0 >= level.meteorfireworkstructs.size )
var_0 = level.meteorfireworkstructs.size - 1;
var_2 = level.meteorfireworks[var_0];
triggerfx( var_2 );
}
}
get_random_streamer_num( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = 0;
var_1 = randomintrange( 0, level.meteorfireworkstructs.size - 1 );
if ( var_0 == var_1 )
{
var_1 = var_1 + 1;
if ( var_1 + 1 > level.meteorfireworkstructs.size )
var_1 = 0;
}
if ( isdefined( var_0 ) )
{
var_2 = level.meteorfireworkstructs[var_1];
var_3 = level.meteorfireworkstructs[var_0];
var_4 = var_1 == var_0;
var_5 = var_2.girth == var_3.girth;
if ( var_5 && isdefined( var_2.loc ) && isdefined( var_3.loc ) && var_2.loc != var_3.loc )
var_5 = 0;
if ( var_4 || var_5 )
var_1 = ( var_0 + 2 ) % level.meteorfireworkstructs.size;
}
if ( var_1 == level.meteorfireworkstructs.size )
var_1 = var_1 - 1;
return var_1;
}
get_random_firework_num( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = 0;
var_1 = randomintrange( 0, level.fireworkstructs.size - 1 );
if ( var_0 == var_1 )
{
var_1 = var_1 + 1;
if ( var_1 + 1 > level.fireworkstructs.size )
var_1 = 0;
}
if ( isdefined( var_0 ) )
{
var_2 = level.fireworkstructs[var_1];
var_3 = level.fireworkstructs[var_0];
var_4 = var_1 == var_0;
var_5 = var_2.girth == var_3.girth;
if ( var_5 && isdefined( var_2.loc ) && isdefined( var_3.loc ) && var_2.loc != var_3.loc )
var_5 = 0;
if ( var_4 || var_5 )
var_1 = ( var_0 + 2 ) % level.fireworkstructs.size;
}
if ( var_1 == level.fireworkstructs.size )
var_1 = var_1 - 1;
return var_1;
}
_firework_wait( var_0, var_1, var_2, var_3 )
{
if ( !isdefined( var_3 ) )
var_3 = "meteor";
var_4 = 0.8;
var_5 = 1.0;
if ( var_2 == "junction" || var_2 == "intro" )
{
if ( var_3 == "explosion" )
{
var_4 = 0.53;
var_5 = 0.8;
}
else
{
var_4 = 1.2;
var_5 = 1.7;
}
}
else if ( var_3 == "explosion" )
{
var_4 = 0.95;
var_5 = 1.4;
}
else
{
var_4 = 2.7;
var_5 = 3.4;
}
var_6 = randomfloatrange( var_4, var_5 );
wait( var_6 );
}
_firework_sunlight( var_0, var_1 )
{
level notify( "new_firework" );
level endon( "new_firework" );
var_2 = level.fireworkstructs[var_0];
switch ( var_2.type )
{
case "large":
_firework_large( var_1, var_2.color, var_2.time );
break;
}
}
_firework_large( var_0, var_1, var_2 )
{
var_3 = 0.8;
var_4 = 0.05;
var_5 = 2.8;
if ( isdefined( level.currentsunlightcolor ) )
var_0 = level.currentsunlightcolor;
if ( isdefined( level.currentfireworkslocation ) )
{
var_6 = _get_location_sunlight( level.currentfireworkslocation );
if ( common_scripts\utility::flag( "do_specular_sun_lerp" ) )
thread lerp_spec_color_scale( level.spec_cg_fireworks_high, level.spec_ng_fireworks_high, var_3 );
var_7 = 1.5;
if ( maps\_utility::is_gen4() )
sun_lerp_value( var_0, var_1 * var_7, var_3 );
else
sun_lerp_value( var_0, var_1, var_3 );
wait( var_4 );
if ( common_scripts\utility::flag( "do_specular_sun_lerp" ) )
thread lerp_spec_color_scale( level.spec_cg_fireworks_low, level.spec_ng_fireworks_low, var_5 );
if ( maps\_utility::is_gen4() )
sun_lerp_value( var_1 * var_7, var_6, var_5 );
else
sun_lerp_value( var_1, var_6, var_5 );
}
}
do_specular_sun_lerp( var_0 )
{
if ( var_0 )
thread _turn_on_spec_sun_lerp();
else
thread _turn_off_spec_sun_lerp();
}
_turn_on_spec_sun_lerp()
{
lerp_spec_color_scale( level.spec_cg_fireworks_low, level.spec_ng_fireworks_low, 1 );
common_scripts\utility::flag_set( "do_specular_sun_lerp" );
}
_turn_off_spec_sun_lerp()
{
common_scripts\utility::flag_clear( "do_specular_sun_lerp" );
thread lerp_spec_color_scale( level.spec_cg, level.spec_ng, 1 );
}
_fireworks_cleanup()
{
level.fireworks = undefined;
level.fireworkstructs = undefined;
level.meteorfireworks = undefined;
level.meteorfireworkstructs = undefined;
level.fireworks_stop = undefined;
level.fireworks_sun = undefined;
level.fireworks_location = undefined;
}
_get_location_sunlight( var_0 )
{
switch ( var_0 )
{
case "junction":
if ( maps\_utility::is_gen4() )
return ( 0.348633, 0.292578, 0.213281 );
else
return ( 0.348633, 0.292578, 0.213281 );
case "garden":
if ( maps\_utility::is_gen4() )
return ( 0.996094, 0.980469, 0.863281 );
else
return ( 0.996094, 0.980469, 0.863281 );
case "intro":
if ( maps\_utility::is_gen4() )
return ( 0.819608, 0.976471, 1 );
else
return ( 0.823529, 0.980392, 1 );
case "courtyard_stairs":
case "stealth":
case "courtyard":
if ( maps\_utility::is_gen4() )
return ( 0.597656, 0.588281, 0.517969 );
else
return ( 0.597656, 0.588281, 0.517969 );
default:
break;
}
}
get_fog_ent( var_0 )
{
var_1 = "";
if ( isdefined( var_0 ) )
var_1 = var_0;
else if ( isdefined( level.player.vision_set_transition_ent ) )
var_1 = level.player.vision_set_transition_ent.vision_set;
else
var_1 = level.vision_set_transition_ent.vision_set;
return level.vision_set_fog[var_1];
}
set_fog_ent( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = var_0.transitiontime;
maps\_utility::set_fog_to_ent_values( var_0, var_1 );
wait( var_1 );
}
handle_fog_changes()
{
common_scripts\utility::flag_wait( "parachute_exfil" );
var_0 = get_fog_ent( "cornered_09" );
var_0.sundir = ( 0, 0, 1 );
set_fog_ent( var_0, 1 );
}
lerp_spec_color_scale( var_0, var_1, var_2 )
{
level notify( "lerp_spec_color_scale" );
level endon( "lerp_spec_color_scale" );
var_3 = 0.05;
var_4 = var_0;
if ( maps\_utility::is_gen4() )
var_4 = var_1;
var_5 = getdvarfloat( "r_specularcolorscale" );
if ( var_5 == var_4 )
return;
var_6 = var_4 - var_5;
var_7 = var_2 / var_3;
var_8 = var_6 / var_7;
for ( var_9 = 0; var_9 < var_7; var_9++ )
{
var_5 = var_5 + var_8;
setsaveddvar( "r_specularcolorscale", var_5 );
wait( var_3 );
}
setsaveddvar( "r_specularcolorscale", var_4 );
}