init
This commit is contained in:
1146
maps/mp/agents/alien/alien_kraken/_alien_kraken.gsc
Normal file
1146
maps/mp/agents/alien/alien_kraken/_alien_kraken.gsc
Normal file
File diff suppressed because it is too large
Load Diff
79
maps/mp/agents/alien/alien_kraken/_alien_kraken_idle.gsc
Normal file
79
maps/mp/agents/alien/alien_kraken/_alien_kraken_idle.gsc
Normal 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;
|
||||
}
|
825
maps/mp/agents/alien/alien_kraken/_alien_kraken_melee.gsc
Normal file
825
maps/mp/agents/alien/alien_kraken/_alien_kraken_melee.gsc
Normal 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":
|
||||
}
|
||||
}
|
332
maps/mp/agents/alien/alien_kraken/_alien_kraken_tentacle.gsc
Normal file
332
maps/mp/agents/alien/alien_kraken/_alien_kraken_tentacle.gsc
Normal 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;
|
||||
}
|
55
maps/mp/agents/alien/alien_kraken/_alien_tentacle_idle.gsc
Normal file
55
maps/mp/agents/alien/alien_kraken/_alien_tentacle_idle.gsc
Normal 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";
|
||||
}
|
463
maps/mp/agents/alien/alien_kraken/_alien_tentacle_melee.gsc
Normal file
463
maps/mp/agents/alien/alien_kraken/_alien_tentacle_melee.gsc
Normal 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 );
|
||||
}
|
Reference in New Issue
Block a user