531 lines
17 KiB
Plaintext
531 lines
17 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
enemyhq_vip_pre_load()
|
|
{
|
|
common_scripts\utility::flag_init( "start_sniper_vip_breach" );
|
|
common_scripts\utility::flag_init( "vip_breach_hot" );
|
|
common_scripts\utility::flag_init( "done_sniping_early" );
|
|
common_scripts\utility::flag_init( "sniping_done" );
|
|
common_scripts\utility::flag_init( "interrogation_done" );
|
|
common_scripts\utility::flag_init( "clear_left" );
|
|
common_scripts\utility::flag_init( "clear_right" );
|
|
common_scripts\utility::flag_init( "interrogatee_killed" );
|
|
common_scripts\utility::flag_init( "vip_done" );
|
|
}
|
|
|
|
setup_vip()
|
|
{
|
|
level.start_point = "vip";
|
|
maps\enemyhq::setup_common();
|
|
thread maps\enemyhq_audio::aud_check( "vip" );
|
|
maps\enemyhq_code::safe_activate_trigger_with_targetname( "vip_allies_set_up" );
|
|
}
|
|
|
|
begin_vip()
|
|
{
|
|
level.sniper_vision_override = "enemyhq_sniper_view_b";
|
|
thread maps\_utility::battlechatter_off( "allies" );
|
|
thread maps\_utility::battlechatter_off( "axis" );
|
|
maps\_utility::delaythread( 0.05, maps\_utility::set_team_bcvoice, "allies", "taskforce" );
|
|
level.dog maps\enemyhq_code::set_dog_scripted_mode( level.player );
|
|
maps\_utility::autosave_by_name( "vip_room" );
|
|
level.remote_sniper_return_struct = common_scripts\utility::getstruct( "vip_return_struct", "targetname" );
|
|
level.dog maps\enemyhq_code::lock_player_control();
|
|
thread ally_vo();
|
|
common_scripts\utility::flag_wait( "setup_vip_enemies" );
|
|
thread maps\enemyhq_code::handle_leave_team_fail( "leaving_VIP", "left_VIP" );
|
|
thread animate_vip_enemies();
|
|
thread animate_ally_breach();
|
|
thread maps\enemyhq_code::toggle_ally_outlines( 0 );
|
|
thread vip_handle_ps4_ssao();
|
|
common_scripts\utility::array_thread( level.allies, maps\_utility::disable_surprise );
|
|
common_scripts\utility::array_thread( level.allies, maps\_utility::disable_pain );
|
|
level.player waittill( "player_switching_to_tablet" );
|
|
common_scripts\utility::flag_set( "start_sniper_vip_breach" );
|
|
thread maps\enemyhq_audio::aud_start_sniper( "enhq_atrium_covered" );
|
|
common_scripts\utility::exploder( 8 );
|
|
common_scripts\utility::exploder( 1111 );
|
|
common_scripts\utility::exploder( 890 );
|
|
maps\_utility::stop_exploder( 9090 );
|
|
maps\_utility::stop_exploder( 9080 );
|
|
maps\_utility::stop_exploder( 5700 );
|
|
maps\_utility::stop_exploder( 5600 );
|
|
maps\_utility::stop_exploder( 8010 );
|
|
maps\_utility::stop_exploder( 9094 );
|
|
level waittill( "vip_breach_hot" );
|
|
level.player waittill( "remote_sniper_pad_down" );
|
|
level.player disableweaponswitch();
|
|
level.player disableweapons();
|
|
setsaveddvar( "ammoCounterHide", 1 );
|
|
common_scripts\utility::flag_set( "sniping_done" );
|
|
maps\_utility::stop_exploder( 8011 );
|
|
common_scripts\utility::exploder( 89 );
|
|
level.player disableweaponpickup();
|
|
var_0 = common_scripts\utility::getstruct( "new_vip_breach_e5", "targetname" );
|
|
thread delete_corpses_around_origin( var_0.origin, 120 );
|
|
var_1 = getaiarray( "axis" );
|
|
common_scripts\utility::array_thread( var_1, maps\enemyhq_code::die_quietly );
|
|
thread player_back_from_sniping();
|
|
common_scripts\utility::flag_wait_any( "interrogatee_killed", "start_rpg_ambush" );
|
|
level.player enableweapons();
|
|
level.player enableweaponswitch();
|
|
level.player takeweapon( "freerunner" );
|
|
level.player switchtoweaponimmediate( level.pre_pre_sniping_weapon );
|
|
setsaveddvar( "ammoCounterHide", 0 );
|
|
level.player enableweaponpickup();
|
|
|
|
if ( !common_scripts\utility::flag( "start_rpg_ambush" ) )
|
|
maps\enemyhq_code::safe_activate_trigger_with_targetname( "traversal_allies1" );
|
|
|
|
common_scripts\utility::flag_wait_any( "interrogation_done", "start_rpg_ambush" );
|
|
|
|
if ( !common_scripts\utility::flag( "interrogation_done" ) )
|
|
{
|
|
common_scripts\utility::flag_set( "interrogation_done" );
|
|
common_scripts\utility::array_thread( level.allies, maps\_utility::anim_stopanimscripted );
|
|
common_scripts\utility::array_thread( level.allies, maps\_utility::enable_ai_color );
|
|
|
|
if ( isalive( level.interogatee ) )
|
|
{
|
|
level.interogatee maps\_utility::stop_magic_bullet_shield();
|
|
level.interogatee maps\_utility::anim_stopanimscripted();
|
|
level.interogatee maps\_utility::die();
|
|
}
|
|
|
|
level.dog maps\_utility::anim_stopanimscripted();
|
|
level.dog maps\_utility::enable_ai_color();
|
|
level.dog maps\_utility_dogs::disable_dog_sniff();
|
|
}
|
|
|
|
if ( isdefined( level.knife ) )
|
|
hide_knife( level.allies[1] );
|
|
|
|
common_scripts\utility::array_thread( level.allies, maps\_utility::enable_surprise );
|
|
common_scripts\utility::array_thread( level.allies, maps\_utility::enable_pain );
|
|
}
|
|
|
|
vip_handle_ps4_ssao()
|
|
{
|
|
if ( !level.ps4 )
|
|
return;
|
|
|
|
level.player waittill( "remote_sniper_pad_down" );
|
|
setsaveddvar( "r_ssaoScriptScale", 0 );
|
|
common_scripts\utility::flag_wait( "start_pre_rpg_ambush" );
|
|
maps\_art::enable_ssao_over_time( 2 );
|
|
}
|
|
|
|
auto_breach()
|
|
{
|
|
common_scripts\utility::flag_wait( "start_sniper_vip_breach" );
|
|
wait 8.0;
|
|
level notify( "vip_breach_hot" );
|
|
}
|
|
|
|
animate_vip_enemies()
|
|
{
|
|
var_0 = getent( "vip_enemy_volume", "targetname" );
|
|
var_1 = getentarray( "new_vip_enemy", "targetname" );
|
|
var_2 = [];
|
|
|
|
foreach ( var_4 in var_1 )
|
|
{
|
|
var_5 = var_4.script_noteworthy;
|
|
var_6 = common_scripts\utility::getstruct( var_4.target, "targetname" );
|
|
var_7 = var_4 maps\_utility::spawn_ai( 1 );
|
|
var_7 thread vip_notify_on_death();
|
|
var_7.animname = var_5;
|
|
var_7.struct = var_6;
|
|
var_7.allowdeath = 1;
|
|
|
|
if ( isdefined( level.scr_anim[var_5]["new_vip_enemy_intro"] ) )
|
|
var_6 thread vip_enemy_animate_intro( var_7 );
|
|
else
|
|
var_6 thread maps\_anim::anim_loop_solo( var_7, "new_vip_enemy", "stop_loop" );
|
|
|
|
var_7 thread vip_enemy_interrupt( var_0 );
|
|
var_2 = common_scripts\utility::array_add( var_2, var_7 );
|
|
}
|
|
|
|
thread maps\enemyhq_code::ai_array_killcount_flag_set( var_2, var_2.size, "done_sniping_early" );
|
|
level waittill( "vip_breach_hot" );
|
|
wait 0.25;
|
|
|
|
foreach ( var_7 in var_2 )
|
|
{
|
|
if ( isalive( var_7 ) )
|
|
var_7 notify( "go_time" );
|
|
}
|
|
}
|
|
|
|
vip_notify_on_death()
|
|
{
|
|
var_0 = undefined;
|
|
|
|
switch ( self.script_noteworthy )
|
|
{
|
|
case "new_vip_e2":
|
|
var_0 = "clear_left";
|
|
break;
|
|
case "new_vip_e4":
|
|
var_0 = "clear_right";
|
|
break;
|
|
}
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
self waittill( "death" );
|
|
common_scripts\utility::flag_set( var_0 );
|
|
}
|
|
}
|
|
|
|
vip_enemy_animate_intro( var_0 )
|
|
{
|
|
var_0 endon( "death" );
|
|
var_0 endon( "go_time" );
|
|
var_1 = self;
|
|
var_1 thread maps\_anim::anim_first_frame_solo( var_0, "new_vip_enemy_intro" );
|
|
common_scripts\utility::flag_wait( "start_sniper_vip_breach" );
|
|
wait 2;
|
|
var_1 maps\_anim::anim_single_solo( var_0, "new_vip_enemy_intro" );
|
|
var_1 thread maps\_anim::anim_loop_solo( var_0, "new_vip_enemy", "stop_loop" );
|
|
}
|
|
|
|
vip_enemy_interrupt( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
common_scripts\utility::waittill_any( "death", "damage", "go_time" );
|
|
self notify( "go_time" );
|
|
|
|
if ( isdefined( self.struct ) )
|
|
self.struct notify( "stop_loop" );
|
|
|
|
maps\_utility::anim_stopanimscripted();
|
|
self.allowdeath = 1;
|
|
self.ignoreme = 0;
|
|
maps\_utility::enable_ai_color();
|
|
thread maps\_anim::anim_single_solo( self, "vip_breach_react" );
|
|
|
|
if ( isdefined( level.breach_react_starttime[self.animname]["vip_breach_react"] ) )
|
|
{
|
|
var_1 = level.scr_anim[self.animname]["vip_breach_react"];
|
|
var_2 = getanimlength( var_1 );
|
|
var_3 = level.breach_react_starttime[self.animname]["vip_breach_react"] / var_2;
|
|
self setanimtime( var_1, var_3 );
|
|
}
|
|
|
|
self waittillmatch( "single anim", "end" );
|
|
wait( randomfloatrange( 0.1, 0.25 ) );
|
|
self.ignoreall = 0;
|
|
}
|
|
|
|
vip_dog_attack()
|
|
{
|
|
var_0 = maps\_utility::make_array( "new_vip_e6", "new_vip_e5", "new_vip_e2", "new_vip_e2", "new_vip_e1" );
|
|
var_1 = [];
|
|
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
var_4 = getentarray( var_3, "script_noteworthy" );
|
|
var_3 = pickai( var_4 );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
var_3.name = var_3.script_noteworthy;
|
|
var_3.script_friendname = var_3.script_noteworthy;
|
|
var_1[var_1.size] = var_3;
|
|
}
|
|
}
|
|
|
|
level.dog maps\enemyhq_code::dog_attack_targets_by_priority( var_1, "sniping_done", 1 );
|
|
}
|
|
|
|
pickai( var_0 )
|
|
{
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( isdefined( var_2 ) && isai( var_2 ) && isalive( var_2 ) )
|
|
return var_2;
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
|
|
animate_ally_breach()
|
|
{
|
|
var_0 = common_scripts\utility::getstruct( "vip_breach1b", "targetname" );
|
|
level waittill( "vip_breach_hot" );
|
|
wait 0.5;
|
|
thread open_vip_doors();
|
|
var_1 = 1;
|
|
|
|
foreach ( var_3 in level.allies )
|
|
{
|
|
var_3.animname = "ally" + maps\_utility::string( var_1 );
|
|
|
|
if ( var_1 > 1 )
|
|
var_0 = common_scripts\utility::getstruct( "vip_breach1", "targetname" );
|
|
|
|
var_0 thread maps\_anim::anim_single_solo( var_3, "vip_breach" );
|
|
var_1++;
|
|
}
|
|
|
|
thread maps\enemyhq_code::toggle_ally_outlines( 1 );
|
|
maps\enemyhq_code::safe_activate_trigger_with_targetname( "vip_allies_enter" );
|
|
thread vip_dog_attack();
|
|
}
|
|
|
|
open_vip_doors()
|
|
{
|
|
var_0 = getent( "vip_doorhandle_l", "targetname" );
|
|
var_1 = getent( "vip_doorhandle_r", "targetname" );
|
|
var_2 = getent( "vip_door_l", "targetname" );
|
|
var_3 = getent( "vip_door_r", "targetname" );
|
|
var_1 linkto( var_3 );
|
|
var_0 linkto( var_2 );
|
|
var_1 notsolid();
|
|
var_0 notsolid();
|
|
var_2 rotateyaw( 93, 0.2, 0.1, 0.1 );
|
|
var_2 disconnectpaths();
|
|
var_2 connectpaths();
|
|
var_3 rotateyaw( -92, 0.2, 0.1, 0.1 );
|
|
var_3 disconnectpaths();
|
|
var_3 connectpaths();
|
|
}
|
|
|
|
player_back_from_sniping()
|
|
{
|
|
thread handle_vip_drones();
|
|
level.knife = spawn( "script_model", ( 0, 0, 0 ) );
|
|
level.knife setmodel( "weapon_knife_iw6" );
|
|
level.knife hide();
|
|
level.dog maps\_utility_dogs::enable_dog_sniff();
|
|
var_0 = getnode( "vip_hesh_loc", "targetname" );
|
|
level.allies[2] maps\_utility::teleport_ai( var_0 );
|
|
maps\enemyhq_code::safe_activate_trigger_with_targetname( "vip_allies_search" );
|
|
var_1 = getent( "vip_interrogatee", "targetname" );
|
|
var_2 = var_1 maps\_utility::spawn_ai( 1 );
|
|
level.interogatee = var_2;
|
|
var_3 = common_scripts\utility::getstruct( "vip_interrogate", "targetname" );
|
|
var_4 = maps\_utility::make_array( level.allies[1], level.allies[2], var_2, level.dog );
|
|
level.allies[1].animname = "goodguy";
|
|
level.allies[2].animname = "hesh";
|
|
level.dog.animname = "dog";
|
|
var_2.animname = "badguy";
|
|
var_2 maps\_utility::magic_bullet_shield();
|
|
level.dog maps\_utility::anim_stopanimscripted();
|
|
level.dog unlink();
|
|
common_scripts\utility::waitframe();
|
|
var_3 maps\_anim::anim_first_frame( var_4, "vip_interrogate" );
|
|
common_scripts\utility::flag_wait_or_timeout( "start_interrogation_anims", 15 );
|
|
common_scripts\utility::flag_set( "start_interrogation_anims" );
|
|
var_3 thread maps\_anim::anim_single_run( var_4, "vip_interrogate" );
|
|
thread let_player_through();
|
|
wait 11;
|
|
common_scripts\utility::array_thread( level.allies, maps\_utility::enable_ai_color );
|
|
maps\enemyhq_code::safe_activate_trigger_with_targetname( "vip_allies_pre_leave" );
|
|
level.dog maps\_utility::enable_ai_color();
|
|
level.dog waittillmatch( "single anim", "end" );
|
|
wait 2;
|
|
level.dog maps\_utility_dogs::disable_dog_sniff();
|
|
level.allies[1] waittillmatch( "single anim", "end" );
|
|
common_scripts\utility::flag_set( "interrogation_done" );
|
|
}
|
|
|
|
keegan_vip_line1( var_0 )
|
|
{
|
|
if ( !common_scripts\utility::flag( "start_pre_rpg_ambush" ) )
|
|
level.allies[1] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_kgn_whereishe" );
|
|
}
|
|
|
|
keegan_vip_line2( var_0 )
|
|
{
|
|
if ( !common_scripts\utility::flag( "start_pre_rpg_ambush" ) )
|
|
level.allies[1] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_kgn_whereishe_4" );
|
|
}
|
|
|
|
badguyline1( var_0 )
|
|
{
|
|
var_0 maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_saf1_getthatdogaway" );
|
|
}
|
|
|
|
badguyline2( var_0 )
|
|
{
|
|
var_0 maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_fs5_idontknowwhere" );
|
|
}
|
|
|
|
badguyline3( var_0 )
|
|
{
|
|
var_0 maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_saf1_iidontdeath" );
|
|
}
|
|
|
|
let_player_through()
|
|
{
|
|
wait 15;
|
|
var_0 = getent( "vip_player_clip", "targetname" );
|
|
var_0 notsolid();
|
|
common_scripts\utility::flag_set( "vip_done" );
|
|
}
|
|
|
|
show_knife( var_0 )
|
|
{
|
|
level.knife linkto( var_0, "tag_inhand", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
level.knife show();
|
|
}
|
|
|
|
hide_knife( var_0 )
|
|
{
|
|
level.knife unlink();
|
|
level.knife hide();
|
|
level.knife delete();
|
|
}
|
|
|
|
set_search_walk( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 1;
|
|
|
|
self.disablearrivals = var_0;
|
|
self.disableexits = var_0;
|
|
|
|
if ( var_0 )
|
|
{
|
|
self.animname = "generic";
|
|
maps\_utility::set_run_anim( "search_walk", 1 );
|
|
}
|
|
else
|
|
maps\_utility::clear_run_anim();
|
|
}
|
|
|
|
handle_vip_drones()
|
|
{
|
|
level endon( "death" );
|
|
thread handle_drone_nags();
|
|
var_0 = getentarray( "vip_drone", "targetname" );
|
|
var_0 = common_scripts\utility::array_randomize( var_0 );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
var_2 spawn_vip_drone();
|
|
wait( randomfloatrange( 0.2, 0.75 ) );
|
|
}
|
|
}
|
|
|
|
spawn_vip_drone()
|
|
{
|
|
var_0 = maps\_utility::dronespawn( self );
|
|
var_0.spawner = self;
|
|
var_0 thread handle_vip_drone();
|
|
}
|
|
|
|
handle_vip_drone()
|
|
{
|
|
self endon( "death" );
|
|
thread nag_if_shot();
|
|
common_scripts\utility::waittill_any( "goal", "death" );
|
|
|
|
if ( !common_scripts\utility::flag( "traverse_done" ) )
|
|
self.spawner spawn_vip_drone();
|
|
|
|
self delete();
|
|
}
|
|
|
|
nag_if_shot()
|
|
{
|
|
self endon( "death" );
|
|
level endon( "traverse_done" );
|
|
|
|
for (;;)
|
|
{
|
|
common_scripts\utility::waittill_any( "damage", "bulletwhizby" );
|
|
level notify( "shot_drone" );
|
|
}
|
|
}
|
|
|
|
handle_drone_nags()
|
|
{
|
|
level endon( "traverse_done" );
|
|
var_0 = [];
|
|
var_0[0] = "enemyhq_mrk_logangetoverit";
|
|
var_0[1] = "enemyhq_mrk_knockitoff";
|
|
var_0[2] = "enemyhq_mrk_lastthingweneed";
|
|
var_1 = 0;
|
|
|
|
while ( !common_scripts\utility::flag( "traverse_done" ) )
|
|
{
|
|
level waittill( "shot_drone" );
|
|
level.player maps\enemyhq_code::radio_dialog_add_and_go( var_0[var_1] );
|
|
wait 2;
|
|
var_1++;
|
|
|
|
if ( var_1 >= var_0.size )
|
|
var_1 = 0;
|
|
}
|
|
}
|
|
|
|
ally_vo()
|
|
{
|
|
thread maps\enemyhq_audio::aud_enemy_muffled_vo( "vip_breach_hot", "vip_conv_loc", "start_vip_conv" );
|
|
common_scripts\utility::flag_wait( "setup_vip_enemies" );
|
|
thread maps\_utility::autosave_tactical();
|
|
level.allies[0] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_mrk_thisshouldbewhere" );
|
|
thread maps\enemyhq_code::nag_player_until_flag( level.allies[0], "start_sniper_vip_breach", "enemyhq_mrk_adamscopeitout", "enemyhq_mrk_usetheremotesniper", "enemyhq_mrk_getonthatremote" );
|
|
wait 1;
|
|
level.pre_pre_sniping_weapon = level.player getcurrentweapon();
|
|
common_scripts\utility::flag_set( "activate_vip_sniper" );
|
|
thread maps\enemyhq_code::sniper_hint( "start_sniper_vip_breach", 4 );
|
|
common_scripts\utility::flag_wait( "start_sniper_vip_breach" );
|
|
wait 2;
|
|
maps\_utility::delaythread( 0.5, maps\enemyhq_code::nag_player_until_flag, level.player, "vip_breach_hot", "enemyhq_mrk_wellbreachonyour", "enemyhq_mrk_onyou", "enemyhq_mrk_takeashot" );
|
|
level waittill( "vip_breach_hot" );
|
|
common_scripts\utility::flag_set( "vip_breach_hot" );
|
|
thread maps\enemyhq_audio::aud_vip_breach();
|
|
maps\_utility::radio_dialogue_stop();
|
|
wait 0.25;
|
|
thread maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_mrk_gogogo" );
|
|
wait 1;
|
|
thread ally_breach_vo();
|
|
common_scripts\utility::flag_wait( "sniping_done" );
|
|
maps\_utility::radio_dialogue_stop();
|
|
thread maps\enemyhq_audio::aud_interrogation();
|
|
level.allies[0] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_mrk_roomsecure" );
|
|
level.allies[0] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_mrk_hesnothere" );
|
|
wait 0.5;
|
|
level endon( "start_pre_rpg_ambush" );
|
|
level.allies[1] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_kgn_whereishe_2" );
|
|
wait 0.5;
|
|
level.allies[1] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_kgn_whereishe_3" );
|
|
wait 0.5;
|
|
level.allies[1] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_kgn_wheredidyoutake" );
|
|
common_scripts\utility::flag_wait( "start_interrogation_anims" );
|
|
}
|
|
|
|
delete_corpses_around_origin( var_0, var_1 )
|
|
{
|
|
var_2 = getcorpsearray();
|
|
|
|
foreach ( var_4 in var_2 )
|
|
{
|
|
if ( distance( var_4.origin, var_0 ) < var_1 )
|
|
var_4 delete();
|
|
}
|
|
}
|
|
|
|
ally_breach_vo()
|
|
{
|
|
level endon( "sniping_done" );
|
|
level.player maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_mrk_12oclock12oclock" );
|
|
level.player maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_hsh_runnerontheleft" );
|
|
common_scripts\utility::flag_wait( "clear_right" );
|
|
level.player maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_mrk_clearright" );
|
|
common_scripts\utility::flag_wait( "clear_left" );
|
|
level.player maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_kgn_clearleft" );
|
|
}
|
|
|
|
kill_dude( var_0 )
|
|
{
|
|
common_scripts\utility::flag_set( "interrogatee_killed" );
|
|
maps\enemyhq_code::get_killed( var_0 );
|
|
}
|