This commit is contained in:
2024-02-13 13:20:49 +01:00
commit 872504afef
1761 changed files with 871764 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,79 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
self endon( "killanimscript" );
init_alien_idle();
if ( !isdefined( level.fx_water_loop_running ) )
{
level.fx_water_loop_running = 1;
thread play_water_fx_loop();
}
for (;;)
{
if ( !isdefined( self.stage ) || self.posturing || self.smashing )
{
wait 0.05;
continue;
}
play_idle();
}
}
init_alien_idle()
{
self.idle_anim_counter = 0;
}
play_idle()
{
var_0 = selectidleanimstate();
self scragentsetanimmode( "anim deltas" );
self scragentsetorientmode( "face angle abs", self.angles );
maps\mp\agents\_scriptedagents::playanimnuntilnotetrack( var_0, undefined, "idle", "end" );
}
play_water_fx_loop()
{
self endon( "death" );
var_0 = [ "water_fx1", "water_fx2", "water_fx3", "water_fx4" ];
for (;;)
{
wait 0.01;
if ( common_scripts\utility::flag( "fx_kraken_water" ) )
{
wait( randomfloatrange( 0.8, 3.3 ) );
self setscriptablepartstate( "body", "normal" );
wait 0.1;
var_1 = common_scripts\utility::random( var_0 );
self setscriptablepartstate( "body", var_1 );
}
}
if ( common_scripts\utility::flag( "fx_kraken_water" ) )
self setscriptablepartstate( "body", "normal" );
}
end_water_fx_loop()
{
self waittill( "heat" );
wait 0.1;
self setscriptablepartstate( "tentacle", "normal" );
}
selectidleanimstate()
{
var_0 = "idle_";
if ( isdefined( self.anim_state_modifier ) )
var_0 = var_0 + ( self.anim_state_modifier + "_" );
var_1 = var_0 + level.alien_types["kraken"].attributes[self.stage]["ship_side"];
return var_1;
}

View File

@ -0,0 +1,825 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
self endon( "killanimscript" );
self scragentsetphysicsmode( "noclip" );
var_0 = gettime();
self scragentsetorientmode( "face angle abs", self.angles );
switch ( self.melee_type )
{
case "emerge":
emerge();
break;
case "submerge":
submerge();
break;
case "charge":
charge();
break;
case "heat":
heat();
break;
case "smash":
smash();
break;
case "posture":
posture();
break;
case "death":
death();
break;
default:
break;
}
if ( var_0 == gettime() )
wait 0.05;
self notify( "melee_complete" );
}
endscript()
{
}
charge()
{
level notify( "dlc_vo_notify", "kraken_vo", "kraken_weak" );
common_scripts\utility::flag_clear( "fx_kraken_water" );
foreach ( var_1 in self.tentacles )
var_1 thread maps\mp\agents\alien\alien_kraken\_alien_kraken_tentacle::retract();
var_3 = getsideanimstate( "charge_" );
var_4 = "charge_complete";
thread play_kraken_charge_sfx();
playanim( var_3, 0 );
var_5 = level.alien_types[self.alien_type].attributes[self.stage]["charge_phase_duration"] * 1000.0;
var_6 = gettime() + var_5;
thread playloopanim( var_3, var_4 );
self setscriptablepartstate( "body", "heat_charge_body_fx_01" );
thread maps\mp\agents\alien\alien_kraken\_alien_kraken::play_kraken_eyeglow1_fx();
while ( gettime() < var_6 )
wait 0.05;
self.damage_multiplier = maps\mp\agents\alien\alien_kraken\_alien_kraken::getkrakendamagemultiplier();
self.kraken_heated = 1;
self notify( var_4 );
}
play_kraken_charge_sfx()
{
wait 4;
level.kraken playloopsound( "kraken_charge_loop_sfx" );
}
stop_kraken_charge_sfx()
{
wait 5;
level.kraken stoploopsound( "kraken_charge_loop_sfx" );
}
playloopanim( var_0, var_1 )
{
self endon( var_1 );
self endon( "end_loop_anim" );
for (;;)
playanim( var_0, 1 );
}
playheatanims( var_0 )
{
var_1 = getsideanimstate( "heat_" );
playanim( var_1, 0 );
playloopanim( var_1, var_0 );
}
heat()
{
common_scripts\utility::flag_clear( "fx_kraken_water" );
var_0 = level.alien_types[self.alien_type].attributes[self.stage]["heated_phase_health_threshold"];
var_1 = level.alien_types[self.alien_type].attributes[self.stage]["heated_phase_damage_per_second"];
var_2 = getent( "heated_deck_01", "targetname" );
var_3 = getent( "heated_deck_vfx_01", "targetname" );
var_4 = "heat_complete";
thread stop_kraken_charge_sfx();
thread playheatanims( var_4 );
thread warn_heat();
foreach ( var_6 in self.tentacles )
{
var_6 maps\mp\agents\alien\alien_kraken\_alien_kraken_tentacle::teleportside( self.stage );
var_6 thread maps\mp\agents\alien\alien_kraken\_alien_kraken_tentacle::heat();
}
var_4 = "heat_complete";
var_8 = getsideanimstate( "heat_" );
playanim( var_8, 0 );
thread playloopanim( var_8, var_4 );
maps\mp\agents\alien\alien_kraken\_alien_kraken::waitforextendedtentacles();
maps\mp\agents\alien\alien_kraken\_alien_kraken::setupheatedsmashvolume();
thread heatedsmashmonitor( var_4, var_8 );
var_9 = gettime();
thread heat_deck_fx( var_4 );
while ( maps\mp\agents\alien\alien_kraken\_alien_kraken::gethealthratio() > var_0 )
{
var_10 = gettime();
if ( var_10 - var_9 > 1000.0 )
{
var_11 = ( var_10 - var_9 ) / 1000.0 * var_1;
var_12 = [];
foreach ( var_14 in level.kraken_safe_spot_volumes )
{
var_15 = var_14 getistouchingentities( level.players );
var_12 = common_scripts\utility::array_combine( var_12, var_15 );
}
foreach ( var_18 in level.players )
{
if ( common_scripts\utility::array_contains( var_12, var_18 ) )
continue;
var_18 dodamage( var_11, var_18.origin, self, self );
}
var_9 = var_10;
}
common_scripts\utility::waitframe();
}
maps\mp\agents\alien\alien_kraken\_alien_kraken::waitforidletentacles();
foreach ( var_6 in self.tentacles )
var_6 notify( var_4 );
self notify( var_4 );
thread reset_deck_fx( var_2, var_3 );
thread maps\mp\agents\alien\alien_kraken\_alien_kraken::stop_kraken_eyeglow1_fx();
}
warn_heat()
{
wait 12;
level notify( "dlc_vo_notify", "kraken_vo", "warn_metal" );
}
reset_deck_fx( var_0, var_1 )
{
var_0 setscriptablepartstate( "deck", "heated_deck_anim_out" );
wait 1.0;
var_1 setscriptablepartstate( "deck_steam", "normal" );
}
heat_deck_fx( var_0 )
{
self endon( var_0 );
var_1 = getent( "heated_deck_01", "targetname" );
var_2 = getent( "heated_deck_vfx_01", "targetname" );
var_1 setscriptablepartstate( "deck", "heated_deck_anim_in" );
wait 1.0;
thread heat_deck_sfx( var_0 );
for (;;)
{
var_2 setscriptablepartstate( "deck_steam", "hot_1" );
wait 2.0;
var_2 setscriptablepartstate( "deck_steam", "hot_2" );
wait 2.0;
}
}
heat_deck_sfx( var_0 )
{
var_1 = common_scripts\utility::play_loopsound_in_space( "krk_heat_loop", ( -868, 7058, 1154 ) );
wait 0.02;
var_2 = common_scripts\utility::play_loopsound_in_space( "krk_heat_loop", ( 261, 8411, 1154 ) );
wait 0.02;
var_3 = common_scripts\utility::play_loopsound_in_space( "krk_heat_loop", ( -788, 8388, 1154 ) );
wait 0.02;
var_4 = common_scripts\utility::play_loopsound_in_space( "krk_heat_loop", ( 330, 6988, 1154 ) );
self waittill( var_0 );
var_1 delete();
wait 0.02;
var_2 delete();
wait 0.02;
var_3 delete();
wait 0.02;
var_4 delete();
}
smash()
{
common_scripts\utility::flag_set( "fx_kraken_water" );
var_0 = "smash";
if ( isdefined( level.kraken.anim_state_modifier ) )
var_0 = var_0 + ( "_" + level.kraken.anim_state_modifier );
level notify( "dlc_vo_notify", "warn_kraken_attack" );
self.tentacles[self.smash_tentacle_name] thread maps\mp\agents\alien\alien_kraken\_alien_kraken_tentacle::smash( self.smash_trigger );
if ( !self.posturing && !self.smashing )
{
var_1 = self getanimentrycount( var_0 );
var_2 = randomint( var_1 );
thread smashanimmonitor( var_0, var_2 );
playanim( var_0 );
}
}
smashanimmonitor( var_0, var_1 )
{
self notify( "smash_anim_monitor_start" );
self endon( "smash_anim_monitor_start" );
self.smashing = 1;
var_2 = self getanimentry( var_0, var_1 );
var_3 = getanimlength( var_2 );
wait( var_3 );
self.smashing = 0;
}
heatedsmashmonitor( var_0, var_1 )
{
self endon( var_0 );
for (;;)
{
self waittill( "smash_trigger_hit", var_2, var_3 );
attemptheatedsmashattack( var_2, var_3, var_0, var_1 );
}
}
attemptheatedsmashattack( var_0, var_1, var_2, var_3 )
{
self.tentacles[var_1] thread runtentacleheatsmash( var_0, var_2 );
if ( level.alien_types["kraken"].attributes[self.stage]["ship_side"] == "port" )
{
self notify( "end_loop_anim" );
playanim( "heat_smash" );
thread playloopanim( var_3, var_2 );
}
}
runtentacleheatsmash( var_0, var_1 )
{
self endon( var_1 );
maps\mp\agents\alien\alien_kraken\_alien_kraken_tentacle::heatsmash( var_0 );
}
playanim( var_0, var_1, var_2 )
{
self scragentsetanimmode( "anim deltas" );
self scragentsetorientmode( "face angle abs", self.angles );
maps\mp\agents\_scriptedagents::playanimnuntilnotetrack( var_0, var_1, var_0, "end", var_2 );
}
posture()
{
common_scripts\utility::flag_set( "fx_kraken_water" );
thread playpostureanim();
}
handleposturenotes( var_0, var_1, var_2, var_3 )
{
switch ( var_0 )
{
case "kra_posture":
thread performroar();
break;
default:
break;
}
}
playpostureanim( var_0 )
{
self notify( "posture_anim_monitor_start" );
self endon( "posture_anim_monitor_start" );
self.posturing = 1;
playanim( "posture", undefined, ::handleposturenotes );
self.posturing = 0;
maps\mp\alien\_utility::set_alien_emissive_default( 1.0 );
}
death()
{
thread kraken_death_music();
foreach ( var_1 in self.tentacles )
var_1 thread maps\mp\agents\alien\alien_kraken\_alien_kraken_tentacle::death();
playanim( "death", 0, ::handledeathnotetracks );
}
kraken_death_music()
{
wait 1;
foreach ( var_1 in level.players )
{
if ( common_scripts\utility::flag( "alien_music_playing" ) )
{
var_1 stoplocalsound( "mp_suspense_01" );
var_1 stoplocalsound( "mp_suspense_02" );
var_1 stoplocalsound( "mp_suspense_03" );
var_1 stoplocalsound( "mp_suspense_04" );
var_1 stoplocalsound( "mp_suspense_05" );
var_1 stoplocalsound( "mp_suspense_06" );
var_1 stoplocalsound( "mus_alien_newwave" );
var_1 stoplocalsound( "mus_alien_queen" );
common_scripts\utility::flag_clear( "alien_music_playing" );
}
if ( !common_scripts\utility::flag( "exfil_music_playing" ) )
level thread maps\mp\alien\_music_and_dialog::play_alien_music( "mus_alien_dlc2_kraken_death" );
}
}
handledeathnotetracks( var_0, var_1, var_2, var_3 )
{
switch ( var_0 )
{
case "fx_cleardeck_d":
thread playeyedeathfx();
maps\mp\alien\_utility::set_alien_emissive( 1.0, 1.0 );
playfxontag( level._effect["kraken_blood_roar_emitter"], self, "TAG_EYE_throat" );
break;
case "fx_roar_d":
playfxontag( level._effect["kraken_blood_roar_gurgle"], self, "TAG_EYE_throat" );
break;
case "fx_cough":
break;
case "fx_startfall":
maps\mp\alien\_utility::set_alien_emissive( 2.0, 0.0 );
break;
case "fx_jawhit":
break;
case "fx_headhit":
thread stopeyedeathfx();
break;
case "fx_startslide":
break;
case "tnt_lc_dth":
level.kraken thread maps\mp\mp_alien_beacon::beacon_play_sound_on_moving_tag( "tnt_lc_dth", "j_tentacle_08_ru", 16 );
break;
case "tnt_rc_dth":
level.kraken thread maps\mp\mp_alien_beacon::beacon_play_sound_on_moving_tag( "tnt_rc_dth", "j_tentacle_08_lu", 7 );
break;
}
}
playeyedeathfx()
{
wait 0.1;
playfxontag( level._effect["kraken_eye_glow_01"], level.kraken, "tag_eye" );
wait 0.1;
playfxontag( level._effect["kraken_back_glow_01"], level.kraken, "j_spineback_up" );
}
stopeyedeathfx()
{
stopfxontag( level._effect["kraken_eye_glow_01"], level.kraken, "tag_eye" );
wait 0.1;
stopfxontag( level._effect["kraken_back_glow_01"], level.kraken, "j_spineback_up" );
}
emerge()
{
common_scripts\utility::flag_set( "fx_kraken_water" );
var_0 = level.alien_types[self.alien_type].attributes[self.stage]["emerge_teleport_position"];
var_1 = common_scripts\utility::getstruct( var_0, "targetname" );
self setorigin( var_1.origin );
self setplayerangles( var_1.angles );
self scragentsetorientmode( "face angle abs", var_1.angles, var_1.angles );
self show();
if ( self.stage == "stage_1" )
{
level notify( "dlc_vo_notify", "kraken_intro" );
playintroanim();
}
else
{
level notify( "kraken_emerge_phase" );
playemergeanim();
}
self scragentsetgoalpos( self.origin );
self scragentsetgoalradius( 4096 );
}
playintroanim()
{
var_0 = "intro";
playanim( var_0, 0, ::handleemergenotetracks );
}
playemergeanim()
{
foreach ( var_1 in self.tentacles )
thread extendtentacle( var_1, 1 );
var_3 = "emerge_" + level.alien_types["kraken"].attributes[self.stage]["ship_side"];
thread play_emerge_music();
playanim( var_3, 0, ::handlereemergenotetracks );
}
handlereemergenotetracks( var_0, var_1, var_2, var_3 )
{
switch ( var_0 )
{
case "fx_cleardeck_star":
case "fx_cleardeck_port":
thread playjawwaterfx();
thread playhelmetwaterfx();
thread playpincerswaterfx();
break;
case "fx_roar_star":
case "fx_roar_port":
thread posture_emissive();
break;
}
}
play_emerge_music()
{
wait 1;
foreach ( var_1 in level.players )
{
if ( common_scripts\utility::flag( "alien_music_playing" ) )
{
var_1 stoplocalsound( "mp_suspense_01" );
var_1 stoplocalsound( "mp_suspense_02" );
var_1 stoplocalsound( "mp_suspense_03" );
var_1 stoplocalsound( "mp_suspense_04" );
var_1 stoplocalsound( "mp_suspense_05" );
var_1 stoplocalsound( "mp_suspense_06" );
var_1 stoplocalsound( "mus_alien_newwave" );
var_1 stoplocalsound( "mus_alien_queen" );
common_scripts\utility::flag_clear( "alien_music_playing" );
}
level thread maps\mp\alien\_music_and_dialog::play_alien_music( "mus_alien_dlc2_kraken_reemerge" );
}
}
posture_emissive()
{
self endon( "killanimscript" );
maps\mp\alien\_utility::set_alien_emissive( 0.85, 1.0 );
foreach ( var_1 in level.players )
{
if ( isalive( var_1 ) )
{
var_1 shellshock( "alien_kraken_emp", 3.0 );
earthquake( 0.75, 1.0, var_1.origin, 100 );
}
}
wait 3.0;
maps\mp\alien\_utility::set_alien_emissive_default( 1.0 );
}
handleemergenotetracks( var_0, var_1, var_2, var_3 )
{
switch ( var_0 )
{
case "fx_cleardeck":
thread playpincerswaterfx();
break;
case "fx_breakright":
break;
case "fx_startsweepleft":
playfxontag( level._effect["kraken_water_sweep_rt_emitter"], self, "TAG_EYE_SweepRight004" );
playfxontag( level._effect["kraken_water_sweep_rt_emitter"], self, "TAG_EYE_SweepRight005" );
break;
case "fx_breakleft":
break;
case "fx_startsweepmiddle":
playfxontag( level._effect["kraken_water_spray_emitter"], self, "TAG_EYE" );
break;
case "fx_breakmiddle":
playfxontag( level._effect["kraken_water_roar_emitter1"], self, "TAG_EYE_breakMiddle" );
break;
case "fx_roar":
thread emerge_shock();
break;
case "intro_ten_emerge_start":
foreach ( var_5 in self.tentacles )
{
var_5 show();
thread extendtentacle( var_5, 0 );
}
}
}
emerge_shock()
{
wait 1.5;
performroar();
}
playjawwaterfx()
{
playfxontag( level._effect["kraken_water_stream_emitter"], self, "j_jaw_fx_front_lf" );
wait 0.02;
playfxontag( level._effect["kraken_water_stream_emitter"], self, "j_jaw_fx_front_rt" );
wait 0.02;
playfxontag( level._effect["kraken_water_stream_emitter"], self, "j_jaw_fx_side_lf" );
wait 0.02;
playfxontag( level._effect["kraken_water_stream_emitter"], self, "j_jaw_fx_side_rt" );
}
playhelmetwaterfx()
{
playfxontag( level._effect["kraken_water_stream_e_lite"], self, "TAG_EYE_helmet_lf_001" );
wait 0.02;
playfxontag( level._effect["kraken_water_stream_e_lite"], self, "TAG_EYE_helmet_lf_003" );
wait 0.02;
playfxontag( level._effect["kraken_water_stream_e_lite"], self, "TAG_EYE_helmet_lf_005" );
wait 0.02;
playfxontag( level._effect["kraken_water_stream_e_lite"], self, "TAG_EYE_helmet_rt_002" );
wait 0.02;
playfxontag( level._effect["kraken_water_stream_e_lite"], self, "TAG_EYE_helmet_rt_004" );
wait 0.02;
playfxontag( level._effect["kraken_water_stream_e_lite"], self, "TAG_EYE_helmet_rt_005" );
}
playpincerswaterfx()
{
playfxontag( level._effect["kraken_water_stream_pincers"], self, "J_Jaw_Leg_R_01" );
wait 0.02;
playfxontag( level._effect["kraken_water_stream_pincers"], self, "J_Jaw_Leg_L_01" );
wait 0.02;
playfxontag( level._effect["kraken_water_stream_pincers"], self, "J_Jaw_Leg_R_02" );
wait 0.02;
playfxontag( level._effect["kraken_water_stream_pincers"], self, "J_Jaw_Leg_L_02" );
wait 0.02;
}
extendtentacle( var_0, var_1 )
{
if ( var_1 )
{
var_0 maps\mp\agents\alien\alien_kraken\_alien_kraken_tentacle::teleportside( self.stage );
wait 0.05;
}
var_0 maps\mp\agents\alien\alien_kraken\_alien_kraken_tentacle::emerge( self.stage );
}
submerge()
{
common_scripts\utility::flag_set( "fx_kraken_water" );
var_0 = getsideanimstate( "emp_attack_" );
foreach ( var_2 in self.tentacles )
var_2 thread maps\mp\agents\alien\alien_kraken\_alien_kraken_tentacle::emp();
level notify( "dlc_vo_notify", "kraken_vo", "warn_emp" );
playanim( var_0, 0, ::handleempnotetracks );
thread performempdamage();
var_4 = level.alien_types[self.alien_type].attributes[self.stage]["emp_loop_duration"] * 1000.0;
var_5 = gettime() + var_4;
var_6 = "emp_loop_complete";
thread playloopanim( var_0, var_6 );
while ( gettime() < var_5 )
wait 0.05;
self notify( var_6 );
thread kraken_submerge_music();
playanim( var_0, 2 );
level notify( "dlc_vo_notify", "kraken_vo", "kraken_gone" );
self hide();
wait( level.alien_types[self.alien_type].attributes[self.stage]["transition_submerge_time"] );
}
performroar()
{
self endon( "death" );
var_0 = self gettagorigin( "tag_breath" );
foreach ( var_2 in level.players )
{
if ( isalive( var_2 ) && bullettracepassed( var_0, var_2 geteye(), 0, undefined ) )
{
var_2 shellshock( "alien_kraken_emp", 3.0 );
earthquake( 0.5, 1.0, var_2.origin, 100 );
}
wait 0.05;
}
}
kraken_submerge_music()
{
foreach ( var_1 in level.players )
{
if ( common_scripts\utility::flag( "alien_music_playing" ) )
{
var_1 stoplocalsound( "mp_suspense_01" );
var_1 stoplocalsound( "mp_suspense_02" );
var_1 stoplocalsound( "mp_suspense_03" );
var_1 stoplocalsound( "mp_suspense_04" );
var_1 stoplocalsound( "mp_suspense_05" );
var_1 stoplocalsound( "mp_suspense_06" );
var_1 stoplocalsound( "mus_alien_newwave" );
var_1 stoplocalsound( "mus_alien_queen" );
common_scripts\utility::flag_clear( "alien_music_playing" );
}
level thread maps\mp\alien\_music_and_dialog::play_alien_music( "mus_alien_dlc2_kraken_submerge" );
}
}
performempdamage()
{
self endon( "death" );
var_0 = level.alien_types[self.alien_type].attributes[self.stage]["emp_damage_location"];
var_1 = common_scripts\utility::getstruct( var_0, "targetname" );
var_2 = level.alien_types[self.alien_type].attributes[self.stage]["emp_damage"];
var_3 = level.alien_types[self.alien_type].attributes[self.stage]["emp_shock_duration"];
self.emp_traces_this_frame = 0;
foreach ( var_5 in level.players )
{
if ( !isalive( var_5 ) )
continue;
registeremptrace();
if ( !isalive( var_5 ) )
continue;
if ( bullettracepassed( var_1.origin, var_5 geteye(), 0, undefined ) )
{
var_5 dodamage( var_2, self.origin, self, self, "MOD_MELEE" );
var_5 shellshock( "alien_kraken_emp", var_3 );
var_5 playlocalsound( "kraken_emp_hit" );
thread doempdisables( var_5 );
earthquake( 0.55, 1.0, var_5.origin, 100 );
playfxontagforclients( level._effect["player_emp_scrn_fx"], var_5, "tag_eye", var_5 );
}
if ( !isdefined( var_5.crafted_items ) )
continue;
if ( isdefined( var_5.crafted_items["alien_crafting_hypno_trap"] ) )
empattempttodestroydeployable( var_5.crafted_items["alien_crafting_hypno_trap"], var_1.origin );
if ( isdefined( var_5.crafted_items["alien_crafting_tesla_trap"] ) )
empattempttodestroydeployable( var_5.crafted_items["alien_crafting_tesla_trap"], var_1.origin );
}
empprocessdeployablesarray( level.turrets, var_1.origin );
empprocessdeployablesarray( level.placedims, var_1.origin );
empprocessdeployablesarray( level.balldrones, var_1.origin );
if ( isdefined( level.alien_types[self.alien_type].attributes[self.stage]["emp_notify"] ) )
self notify( level.alien_types[self.alien_type].attributes[self.stage]["emp_notify"] );
}
performempdamage_on_smash( var_0 )
{
self endon( "death" );
var_1 = [];
foreach ( var_3 in level.players )
{
if ( !isalive( var_3 ) )
continue;
if ( !isdefined( var_3.crafted_items ) )
continue;
if ( isdefined( var_3.crafted_items["alien_crafting_hypno_trap"] ) )
{
var_4 = var_3.crafted_items["alien_crafting_hypno_trap"];
if ( !isarray( var_4 ) )
var_1 = common_scripts\utility::add_to_array( var_1, var_4 );
else
var_1 = common_scripts\utility::array_combine( var_1, var_4 );
}
if ( isdefined( var_3.crafted_items["alien_crafting_tesla_trap"] ) )
{
var_4 = var_3.crafted_items["alien_crafting_tesla_trap"];
if ( !isarray( var_4 ) )
var_1 = common_scripts\utility::add_to_array( var_1, var_4 );
else
var_1 = common_scripts\utility::array_combine( var_1, var_4 );
}
}
var_1 = common_scripts\utility::array_combine( var_1, level.turrets );
var_1 = common_scripts\utility::array_combine( var_1, level.placedims );
var_1 = common_scripts\utility::array_combine( var_1, level.balldrones );
if ( var_1.size > 0 )
empsmash_processdeployablesarray( var_1, var_0 );
}
empsmash_processdeployablesarray( var_0, var_1 )
{
foreach ( var_3 in var_0 )
{
if ( isdefined( var_3 ) && isdefined( var_3.origin ) )
{
if ( distance2dsquared( var_3.origin, var_1 ) < 40000 )
{
if ( !isdefined( var_3.carriedby ) )
var_3 notify( "death" );
}
}
}
}
doempdisables( var_0 )
{
var_0 endon( "disconnect" );
var_1 = level.alien_types[self.alien_type].attributes[self.stage]["emp_disable_duration"];
var_0.turn_off_class_skill_activation = 1;
var_0.player_action_disabled = 1;
var_0 setclientomnvar( "ui_alien_quick_shop_disabled", 1 );
wait( var_1 );
if ( !isdefined( var_0 ) )
return;
var_0.turn_off_class_skill_activation = undefined;
var_0.player_action_disabled = undefined;
var_0 setclientomnvar( "ui_alien_quick_shop_disabled", 0 );
}
empprocessdeployablesarray( var_0, var_1 )
{
foreach ( var_3 in var_0 )
empattempttodestroydeployable( var_3, var_1 );
}
empattempttodestroydeployable( var_0, var_1 )
{
registeremptrace();
if ( isdefined( var_0 ) && !isdefined( var_0.carriedby ) && bullettracepassed( var_1, var_0.origin + ( 0, 0, 20 ), 0, var_0 ) )
var_0 notify( "death" );
}
registeremptrace()
{
var_0 = 1;
if ( self.emp_traces_this_frame >= var_0 )
{
wait 0.05;
self.emp_traces_this_frame = 0;
}
self.emp_traces_this_frame++;
}
empdestroydeployables( var_0, var_1 )
{
foreach ( var_3 in var_0 )
{
if ( bullettracepassed( var_1, var_3.origin, 0, var_3 ) )
var_3 dodamage( 1000000, var_1, self, self, "MOD_EXPLOSIVE" );
}
}
getsideanimstate( var_0 )
{
var_1 = level.alien_types["kraken"].attributes[self.stage]["ship_side"];
return var_0 + var_1;
}
handleempnotetracks( var_0, var_1, var_2, var_3 )
{
switch ( var_0 )
{
case "kra_scream_int":
if ( level.alien_types["kraken"].attributes[self.stage]["ship_side"] == "port" )
common_scripts\utility::exploder( 3 );
else
common_scripts\utility::exploder( 4 );
break;
case "kra_scream":
}
}

View File

@ -0,0 +1,332 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
initkrakententacle()
{
level.agent_funcs["kraken_tentacle"] = [];
level.agent_funcs["kraken_tentacle"]["spawn"] = ::alienkrakententaclespawn;
level.agent_funcs["kraken_tentacle"]["on_killed"] = ::alienkrakententaclekilled;
level.agent_funcs["kraken_tentacle"]["on_damaged"] = ::alienkrakententacledamaged;
level.agent_funcs["kraken_tentacle"]["on_damaged_finished"] = ::alienkrakententacledamagefinished;
}
getcurrenttentaclelocationstruct( var_0, var_1 )
{
var_2 = level.alien_types["kraken"].attributes[var_1]["ship_side"] + "_location";
var_3 = level.alien_types["kraken"].attributes[var_0][var_2];
var_4 = common_scripts\utility::getstruct( var_3, "targetname" );
return var_4;
}
alienkrakententaclespawn( var_0 )
{
var_1 = maps\mp\agents\_agent_common::connectnewagent( "kraken_tentacle", "axis" );
var_1.feral_occludes = 1;
var_1 settentaclemodel();
var_1.tentacle_name = var_0;
var_1.extended = 0;
var_1.onenteranimstate = ::onentertentaclestate;
var_2 = getcurrenttentaclelocationstruct( var_0, level.kraken.stage );
var_1 spawnagent( var_2.origin, var_2.angles, "alien_kraken_tentacle_animclass" );
var_1 assigntentacleattributes();
var_1 settentaclescriptfields( var_2.origin );
var_1 scragentsetclipmode( "agent" );
var_1 scragentsetphysicsmode( "noclip" );
var_1 takeallweapons();
var_1.health = 100;
var_1.maxhealth = 100;
var_1.ignoreme = 1;
var_1.alien_type = "tentacle";
var_1 scragentusemodelcollisionbounds();
self scragentsetgoalpos( self.origin );
self scragentsetgoalradius( 20000 );
return var_1;
}
enemychangemonitor()
{
level endon( "game_ended" );
self endon( "death" );
for (;;)
{
self waittill( "enemy" );
self.looktarget = self.enemy;
}
}
isspawning()
{
return isdefined( self.spawning );
}
issmashing()
{
return isdefined( self.performing_melee );
}
isextended()
{
return self.extended;
}
teleportside( var_0 )
{
var_1 = getcurrenttentaclelocationstruct( self.tentacle_name, var_0 );
self setorigin( var_1.origin, 0 );
self setplayerangles( var_1.angles );
self scragentsetorientmode( "face angle abs", var_1.angles, var_1.angles );
self scragentsetgoalpos( var_1.origin );
self scragentsetgoalradius( 20000 );
}
emerge( var_0 )
{
self.melee_type = "emerge";
performmeleeattack( self.enemy );
self.extended = 1;
self setscriptablepartstate( "tentacle", "normal" );
maps\mp\alien\_utility::set_alien_emissive_default( 0.2 );
}
retract()
{
self.melee_type = "retract";
self setscriptablepartstate( "tentacle", "normal" );
maps\mp\alien\_utility::set_alien_emissive_default( 0.2 );
performmeleeattack( self.enemy );
self.extended = 0;
}
heat()
{
self.melee_type = "heat";
thread play_tentacle_heatfx();
performmeleeattack( self.enemy );
}
play_tentacle_heatfx()
{
thread end_tentacle_heat_fx();
self endon( "death" );
self endon( "heat_complete" );
self setmodel( "alien_squid_tentacle_heat_phase" );
wait 17.0;
maps\mp\alien\_utility::set_alien_emissive( 4.0, 1.0 );
for (;;)
{
wait 1.4;
self setscriptablepartstate( "tentacle", "heat_discharge_fx_01" );
wait 1.4;
self setscriptablepartstate( "tentacle", "heat_discharge_fx_02" );
}
self setscriptablepartstate( "tentacle", "normal" );
}
end_tentacle_heat_fx()
{
self endon( "death" );
common_scripts\utility::waittill_any( "heat_complete", "kraken_phase_interrupt" );
wait 0.1;
self setscriptablepartstate( "tentacle", "normal" );
maps\mp\alien\_utility::set_alien_emissive_default( 1.0 );
self setmodel( "alien_squid_tentacle" );
}
death()
{
self.melee_type = "death";
performmeleeattack( self.enemy );
self hide();
}
emp()
{
self endon( "death" );
self.melee_type = "emp";
performmeleeattack( self.enemy );
self setscriptablepartstate( "tentacle", "normal" );
}
smash( var_0 )
{
self.melee_type = "smash";
self.smash_trigger = var_0;
self.performing_melee = 1;
maps\mp\alien\_utility::set_alien_emissive( 0.2, 1.0 );
performmeleeattack( self.enemy );
maps\mp\alien\_utility::set_alien_emissive_default( 0.2 );
self.smash_trigger = undefined;
}
getsmashanimlength()
{
if ( level.kraken.phase == "heat" )
var_0 = "heat_smash";
else
var_0 = "smash";
return maps\mp\agents\alien\alien_kraken\_alien_tentacle_melee::getsmashanimlength( var_0 );
}
heatsmash( var_0 )
{
self.melee_type = "heat_smash";
self.smash_trigger = var_0;
self.performing_melee = 1;
performmeleeattack( self.enemy );
self.smash_trigger = undefined;
}
spawnattack( var_0 )
{
self endon( "death" );
self.melee_type = "spawn";
self.spawning = 1;
self.wave_name = var_0;
performmeleeattack( self.enemy );
}
settentaclemodel()
{
var_0 = level.alien_types["kraken"].attributes["tentacle_model"];
self setmodel( var_0 );
self show();
self motionblurhqenable();
}
assigntentacleattributes()
{
self.moveplaybackrate = 1.0;
self.defaultmoveplaybackrate = self.moveplaybackrate;
self.animplaybackrate = self.moveplaybackrate;
self.xyanimscale = 0.0;
self.defaultemissive = 0.0;
self.maxemissive = level.alien_types["kraken"].attributes["max_emissive"];
thread setinitialemissive();
self scragentsetviewheight( level.alien_types["kraken"].attributes["view_height"] );
}
settentaclescriptfields( var_0 )
{
self.species = "alien";
self.enablestop = 1;
maps\mp\agents\_agent_utility::activateagent();
self.spawntime = gettime();
self.attacking_player = 0;
self.spawnorigin = var_0;
}
setinitialemissive()
{
self endon( "death" );
wait 1;
maps\mp\alien\_utility::set_alien_emissive_default( 0.2 );
}
performmeleeattack( var_0 )
{
if ( !isdefined( var_0 ) )
{
var_0 = maps\mp\agents\alien\alien_kraken\_alien_kraken::findanenemy();
if ( !isdefined( var_0 ) )
return;
}
self scragentsetgoalpos( self.origin );
self scragentsetgoalradius( 64 );
self scragentbeginmelee( var_0 );
self waittill( "melee_complete" );
}
onentertentaclestate( var_0, var_1 )
{
onexitanimstate( var_0, var_1 );
self.currentanimstate = var_1;
switch ( var_1 )
{
case "idle":
maps\mp\agents\alien\alien_kraken\_alien_tentacle_idle::main();
break;
case "melee":
maps\mp\agents\alien\alien_kraken\_alien_tentacle_melee::main();
break;
}
}
onexitanimstate( var_0, var_1 )
{
self notify( "killanimscript" );
switch ( var_0 )
{
case "melee":
maps\mp\agents\alien\alien_kraken\_alien_tentacle_melee::endscript();
break;
}
}
alienkrakententacledamaged( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
var_2 = int( var_2 * level.alien_types["kraken"].attributes["tentacle_damage_multiplier"] );
if ( isdefined( level.kraken ) )
level.kraken maps\mp\agents\alien\alien_kraken\_alien_kraken::alienkrakendamaged( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
else
{
if ( isdefined( var_1.owner ) && isplayer( var_1.owner ) )
var_1.owner thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback( "hitaliensoft" );
else
var_1 thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback( "hitaliensoft" );
if ( isdefined( level.miniboss.hp ) && !common_scripts\utility::flag( "boss_in_pain" ) )
{
level.miniboss.hp = level.miniboss.hp - var_2;
level.miniboss notify( "miniboss_damaged" );
return self [[ maps\mp\agents\_agent_utility::agentfunc( "on_damaged_finished" ) ]]( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
}
}
return 0;
}
alienkrakententacledamagefinished( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
self finishagentdamage( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, 0.0, 0 );
}
alienkrakententaclekilled( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
}
alienminibosstentaclespawn()
{
maps\mp\agents\alien\alien_kraken\_alien_kraken::loadkrakenattributes();
var_0 = maps\mp\agents\_agent_common::connectnewagent( "kraken_tentacle", "axis" );
var_0.feral_occludes = 1;
var_0 setmodel( "Alien_squid_tentacle_scale60" );
var_0.tentacle_name = "miniboss";
var_0.extended = 0;
var_1 = spawn( "script_origin", ( -2250, 400, -2750 ) );
var_1.angles = ( 0, 0, 0 );
var_0 spawnagent( var_1.origin, var_1.angles, "alien_kraken_tentacle_animclass" );
var_0 assigntentacleattributes();
var_0 settentaclescriptfields( var_1.origin );
var_0 scragentsetclipmode( "agent" );
var_0 scragentsetphysicsmode( "noclip" );
var_0 scragentsetorientmode( "face angle abs", var_0.angles );
var_0 scragentsetanimmode( "anim deltas" );
var_0 maps\mp\alien\_utility::enable_alien_scripted();
var_0 scragentsetscripted( 1 );
var_0 takeallweapons();
var_0.health = 9999999;
var_0.maxhealth = 9999999;
var_0.ignoreme = 1;
var_0 scragentusemodelcollisionbounds();
return var_0;
}

View File

@ -0,0 +1,55 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
self endon( "killanimscript" );
init_alien_idle();
for (;;)
{
if ( !self.extended || !isdefined( level.kraken ) || !isdefined( level.kraken.stage ) )
{
wait 0.05;
continue;
}
play_idle();
}
}
init_alien_idle()
{
self.idle_anim_counter = 0;
}
play_idle()
{
var_0 = selectidleanimstate();
var_1 = level.alien_types["kraken"].attributes[self.tentacle_name]["anim_index"];
self scragentsetanimmode( "anim deltas" );
self scragentsetorientmode( "face angle abs", self.angles );
maps\mp\agents\_scriptedagents::playanimnuntilnotetrack( var_0, var_1, "idle", "end" );
if ( !isheatedphaseactive() )
self setscriptablepartstate( "tentacle", "normal" );
}
selectidleanimstate()
{
if ( isheatedphaseactive() )
var_0 = "heat_";
else
var_0 = "idle_";
if ( isdefined( level.kraken.anim_state_modifier ) )
var_0 = var_0 + ( level.kraken.anim_state_modifier + "_" );
var_1 = var_0 + level.alien_types["kraken"].attributes[level.kraken.stage]["ship_side"];
return var_1;
}
isheatedphaseactive()
{
return level.kraken.phase == "heat";
}

View File

@ -0,0 +1,463 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
self endon( "killanimscript" );
self scragentsetphysicsmode( "noclip" );
var_0 = gettime();
self scragentsetorientmode( "face angle abs", self.angles );
switch ( self.melee_type )
{
case "emerge":
emerge();
break;
case "retract":
retract();
break;
case "heat":
heat();
break;
case "smash":
smash();
break;
case "heat_smash":
heat_smash();
break;
case "spawn":
spawnattack();
break;
case "emp":
emp();
break;
case "death":
death();
break;
default:
break;
}
if ( var_0 == gettime() )
wait 0.05;
self notify( "melee_complete" );
}
endscript()
{
self.performing_melee = undefined;
self.spawning = undefined;
if ( isdefined( self.spawn_count ) && self.spawn_count > 0 )
maps\mp\alien\_spawn_director::release_custom_spawn_space( self.spawn_count );
}
emerge()
{
var_0 = getsideanimstate( "emerge_" );
playanim( var_0 );
}
handleheatenternotetracks( var_0, var_1, var_2, var_3 )
{
switch ( var_0 )
{
case "ten_hit":
playheatenterquake();
break;
case "tnt_chrg_pt_l1":
thread maps\mp\mp_alien_beacon::beacon_play_sound_on_moving_tag( "tnt_chrg_pt_l1", "tag_hole", 8 );
break;
case "tnt_chrg_pt_l2":
thread maps\mp\mp_alien_beacon::beacon_play_sound_on_moving_tag( "tnt_chrg_pt_l2", "tag_hole", 5 );
break;
case "tnt_chrg_pt_r1":
thread maps\mp\mp_alien_beacon::beacon_play_sound_on_moving_tag( "tnt_chrg_pt_r1", "tag_hole", 5 );
break;
case "tnt_chrg_pt_r2":
thread maps\mp\mp_alien_beacon::beacon_play_sound_on_moving_tag( "tnt_chrg_pt_r2", "tag_hole", 8 );
break;
case "tnt_chrg_sb_l1":
thread maps\mp\mp_alien_beacon::beacon_play_sound_on_moving_tag( "tnt_chrg_sb_l1", "tag_hole", 4.5 );
break;
case "tnt_chrg_sb_l2":
thread maps\mp\mp_alien_beacon::beacon_play_sound_on_moving_tag( "tnt_chrg_sb_l2", "tag_hole", 2 );
break;
case "tnt_chrg_sb_r1":
thread maps\mp\mp_alien_beacon::beacon_play_sound_on_moving_tag( "tnt_chrg_sb_r1", "tag_hole", 3.5 );
break;
case "tnt_chrg_sb_r2":
thread maps\mp\mp_alien_beacon::beacon_play_sound_on_moving_tag( "tnt_chrg_sb_r2", "tag_hole", 4 );
break;
}
}
playheatenterquake()
{
var_0 = 0.5;
var_1 = 0.5;
var_2 = 2500;
var_3 = self gettagorigin( "TAG_HOLE" );
earthquake( var_0, var_1, var_3, var_2 );
}
retract()
{
var_0 = getsideanimstate( "retract_" );
playanim( var_0 );
}
emp()
{
var_0 = getsideanimstate( "emp_" );
playanim( var_0 );
}
death()
{
playanim( "death" );
self suicide();
}
heat()
{
self endon( "heat_complete" );
var_0 = level.alien_types["kraken"].attributes[level.kraken.stage]["ship_side"];
var_1 = getsideanimstate( "slam_" );
playanim( var_1, undefined, ::handleheatenternotetracks );
self.extended = 1;
}
getsmashanimlength( var_0 )
{
var_1 = getsmashanimname( var_0 );
var_2 = level.alien_types["kraken"].attributes[self.tentacle_name]["anim_index"];
var_3 = self getanimentry( var_1, var_2 );
return getanimlength( var_3 );
}
getsmashanimname( var_0 )
{
var_0 = var_0 + "_";
if ( isdefined( level.kraken.anim_state_modifier ) )
var_0 = var_0 + ( level.kraken.anim_state_modifier + "_" );
var_1 = getsideanimstate( var_0 );
return var_1;
}
smash()
{
var_0 = getsmashanimname( "smash" );
dosmash( var_0 );
}
getsmashtriggerorigin()
{
if ( !isdefined( self.smash_trigger ) || !isdefined( self.smash_trigger.target ) )
return undefined;
var_0 = common_scripts\utility::getstruct( self.smash_trigger.target, "targetname" );
if ( !isdefined( var_0 ) )
return undefined;
return var_0.origin;
}
smashlerp( var_0, var_1, var_2 )
{
self endon( "death" );
self endon( "smash_complete" );
var_3 = 1.0;
var_4 = getanimlength( var_0 );
if ( !errorchecksmashlerp( var_0, var_1, var_4, var_3 ) )
return;
var_5 = gettime();
self waittill( "start_smash_lerp" );
performsmashlerp( var_2, var_0, var_5, var_4, var_3 );
self waittill( "start_smash_reverse_lerp" );
performsmashlerp( var_2 * -1, var_0, var_5, var_4, var_3 );
}
errorchecksmashlerp( var_0, var_1, var_2, var_3 )
{
var_4 = 1.0;
return var_2 >= var_3 * 2 + var_4;
}
getsmashanimdelta( var_0, var_1, var_2 )
{
var_3 = getmovedelta( var_0, var_1, var_2 );
return rotatevector( var_3, self.angles );
}
performsmashlerp( var_0, var_1, var_2, var_3, var_4 )
{
var_5 = ( gettime() - var_2 ) * 0.001;
var_6 = var_5 / var_3;
var_7 = ( var_5 + var_4 ) / var_3;
if ( var_6 >= 1.0 )
return;
var_7 = clamp( var_7, var_6, 1.0 );
var_8 = getsmashanimdelta( var_1, var_6, var_7 );
self scragentdoanimlerp( self.origin, self.origin + var_0 + var_8, var_4 );
wait( var_4 );
self scragentsetanimmode( "anim deltas" );
}
getclosestsmashtarget( var_0 )
{
var_1 = undefined;
var_2 = 1410065408;
var_3 = self.smash_trigger getistouchingentities( level.players );
foreach ( var_5 in var_3 )
{
var_6 = distance2dsquared( var_5.origin, var_0 );
if ( var_6 < var_2 )
{
var_1 = var_5;
var_2 = var_6;
}
}
return var_1;
}
heat_smash()
{
var_0 = getsmashanimname( "heat_smash" );
dosmash( var_0 );
}
dosmash( var_0 )
{
var_1 = getsmashtriggerorigin();
var_2 = self.origin;
if ( isdefined( var_1 ) )
{
var_3 = getclosestsmashtarget( var_1 );
if ( isdefined( var_3 ) )
{
var_4 = 400;
var_5 = ( var_3.origin - var_1 ) * ( 1, 1, 0 );
var_6 = length( var_5 );
if ( var_6 > var_4 )
var_5 = vectornormalize( var_5 ) * var_4;
var_7 = level.alien_types["kraken"].attributes[self.tentacle_name]["anim_index"];
var_8 = self getanimentry( var_0, var_7 );
var_9 = self getanimentryname( var_0, var_7 );
thread smashlerp( var_8, var_9, var_5 );
}
}
playanim( var_0, undefined, ::handlesmashnotetracks );
self setorigin( var_2, 0 );
self notify( "smash_complete" );
}
handlesmashnotetracks( var_0, var_1, var_2, var_3 )
{
switch ( var_0 )
{
case "smash":
smashdamage();
break;
case "heat_smash":
smashdamage();
thread heat_smash_fx();
break;
case "pre_smash":
smashplayersback();
break;
case "smash_sfx":
thread maps\mp\mp_alien_beacon::beacon_play_sound_on_moving_tag( "kraken_tent_smash", "tag_hole", 6 );
break;
case "lerp":
self notify( "start_smash_lerp" );
break;
case "reverse_lerp":
self notify( "start_smash_reverse_lerp" );
break;
}
}
smashdamage()
{
var_0 = 0.5;
var_1 = 0.5;
var_2 = self gettagorigin( "TAG_HOLE" );
var_3 = level.alien_types["kraken"].attributes[level.kraken.stage]["smash_radius"];
radiusdamage( var_2, var_3, level.alien_types["kraken"].attributes[level.kraken.stage]["smash_inner_damage"], level.alien_types["kraken"].attributes[level.kraken.stage]["smash_outer_damage"], level.kraken, "MOD_MELEE" );
}
heat_smash_fx()
{
var_0 = self gettagorigin( "TAG_HOLE" );
playfx( level._effect["tentacle_hit_heat"], var_0 );
}
smashplayersback()
{
var_0 = 1500.0;
var_1 = 122500;
var_2 = 1750;
var_3 = 1.0;
var_4 = 0.75;
var_5 = self gettagorigin( "TAG_HOLE" );
var_6 = level.alien_types["kraken"].attributes[level.kraken.stage]["smash_radius"];
earthquake( var_3, var_4, var_5, var_6 * 4 );
foreach ( var_8 in level.players )
{
if ( distance2dsquared( var_8.origin, var_5 ) > var_1 )
continue;
var_9 = var_8 getvelocity();
var_10 = vectornormalize( ( var_8.origin - var_5 ) * ( 1, 1, 0 ) ) * var_2;
var_11 = ( var_9 + var_10 ) * ( 1, 1, 0 );
var_12 = length( var_11 );
if ( var_12 >= var_0 )
var_11 = vectornormalize( var_11 ) * var_0;
var_8 setvelocity( var_11 );
var_8 shellshock( "alien_kraken_emp", 2.0 );
}
thread maps\mp\agents\alien\alien_kraken\_alien_kraken_melee::performempdamage_on_smash( var_5 );
}
spawnattack()
{
buildspawnwave();
self.spawn_count = int( maps\mp\alien\_spawn_director::reserve_custom_spawn_space( self.current_spawn_wave.size, 1 ) );
if ( self.spawn_count == 0 )
return;
self.current_spawn_index = 0;
var_0 = getsideanimstate( "spawn_" );
var_1 = "spawn_complete";
playanim( var_0, var_1, ::spawnnotetrackhandler );
}
buildspawnwave()
{
var_0 = level.kraken_spawn_waves[self.wave_name];
self.current_spawn_wave = [];
foreach ( var_2 in var_0 )
{
var_3 = strtok( var_2, "-" );
var_4 = int( var_3[1] );
if ( var_3.size > 2 && int( var_3[2] ) > var_4 )
{
var_5 = int( var_3[2] );
var_6 = randomintrange( var_4, var_5 );
}
else
var_6 = var_4;
for ( var_7 = 0; var_7 < var_6; var_7++ )
self.current_spawn_wave[self.current_spawn_wave.size] = var_3[0];
}
}
spawnnotetrackhandler( var_0, var_1, var_2, var_3 )
{
switch ( var_0 )
{
case "ten_spawn":
if ( self.spawn_count > 0 )
{
var_4 = getspawnpoint();
var_5 = self.current_spawn_wave[self.current_spawn_index];
var_6 = getspawnaniminfo();
maps\mp\alien\_spawn_director::process_custom_spawn( var_5, var_4, var_6 );
self.spawn_count--;
self.current_spawn_index++;
var_4 delete();
}
break;
case "spawn_sfx1":
thread maps\mp\mp_alien_beacon::beacon_play_sound_on_moving_tag( "krk_tnt_spwn01", "tag_hole", 7.5 );
break;
case "spawn_sfx2":
thread maps\mp\mp_alien_beacon::beacon_play_sound_on_moving_tag( "krk_tnt_spwn02", "tag_hole", 7.5 );
break;
case "spawn_sfx3":
thread maps\mp\mp_alien_beacon::beacon_play_sound_on_moving_tag( "krk_tnt_spwn03", "tag_hole", 7.5 );
break;
case "spawn_sfx4":
thread maps\mp\mp_alien_beacon::beacon_play_sound_on_moving_tag( "krk_tnt_spwn04", "tag_hole", 7.5 );
break;
case "spawn_sfx5":
thread maps\mp\mp_alien_beacon::beacon_play_sound_on_moving_tag( "krk_tnt_spwn05", "tag_hole", 7.5 );
break;
case "spawn_sfx6":
thread maps\mp\mp_alien_beacon::beacon_play_sound_on_moving_tag( "krk_tnt_spwn06", "tag_hole", 7.5 );
break;
}
}
play_tentacle_vomit_spawn_fx()
{
self endon( "death" );
playfxontag( level._effect["tentacle_vomit"], self, "tag_hole" );
}
getspawnaniminfo()
{
var_0 = ";";
var_1 = "flexible_height_spawn";
var_2 = 0;
var_3 = "NONE";
var_4 = "end";
var_5 = "queen_dirt_1";
return var_1 + var_0 + var_2 + var_0 + var_1 + var_0 + var_4 + var_0 + var_3 + var_0 + var_3 + var_0 + var_3 + var_0 + var_5;
}
getspawnpoint()
{
var_0 = "Tag_hole";
var_1 = self gettagorigin( var_0 );
var_2 = ( 0, 0, 0 );
var_3 = spawn( "script_origin", var_1 );
var_3.angles = var_2;
return var_3;
}
getsideanimstate( var_0 )
{
var_1 = level.alien_types["kraken"].attributes[level.kraken.stage]["ship_side"];
return var_0 + var_1;
}
playanim( var_0, var_1, var_2, var_3 )
{
if ( isdefined( var_1 ) )
self endon( var_1 );
var_4 = level.alien_types["kraken"].attributes[self.tentacle_name]["anim_index"];
if ( !isdefined( var_3 ) || var_3 )
self scragentsetanimmode( "anim deltas" );
self scragentsetorientmode( "face angle abs", self.angles );
maps\mp\agents\_scriptedagents::playanimnuntilnotetrack( var_0, var_4, var_0, "end", var_2 );
}