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

3093 lines
100 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
clockwork_defend_pre_load()
{
precacheitem( "smoke_grenade_american" );
common_scripts\utility::flag_init( "defend_finished" );
common_scripts\utility::flag_init( "defend_combat_finished" );
common_scripts\utility::flag_init( "ally1_on_podium" );
common_scripts\utility::flag_init( "ally2_on_podium" );
common_scripts\utility::flag_init( "player_on_podium" );
common_scripts\utility::flag_init( "defend_player_drop_bag" );
common_scripts\utility::flag_init( "def_in_riot_gear" );
common_scripts\utility::flag_init( "def_wave1_done" );
common_scripts\utility::flag_init( "def_wave2_done" );
common_scripts\utility::flag_init( "def_wave3_done" );
common_scripts\utility::flag_init( "def_scientist_intro_complete" );
common_scripts\utility::flag_init( "defend_start_waves" );
common_scripts\utility::flag_init( "defend_used_duffel" );
common_scripts\utility::flag_init( "defend_used_sentry" );
common_scripts\utility::flag_init( "defend_used_mines" );
common_scripts\utility::flag_init( "defend_sentry_placed" );
common_scripts\utility::flag_init( "get_turret" );
common_scripts\utility::flag_init( "get_shockwave" );
common_scripts\utility::flag_init( "get_teargas" );
common_scripts\utility::flag_init( "get_proximity_mine" );
common_scripts\utility::flag_init( "trickle_spawn_all" );
common_scripts\utility::flag_init( "disallow_interrupt_baker" );
common_scripts\utility::flag_init( "defend_baker_in_position" );
common_scripts\utility::flag_init( "defend_smoke_thrown" );
common_scripts\utility::flag_init( "wave2_pre_dialog" );
common_scripts\utility::flag_init( "player_out_of_defend" );
common_scripts\utility::flag_init( "cypher_in_position" );
common_scripts\utility::flag_init( "cypher_baker_interaction_done" );
common_scripts\utility::flag_init( "defend_timeto_hide_player_bag" );
common_scripts\utility::flag_init( "defend_allies_smoke_thrown" );
common_scripts\utility::flag_init( "other_allies_post_vault" );
common_scripts\utility::flag_init( "cypher_defend_close_door" );
common_scripts\utility::flag_init( "defend_timeout" );
common_scripts\utility::flag_init( "ally_died" );
maps\_utility::add_hint_string( "teargas_hint", &"CLOCKWORK_PROMPT_TEARGAS", ::handle_bag_hints );
maps\_utility::add_hint_string( "shockwave_hint", &"CLOCKWORK_PROMPT_SHOCKWAVE", ::handle_bag_hints );
maps\_utility::add_hint_string( "mine_hint", &"CLOCKWORK_PROMPT_MINE", ::handle_bag_hints );
}
setup_defend_blowdoors1()
{
level.override_check = 1;
level.timer_override_check = level.override_check;
setup_defend_plat( "defend_plat" );
}
setup_defend_blowdoors2()
{
level.override_check = 2;
level.timer_override_check = level.override_check;
setup_defend_plat( "defend_plat" );
}
setup_defend_fire_blocker()
{
level.override_check = 3;
level.timer_override_check = level.override_check;
setup_defend_plat( "defend_plat" );
}
setup_defend_plat( var_0 )
{
maps\clockwork_code::dog_setup();
level.start_time = gettime();
maps\clockwork_code::setup_player();
level.start_point = "defend_plat";
maps\clockwork_code::spawn_allies();
maps\_utility::vision_set_changes( "clockwork_indoor", 0 );
common_scripts\utility::flag_set( "interior_cqb_finished" );
common_scripts\utility::flag_set( "cqb_guys7" );
common_scripts\utility::flag_set( "to_cqb" );
set_blow_doors_vis( 1 );
defend_setup_common();
defend_begin_common();
common_scripts\utility::array_thread( level.allies, ::handle_ally_bag_vis );
common_scripts\utility::flag_set( "defend_player_drop_bag" );
maps\_utility::delaythread( 1, ::defend_platform );
thread maps\clockwork_audio::checkpoint_defend();
if ( level.woof )
thread handle_dog_defend();
}
begin_defend_plat()
{
maps\_utility::battlechatter_on( "axis" );
maps\_utility::battlechatter_on( "allies" );
maps\_utility::set_team_bcvoice( "allies", "taskforce" );
common_scripts\utility::flag_wait( "defend_finished" );
}
begin_defend_blowdoors1()
{
maps\_utility::battlechatter_on( "axis" );
maps\_utility::battlechatter_on( "allies" );
maps\_utility::set_team_bcvoice( "allies", "taskforce" );
common_scripts\utility::flag_wait( "defend_finished" );
}
begin_defend_blowdoors2()
{
maps\_utility::battlechatter_on( "axis" );
maps\_utility::battlechatter_on( "allies" );
maps\_utility::set_team_bcvoice( "allies", "taskforce" );
common_scripts\utility::flag_wait( "defend_finished" );
}
begin_defend_fire_blocker()
{
maps\_utility::battlechatter_on( "axis" );
maps\_utility::battlechatter_on( "allies" );
maps\_utility::set_team_bcvoice( "allies", "taskforce" );
common_scripts\utility::flag_wait( "defend_finished" );
common_scripts\utility::flag_set( "defend_flasher_struct" );
}
debug_lookflag()
{
thread flag_state( "defend_looking_south" );
thread flag_state( "defend_looking_north" );
thread flag_state( "defend_looking_south_doors" );
thread flag_state( "defend_looking_north_doors" );
}
flag_state( var_0 )
{
for (;;)
{
common_scripts\utility::flag_wait( var_0 );
common_scripts\utility::flag_waitopen( var_0 );
}
}
setup_defend()
{
maps\clockwork_code::dog_setup();
level.start_point = "defend";
maps\clockwork_code::setup_player();
maps\clockwork_code::spawn_allies();
defend_setup_common();
maps\_utility::vision_set_changes( "clockwork_indoor", 0 );
common_scripts\utility::flag_set( "interior_cqb_finished" );
common_scripts\utility::flag_set( "cqb_guys7" );
common_scripts\utility::flag_set( "to_cqb" );
thread maps\clockwork_interior::fight_objective();
thread maps\clockwork_audio::checkpoint_defend();
}
defend_setup_common()
{
level.allies[0].animname = "baker";
level.allies[1].animname = "keegan";
level.allies[2].animname = "cypher";
foreach ( var_1 in level.allies )
{
if ( var_1.animname == "keegan" )
var_1 maps\_utility::forceuseweapon( "cz805bren+reflex_sp", "primary" );
if ( var_1.animname == "baker" )
var_1 maps\_utility::forceuseweapon( "cz805bren+reflex_sp", "primary" );
if ( var_1.animname == "cypher" )
var_1 maps\_utility::forceuseweapon( "mts255", "primary" );
}
}
defend_begin_common()
{
level.custom_sentry_position_func = ::updatesentrypositionclockwork;
setup_blockers();
thread handle_platform_blockers();
maps\clockwork_code::safe_disable_trigger_with_targetname( "defend_pickup_backups_trigger" );
thread maps\clockwork_fx::turn_effects_on( "defend_flasher_struct", "fx/lights/lights_strobe_red_dist_max_small" );
level.moveup_doublespeed = 0;
set_bags_invisible();
level.allies[0].animname = "baker";
level.allies[1].animname = "keegan";
level.allies[2].animname = "cypher";
set_bag_objective_visibility( 0 );
thread maps\clockwork_audio::defend_start();
thread defend_end();
disable_bag_trigger( "defend_duffle_bag_turret_trigger" );
disable_bag_trigger( "defend_duffle_bag_proximity_trigger" );
disable_bag_trigger( "defend_duffle_bag_teargas_trigger" );
disable_bag_trigger( "defend_duffle_bag_shockwave_trigger" );
level.defend_save_safe = 1;
thread listen_for_use_turret_duffle_bag();
thread listen_for_use_shockwave_duffle_bag();
thread listen_for_use_teargas_duffle_bag();
thread listen_for_use_proximity_duffle_bag();
thread handle_cypher_backups();
thread handle_animated_duffelbags();
}
begin_defend()
{
level endon( "defend_player_fail_leaving" );
level endon( "ally_died" );
if ( level.woof )
thread handle_dog_defend();
defend_begin_common();
if ( common_scripts\utility::flag( "defend_player_fail_leaving" ) || common_scripts\utility::flag( "ally_died" ) )
return;
thread maps\_utility::autosave_by_name( "defend_start" );
common_scripts\utility::array_thread( level.allies, maps\_utility::cqb_walk, "off" );
common_scripts\utility::array_thread( level.allies, maps\_utility::set_moveplaybackrate, 1, 0.5 );
set_blow_doors_vis( 0 );
maps\_utility::stop_exploder( 850 );
maps\_utility::battlechatter_on( "axis" );
maps\_utility::battlechatter_on( "allies" );
maps\_utility::set_team_bcvoice( "allies", "taskforce" );
thread defend_intro();
level.player setactionslot( 1, "" );
common_scripts\utility::flag_wait( "defend_finished" );
}
disable_bag_trigger( var_0 )
{
var_1 = getent( var_0, "targetname" );
var_1.force_off = 1;
var_1 common_scripts\utility::trigger_off();
}
enable_bag_trigger( var_0 )
{
var_1 = getent( var_0, "targetname" );
var_1.force_off = 0;
var_1 common_scripts\utility::trigger_on();
}
watch_player_wake_scientists()
{
level endon( "defend_shoot_air" );
while ( !common_scripts\utility::flag( "defend_player_fail_leaving" ) )
wait 0.05;
level.player waittill( "weapon_fired" );
level.player_woke_scientists = 1;
level notify( "defend_shoot_air" );
}
defend_intro()
{
thread fail_mission_leave_area();
common_scripts\utility::flag_wait( "defend_vo_intro" );
thread watch_player_wake_scientists();
thread spawn_scientists();
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_timecheck" );
wait 0.2;
maps\_utility::music_play( "mus_clock_defend_prep" );
maps\clockwork_code::radio_dialog_add_and_go( "clockwork_diz_onschedule" );
common_scripts\utility::flag_wait( "defend_room_entered" );
if ( !isdefined( level.player_woke_scientists ) )
{
var_0 = common_scripts\utility::getstruct( "defend_animate_to_me", "targetname" );
var_1 = spawn( "script_origin", var_0.origin + ( 0, 0, 12 ) );
var_1.angles = var_0.angles;
var_1 maps\_anim::anim_reach_solo( level.allies[0], "baker_fire_air" );
var_1 thread maps\_anim::anim_single_solo( level.allies[0], "baker_fire_air" );
}
wait 1.5;
level notify( "defend_shoot_air" );
maps\clockwork_code::safe_activate_trigger_with_targetname( "dog_to_platform" );
level.allies[0] thread maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_outnow" );
wait 2;
level.allies[0] thread maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_preppingfortransfer" );
common_scripts\utility::array_thread( level.allies, ::handle_ally_bag_vis );
wait 1;
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_commandplatform" );
level notify( "begin_defend_radio_chatter" );
thread nag_podium();
thread set_bag_objective_visibility( 1 );
common_scripts\utility::flag_wait( "player_on_podium" );
common_scripts\utility::flag_set( "Obj_datacenter_complete" );
var_2 = getent( "defend_player_drop_bag_trigger", "targetname" );
var_3 = getent( "defend_duffle_bag_turret", "targetname" );
maps\player_scripted_anim_util::waittill_trigger_activate_looking_at( var_2, var_3 );
common_scripts\utility::flag_set( "defend_player_drop_bag" );
thread delay_show_blow_doors();
thread watch_placed_sentry();
thread maps\clockwork_audio::command_platform_bag_player();
set_bag_objective_visibility( 0 );
defend_platform();
}
delay_show_blow_doors()
{
wait 2.5;
set_blow_doors_vis( 1 );
}
defend_platform()
{
level endon( "defend_player_fail_leaving" );
level endon( "ally_died" );
level.missileglassshattervel = getdvarfloat( "missileGlassShatterVel" );
setsaveddvar( "missileGlassShatterVel", 0 );
player_drop_bag();
if ( common_scripts\utility::flag( "defend_player_fail_leaving" ) || common_scripts\utility::flag( "ally_died" ) )
return;
thread maps\_utility::autosave_by_name( "defend_bag_dropoff" );
var_0 = getent( "defend_player_drop_bag_trigger", "targetname" );
if ( isdefined( var_0 ) )
var_0 common_scripts\utility::trigger_off();
common_scripts\utility::flag_wait( "defend_baker_in_position" );
maps\_utility::stop_exploder( 200 );
var_1 = [];
var_1[0] = 40;
var_1[1] = 15;
var_1[2] = 12;
if ( !isdefined( level.override_check ) )
{
thread trickle_spawn( 70, "defend_wave1", var_1 );
thread trickle_spawn( 70, "defend_wave1_uppers", var_1 );
var_2 = [];
var_2[0] = 40;
var_2[1] = 17;
var_2[2] = 6;
thread trickle_spawn( 70, "defend_wave1_quick", var_2 );
if ( !isdefined( level.defend_quick ) )
{
wait 3;
var_3 = 0;
var_4 = 0;
if ( !common_scripts\utility::flag( "defend_used_sentry" ) )
{
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_sentryturretfrombags" );
var_3 = 1;
}
if ( !common_scripts\utility::flag( "defend_used_mines" ) && !var_3 )
{
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_minesfrombag" );
var_4 = 1;
}
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_mrk_theyllbefollowingus" );
var_5 = common_scripts\utility::getstruct( "defend_player_drop_bag_location_mod", "targetname" );
var_5 notify( "baker_stop_table_loop" );
level.allies[0] maps\_utility::disable_ai_color();
level.allies[0].fixednode = 0;
level.allies[0].goalraidus = 64;
level.allies[1] maps\_utility::disable_ai_color();
level.allies[1].fixednode = 0;
level.allies[1].goalraidus = 64;
level.allies[1] allowedstances( "crouch", "prone" );
level.allies[0] allowedstances( "crouch", "prone" );
var_6 = getent( "def_ally_middle", "targetname" );
var_7 = getent( "defend_ally_split", "targetname" );
level.allies[0] setgoalvolumeauto( var_6 );
level.allies[1] setgoalvolumeauto( var_7 );
wait 5;
if ( !common_scripts\utility::flag( "defend_used_mines" ) && !var_4 )
{
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_minesfrombag" );
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_mrk_theyllbefollowingus" );
}
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_30secsdefenses" );
}
}
else
{
var_5 = common_scripts\utility::getstruct( "defend_player_drop_bag_location_mod", "targetname" );
var_5 notify( "baker_stop_table_loop" );
level.allies[0] maps\_utility::disable_ai_color();
level.allies[1] maps\_utility::disable_ai_color();
wait 0.3;
level.allies[1] allowedstances( "crouch", "prone" );
level.allies[0] allowedstances( "crouch", "prone" );
var_6 = getent( "def_ally_middle", "targetname" );
var_7 = getent( "defend_ally_split", "targetname" );
level.allies[0] setgoalvolumeauto( var_6 );
level.allies[1] setgoalvolumeauto( var_7 );
common_scripts\utility::flag_set( "def_wave1_done" );
}
maps\_utility::delaythread( 14, maps\clockwork_audio::defend_combat );
thread defend_start();
var_8 = 8;
thread temp_music_thread_defend_prep_2( var_8 );
wait( var_8 );
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_mrk_heshdidyoufind" );
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_hsh_ohyeahitsall" );
}
temp_music_thread_defend_prep_2( var_0 )
{
wait( var_0 - 4.5 );
thread maps\_utility::music_play( "mus_clock_defend_prep_2", 4 );
}
fail_mission_leave_area()
{
common_scripts\utility::flag_wait_any( "def_player_north", "player_on_podium", "def_player_south" );
thread watch_player_leave_area();
common_scripts\utility::flag_wait( "defend_player_fail_leaving" );
setdvar( "ui_deadquote", &"CLOCKWORK_QUOTE_LEFT_TEAM" );
maps\_utility::missionfailedwrapper();
}
watch_player_leave_area()
{
level endon( "elevator_open" );
common_scripts\utility::flag_clear( "defend_player_fail_leaving" );
level endon( "defend_player_fail_leaving" );
var_0 = gettime();
var_1 = [];
var_1[0] = "clockwork_bkr_getbackhererook";
var_1[1] = "clockwork_bkr_rookwhereyagoing";
var_2 = 0;
for (;;)
{
common_scripts\utility::flag_wait( "defend_player_warn_leaving" );
while ( common_scripts\utility::flag( "defend_player_warn_leaving" ) )
{
if ( var_0 < gettime() )
{
maps\clockwork_code::radio_dialog_add_and_go( var_1[var_2] );
var_2++;
if ( var_2 >= var_1.size )
var_2 = 0;
var_0 = gettime() + 10000;
}
common_scripts\utility::waitframe();
}
}
}
player_drop_bag()
{
var_0 = getent( "defend_duffle_bag_turret", "targetname" );
var_1 = maps\_utility::spawn_anim_model( "player_rig" );
var_2 = maps\_utility::spawn_anim_model( "player_bag" );
var_3 = common_scripts\utility::getstruct( "defend_player_drop_bag_location_mod", "targetname" );
var_4 = common_scripts\utility::spawn_tag_origin();
var_4.origin = var_3.origin;
var_4.angles = var_3.angles;
var_1 linkto( var_4, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) );
level.player_bag.animname = "player_bag";
var_4 maps\_anim::anim_first_frame_solo( var_1, "defend_bagdrop" );
var_5 = [];
var_5[0] = var_1;
var_5[1] = var_2;
var_1 hide();
var_2 hide();
level.player setstance( "stand" );
level.player allowcrouch( 0 );
level.player allowprone( 0 );
level.player playerlinktoblend( var_1, "tag_player", 0.3 );
level.player disableweapons();
var_4 thread maps\_anim::anim_single( var_5, "defend_bagdrop" );
wait 0.3;
var_1 show();
var_2 show();
common_scripts\utility::flag_wait( "defend_timeto_hide_player_bag" );
var_4 maps\_anim::anim_first_frame_solo( level.player_bag, "defend_world_player_bag" );
var_5[0] waittillmatch( "single anim", "end" );
level.player unlink();
var_1 delete();
level.player enableweapons();
level.player enableoffhandweapons();
level.player allowcrouch( 1 );
level.player allowprone( 1 );
var_2 delete();
set_bag_visibility( "defend_duffle_bag_turret", level.player_bag );
if ( !common_scripts\utility::flag( "defend_used_sentry" ) )
{
level.sentry_obj = spawn( "script_model", var_0 gettagorigin( "tag_sentry" ) );
level.sentry_obj setmodel( "weapon_sentry_smg_collapsed_small_obj" );
thread cleanup_sentry_hud_outline();
level.sentry_obj.angles = var_0 gettagangles( "tag_sentry" );
enable_bag_trigger( "defend_duffle_bag_turret_trigger" );
}
common_scripts\utility::flag_wait( "cypher_baker_interaction_done" );
}
cleanup_sentry_hud_outline()
{
common_scripts\utility::flag_wait( "defend_combat_finished" );
if ( isdefined( level.sentry_obj ) )
level.sentry_obj setmodel( "weapon_sentry_smg_collapsed_small_obj" );
}
handle_ally_bag_vis()
{
var_0 = common_scripts\utility::getstruct( "defend_player_drop_bag_location_mod", "targetname" );
self pushplayer( 1 );
var_0 maps\_anim::anim_reach_solo( self, "defend_bagdrop" );
common_scripts\utility::flag_wait( "player_on_podium" );
if ( self.animname == "keegan" )
thread maps\clockwork_audio::command_platform_bag_keegan();
if ( self.animname == "cypher" )
thread maps\clockwork_audio::command_platform_bag_cypher();
if ( self.animname == "baker" )
thread maps\clockwork_audio::command_platform_bag_baker();
var_0 maps\_anim::anim_single_solo( self, "defend_bagdrop" );
if ( self.animname == "keegan" )
{
level.allies[1] maps\_utility::enable_ai_color();
maps\clockwork_code::safe_activate_trigger_with_targetname( "def_keegan_during_defend" );
level.allies[1] pushplayer( 0 );
}
}
bag_vis_callback( var_0 )
{
if ( var_0.animname == "cypher" )
var_0 thread cipher_vo();
var_1 = common_scripts\utility::getstruct( "defend_player_drop_bag_location_mod", "targetname" );
var_2 = undefined;
switch ( var_0.animname )
{
case "cypher":
var_1 maps\_anim::anim_first_frame_solo( level.bags[2], "defend_world_cypher_bag" );
level.allies[2] maps\_utility::set_ignoreall( 1 );
level.allies[2] maps\_utility::set_ignoreme( 1 );
level.allies[2] pushplayer( 1 );
var_2 = level.bags[2];
break;
case "keegan":
var_1 maps\_anim::anim_first_frame_solo( level.bags[1], "defend_world_keegan_bag" );
var_2 = level.bags[1];
break;
case "baker":
var_1 maps\_anim::anim_first_frame_solo( level.bags[0], "defend_world_baker_bag" );
var_2 = level.bags[0];
break;
default:
common_scripts\utility::flag_set( "defend_timeto_hide_player_bag" );
return;
}
var_0 thread set_bag_visibility( var_0.bag_name, var_2 );
wait 0.1;
var_0 maps\clockwork_code::hide_dufflebag();
var_0 waittill( "single anim", var_3 );
var_1 = common_scripts\utility::getstruct( "defend_player_drop_bag_location_mod", "targetname" );
switch ( var_0.animname )
{
case "cypher":
thread cipher_podium();
break;
case "keegan":
var_1 waittillmatch( "single anim", "end" );
level.allies[1] maps\_utility::enable_ai_color();
maps\clockwork_code::safe_activate_trigger_with_targetname( "def_keegan_during_defend" );
level.allies[1] pushplayer( 0 );
break;
case "baker":
common_scripts\utility::flag_set( "defend_baker_in_position" );
var_1 thread maps\_anim::anim_loop_solo( level.allies[0], "table_stand_idle", "baker_stop_table_loop" );
wait 3;
level.allies[0] pushplayer( 0 );
break;
}
}
watch_placed_sentry()
{
common_scripts\utility::flag_wait( "defend_used_sentry" );
wait 0.25;
level.player waittill( "sentry_placement_finished" );
common_scripts\utility::flag_set( "defend_sentry_placed" );
thread handle_autoturret_chatter();
}
nag_podium()
{
thread nag_bag();
wait 5;
for (;;)
{
wait 9;
if ( common_scripts\utility::flag( "player_on_podium" ) )
break;
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_getuphere" );
wait 14;
if ( common_scripts\utility::flag( "player_on_podium" ) )
break;
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_commandplatform" );
wait 5;
}
}
nag_bag()
{
common_scripts\utility::flag_wait( "player_on_podium" );
while ( !common_scripts\utility::flag( "defend_player_drop_bag" ) )
{
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_tableoverhere" );
wait 9;
}
}
defend_start()
{
thread place_defenses();
thread handle_defend_waves();
}
cipher_vo()
{
common_scripts\utility::flag_waitopen( "disallow_interrupt_baker" );
level.allies[2] pushplayer( 1 );
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_computerbank" );
wait 0.5;
level.allies[2] maps\clockwork_code::char_dialog_add_and_go( "clockwork_cyr_need2minutes" );
wait 0.5;
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_defensiveposition" );
var_0 = maps\_utility::obj( "defendcypher" );
objective_add( var_0, "active", &"CLOCKWORK_OBJ_DEFEND" );
objective_current( var_0 );
wait 1;
common_scripts\utility::flag_wait( "cypher_in_position" );
common_scripts\utility::flag_set( "cypher_baker_interaction_done" );
wait 4;
thread download_timer();
common_scripts\utility::flag_wait( "defend_combat_finished" );
maps\_utility::objective_complete( var_0 );
}
cipher_podium()
{
var_0 = common_scripts\utility::getstruct( "defend_player_drop_bag_location_mod", "targetname" );
var_0 thread maps\_anim::anim_loop_solo( level.allies[2], "laptop_sit_idle_calm", "stop_hacking" );
common_scripts\utility::flag_set( "cypher_in_position" );
level.allies[2] pushplayer( 0 );
if ( isdefined( level.spiral_blocker ) )
{
level.spiral_blocker solid();
level.spiral_blocker disconnectpaths();
}
}
place_defenses()
{
thread listen_for_use_multi_turret();
}
handle_defend_saves( var_0 )
{
level endon( "defend_combat_finished" );
level endon( "defend_player_fail_leaving" );
level endon( "ally_died" );
var_1 = 1;
var_2 = 20000;
for (;;)
{
var_3 = gettime() - var_0;
if ( var_3 < var_2 )
wait( ( var_2 - var_3 ) / 1000 );
else
wait 1;
if ( level.defend_save_safe && !common_scripts\utility::flag( "game_saving" ) )
{
if ( !isdefined( level.curautosave ) )
var_4 = 1;
else
var_4 = level.curautosave;
var_5 = "defend_ongoing" + var_1;
var_6 = gettime();
if ( common_scripts\utility::flag( "defend_player_fail_leaving" ) )
return;
thread maps\_utility::autosave_by_name( var_5 );
var_1++;
common_scripts\utility::flag_wait( "game_saving" );
common_scripts\utility::flag_waitopen( "game_saving" );
level notify( "stop_watch_abandon_save" );
var_7 = gettime();
if ( level.curautosave > var_4 )
var_0 = var_7;
}
}
}
handle_defend_waves()
{
level endon( "defend_player_fail_leaving" );
level.allies[2] endon( "death" );
level endon( "ally_died" );
maps\_utility::battlechatter_on( "allies" );
maps\_utility::battlechatter_on( "axis" );
thread monitor_enemies_in_pods();
if ( !isdefined( level.override_check ) )
thread defend_wave_1();
else
thread handle_backfill();
thread open_vault_door();
common_scripts\utility::flag_wait_either( "def_wave1_done", "defend_combat_finished" );
if ( common_scripts\utility::flag( "defend_player_fail_leaving" ) || common_scripts\utility::flag( "ally_died" ) )
return;
wait 0.1;
common_scripts\utility::flag_wait_either( "def_wave3_done", "defend_combat_finished" );
if ( common_scripts\utility::flag( "defend_player_fail_leaving" ) )
return;
thread maps\_utility::autosave_by_name( "defend_wave3" );
wait 0.1;
common_scripts\utility::flag_wait( "defend_combat_finished" );
setsaveddvar( "missileGlassShatterVel", level.missileglassshattervel );
}
defend_start_player_shield()
{
level.player enableinvulnerability();
wait 15;
level.player disableinvulnerability();
}
defend_wave_1()
{
level endon( "defend_combat_finished" );
wait 27;
level.player thread maps\clockwork_code::radio_dialog_add_and_go( "clockwork_mrk_tangoesincomingdownthe" );
wait 2;
level.allies[0] maps\_utility::disable_ai_color();
level.allies[1] maps\_utility::disable_ai_color();
wait 0.3;
var_0 = getent( "def_ally_middle", "targetname" );
level.allies[1] maps\_utility::set_goal_pos( level.allies[1].origin );
var_1 = getent( "defend_ally_split", "targetname" );
level.allies[0] setgoalvolumeauto( var_0 );
level.allies[1] setgoalvolumeauto( var_1 );
thread defend_start_player_shield();
wait 1;
common_scripts\utility::flag_set( "trickle_spawn_all" );
wait 8;
thread handle_backfill();
thread wave1_radio_chatter();
var_2 = maps\_utility::get_ai_group_ai( "defend_group" );
maps\_utility::waittill_dead_or_dying( var_2, var_2.size - 3 );
level.allies[0] notify( "stop_defend_movement" );
level.allies[1] notify( "stop_defend_movement" );
common_scripts\utility::flag_set( "def_wave1_done" );
}
handle_accuracy()
{
var_0 = self.baseaccuracy;
maps\_utility::set_baseaccuracy( 50 );
maps\_utility::set_ignoreme( 1 );
self.grenadeawareness = 0;
self.ignoreexplosionevents = 1;
self.ignorerandombulletdamage = 1;
self.ignoresuppression = 1;
self.disablebulletwhizbyreaction = 1;
maps\_utility::disable_pain();
common_scripts\utility::flag_wait( "defend_allies_smoke_thrown" );
self.grenadeawareness = 1;
self.ignoreexplosionevents = 0;
self.ignorerandombulletdamage = 0;
self.ignoresuppression = 0;
self.disablebulletwhizbyreaction = 0;
maps\_utility::enable_pain();
maps\_utility::set_baseaccuracy( var_0 );
maps\_utility::set_ignoreme( 0 );
maps\clockwork_code::safe_activate_trigger_with_targetname( "def_allies_after_smoke" );
}
setup_ai_for_end()
{
var_0 = getaiarray( "axis" );
var_1 = getent( "def_ground_middle_mid", "targetname" );
common_scripts\utility::array_call( var_0, ::setgoalvolumeauto, var_1 );
common_scripts\utility::array_thread( var_0, maps\_utility::set_baseaccuracy, 0.01 );
foreach ( var_3 in var_0 )
var_3.health = 1;
common_scripts\utility::array_thread( level.allies, ::handle_accuracy );
var_5 = getent( "defend_upper_area", "targetname" );
var_6 = var_5 maps\_utility::get_ai_touching_volume( "axis" );
common_scripts\utility::array_thread( var_6, maps\_utility::set_ignoreall, 1 );
wait 8;
foreach ( var_3 in var_6 )
{
if ( isdefined( var_3 ) && isalive( var_3 ) )
var_3 maps\_utility::set_ignoreall( 0 );
}
}
defend_end()
{
level.allies[2] endon( "death" );
common_scripts\utility::flag_wait( "defend_combat_finished" );
neutralize_turret();
level.allies[1] allowedstances( "crouch", "prone", "stand" );
level.allies[0] allowedstances( "crouch", "prone", "stand" );
common_scripts\utility::array_thread( level.allies, maps\_utility::enable_ai_color );
thread setup_ai_for_end();
var_0 = common_scripts\utility::getstruct( "defend_player_drop_bag_location_mod", "targetname" );
var_0 notify( "stop_hacking" );
waittillframeend;
var_1 = common_scripts\utility::getstruct( "defend_player_drop_bag_location_mod", "targetname" );
var_1 thread maps\_anim::anim_single_solo( level.allies[2], "laptop_stand" );
wait 1;
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_datasecure" );
wait 2;
maps\clockwork_code::radio_dialog_add_and_go( "clockwork_diz_makingthecall" );
wait 2;
thread defend_do_smoke();
common_scripts\utility::flag_wait( "defend_allies_smoke_thrown" );
common_scripts\utility::flag_set( "defend_finished" );
neutralize_turret();
wait 4;
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_throughheregogo" );
thread vault_nag();
common_scripts\utility::flag_wait( "defend_vault_room" );
handle_defend_vault();
}
vault_nag()
{
level endon( "defend_vault_room" );
if ( common_scripts\utility::flag( "defend_vault_room" ) )
return;
wait 5;
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_oby_backdoorisopen" );
wait 5;
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_mrk_move" );
}
defend_exit_objective()
{
var_0 = maps\_utility::obj( "defendexit" );
var_1 = common_scripts\utility::getstruct( "defend_exit_obj", "targetname" );
objective_add( var_0, "active", &"CLOCKWORK_OBJ_DEFEND_ESCAPE" );
objective_current( var_0 );
objective_position( var_0, var_1.origin );
common_scripts\utility::flag_wait( "defend_vault_room" );
common_scripts\utility::flag_wait( "inpos_player_elevator" );
}
watch_smoke()
{
level endon( "defend_player_left_area" );
level endon( "got_smoke" );
for (;;)
{
level.player waittill( "grenade_fire", var_0, var_1 );
if ( common_scripts\utility::string_starts_with( var_1, "smoke_" ) )
{
common_scripts\utility::flag_set( "defend_smoke_thrown" );
break;
}
}
}
waittill_ready_to_do_smoke()
{
level.allies[2] endon( "death" );
common_scripts\utility::flag_wait( "defend_combat_finished" );
level.allies[2] common_scripts\utility::waittill_notify_or_timeout( "goal", 10 );
}
defend_do_smoke()
{
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_coverourexit" );
level.player takeweapon( "teargas_grenade" );
level.player setoffhandsecondaryclass( "smoke" );
level.player giveweapon( "smoke_grenade_american" );
common_scripts\utility::array_thread( level.allies, maps\_utility::disable_pain );
common_scripts\utility::array_thread( level.allies, maps\_utility::set_ignoresuppression, 1 );
level.allies[0] thread maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_popsomesmoke" );
thread watch_smoke();
waittill_ready_to_do_smoke();
common_scripts\utility::flag_set( "defend_smoke_thrown" );
if ( common_scripts\utility::flag( "defend_player_fail_leaving" ) || common_scripts\utility::flag( "ally_died" ) )
return;
thread watch_ally_throw_end_smoke( level.allies[2], "defend_smoke_onexit", 1 );
level.player forceusehintoff();
level notify( "got_smoke" );
wait 2;
var_0 = common_scripts\utility::getstructarray( "defend_smoke", "targetname" );
var_1 = 0;
foreach ( var_3 in var_0 )
{
if ( isdefined( level.ps3 ) && level.ps3 == 1 )
{
var_1++;
if ( var_1 % 2 )
continue;
}
magicgrenade( "smoke_grenade_american", var_3.origin + ( 0, 0, 50 ), var_3.origin, randomfloatrange( 0.1, 1 ) );
}
thread freshen_smoke( var_0 );
thread defend_exit_objective();
wait 5;
thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs4_smaokegrenades", 1, "defend_vault_room" );
thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs2_thermlstolab", 2, "defend_vault_room" );
thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs1_affirmative", 3, "defend_vault_room" );
}
freshen_smoke( var_0 )
{
var_1 = 10;
level endon( "defend_player_left_area" );
for (;;)
{
wait( var_1 );
var_2 = 0;
foreach ( var_4 in var_0 )
{
if ( isdefined( level.ps3 ) && level.ps3 == 1 )
{
var_2++;
if ( var_2 % 2 )
continue;
}
magicgrenade( "smoke_grenade_american", var_4.origin + ( 0, 0, 50 ), var_4.origin, randomfloatrange( 0.1, 1 ) );
}
}
}
neutralize_turret()
{
if ( isdefined( level.defend_sentry ) )
{
foreach ( var_1 in level.defend_sentry )
{
if ( isdefined( var_1 ) )
{
wait 0.05;
var_2 = undefined;
if ( isdefined( var_1.carrier ) )
{
var_2 = var_1.carrier canplayerplacesentry();
var_1 common_scripts\_sentry::sentry_place_mode_reset();
}
if ( isdefined( var_1.badplace_name ) )
var_1 common_scripts\_sentry::sentry_badplace_delete();
var_1 setcandamage( 0 );
var_1.ignoreme = 1;
var_1 common_scripts\_sentry::sentrypoweroff();
var_1 makeunusable();
var_1 setcontents( 0 );
if ( isdefined( var_2 ) && !var_2["result"] )
{
var_1 notify( "deleted" );
wait 0.05;
var_1 delete();
}
}
}
}
var_4 = getentarray( "defend_disable_on_finish", "script_noteworthy" );
foreach ( var_6 in var_4 )
var_6 common_scripts\utility::trigger_off();
}
handle_defend_vault()
{
var_0 = getent( "entrance_tunnel_door", "targetname" );
var_0 rotateyaw( 210, 0.1 );
}
open_vault_door()
{
var_0 = common_scripts\utility::getstruct( "defend_vault_door_pos", "targetname" );
var_1 = getent( "defend_exit_vault_door", "targetname" );
var_1.animname = "vault_door";
var_1 maps\_utility::assign_animtree();
var_0 thread maps\_anim::anim_first_frame_solo( var_1, "defend_open" );
var_2 = getent( "defend_exit_vault_door_block", "targetname" );
var_2 linkto( var_1 );
level waittill( "defend_open_door" );
thread maps\clockwork_audio::defend_door_open();
var_0 maps\_anim::anim_single_solo( var_1, "defend_open" );
var_2 connectpaths();
waittill_allies_exit();
var_2 disconnectpaths();
thread maps\clockwork_audio::defend_door_close();
var_0 thread maps\_anim::anim_single_solo( var_1, "defend_close" );
wait 11;
if ( !common_scripts\utility::flag( "player_out_of_defend" ) )
{
setdvar( "ui_deadquote", &"CLOCKWORK_QUOTE_SEPARATED" );
maps\_utility::missionfailedwrapper();
}
else
{
var_3 = maps\_utility::obj( "defendexit" );
maps\_utility::objective_complete( var_3 );
var_4 = maps\_utility::obj( "exitfac" );
objective_add( var_4, "active", &"CLOCKWORK_EXIT" );
objective_current( var_4 );
}
common_scripts\utility::array_thread( level.allies, maps\_utility::enable_pain );
common_scripts\utility::array_thread( level.allies, maps\_utility::set_ignoresuppression, 0 );
common_scripts\utility::flag_wait( "door_close" );
var_2 connectpaths();
}
watch_ally_throw_end_smoke( var_0, var_1, var_2 )
{
if ( isdefined( var_2 ) && var_2 )
var_0 maps\_utility::disable_ai_color();
if ( isdefined( var_2 ) && var_2 )
{
common_scripts\utility::flag_wait_either( "ally_throw_smoke", "chaos_moving_to_elevator" );
var_0 maps\_utility::disable_ai_color();
}
var_0.grenadeammo = 1;
var_0.grenadeweapon = "smoke_grenade_american";
var_0.grenade_roll_end_struct = var_1;
var_0 maps\_anim::anim_single_solo( var_0, "grenade_throw_exit" );
if ( isdefined( var_2 ) && var_2 )
{
var_0 maps\_utility::disable_ai_color();
common_scripts\utility::flag_wait( "other_allies_post_vault" );
var_3 = common_scripts\utility::getstruct( "defend_vault_door_pos", "targetname" );
var_3 maps\_anim::anim_reach_solo( var_0, "defend_close_door" );
var_3 maps\_anim::anim_single_solo( var_0, "defend_close_door" );
var_0 maps\_utility::enable_ai_color();
common_scripts\utility::flag_set( "cypher_defend_close_door" );
}
}
grenade_tossed( var_0 )
{
var_1 = 2;
if ( var_0.animname == "cypher" )
var_1 = 0.5;
var_2 = common_scripts\utility::getstruct( var_0.grenade_roll_end_struct, "targetname" );
var_3 = var_0 magicgrenade( var_0 gettagorigin( "tag_weapon_left" ), var_2.origin, var_1 );
if ( !isdefined( var_3 ) )
{
var_2 = common_scripts\utility::getstruct( var_0.grenade_roll_end_struct + "2", "targetname" );
if ( isdefined( var_2 ) )
var_3 = var_0 magicgrenade( var_0 gettagorigin( "tag_weapon_left" ), var_2.origin, var_1 );
}
var_4 = [];
var_4[0] = var_2;
thread freshen_smoke( var_4 );
}
waittill_allies_exit()
{
var_0 = getent( "exit_defend_room_trigger", "targetname" );
var_1 = 0;
while ( var_1 < 3 )
{
var_0 waittill( "trigger", var_2 );
for ( var_3 = 0; var_3 < level.allies.size; var_3++ )
{
var_4 = level.allies[var_3];
if ( var_2 == var_4 && !isdefined( var_2.left_defend ) )
{
var_2.left_defend = 1;
var_1++;
if ( var_1 == 2 )
common_scripts\utility::flag_set( "other_allies_post_vault" );
}
}
}
common_scripts\utility::flag_set( "allies_finished_defend_anims" );
var_0 delete();
}
update_file_download()
{
level endon( "defend_combat_finished" );
level.hudtimerindex = 20;
level.timer = maps\_hud_util::get_countdown_hud( 0, 120, undefined, 1 );
level.timer.alignx = "right";
level.timer setpulsefx( 30, 900000, 700 );
level.timer.label = "File: ";
var_0 = 0;
var_1 = [];
var_1[var_1.size] = "contacts.bkp";
var_1[var_1.size] = "zork.exe";
var_1[var_1.size] = "evo.zip";
var_1[var_1.size] = "passwd.sys";
var_1[var_1.size] = "mail.box";
var_1[var_1.size] = "kerosene.ogg";
var_1[var_1.size] = "harlequin.prj";
var_1[var_1.size] = "rog.txt";
var_1[var_1.size] = "odin.bak";
var_1[var_1.size] = "gloaming.ogg";
var_1[var_1.size] = "bluprnt.zip";
var_1[var_1.size] = "odin.plan";
var_2 = [];
var_2[var_2.size] = ".txt";
var_2[var_2.size] = ".bak";
var_2[var_2.size] = ".arch";
var_2[var_2.size] = ".plan";
var_2[var_2.size] = ".sys";
var_2[var_2.size] = ".bak";
var_2[var_2.size] = ".ogg";
var_2[var_2.size] = ".log";
var_2[var_2.size] = ".vis";
var_2[var_2.size] = ".com";
var_2[var_2.size] = ".rar";
var_2[var_2.size] = ".arj";
var_2[var_2.size] = ".tar";
var_2[var_2.size] = ".prn";
var_2[var_2.size] = ".ch3";
var_2[var_2.size] = ".fngr";
var_3 = [];
var_3[var_3.size] = "b";
var_3[var_3.size] = "ch";
var_3[var_3.size] = "d";
var_3[var_3.size] = "ten";
var_3[var_3.size] = "fl";
var_3[var_3.size] = "gr";
var_3[var_3.size] = "th";
var_3[var_3.size] = "ph";
var_3[var_3.size] = "nk";
var_3[var_3.size] = "ck";
var_3[var_3.size] = "tr";
var_3[var_3.size] = "m";
var_3[var_3.size] = "n";
var_3[var_3.size] = "st";
var_3[var_3.size] = "p";
var_3[var_3.size] = "sn";
var_3[var_3.size] = "rt";
var_3[var_3.size] = "t";
var_3[var_3.size] = "at";
var_3[var_3.size] = "un";
var_3[var_3.size] = "v";
var_3[var_3.size] = "w";
var_3[var_3.size] = "sh";
var_3[var_3.size] = "sl";
var_3[var_3.size] = "nd";
var_4 = [];
var_4[var_4.size] = "a";
var_4[var_4.size] = "ee";
var_4[var_4.size] = "o";
var_4[var_4.size] = "ou";
var_4[var_4.size] = "i";
var_4[var_4.size] = "u";
var_4[var_4.size] = "_";
var_4[var_4.size] = "ai";
for (;;)
{
if ( var_0 < var_1.size && randomint( 100 ) > 96 )
{
level.timer settext( var_1[var_0] );
var_0++;
wait( randomfloatrange( 2, 6 ) );
}
else
{
var_5 = randomintrange( 3, 5 );
var_6 = "";
for ( var_7 = 0; var_7 < var_5; var_7++ )
{
if ( !( var_7 % 2 ) )
{
var_6 = var_6 + var_3[randomintrange( 0, var_3.size )];
continue;
}
var_6 = var_6 + var_4[randomintrange( 0, var_4.size )];
}
var_6 = var_6 + var_2[randomintrange( 0, var_2.size )];
level.timer settext( var_6 );
}
wait( randomfloatrange( 0.05, 0.5 ) );
}
}
download_timer()
{
level.allies[2] endon( "death" );
var_0 = 9;
var_1 = 150;
var_1 = var_1 + 40;
var_1 = var_1 + 15;
var_2 = 0;
if ( var_2 != 0 )
var_1 = var_2;
else if ( isdefined( level.timer_override_check ) )
{
if ( level.timer_override_check == 3 )
var_1 = 45;
else
var_1 = var_1 - 40 * level.timer_override_check;
}
common_scripts\utility::flag_wait( "defend_timeto_hide_player_bag" );
level.download_timer = var_1;
level notify( "download_timer_started" );
thread update_file_download();
level.start_time = gettime();
level.download_time = var_1;
thread download_progress_bar( level.start_time, var_1 * 1000 );
level thread maps\_utility::notify_delay( "defend_open_door", var_1 - var_0 );
wait( var_1 );
level.timer destroy();
level.timer = undefined;
common_scripts\utility::flag_set( "defend_combat_finished" );
level notify( "stop_callout" );
level.allies[0] notify( "stop_defend_movement" );
level.allies[0] maps\_utility::enable_ai_color();
level.allies[1] maps\_utility::enable_ai_color();
level.allies[1] notify( "stop_defend_movement" );
level.allies[2] maps\_utility::enable_ai_color();
}
download_progress_bar( var_0, var_1 )
{
var_2 = maps\_hud_util::createclientprogressbar( level.player, -60 );
var_2 maps\_hud_util::setpoint( "MIDDLERIGHT", undefined, 0, -60 );
var_2.foreground = 1;
var_2.bar.foreground = 1;
while ( gettime() - var_0 <= var_1 )
{
var_2 maps\_hud_util::updatebar( ( gettime() - var_0 ) / var_1 );
wait 0.05;
}
var_2.bar destroy();
var_2 destroy();
}
handle_backfill()
{
watch_backfill();
var_0 = maps\_utility::get_ai_group_ai( "defend_backfill" );
common_scripts\utility::array_call( var_0, ::delete );
}
watch_backfill()
{
level endon( "defend_player_left_area" );
var_0 = getnodearray( "defend_disable_stair_nodes", "targetname" );
common_scripts\utility::array_call( var_0, ::disconnectnode );
var_1 = gettime();
var_2 = [];
var_2[0] = 30;
var_2[1] = 25;
var_2[2] = 22;
var_3 = 3;
var_4 = [];
var_4[0] = 10;
var_4[1] = 14;
var_4[2] = 17;
var_4[3] = 20;
var_4[4] = 16;
var_4[5] = 16;
var_4[6] = 23;
var_5 = [];
var_5[0] = var_1 + 25000;
var_5[var_5.size] = var_5[var_5.size - 1] + 35000;
var_5[var_5.size] = var_5[var_5.size - 1] + 45000;
var_5[var_5.size] = var_5[var_5.size - 1] + 40000;
var_5[var_5.size] = var_5[var_5.size - 1] + 30000;
var_5[var_5.size] = var_5[var_5.size - 1] + 990000;
var_5[var_5.size] = var_5[var_5.size - 1] + 990000;
var_6 = 0;
var_7 = getentarray( "defend_atrium_backfill", "targetname" );
for (;;)
{
var_8 = maps\_utility::get_ai_group_sentient_count( "defend_backfill" );
if ( common_scripts\utility::flag( "trickle_spawn_all" ) )
var_8 = var_8 + maps\_utility::get_ai_group_sentient_count( "defend_group" );
if ( var_8 < var_4[var_6] )
{
var_9 = randomint( var_7.size );
if ( common_scripts\utility::flag( "defend_combat_finished" ) )
var_10 = getent( "def_ground_middle_mid", "targetname" );
else
var_10 = getent( var_7[var_9].target, "targetname" );
var_11 = undefined;
var_12 = 4;
if ( isdefined( var_10.script_parameters ) )
var_12 = int( var_10.script_parameters );
var_13 = var_10 maps\_utility::get_ai_touching_volume( "axis" );
if ( var_13.size < var_12 )
var_11 = var_7[var_9] maps\_utility::spawn_ai( 1 );
if ( isdefined( var_11 ) )
{
if ( common_scripts\utility::flag( "defend_combat_finished" ) )
var_11 maps\_utility::set_baseaccuracy( 0.2 );
else
var_11 thread monitor_guy_moveup( var_2 );
}
}
if ( gettime() > var_5[var_6] || isdefined( level.override_check ) )
{
var_6++;
if ( var_6 >= var_4.size )
{
var_6 = var_4.size - 1;
var_5[var_6] = gettime() + 990000;
}
for ( var_14 = 0; var_14 < var_2.size; var_14++ )
var_2[var_14] = var_2[var_14] * 0.85;
if ( isdefined( level.override_check ) )
{
if ( level.override_check >= 2 )
{
thread blowdoors( "door_blow_north" );
maps\clockwork_code::safe_delete_trigger_with_targetname( "defend_looking_north_trigger" );
}
if ( level.override_check >= 3 )
{
thread blowdoors( "door_blow_south" );
maps\clockwork_code::safe_delete_trigger_with_targetname( "defend_looking_south_trigger" );
}
var_6 = level.override_check;
level.override_check = undefined;
}
if ( var_6 == 1 || var_6 == 2 )
{
maps\_utility::delaythread( 10, common_scripts\utility::flag_set, "defend_timeout" );
var_15 = common_scripts\utility::flag_wait_any_return( "defend_timeout", "defend_looking_south_doors", "defend_looking_north_doors" );
if ( var_15 == "defend_timeout" )
{
var_16 = getent( "defend_looking_north_trigger", "targetname" );
if ( isdefined( var_16 ) )
var_15 = "defend_looking_north_doors";
else
var_15 = "defend_looking_south_doors";
}
var_17 = "door_blow_north";
if ( var_15 == "defend_looking_south_doors" )
{
var_17 = "door_blow_south";
maps\clockwork_code::safe_delete_trigger_with_targetname( "defend_looking_south_trigger" );
var_13 = getentarray( "defend_south_backfill", "targetname" );
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_mrk_theyvebreachedthedoors" );
}
else
{
maps\clockwork_code::safe_delete_trigger_with_targetname( "defend_looking_north_trigger" );
level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_mrk_theyrecominginthrough" );
var_13 = getentarray( "defend_north_backfill", "targetname" );
}
thread blowdoors( var_17 );
var_7 = common_scripts\utility::array_combine( var_7, var_13 );
}
if ( var_6 == 3 )
{
level notify( "blow_fire_blocker" );
if ( isdefined( level.spiral_blocker ) )
{
level.spiral_blocker connectpaths();
level.spiral_blocker notsolid();
}
level waittill( "fire_blocker_success" );
common_scripts\utility::array_call( var_0, ::connectnode );
if ( level.fire_blocker_blown == 0 )
var_7 = getentarray( "defend_south_pressure", "targetname" );
else
var_7 = getentarray( "defend_north_pressure", "targetname" );
}
else
level.moveup_doublespeed = 1;
}
if ( var_8 >= var_4[var_6] )
{
wait 5;
continue;
}
wait 1;
}
}
set_blow_doors_vis( var_0 )
{
var_1 = getentarray( "door_blow_north", "targetname" );
var_1 = common_scripts\utility::array_combine( var_1, getentarray( "door_blow_south", "targetname" ) );
var_2 = getent( "blowdoors_playerclip_north", "script_noteworthy" );
var_3 = getent( "blowdoors_playerclip_south", "script_noteworthy" );
if ( var_0 )
{
common_scripts\utility::array_thread( var_1, maps\_utility::show_solid );
var_2 solid();
var_2 common_scripts\utility::delaycall( 5, ::disconnectpaths );
var_3 solid();
var_3 common_scripts\utility::delaycall( 5, ::disconnectpaths );
}
else
{
common_scripts\utility::array_thread( var_1, maps\_utility::hide_notsolid );
var_2 notsolid();
var_2 connectpaths();
var_3 notsolid();
var_3 connectpaths();
}
}
blowdoors( var_0 )
{
var_1 = getentarray( var_0, "targetname" );
foreach ( var_3 in var_1 )
{
if ( isdefined( var_3.oldcontents ) )
var_3.oldcontents = undefined;
var_3 maps\_utility::hide_notsolid();
}
if ( issubstr( var_0, "north" ) )
{
var_5 = getent( "blowdoors_playerclip_north", "script_noteworthy" );
var_5 notsolid();
var_5 connectpaths();
}
else
{
var_6 = getent( "blowdoors_playerclip_south", "script_noteworthy" );
var_6 notsolid();
var_6 connectpaths();
}
var_7 = common_scripts\utility::getstruct( var_0 + "_struct", "targetname" );
thread maps\clockwork_audio::defend_door_explosion( var_7.origin );
magicgrenade( "smoke_grenade_american", var_7.origin, var_7.origin + ( 0, 0, -30 ), 0 );
playfx( common_scripts\utility::getfx( "throwbot_explode" ), var_7.origin, anglestoforward( var_7.angles ), anglestoup( var_7.angles ) );
var_8 = [];
var_8[0] = 45;
var_8[1] = 10;
var_8[2] = 10;
var_9 = maps\clockwork_code::array_spawn_targetname_allow_fail( var_0 + "_guys", 1 );
common_scripts\utility::array_thread( var_9, ::monitor_guy_moveup, var_8 );
}
trickle_spawn( var_0, var_1, var_2, var_3 )
{
level endon( "defend_player_left_area" );
if ( !isdefined( var_3 ) )
var_3 = 5;
var_4 = getentarray( var_1, "targetname" );
var_5 = var_4.size;
var_6 = var_0 / var_5;
maps\_utility::array_spawn_function( var_4, ::setup_trickle_guy, var_2 );
var_7 = 0;
for ( var_8 = []; var_7 < var_5; var_7++ )
{
if ( !common_scripts\utility::flag( "trickle_spawn_all" ) )
wait( var_6 - randomfloat( var_6 ) / 2 );
else
wait( var_3 - randomfloat( var_3 / 2 ) );
var_9 = var_4[var_7] maps\_utility::spawn_ai( 1 );
if ( isdefined( var_9 ) )
var_8[var_8.size] = var_9;
}
}
setup_trickle_guy( var_0 )
{
self endon( "death" );
common_scripts\utility::flag_wait( "trickle_spawn_all" );
if ( isdefined( self.script_noteworthy ) )
{
var_1 = getent( self.script_noteworthy, "targetname" );
if ( isdefined( var_1 ) )
{
self setgoalvolumeauto( var_1 );
monitor_guy_moveup( var_0 );
}
}
}
spawn_scientists()
{
common_scripts\utility::flag_wait( "defend_spawn_scientists" );
var_0 = getentarray( "defend_scientists", "targetname" );
maps\_utility::array_spawn_function( var_0, ::setup_scientist );
maps\_utility::array_spawn_function( var_0, maps\_utility::disable_bulletwhizbyreaction );
maps\_utility::array_spawn_function( var_0, maps\_utility::disable_pain );
maps\_utility::array_spawn_function( var_0, maps\_utility::disable_surprise );
maps\_utility::array_spawn_function( var_0, maps\_utility::disable_arrivals );
maps\_utility::array_spawn_function( var_0, maps\_utility::disable_exits );
common_scripts\utility::array_thread( var_0, ::set_scientist_talking );
common_scripts\utility::array_thread( var_0, maps\clockwork_code::ambient_animate, 1 );
wait 0.1;
var_1 = maps\_utility::get_ai_group_ai( "defend_scientist_sprint" );
common_scripts\utility::array_thread( var_1, ::set_scientist_sprinting );
level waittill( "defend_shoot_air" );
common_scripts\utility::flag_set( "moveit_scientist" );
}
scientist_always_stand( var_0 )
{
return "stand";
}
setup_scientist()
{
self.chooseposefunc = ::scientist_always_stand;
self.no_dog_target = 1;
}
set_scientist_sprinting()
{
level waittill( "defend_shoot_air" );
wait( randomfloatrange( 0, 0.7 ) );
if ( !isdefined( self ) )
return;
maps\_utility::clear_run_anim();
waittillframeend;
var_0 = "defend_run_scientist_" + randomintrange( 1, 4 );
maps\_utility::set_run_anim( var_0 );
if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "def_sci_1" )
maps\_utility::set_generic_idle_anim( "scientist_idle" );
}
set_scientist_talking()
{
maps\_utility::set_generic_idle_anim( "civilian_stand_idle" );
}
monitor_guy_moveup( var_0 )
{
if ( !isdefined( self ) )
return;
self endon( "death" );
var_1 = self getgoalvolume();
var_2 = 0;
if ( !isdefined( var_1 ) )
return;
while ( isdefined( var_1.script_noteworthy ) )
{
var_3 = getent( var_1.script_noteworthy, "targetname" );
var_4 = var_0[var_2] + randomfloat( 5 ) - 2;
if ( level.moveup_doublespeed )
var_4 = var_4 / 2;
var_5 = 4;
if ( isdefined( var_3.script_parameters ) )
var_5 = int( var_3.script_parameters );
for (;;)
{
wait( var_4 );
var_6 = var_3 maps\_utility::get_ai_touching_volume( "axis" );
if ( var_6.size < var_5 )
break;
var_4 = 3;
}
if ( common_scripts\utility::flag( "defend_combat_finished" ) )
{
common_scripts\utility::flag_wait( "defend_smoke_thrown" );
wait( randomfloatrange( 0, 5 ) );
}
var_2++;
if ( var_2 >= var_0.size )
var_2 = var_0.size - 1;
self setgoalvolumeauto( var_3 );
var_1 = var_3;
}
self allowedstances( "stand" );
}
monitor_enemies_in_pods()
{
thread watch_pod( "def_south_has_enemy", level.allies[2] );
}
cypher_defend_self()
{
self.sidearm = "m9a1";
level endon( "defend_combat_finished" );
self endon( "death" );
var_0 = common_scripts\utility::getstruct( "defend_player_drop_bag_location_mod", "targetname" );
var_1 = getent( "cypher_shoot_left", "targetname" );
var_2 = getent( "cypher_shoot_right", "targetname" );
for (;;)
{
if ( !level.defend_save_safe )
{
if ( self.last_defend_time < gettime() )
{
var_3 = 1;
var_4 = var_1 maps\_utility::get_ai_touching_volume( "axis" );
if ( var_4.size == 0 )
{
wait 0.05;
var_3 = 0;
var_4 = var_2 maps\_utility::get_ai_touching_volume( "axis" );
}
if ( var_4.size > 0 && ( !isdefined( var_4[0].dogcypher_claimed ) || var_4[0].dogcypher_claimed == self ) )
{
var_4[0].dogcypher_claimed = self;
self.last_defend_time = gettime() + 5000 * randomfloatrange( 1, 2 );
var_0 notify( "stop_hacking" );
waittillframeend;
if ( var_3 )
var_0 thread maps\_anim::anim_single_solo( self, "defend_shoot_left_cypher" );
else
var_0 thread maps\_anim::anim_single_solo( self, "defend_shoot_right_cypher" );
self waittillmatch( "single anim", "fire" );
if ( isalive( var_4[0] ) )
magicbullet( "m9a1", self gettagorigin( "tag_flash" ), var_4[0] gettagorigin( "j_head" ) );
self waittillmatch( "single anim", "end" );
var_0 thread maps\_anim::anim_loop_solo( self, "laptop_sit_idle_calm", "stop_hacking" );
}
}
wait 0.1;
continue;
}
wait 1;
}
}
watch_pod( var_0, var_1 )
{
watch_pod_blocker( var_0, var_1 );
common_scripts\utility::flag_set( "can_save" );
}
watch_pod_blocker( var_0, var_1 )
{
var_2 = [];
var_3 = [];
var_3[var_2.size] = 2;
var_2[var_2.size] = "clockwork_cyr_underattack";
var_3[var_2.size] = 2;
var_2[var_2.size] = "clockwork_cyr_tangoesonme";
var_3[var_2.size] = 0;
var_2[var_2.size] = "clockwork_bkr_takingfire";
var_3[var_2.size] = 0;
var_2[var_2.size] = "clockwork_bkr_getbackthere";
var_3[var_2.size] = -1;
var_2[var_2.size] = "clockwork_dz_gotcompany";
var_3[var_2.size] = -1;
var_2[var_2.size] = "clockwork_dz_protectcypher";
var_3[var_2.size] = -1;
var_2[var_2.size] = "clockwork_dz_commandplatform";
var_4 = 0;
var_5 = 0;
var_1.last_defend_time = gettime();
var_1 thread cypher_defend_self();
var_6 = getent( "defend_last_stand", "targetname" );
for (;;)
{
common_scripts\utility::flag_wait( var_0 );
if ( common_scripts\utility::flag( "defend_combat_finished" ) )
{
var_1.allowdeath = 0;
if ( !isdefined( var_1.magic_bullet_shield ) )
var_1 maps\_utility::magic_bullet_shield();
return;
}
level.defend_save_safe = 0;
level.allies[0] setgoalvolumeauto( var_6 );
level.allies[1] setgoalvolumeauto( var_6 );
if ( gettime() > var_5 + 10000 )
{
var_7 = randomintrange( 0, var_2.size );
if ( var_3[var_7] == -1 )
maps\clockwork_code::radio_dialog_add_and_go( var_2[var_7] );
else
level.allies[var_3[var_7]] maps\clockwork_code::char_dialog_add_and_go( var_2[var_7] );
}
var_8 = gettime();
var_1.ignoreme = 0;
while ( common_scripts\utility::flag( var_0 ) )
{
if ( !isdefined( var_1 ) || !isalive( var_1 ) )
{
common_scripts\utility::flag_set( "ally_died" );
var_9 = &"CLOCKWORK_QUOTE_CYPHER_SHOT";
setdvar( "ui_deadquote", var_9 );
maps\_utility::missionfailedwrapper();
return;
}
if ( !common_scripts\utility::flag( "def_player_mid" ) )
{
common_scripts\utility::flag_clear( "can_save" );
var_1.allowdeath = 1;
if ( isdefined( var_1.magic_bullet_shield ) )
var_1 maps\_utility::stop_magic_bullet_shield();
}
else
{
var_1.allowdeath = 0;
if ( !isdefined( var_1.magic_bullet_shield ) )
var_1 maps\_utility::magic_bullet_shield();
}
if ( common_scripts\utility::flag( "defend_combat_finished" ) )
{
var_1.allowdeath = 0;
if ( !isdefined( var_1.magic_bullet_shield ) )
var_1 maps\_utility::magic_bullet_shield();
return;
}
wait 0.05;
}
common_scripts\utility::flag_set( "can_save" );
var_6 = getent( "def_ally_middle", "targetname" );
var_10 = getent( "defend_ally_split", "targetname" );
level.allies[0] setgoalvolumeauto( var_6 );
level.allies[1] setgoalvolumeauto( var_10 );
var_1.allowdeath = 0;
if ( !isdefined( var_1.magic_bullet_shield ) )
var_1 maps\_utility::magic_bullet_shield();
level.defend_save_safe = 1;
var_5 = var_8;
var_1.ignoreme = 1;
}
}
set_bag_objective_visibility( var_0 )
{
level notify( "set_bag_objective_visibility" );
level endon( "set_bag_objective_visibility" );
var_1 = getent( "defend_duffle_obj", "targetname" );
var_2 = getent( "defend_player_drop_bag_trigger", "targetname" );
if ( var_0 )
{
var_1 show();
var_2.force_off = 0;
for (;;)
{
if ( level.player getstance() == "stand" )
var_2.force_off = 0;
else if ( level.player getstance() != "stand" )
var_2.force_off = 1;
common_scripts\utility::waitframe();
}
}
else
{
var_1 hide();
var_2 common_scripts\utility::trigger_off();
}
}
set_bags_invisible()
{
var_0 = [];
var_0[var_0.size] = "defend_duffle_bag_proximity";
var_0[var_0.size] = "defend_duffle_bag_shockwave";
var_0[var_0.size] = "defend_duffle_bag_teargas";
var_0[var_0.size] = "defend_duffle_bag_turret";
level.allies[0].bag_name = var_0[0];
level.allies[1].bag_name = var_0[1];
level.allies[2].bag_name = var_0[2];
foreach ( var_2 in var_0 )
{
var_3 = getent( var_2, "targetname" );
var_4 = var_2 + "_trigger";
var_5 = getent( var_4, "targetname" );
var_3 hide();
var_5 common_scripts\utility::trigger_off();
}
level.teargas_bag = getentarray( "defend_duffel_teargas1", "targetname" );
common_scripts\utility::array_call( level.teargas_bag, ::hide );
common_scripts\utility::array_call( level.teargas_bag, ::notsolid );
}
handle_animated_duffelbags()
{
maps\clockwork_code::init_animated_dufflebags();
}
set_bag_visibility( var_0, var_1 )
{
var_2 = [];
if ( var_0 == "all" )
{
var_2[var_2.size] = "defend_duffle_bag_teargas";
var_2[var_2.size] = "defend_duffle_bag_shockwave";
var_2[var_2.size] = "defend_duffle_bag_turret";
var_2[var_2.size] = "defend_duffle_bag_proximity";
}
else
var_2[var_2.size] = var_0;
foreach ( var_4 in var_2 )
{
var_5 = var_4 + "_trigger";
var_6 = getent( var_5, "targetname" );
if ( var_2.size == 1 )
common_scripts\utility::flag_wait( "defend_player_drop_bag" );
if ( var_0 != "defend_duffle_bag_turret" )
enable_bag_trigger( var_5 );
if ( var_4 == "defend_duffle_bag_proximity" )
{
level.bettys = [];
for ( var_7 = 0; var_7 < 4; var_7++ )
{
level.bettys[var_7] = spawn( "script_model", var_1 gettagorigin( "tag_mine_" + ( var_7 + 1 ) ) );
level.bettys[var_7] setmodel( "weapon_proximity_mine_small_obj" );
level.bettys[var_7].angles = var_1 gettagangles( "tag_mine_" + ( var_7 + 1 ) );
}
level.curr_betty = 0;
continue;
}
if ( var_4 == "defend_duffle_bag_teargas" )
{
common_scripts\utility::array_call( level.teargas_bag, ::show );
continue;
}
if ( var_4 == "defend_duffle_bag_shockwave" )
{
level.shockwaves = [];
for ( var_7 = 0; var_7 < 2; var_7++ )
{
level.shockwaves[var_7] = spawn( "script_model", var_1 gettagorigin( "tag_claymore_" + ( var_7 + 1 ) ) );
level.shockwaves[var_7] setmodel( "weapon_electric_claymore_small_obj" );
level.shockwaves[var_7].angles = var_1 gettagangles( "tag_claymore_" + ( var_7 + 1 ) );
}
level.curr_shockwave = 0;
}
}
}
listen_for_use_shockwave_duffle_bag()
{
var_0 = 0;
level.player thread watchshockwaves();
bag_trigger_wait( "defend_duffle_bag_shockwave_trigger", "defend_duffle_bag_shockwave", "get_shockwave" );
if ( common_scripts\utility::flag( "defend_finished" ) )
return;
thread maps\clockwork_audio::mines_grab();
level.player giveweapon( "shockwave" );
level.player switchtoweapon( "shockwave" );
level.player setactionslot( 4, "weapon", "shockwave" );
common_scripts\utility::flag_set( "defend_used_duffel" );
common_scripts\utility::waitframe();
common_scripts\utility::flag_clear( "get_shockwave" );
maps\_utility::display_hint_timeout( "shockwave_hint", 2.5 );
if ( isdefined( level.shockwaves[var_0] ) )
level.shockwaves[var_0] hide();
var_0 = var_0 + 1;
thread bag_trigger_off_if_player_has_weapon( "defend_duffle_bag_shockwave_trigger", "shockwave" );
while ( !common_scripts\utility::flag( "defend_finished" ) )
{
bag_trigger_wait( "defend_duffle_bag_shockwave_trigger", "defend_duffle_bag_shockwave", "get_shockwave" );
if ( common_scripts\utility::flag( "defend_finished" ) )
continue;
if ( level.player hasweapon( "shockwave" ) )
{
common_scripts\utility::flag_clear( "get_shockwave" );
continue;
}
thread maps\clockwork_audio::mines_grab();
level.player giveweapon( "shockwave" );
level.player switchtoweapon( "shockwave" );
level.player setactionslot( 4, "weapon", "shockwave" );
common_scripts\utility::flag_set( "defend_used_duffel" );
common_scripts\utility::waitframe();
common_scripts\utility::flag_clear( "get_shockwave" );
maps\_utility::display_hint_timeout( "shockwave_hint", 2.5 );
if ( isdefined( level.shockwaves[var_0] ) )
level.shockwaves[var_0] hide();
var_0 = var_0 + 1;
if ( var_0 >= 2 )
{
var_1 = getent( "defend_duffle_bag_shockwave_trigger", "targetname" );
var_1 delete();
return;
}
}
while ( isdefined( level.shockwaves[var_0] ) && var_0 < level.shockwaves.size )
{
level.shockwaves[var_0] delete();
var_0 = var_0 + 1;
}
common_scripts\utility::flag_wait( "player_out_of_defend" );
if ( level.player getcurrentweapon() == "shockwave" )
level.player switchtoweaponimmediate( level.player getweaponslistprimaries()[0] );
level.player takeweapon( "shockwave" );
level.player setactionslot( 4, "" );
}
watchshockwaves()
{
while ( !common_scripts\utility::flag( "defend_finished" ) )
{
self waittill( "grenade_fire", var_0, var_1 );
if ( var_1 == "shockwave" )
{
var_0.owner = self;
var_0 thread shockwavedetonation();
var_0 thread playshockwaveeffects();
wait 0.65;
if ( self getammocount( "shockwave" ) == 0 )
{
level.player takeweapon( "shockwave" );
level.player setactionslot( 4, "" );
}
}
}
}
shockwavedetonation()
{
self waittill( "missile_stuck" );
var_0 = 192;
if ( isdefined( self.detonateradius ) )
var_0 = self.detonateradius;
var_1 = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - var_0 ), 9, var_0, var_0 * 2 );
thread shockwavedeleteondeath( var_1 );
thread shockwave_damage_monitor( var_1 );
if ( !isdefined( level.shockwaves ) )
level.shockwaves = [];
level.shockwaves = common_scripts\utility::array_add( level.shockwaves, self );
if ( !maps\_utility::is_specialop() && level.shockwaves.size > 15 )
level.shockwaves[0] delete();
for (;;)
{
var_1 waittill( "trigger", var_2 );
if ( isdefined( self.owner ) && isdefined( var_2 ) && var_2 == self.owner )
continue;
if ( isdefined( var_2 ) && isplayer( var_2 ) )
continue;
if ( !isdefined( var_2 ) || var_2 damageconetrace( self.origin, self ) > 0 )
{
if ( isdefined( var_2 ) )
wait 0.4;
var_3 = [];
foreach ( var_5 in getaiarray( common_scripts\utility::get_enemy_team( self.owner.team ) ) )
{
if ( distance2dsquared( self.origin, var_5.origin ) < pow( var_0 * 2.0, 2.0 ) && vectordot( anglestoforward( self.angles ), vectornormalize( var_5.origin - self.origin ) ) > 0.13397 && var_5 damageconetrace( self.origin, self ) > 0 )
{
var_5 thread watch_for_shockwave_hit();
var_3[var_3.size] = var_5;
}
}
self playsound( "shock_charge_detonate" );
if ( isdefined( self.owner ) )
self detonate( self.owner );
else
self detonate( undefined );
if ( isdefined( self.damage_proxy ) )
{
self.damage_proxy delete();
self.damage_proxy = undefined;
}
wait 15;
foreach ( var_5 in var_3 )
var_5 notify( "end_shockwave_watch" );
return;
}
}
}
shockwave_damage_monitor( var_0 )
{
self endon( "detonate" );
var_1 = spawn( "script_model", self.origin );
var_1.angles = self.angles;
var_1 setmodel( "weapon_electric_claymore" );
var_1 hide();
var_1 setcandamage( 1 );
var_1.maxhealth = 100000;
var_1.health = var_1.maxhealth;
self.damage_proxy = var_1;
var_2 = undefined;
for (;;)
{
var_1 waittill( "damage", var_3, var_2, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11 );
if ( !isdefined( var_2 ) || !isplayer( var_2 ) )
continue;
break;
}
var_0 notify( "trigger" );
}
watch_for_shockwave_hit()
{
self endon( "death" );
self endon( "end_shockwave_watch" );
var_0 = gettime();
self waittill( "damage", var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10 );
if ( gettime() - var_0 < 0.1 && var_10 == "shockwave" )
{
var_0 = gettime();
var_11 = self.allowdeath;
self.allowdeath = 1;
self.shockwave_pain_anim_index = randomintrange( 1, 5 );
while ( gettime() - var_0 < 10000 && isdefined( self ) && isalive( self ) )
{
self playsound( "shock_charge" );
playfxontag( common_scripts\utility::getfx( "shockwave_shock" ), self, "tag_origin" );
maps\_anim::anim_generic( self, "shockwave_shock_" + self.shockwave_pain_anim_index );
}
if ( isdefined( self ) && isalive( self ) )
self.allowdeath = var_11;
}
}
playshockwaveeffects()
{
self endon( "death" );
self waittill( "missile_stuck" );
playfxontag( common_scripts\utility::getfx( "claymore_laser" ), self, "tag_fx" );
}
shockwavedeleteondeath( var_0 )
{
self waittill( "death" );
level.shockwaves = maps\_utility::array_remove_nokeys( level.shockwaves, self );
wait 0.05;
if ( isdefined( var_0 ) )
var_0 delete();
}
listen_for_use_multi_turret()
{
level.player notifyonplayercommand( "use_multi_turret", "+actionslot 4" );
for (;;)
level.player waittill( "use_multi_turret" );
}
listen_for_use_turret_duffle_bag()
{
var_0 = 0;
thread watch_sentry_badplace();
while ( !common_scripts\utility::flag( "defend_finished" ) )
{
bag_trigger_wait( "defend_duffle_bag_turret_trigger", "defend_duffle_bag_turret", "get_turret" );
if ( common_scripts\utility::flag( "defend_finished" ) )
continue;
level.sentry_obj hide();
common_scripts\utility::flag_set( "defend_used_duffel" );
common_scripts\utility::flag_set( "defend_used_sentry" );
var_1 = level.player common_scripts\_sentry::spawn_and_place_sentry( "sentry_smg", ( 0, 0, 0 ), ( 0, 0, 0 ), 1 );
var_1 useby( level.player );
if ( !isdefined( level.defend_sentry ) )
level.defend_sentry = [];
level.defend_sentry[level.defend_sentry.size] = var_1;
var_0++;
common_scripts\utility::waitframe();
common_scripts\utility::flag_clear( "get_turret" );
if ( var_0 >= 1 )
{
var_2 = getent( "defend_duffle_bag_turret_trigger", "targetname" );
var_2 delete();
return;
}
level.player waittill( "sentry_placement_finished" );
level.sentry_obj show();
}
}
handle_bag_hints()
{
return 0;
}
listen_for_use_teargas_duffle_bag()
{
while ( !common_scripts\utility::flag( "defend_finished" ) )
{
bag_trigger_wait( "defend_duffle_bag_teargas_trigger", "defend_duffle_bag_teargas", "get_teargas" );
if ( common_scripts\utility::flag( "defend_finished" ) )
return;
thread maps\clockwork_audio::teargas_grab();
level.player takeweapon( "flash_grenade" );
level.player setoffhandsecondaryclass( "smoke" );
level.player giveweapon( "teargas_grenade" );
common_scripts\utility::array_call( level.teargas_bag, ::hide );
common_scripts\utility::waitframe();
common_scripts\utility::flag_clear( "get_teargas" );
common_scripts\utility::flag_set( "defend_used_duffel" );
var_0 = getent( "defend_duffle_bag_teargas_trigger", "targetname" );
var_0 delete();
maps\_utility::display_hint_timeout( "teargas_hint", 2.5 );
return;
}
}
bag_trigger_wait( var_0, var_1, var_2 )
{
level endon( "defend_finished" );
var_3 = getent( var_0, "targetname" );
var_4 = getent( var_1, "targetname" );
maps\player_scripted_anim_util::waittill_trigger_activate_looking_at( var_3, var_4 );
if ( isdefined( var_2 ) )
common_scripts\utility::flag_set( var_2 );
}
bag_trigger_off_if_player_has_weapon( var_0, var_1 )
{
level endon( "defend_finished" );
var_2 = getent( var_0, "targetname" );
while ( isdefined( var_2 ) )
{
if ( level.player hasweapon( var_1 ) )
var_2.force_off = 1;
else
var_2.force_off = 0;
wait 0.05;
}
}
listen_for_use_proximity_duffle_bag()
{
var_0 = 0;
bag_trigger_wait( "defend_duffle_bag_proximity_trigger", "defend_duffle_bag_proximity", "get_proximity_mine" );
if ( common_scripts\utility::flag( "defend_finished" ) )
return;
thread maps\clockwork_audio::mines_grab();
level.player giveweapon( "thermobaric_mine" );
level.player switchtoweapon( "thermobaric_mine" );
level.player setactionslot( 1, "weapon", "thermobaric_mine" );
common_scripts\utility::flag_set( "defend_used_duffel" );
common_scripts\utility::flag_set( "defend_used_mines" );
thread listen_for_mine_layed();
thread player_monitor_mine_friendly_fire();
common_scripts\utility::waitframe();
common_scripts\utility::flag_clear( "get_proximity_mine" );
if ( isdefined( level.bettys[var_0] ) )
level.bettys[var_0] hide();
var_0 = var_0 + 1;
thread bag_trigger_off_if_player_has_weapon( "defend_duffle_bag_proximity_trigger", "thermobaric_mine" );
while ( !common_scripts\utility::flag( "defend_finished" ) )
{
bag_trigger_wait( "defend_duffle_bag_proximity_trigger", "defend_duffle_bag_proximity", "get_proximity_mine" );
if ( common_scripts\utility::flag( "defend_finished" ) )
continue;
if ( level.player hasweapon( "thermobaric_mine" ) )
{
common_scripts\utility::flag_clear( "get_proximity_mine" );
continue;
}
thread maps\clockwork_audio::mines_grab();
level.player giveweapon( "thermobaric_mine" );
level.player switchtoweapon( "thermobaric_mine" );
level.player setactionslot( 1, "weapon", "thermobaric_mine" );
common_scripts\utility::flag_set( "defend_used_duffel" );
common_scripts\utility::flag_set( "defend_used_mines" );
thread listen_for_mine_layed();
thread player_monitor_mine_friendly_fire();
common_scripts\utility::waitframe();
common_scripts\utility::flag_clear( "get_proximity_mine" );
if ( isdefined( level.bettys[var_0] ) )
level.bettys[var_0] hide();
var_0 = var_0 + 1;
if ( var_0 >= 4 )
{
var_1 = getent( "defend_duffle_bag_proximity_trigger", "targetname" );
var_1 delete();
return;
}
}
while ( isdefined( level.bettys[var_0] ) && var_0 < level.bettys.size )
{
level.bettys[var_0] setmodel( "weapon_proximity_mine_small" );
var_0 = var_0 + 1;
}
common_scripts\utility::flag_wait( "player_out_of_defend" );
if ( level.player getcurrentweapon() == "thermobaric_mine" )
level.player switchtoweaponimmediate( level.player getweaponslistprimaries()[0] );
level.player takeweapon( "thermobaric_mine" );
level.player setactionslot( 1, "" );
level.player notify( "stop_thermobaric_mine" );
}
player_monitor_mine_friendly_fire()
{
level.player endon( "death" );
level notify( "player_monitor_mine_friendly_fire" );
level endon( "player_monitor_mine_friendly_fire" );
level.player endon( "stop_thermobaric_mine" );
var_0 = getdvar( "g_friendlyfireDist" );
var_1 = "timeout";
while ( level.player hasweapon( "thermobaric_mine" ) )
{
setsaveddvar( "g_friendlyfireDist", var_0 );
if ( isdefined( var_1 ) )
level.player waittill( "start_attack" );
if ( level.player getcurrentweapon() != "thermobaric_mine" )
continue;
setsaveddvar( "g_friendlyfireDist", "0" );
level.player waittill( "end_attack" );
var_1 = undefined;
var_1 = level.player common_scripts\utility::waittill_notify_or_timeout_return( "start_attack", 2 );
}
}
looking_at_ally()
{
var_0 = level.player;
return var_0 islookingat( level.allies[0] ) || var_0 islookingat( level.allies[1] ) || var_0 islookingat( level.allies[2] );
}
watch_remove_hint()
{
level notify( "watch_remove_hint" );
level endon( "watch_remove_hint" );
wait 2;
self forceusehintoff();
self.force_hint = undefined;
}
listen_for_mine_layed()
{
level notify( "listen_for_mine_laying" );
level endon( "listen_for_mine_laying" );
level.mine_pickup_sound = 0;
level.player notifyonplayercommand( "start_attack", "+attack" );
level.player notifyonplayercommand( "end_attack", "-attack" );
maps\_utility::display_hint_timeout( "mine_hint", 2.5 );
while ( level.player hasweapon( "thermobaric_mine" ) )
{
level.player waittill( "end_attack" );
if ( looking_at_ally() )
continue;
if ( level.player getcurrentweapon() == "thermobaric_mine" )
{
var_0 = 0;
while ( !var_0 )
{
var_1 = getentarray( "grenade", "classname" );
foreach ( var_3 in var_1 )
{
if ( var_3.model == "weapon_proximity_mine" && !isdefined( var_3.is_setup ) )
{
var_3 thread arm_mine();
var_0 = 1;
if ( level.mine_pickup_sound < 7 )
{
level.mine_pickup_sound++;
thread maps\clockwork_audio::mines_ready_to_throw();
}
break;
}
}
wait 0.05;
}
if ( level.player getammocount( "thermobaric_mine" ) == 0 )
{
level.player takeweapon( "thermobaric_mine" );
level.player setactionslot( 1, "" );
}
}
}
}
arm_mine()
{
self.is_setup = 1;
self waittill( "missile_stuck" );
var_0 = bullettrace( self.origin + ( 0, 0, 4 ), self.origin - ( 0, 0, 4 ), 0, self );
var_1 = var_0["position"];
if ( var_0["fraction"] == 1 )
{
var_1 = getgroundposition( self.origin, 12, 0, 32 );
var_0["normal"] = var_0["normal"] * -1;
}
var_2 = vectornormalize( var_0["normal"] );
var_3 = vectortoangles( var_2 );
var_3 = var_3 + ( 90, 0, 0 );
var_4 = spawnmine( var_1, var_3 );
if ( !isdefined( level.clockwork_thermobaric_mines ) )
level.clockwork_thermobaric_mines = [];
level.clockwork_thermobaric_mines[level.clockwork_thermobaric_mines.size] = var_4;
self delete();
wait 1;
var_4.trigger = spawn( "trigger_radius", var_4.origin, 73, 72, 12 );
var_4 thread listen_for_mine_trigger();
}
spawnmine( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = ( 0, randomfloat( 360 ), 0 );
var_2 = "weapon_proximity_mine";
var_3 = spawn( "script_model", var_0 );
var_3.angles = var_1;
var_3 setmodel( var_2 );
var_3.weaponname = "thermobaric_mine";
var_3 thread minedamagemonitor();
return var_3;
}
minedamagemonitor()
{
self endon( "mine_triggered" );
self setcandamage( 1 );
self.maxhealth = 100000;
self.health = self.maxhealth;
var_0 = undefined;
for (;;)
{
self waittill( "damage", var_1, var_0, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
if ( !isplayer( var_0 ) || isdefined( var_9 ) && var_9 == "thermobaric_mine" )
continue;
break;
}
self notify( "mine_destroyed" );
foreach ( var_11 in getaiarray( "axis" ) )
{
if ( distancesquared( var_11.origin, self.origin ) < 19600 )
var_11 thread mine_damage_increase();
}
playfx( common_scripts\utility::getfx( "throwbot_explode" ), self.origin );
radiusdamage( self.origin, 140, 10, 1, undefined, undefined, "thermobaric_mine" );
thread common_scripts\utility::play_sound_in_space( "clkw_mine_explode", self.origin );
level.clockwork_thermobaric_mines = common_scripts\utility::array_remove( level.clockwork_thermobaric_mines, self );
foreach ( var_14 in level.clockwork_thermobaric_mines )
{
if ( distancesquared( var_14.origin, self.origin ) <= 19600 )
{
var_14 notify( "mine_triggered" );
var_14 notify( "mine_destroyed" );
level.clockwork_thermobaric_mines = common_scripts\utility::array_remove( level.clockwork_thermobaric_mines, var_14 );
if ( isdefined( var_14.trigger ) )
var_14.trigger delete();
if ( isdefined( var_14 ) )
var_14 delete();
}
}
if ( isdefined( self.trigger ) )
self.trigger delete();
if ( isdefined( self ) )
self delete();
}
listen_for_mine_trigger()
{
self endon( "mine_destroyed" );
self.trigger waittill( "trigger", var_0 );
self notify( "mine_triggered" );
if ( isdefined( self.trigger ) )
self.trigger delete();
var_1 = self.origin;
playfx( common_scripts\utility::getfx( "mine_explode" ), self.origin + ( 0, 0, 5 ) );
thread maps\clockwork_audio::mine_explode( var_1 );
level.clockwork_thermobaric_mines = common_scripts\utility::array_remove( level.clockwork_thermobaric_mines, self );
var_2 = [];
foreach ( var_4 in level.clockwork_thermobaric_mines )
{
if ( distancesquared( var_4.origin, self.origin ) <= 129600 )
{
var_4 notify( "mine_triggered" );
var_4 notify( "mine_destroyed" );
level.clockwork_thermobaric_mines = common_scripts\utility::array_remove( level.clockwork_thermobaric_mines, var_4 );
var_2[var_2.size] = var_4;
}
}
wait 0.5;
var_6 = getaiarray( "axis" );
foreach ( var_0 in var_6 )
{
if ( distancesquared( var_0.origin, var_1 ) < 32400 )
var_0 maps\_utility::flashbangstart( 5 );
}
wait 1;
foreach ( var_0 in getaiarray( "axis" ) )
{
if ( distancesquared( var_0.origin, var_1 ) < 129600 )
var_0 thread mine_damage_increase();
}
playfx( common_scripts\utility::getfx( "throwbot_explode" ), var_1 + ( 0, 0, 5 ) );
radiusdamage( var_1 + ( 0, 0, 50 ), 360, 50, 1, undefined, undefined, "thermobaric_mine" );
if ( isdefined( self ) )
self delete();
foreach ( var_4 in var_2 )
{
if ( isdefined( var_4.trigger ) )
var_4.trigger delete();
if ( isdefined( var_4 ) )
var_4 delete();
}
}
mine_damage_increase()
{
self endon( "death" );
self endon( "stop_mine_damage_increase" );
self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
if ( isdefined( var_9 ) && var_9 == "thermobaric_mine" )
self dodamage( var_0 * 10, var_3, var_1 );
}
wave1_radio_chatter()
{
wait 5;
thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs2_idintruders", 1, "def_wave1_done" );
thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs2_onserverdeck", 2, "def_wave1_done" );
}
handle_autoturret_chatter()
{
level endon( "defend_combat_finished" );
common_scripts\utility::flag_wait( "def_wave1_done" );
thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs4_autoturret", 1, "wave2_pre_dialog" );
thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs4_approachcwing", 2, "wave2_pre_dialog" );
}
handle_teargas_chatter()
{
level endon( "defend_combat_finished" );
var_0 = getent( "teargas_flush_volume", "targetname" );
var_0 waittill( "teargas_exploded" );
wait 5;
level.player maps\clockwork_code::radio_dialog_add_and_go( "clockwork_rs4_teargas" );
}
setup_blockers()
{
level.phys_blockers_brush[0] = getentarray( "phys_blocker_north_brush", "targetname" );
level.phys_blockers_model[0] = getentarray( "phys_blocker_north_model", "targetname" );
level.fire_blockers_brush[0] = getentarray( "fire_blocker_north_brush", "targetname" );
level.fire_blockers_hurt[0] = getentarray( "fire_blocker_north_hurt", "targetname" );
level.fire_blockers_jet[0] = common_scripts\utility::getstructarray( "fire_blocker_north_jet", "targetname" );
level.fire_blockers_body[0] = common_scripts\utility::getstructarray( "fire_blocker_north_body", "targetname" );
level.fire_radiusdamage[0] = common_scripts\utility::getstruct( "fire_blocker_north_radiusdamage", "targetname" );
level.phys_blockers_brush[1] = getentarray( "phys_blocker_south_brush", "targetname" );
level.phys_blockers_model[1] = getentarray( "phys_blocker_south_model", "targetname" );
level.fire_blockers_brush[1] = getentarray( "fire_blocker_south_brush", "targetname" );
level.fire_blockers_hurt[1] = getentarray( "fire_blocker_south_hurt", "targetname" );
level.fire_blockers_jet[1] = common_scripts\utility::getstructarray( "fire_blocker_south_jet", "targetname" );
level.fire_blockers_body[1] = common_scripts\utility::getstructarray( "fire_blocker_south_body", "targetname" );
level.fire_radiusdamage[1] = common_scripts\utility::getstruct( "fire_blocker_south_radiusdamage", "targetname" );
level.spiral_blocker = getent( "spiral_stair_blocker", "targetname" );
if ( isdefined( level.spiral_blocker ) )
{
level.spiral_blocker connectpaths();
level.spiral_blocker notsolid();
}
foreach ( var_1 in level.phys_blockers_brush )
{
foreach ( var_3 in var_1 )
{
var_3 connectpaths();
var_3 hide();
var_3 notsolid();
}
}
foreach ( var_1 in level.phys_blockers_model )
{
foreach ( var_8 in var_1 )
{
var_8 hide();
var_8 notsolid();
}
}
foreach ( var_1 in level.fire_blockers_hurt )
{
foreach ( var_13 in var_1 )
var_13 common_scripts\utility::trigger_off();
}
foreach ( var_1 in level.fire_blockers_brush )
{
foreach ( var_3 in var_1 )
{
var_3 connectpaths();
var_3 hide();
var_3 notsolid();
}
}
}
handle_platform_blockers()
{
level waittill( "blow_fire_blocker" );
var_0 = getent( "def_ally_south", "targetname" );
var_1 = getent( "def_ally_north", "targetname" );
var_2 = 15;
var_3 = gettime() + var_2 * 100;
var_4 = -1;
for (;;)
{
common_scripts\utility::flag_clear( "defend_timeout" );
maps\_utility::delaythread( var_2 + 0.1, common_scripts\utility::flag_set, "defend_timeout" );
var_5 = common_scripts\utility::flag_wait_any_return( "defend_timeout", "defend_looking_south", "defend_looking_north" );
var_6 = ispointinvolume( level.player.origin + ( 0, 0, 50 ), var_0 );
if ( var_3 < gettime() || var_5 == "defend_timeout" )
{
var_4 = 1;
if ( var_6 )
var_4 = 0;
thread handle_fire_blocker( var_4 );
break;
}
if ( var_5 == "defend_looking_south" )
{
if ( !var_6 )
{
var_4 = 1;
thread handle_fire_blocker( var_4 );
break;
}
}
else if ( !ispointinvolume( level.player.origin + ( 0, 0, 50 ), var_1 ) )
{
var_4 = 0;
thread handle_fire_blocker( var_4 );
break;
}
wait 0.1;
}
level notify( "fire_blocker_success" );
level.fire_blocker_blown = var_4;
var_7 = getentarray( "defend_fireblocker_lookers", "targetname" );
common_scripts\utility::array_call( var_7, ::delete );
if ( common_scripts\utility::flag( "defend_player_fail_leaving" ) || common_scripts\utility::flag( "ally_died" ) )
return;
thread maps\_utility::autosave_by_name( "post_fireblocker" );
level waittill( "setup_blockade" );
}
handle_fire_blocker( var_0 )
{
var_1 = 4;
thread move_allies_from_fire_blocker( var_1 );
foreach ( var_3 in level.fire_blockers_hurt[var_0] )
var_3 common_scripts\utility::trigger_on();
radiusdamage( level.fire_radiusdamage[var_0].origin, 256, 200, 150 );
foreach ( var_6 in level.fire_blockers_jet[var_0] )
playfx( common_scripts\utility::getfx( "throwbot_explode" ), var_6.origin, anglestoforward( var_6.angles ), anglestoup( var_6.angles ) );
foreach ( var_6 in level.fire_blockers_body[var_0] )
playfx( common_scripts\utility::getfx( "fx/fire/fire_gaz_clk" ), var_6.origin, anglestoforward( var_6.angles ), anglestoup( var_6.angles ) );
var_6 = level.fire_blockers_jet[var_0][0];
thread maps\clockwork_audio::defend_fire( var_6.origin );
waittill_allies_out_of_fire_blocker( var_0 );
badplace_cylinder( "", var_1, level.fire_blockers_body[var_0][0].origin - ( 0, 0, 40 ), 150, 150, "allies", "axis" );
foreach ( var_11 in level.fire_blockers_brush[var_0] )
badplace_brush( "", var_1, var_11, "allies", "axis" );
wait( var_1 );
foreach ( var_11 in level.fire_blockers_brush[var_0] )
{
var_11 show();
var_11 solid();
if ( isdefined( var_11.script_noteworthy ) && var_11.script_noteworthy == "hideme" )
{
var_11 disconnectpaths();
var_11 hide();
var_11 notsolid();
}
}
common_scripts\utility::flag_wait( "door_close" );
foreach ( var_11 in level.fire_blockers_brush[var_0] )
{
if ( isdefined( var_11.script_noteworthy ) && var_11.script_noteworthy == "hideme" )
{
var_11 notsolid();
var_11 connectpaths();
}
}
}
waittill_allies_out_of_fire_blocker( var_0 )
{
for (;;)
{
var_1 = 0;
foreach ( var_3 in level.fire_blockers_brush[var_0] )
{
if ( level.allies[0] istouching( var_3 ) || level.allies[1] istouching( var_3 ) )
{
var_1 = 1;
break;
}
}
if ( !var_1 )
return;
common_scripts\utility::waitframe();
}
}
move_allies_from_fire_blocker( var_0 )
{
level.allies[0] thread ally_move_from_fire_blocker( "baker_fireblocker_node", var_0 );
level.allies[1] thread ally_move_from_fire_blocker( "keegan_fireblocker_node", var_0 );
}
ally_move_from_fire_blocker( var_0, var_1 )
{
var_2 = getnode( var_0, "targetname" );
if ( !isdefined( var_2 ) )
return;
var_3 = 15;
self.ignoreall = 1;
if ( distance2dsquared( self.origin, var_2.origin ) <= var_3 )
wait( var_1 );
else
{
var_4 = self.goalradius;
self.goalradius = var_3;
self setgoalnode( var_2 );
wait( var_1 );
self.goalradius = var_4;
}
self.ignoreall = 0;
}
handle_cypher_backups()
{
level.allies[2] endon( "death" );
level endon( "defend_player_left_area" );
var_0 = [];
var_1 = [];
for ( var_2 = 1; var_2 < 6; var_2++ )
{
var_0[var_0.size] = getent( "cypher_backup_" + var_2, "targetname" );
var_1[var_1.size] = getent( "cypher_backup_obj_" + var_2, "targetname" );
var_0[var_0.size - 1] hide();
var_1[var_1.size - 1] hide();
}
var_3 = 0;
level waittill( "download_timer_started" );
for ( var_4 = ( level.download_timer - 10 ) / ( var_0.size + 1 ); var_3 < var_0.size; var_3++ )
{
level common_scripts\utility::waittill_notify_or_timeout( "add_cypher_backup", var_4 );
var_0[var_3] show();
}
common_scripts\utility::flag_wait( "defend_combat_finished" );
maps\clockwork_code::safe_activate_trigger_with_targetname( "def_combat_finished" );
common_scripts\utility::waitframe();
level.allies[2] maps\_utility::disable_ai_color();
thread allies_throw_smoke();
thread handle_random_mg_fire();
}
allies_throw_smoke()
{
common_scripts\utility::flag_wait( "defend_smoke_thrown" );
thread watch_ally_throw_end_smoke( level.allies[0], "baker_smoke_toss" );
wait 0.2;
watch_ally_throw_end_smoke( level.allies[1], "keegan_smoke_toss" );
if ( isdefined( level.allies[0].maxfaceenemydist ) )
level.allies[0].old_maxfaceenemydist = level.allies[0].maxfaceenemydist;
else
level.allies[0].old_maxfaceenemydist = undefined;
level.allies[0].maxfaceenemydist = 2048;
if ( isdefined( level.allies[1].maxfaceenemydist ) )
level.allies[1].old_maxfaceenemydist = level.allies[0].maxfaceenemydist;
else
level.allies[1].old_maxfaceenemydist = undefined;
level.allies[1].maxfaceenemydist = 2048;
common_scripts\utility::flag_set( "defend_allies_smoke_thrown" );
common_scripts\utility::flag_wait( "defend_player_left_area" );
level.allies[0].maxfaceenemydist = level.allies[0].old_maxfaceenemydist;
level.allies[1].maxfaceenemydist = level.allies[1].old_maxfaceenemydist;
}
handle_random_mg_fire()
{
common_scripts\utility::flag_wait( "defend_smoke_thrown" );
var_0 = common_scripts\utility::getstructarray( "defend_mg_fire", "targetname" );
var_1 = common_scripts\utility::getstructarray( "defend_mg_fire_target", "targetname" );
var_2 = 0;
while ( !common_scripts\utility::flag( "door_close" ) )
{
foreach ( var_4 in var_0 )
{
foreach ( var_6 in var_1 )
{
var_7 = ( randomintrange( -128, 128 ), randomintrange( -128, 128 ), randomintrange( -64, 0 ) );
magicbullet( "m27", var_4.origin, var_6.origin + var_7 );
var_2++;
common_scripts\utility::waitframe();
if ( var_2 >= 40 || var_2 == randomintrange( 0, 40 ) )
{
var_2 = 0;
magicbullet( "m27", var_4.origin, level.player.origin + ( 0, 0, 32 ) );
}
}
}
wait( randomfloatrange( 0.25, 1 ) );
}
}
watch_sentry_badplace()
{
level endon( "defend_combat_finished" );
for (;;)
{
level.player waittill( "sentry_placement_finished" );
wait 0.3;
if ( isdefined( level.defend_sentry[0].badplace_name ) )
{
call [[ level.badplace_delete_func ]]( level.defend_sentry[0].badplace_name );
call [[ level.badplace_cylinder_func ]]( level.defend_sentry[0].badplace_name, 0, level.defend_sentry[0].origin, 32, 48, level.defend_sentry[0].team, "neutral" );
}
}
}
handle_dog_defend()
{
common_scripts\utility::flag_wait( "defend_player_drop_bag" );
handle_dog_combat_defend();
common_scripts\utility::flag_wait( "defend_combat_finished" );
level.dog maps\_utility::set_ignoreall( 1 );
level.dog maps\_utility::set_ignoreme( 1 );
level.dog maps\ally_attack_dog::set_dog_scripted_mode( level.player );
level.dog thread maps\ally_attack_dog::lock_player_control_until_flag( "ele_anim_done" );
}
handle_dog_combat_defend()
{
handle_dog_combat_defend_static();
level.dog maps\ally_attack_dog::dog_enable_ai_color();
level.dog.goalradius = 64;
level.dog.goalheight = 128;
level.dog.pathenemyfightdist = 0;
level.dog setdogattackradius( 128 );
}
handle_dog_combat_defend_static()
{
level endon( "defend_combat_finished" );
level.dog maps\ally_attack_dog::dog_disable_ai_color();
level.dog.goalradius = 64;
level.dog.goalheight = 64;
level.dog.pathenemyfightdist = 0;
level.dog setdogattackradius( 256 );
var_0 = getent( "defend_last_stand", "targetname" );
for (;;)
{
common_scripts\utility::flag_wait( "def_south_has_enemy" );
var_1 = var_0 maps\_utility::get_ai_touching_volume( "axis" );
if ( var_1.size > 0 )
{
var_2 = randomint( var_1.size );
if ( !isdefined( var_1[var_2].dogcypher_claimed ) || var_1[var_2].dogcypher_claimed == level.dog )
{
var_1[var_2].dogcypher_claimed = level.dog;
level.override_dog_enemy = var_1[var_2];
level.player notify( "dog_attack_override" );
var_1[var_2] common_scripts\utility::waittill_notify_or_timeout( "dead", 15 );
}
}
wait 0.1;
}
}
updatesentrypositionclockwork( var_0 )
{
var_1 = 0;
var_2 = getent( "no_turret", "targetname" );
if ( isdefined( var_2 ) && !common_scripts\utility::flag( "cypher_baker_interaction_done" ) )
var_1 = var_0 istouching( var_2 );
var_3 = self canplayerplacesentry();
var_0.origin = var_3["origin"];
var_0.angles = var_3["angles"];
self.canplaceentity = self isonground() && var_3["result"] && !var_1;
common_scripts\_sentry::sentry_placement_hint_show( self.canplaceentity );
if ( self.canplaceentity )
var_0 setmodel( level.sentry_settings[var_0.sentrytype].placementmodel );
else
var_0 setmodel( level.sentry_settings[var_0.sentrytype].placementmodelfail );
}