2024-02-13 13:20:49 +01:00

688 lines
16 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
initfx()
{
if ( !isdefined( level.func ) )
level.func = [];
if ( !isdefined( level.func["create_triggerfx"] ) )
level.func["create_triggerfx"] = ::create_triggerfx;
if ( !isdefined( level._fx ) )
level._fx = spawnstruct();
common_scripts\utility::create_lock( "createfx_looper", 20 );
level.fxfireloopmod = 1;
level._fx.exploderfunction = common_scripts\_exploder::exploder_before_load;
waittillframeend;
waittillframeend;
level._fx.exploderfunction = common_scripts\_exploder::exploder_after_load;
level._fx.server_culled_sounds = 0;
if ( getdvarint( "serverCulledSounds" ) == 1 )
level._fx.server_culled_sounds = 1;
if ( level.createfx_enabled )
level._fx.server_culled_sounds = 0;
if ( level.createfx_enabled )
level waittill( "createfx_common_done" );
for ( var_0 = 0; var_0 < level.createfxent.size; var_0++ )
{
var_1 = level.createfxent[var_0];
var_1 common_scripts\_createfx::set_forward_and_up_vectors();
switch ( var_1.v["type"] )
{
case "loopfx":
var_1 thread loopfxthread();
break;
case "oneshotfx":
var_1 thread oneshotfxthread();
break;
case "soundfx":
var_1 thread create_loopsound();
break;
case "soundfx_interval":
var_1 thread create_interval_sound();
break;
case "reactive_fx":
var_1 add_reactive_fx();
break;
}
}
check_createfx_limit();
}
remove_dupes()
{
}
check_createfx_limit()
{
}
check_limit_type( var_0, var_1 )
{
}
print_org( var_0, var_1, var_2, var_3 )
{
if ( getdvar( "debug" ) == "1" )
return;
}
oneshotfx( var_0, var_1, var_2, var_3 )
{
}
exploderfx( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11, var_12, var_13, var_14, var_15, var_16, var_17 )
{
if ( 1 )
{
var_18 = common_scripts\utility::createexploder( var_1 );
var_18.v["origin"] = var_2;
var_18.v["angles"] = ( 0, 0, 0 );
if ( isdefined( var_4 ) )
var_18.v["angles"] = vectortoangles( var_4 - var_2 );
var_18.v["delay"] = var_3;
var_18.v["exploder"] = var_0;
if ( isdefined( level.createfxexploders ) )
{
var_19 = level.createfxexploders[var_18.v["exploder"]];
if ( !isdefined( var_19 ) )
var_19 = [];
var_19[var_19.size] = var_18;
level.createfxexploders[var_18.v["exploder"]] = var_19;
}
return;
}
var_20 = spawn( "script_origin", ( 0, 0, 0 ) );
var_20.origin = var_2;
var_20.angles = vectortoangles( var_4 - var_2 );
var_20.script_exploder = var_0;
var_20.script_fxid = var_1;
var_20.script_delay = var_3;
var_20.script_firefx = var_5;
var_20.script_firefxdelay = var_6;
var_20.script_firefxsound = var_7;
var_20.script_sound = var_8;
var_20.script_earthquake = var_9;
var_20.script_damage = var_10;
var_20.script_radius = var_15;
var_20.script_soundalias = var_11;
var_20.script_firefxtimeout = var_16;
var_20.script_repeat = var_12;
var_20.script_delay_min = var_13;
var_20.script_delay_max = var_14;
var_20.script_exploder_group = var_17;
var_21 = anglestoforward( var_20.angles );
var_21 = var_21 * 150;
var_20.targetpos = var_2 + var_21;
if ( !isdefined( level._script_exploders ) )
level._script_exploders = [];
level._script_exploders[level._script_exploders.size] = var_20;
}
loopfx( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
var_7 = common_scripts\utility::createloopeffect( var_0 );
var_7.v["origin"] = var_1;
var_7.v["angles"] = ( 0, 0, 0 );
if ( isdefined( var_3 ) )
var_7.v["angles"] = vectortoangles( var_3 - var_1 );
var_7.v["delay"] = var_2;
}
create_looper()
{
self.looper = playloopedfx( level._effect[self.v["fxid"]], self.v["delay"], self.v["origin"], 0, self.v["forward"], self.v["up"] );
create_loopsound();
}
create_loopsound()
{
self notify( "stop_loop" );
if ( !isdefined( self.v["soundalias"] ) )
return;
if ( self.v["soundalias"] == "nil" )
return;
var_0 = 0;
var_1 = undefined;
if ( isdefined( self.v["stopable"] ) && self.v["stopable"] )
{
if ( isdefined( self.looper ) )
var_1 = "death";
else
var_1 = "stop_loop";
}
else if ( level._fx.server_culled_sounds && isdefined( self.v["server_culled"] ) )
var_0 = self.v["server_culled"];
var_2 = self;
if ( isdefined( self.looper ) )
var_2 = self.looper;
var_3 = undefined;
if ( level.createfx_enabled )
var_3 = self;
var_2 common_scripts\utility::loop_fx_sound_with_angles( self.v["soundalias"], self.v["origin"], self.v["angles"], var_0, var_1, var_3 );
}
create_interval_sound()
{
self notify( "stop_loop" );
if ( !isdefined( self.v["soundalias"] ) )
return;
if ( self.v["soundalias"] == "nil" )
return;
var_0 = undefined;
var_1 = self;
if ( isdefined( self.v["stopable"] ) && self.v["stopable"] || level.createfx_enabled )
{
if ( isdefined( self.looper ) )
{
var_1 = self.looper;
var_0 = "death";
}
else
var_0 = "stop_loop";
}
var_1 thread common_scripts\utility::loop_fx_sound_interval_with_angles( self.v["soundalias"], self.v["origin"], self.v["angles"], var_0, undefined, self.v["delay_min"], self.v["delay_max"] );
}
loopfxthread()
{
common_scripts\utility::waitframe();
if ( isdefined( self.fxstart ) )
level waittill( "start fx" + self.fxstart );
for (;;)
{
create_looper();
if ( isdefined( self.timeout ) )
thread loopfxstop( self.timeout );
if ( isdefined( self.fxstop ) )
level waittill( "stop fx" + self.fxstop );
else
return;
if ( isdefined( self.looper ) )
self.looper delete();
if ( isdefined( self.fxstart ) )
{
level waittill( "start fx" + self.fxstart );
continue;
}
return;
}
}
loopfxchangeid( var_0 )
{
self endon( "death" );
var_0 waittill( "effect id changed", var_1 );
}
loopfxchangeorg( var_0 )
{
self endon( "death" );
for (;;)
{
var_0 waittill( "effect org changed", var_1 );
self.origin = var_1;
}
}
loopfxchangedelay( var_0 )
{
self endon( "death" );
var_0 waittill( "effect delay changed", var_1 );
}
loopfxdeletion( var_0 )
{
self endon( "death" );
var_0 waittill( "effect deleted" );
self delete();
}
loopfxstop( var_0 )
{
self endon( "death" );
wait( var_0 );
self.looper delete();
}
loopsound( var_0, var_1, var_2 )
{
level thread loopsoundthread( var_0, var_1, var_2 );
}
loopsoundthread( var_0, var_1, var_2 )
{
var_3 = spawn( "script_origin", var_1 );
var_3.origin = var_1;
var_3 playloopsound( var_0 );
}
gunfireloopfx( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
{
thread gunfireloopfxthread( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 );
}
gunfireloopfxthread( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
{
level endon( "stop all gunfireloopfx" );
common_scripts\utility::waitframe();
if ( var_7 < var_6 )
{
var_8 = var_7;
var_7 = var_6;
var_6 = var_8;
}
var_9 = var_6;
var_10 = var_7 - var_6;
if ( var_5 < var_4 )
{
var_8 = var_5;
var_5 = var_4;
var_4 = var_8;
}
var_11 = var_4;
var_12 = var_5 - var_4;
if ( var_3 < var_2 )
{
var_8 = var_3;
var_3 = var_2;
var_2 = var_8;
}
var_13 = var_2;
var_14 = var_3 - var_2;
var_15 = spawnfx( level._effect[var_0], var_1 );
if ( !level.createfx_enabled )
var_15 willneverchange();
for (;;)
{
var_16 = var_13 + randomint( var_14 );
for ( var_17 = 0; var_17 < var_16; var_17++ )
{
triggerfx( var_15 );
wait( var_11 + randomfloat( var_12 ) );
}
wait( var_9 + randomfloat( var_10 ) );
}
}
gunfireloopfxvec( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
thread gunfireloopfxvecthread( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 );
}
gunfireloopfxvecthread( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
level endon( "stop all gunfireloopfx" );
common_scripts\utility::waitframe();
if ( var_8 < var_7 )
{
var_9 = var_8;
var_8 = var_7;
var_7 = var_9;
}
var_10 = var_7;
var_11 = var_8 - var_7;
if ( var_6 < var_5 )
{
var_9 = var_6;
var_6 = var_5;
var_5 = var_9;
}
var_12 = var_5;
var_13 = var_6 - var_5;
if ( var_4 < var_3 )
{
var_9 = var_4;
var_4 = var_3;
var_3 = var_9;
}
var_14 = var_3;
var_15 = var_4 - var_3;
var_2 = vectornormalize( var_2 - var_1 );
var_16 = spawnfx( level._effect[var_0], var_1, var_2 );
if ( !level.createfx_enabled )
var_16 willneverchange();
for (;;)
{
var_17 = var_14 + randomint( var_15 );
for ( var_18 = 0; var_18 < int( var_17 / level.fxfireloopmod ); var_18++ )
{
triggerfx( var_16 );
var_19 = ( var_12 + randomfloat( var_13 ) ) * level.fxfireloopmod;
if ( var_19 < 0.05 )
var_19 = 0.05;
wait( var_19 );
}
wait( var_12 + randomfloat( var_13 ) );
wait( var_10 + randomfloat( var_11 ) );
}
}
setfireloopmod( var_0 )
{
level.fxfireloopmod = 1 / var_0;
}
setup_fx()
{
if ( !isdefined( self.script_fxid ) || !isdefined( self.script_fxcommand ) || !isdefined( self.script_delay ) )
return;
if ( isdefined( self.model ) )
{
if ( self.model == "toilet" )
{
thread burnville_paratrooper_hack();
return;
}
}
var_0 = undefined;
if ( isdefined( self.target ) )
{
var_1 = getent( self.target, "targetname" );
if ( isdefined( var_1 ) )
var_0 = var_1.origin;
}
var_2 = undefined;
if ( isdefined( self.script_fxstart ) )
var_2 = self.script_fxstart;
var_3 = undefined;
if ( isdefined( self.script_fxstop ) )
var_3 = self.script_fxstop;
if ( self.script_fxcommand == "OneShotfx" )
oneshotfx( self.script_fxid, self.origin, self.script_delay, var_0 );
if ( self.script_fxcommand == "loopfx" )
loopfx( self.script_fxid, self.origin, self.script_delay, var_0, var_2, var_3 );
if ( self.script_fxcommand == "loopsound" )
loopsound( self.script_fxid, self.origin, self.script_delay );
self delete();
}
burnville_paratrooper_hack()
{
var_0 = ( 0, 0, self.angles[1] );
var_1 = level._effect[self.script_fxid];
var_2 = self.origin;
wait 1;
level thread burnville_paratrooper_hack_loop( var_0, var_2, var_1 );
self delete();
}
burnville_paratrooper_hack_loop( var_0, var_1, var_2 )
{
for (;;)
{
playfx( var_2, var_1 );
wait( 30 + randomfloat( 40 ) );
}
}
create_triggerfx()
{
if ( !verify_effects_assignment( self.v["fxid"] ) )
return;
self.looper = spawnfx( level._effect[self.v["fxid"]], self.v["origin"], self.v["forward"], self.v["up"] );
triggerfx( self.looper, self.v["delay"] );
if ( !level.createfx_enabled )
self.looper willneverchange();
create_loopsound();
}
verify_effects_assignment( var_0 )
{
if ( isdefined( level._effect[var_0] ) )
return 1;
if ( !isdefined( level._missing_fx ) )
level._missing_fx = [];
level._missing_fx[self.v["fxid"]] = var_0;
verify_effects_assignment_print( var_0 );
return 0;
}
verify_effects_assignment_print( var_0 )
{
level notify( "verify_effects_assignment_print" );
level endon( "verify_effects_assignment_print" );
wait 0.05;
var_1 = getarraykeys( level._missing_fx );
foreach ( var_3 in var_1 )
{
}
}
oneshotfxthread()
{
wait 0.05;
if ( self.v["delay"] > 0 )
wait( self.v["delay"] );
[[ level.func["create_triggerfx"] ]]();
}
add_reactive_fx()
{
if ( !common_scripts\utility::issp() && getdvar( "createfx" ) == "" )
return;
if ( !isdefined( level._fx.reactive_thread ) )
{
level._fx.reactive_thread = 1;
level thread reactive_fx_thread();
}
if ( !isdefined( level._fx.reactive_fx_ents ) )
level._fx.reactive_fx_ents = [];
level._fx.reactive_fx_ents[level._fx.reactive_fx_ents.size] = self;
self.next_reactive_time = 3000;
}
reactive_fx_thread()
{
if ( !common_scripts\utility::issp() )
{
if ( getdvar( "createfx" ) == "on" )
common_scripts\utility::flag_wait( "createfx_started" );
}
level._fx.reactive_sound_ents = [];
var_0 = 256;
for (;;)
{
level waittill( "code_damageradius", var_1, var_0, var_2, var_3 );
var_4 = sort_reactive_ents( var_2, var_0 );
foreach ( var_7, var_6 in var_4 )
var_6 thread play_reactive_fx( var_7 );
}
}
vector2d( var_0 )
{
return ( var_0[0], var_0[1], 0 );
}
sort_reactive_ents( var_0, var_1 )
{
var_2 = [];
var_3 = gettime();
foreach ( var_5 in level._fx.reactive_fx_ents )
{
if ( var_5.next_reactive_time > var_3 )
continue;
var_6 = var_5.v["reactive_radius"] + var_1;
var_6 = var_6 * var_6;
if ( distancesquared( var_0, var_5.v["origin"] ) < var_6 )
var_2[var_2.size] = var_5;
}
foreach ( var_5 in var_2 )
{
var_9 = vector2d( var_5.v["origin"] - level.player.origin );
var_10 = vector2d( var_0 - level.player.origin );
var_11 = vectornormalize( var_9 );
var_12 = vectornormalize( var_10 );
var_5.dot = vectordot( var_11, var_12 );
}
for ( var_14 = 0; var_14 < var_2.size - 1; var_14++ )
{
for ( var_15 = var_14 + 1; var_15 < var_2.size; var_15++ )
{
if ( var_2[var_14].dot > var_2[var_15].dot )
{
var_16 = var_2[var_14];
var_2[var_14] = var_2[var_15];
var_2[var_15] = var_16;
}
}
}
foreach ( var_5 in var_2 )
{
var_5.origin = undefined;
var_5.dot = undefined;
}
for ( var_14 = 4; var_14 < var_2.size; var_14++ )
var_2[var_14] = undefined;
return var_2;
}
play_reactive_fx( var_0 )
{
var_1 = get_reactive_sound_ent();
if ( !isdefined( var_1 ) )
return;
self.next_reactive_time = gettime() + 3000;
var_1.origin = self.v["origin"];
var_1.is_playing = 1;
wait( var_0 * randomfloatrange( 0.05, 0.1 ) );
if ( common_scripts\utility::issp() )
{
var_1 playsound( self.v["soundalias"], "sounddone" );
var_1 waittill( "sounddone" );
}
else
{
var_1 playsound( self.v["soundalias"] );
wait 2;
}
wait 0.1;
var_1.is_playing = 0;
}
get_reactive_sound_ent()
{
foreach ( var_1 in level._fx.reactive_sound_ents )
{
if ( !var_1.is_playing )
return var_1;
}
if ( level._fx.reactive_sound_ents.size < 4 )
{
var_1 = spawn( "script_origin", ( 0, 0, 0 ) );
var_1.is_playing = 0;
level._fx.reactive_sound_ents[level._fx.reactive_sound_ents.size] = var_1;
return var_1;
}
return undefined;
}