// 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 ); }