// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool clockwork_interior_pre_load() { common_scripts\utility::flag_init( "interior_finished" ); common_scripts\utility::flag_init( "interior_combat_finished" ); common_scripts\utility::flag_init( "interior_cqb_finished" ); common_scripts\utility::flag_init( "at_vault_door" ); common_scripts\utility::flag_init( "green_zone" ); common_scripts\utility::flag_init( "lights_on" ); common_scripts\utility::flag_init( "vault_blast_area" ); common_scripts\utility::flag_init( "approaching_vault_door" ); common_scripts\utility::flag_init( "drill_pickup_ready" ); common_scripts\utility::flag_init( "got_drill" ); common_scripts\utility::flag_init( "drill_safezone" ); common_scripts\utility::flag_init( "drill_toofar" ); common_scripts\utility::flag_init( "drill_spot1_ready" ); common_scripts\utility::flag_init( "drill1_start" ); common_scripts\utility::flag_init( "drill1_complete" ); common_scripts\utility::flag_init( "drill_spot2_ready" ); common_scripts\utility::flag_init( "drill2_start" ); common_scripts\utility::flag_init( "drill2_complete" ); common_scripts\utility::flag_init( "enable_charge" ); common_scripts\utility::flag_init( "glow_start" ); common_scripts\utility::flag_init( "thermite_start" ); common_scripts\utility::flag_init( "thermite_stop" ); common_scripts\utility::flag_init( "explosion_start" ); common_scripts\utility::flag_init( "start_pip_cams" ); common_scripts\utility::flag_init( "discovery_guys" ); common_scripts\utility::flag_init( "discovery_spawn" ); common_scripts\utility::flag_init( "start_discovery" ); common_scripts\utility::flag_init( "end_discovery" ); common_scripts\utility::flag_init( "attack_discovery_guys" ); common_scripts\utility::flag_init( "combat_start" ); common_scripts\utility::flag_init( "combat_guys1" ); common_scripts\utility::flag_init( "combat_sidehall" ); common_scripts\utility::flag_init( "combat_first_guys_dead" ); common_scripts\utility::flag_init( "combat_1_over" ); common_scripts\utility::flag_init( "combat_flee" ); common_scripts\utility::flag_init( "to_cqb" ); common_scripts\utility::flag_init( "to_cqb2" ); common_scripts\utility::flag_init( "catwalks_open" ); common_scripts\utility::flag_init( "kick_a_door" ); common_scripts\utility::flag_init( "shut_catwalk_door" ); common_scripts\utility::flag_init( "cqb_attack5" ); common_scripts\utility::flag_init( "catwalk_melee_abort" ); common_scripts\utility::flag_init( "cqb1_dead" ); common_scripts\utility::flag_init( "cqb2_dead" ); common_scripts\utility::flag_init( "cqb3_dead" ); common_scripts\utility::flag_init( "cqb4_dead" ); common_scripts\utility::flag_init( "cqb5_dead" ); common_scripts\utility::flag_init( "cqb6_dead" ); common_scripts\utility::flag_init( "cqb7_dead" ); common_scripts\utility::flag_init( "extra_guys_dead" ); common_scripts\utility::flag_init( "round_room_fight" ); common_scripts\utility::flag_init( "rotunda_cam" ); common_scripts\utility::flag_init( "thermite_started" ); common_scripts\utility::flag_init( "aud_drilling_door" ); common_scripts\utility::flag_init( "drill_attached" ); common_scripts\utility::flag_init( "starting_rotunda_kill" ); common_scripts\utility::flag_init( "obj_vault_complete" ); common_scripts\utility::flag_init( "Obj_datacenter_complete" ); common_scripts\utility::flag_init( "at_slow_door" ); common_scripts\utility::flag_init( "hesh_ready_for_catwalks" ); } setup_interior_vault_scene() { maps\clockwork_code::dog_setup(); maps\clockwork_code::setup_player(); maps\clockwork_code::spawn_allies(); level.player switchtoweapon( "cz805bren+reflex_sp+silencer_sp" ); maps\_utility::battlechatter_off( "allies" ); maps\_utility::battlechatter_off( "axis" ); common_scripts\utility::array_thread( level.allies, maps\_utility::enable_cqbwalk ); common_scripts\utility::flag_set( "lights_out" ); common_scripts\utility::flag_set( "FLAG_eyes_and_ears_complete" ); common_scripts\utility::flag_clear( "lights_on" ); maps\_utility::vision_set_changes( "clockwork_lights_off", 0 ); visionsetnight( "clockwork_night" ); level.player setactionslot( 1, "nightvision" ); thread maps\clockwork_audio::checkpoint_interior_vault_scene(); level.player thread maps\_nightvision::nightvision_on(); level.player nightvisiongogglesforceon(); common_scripts\utility::flag_set( "nvg_light_on" ); thread maps\clockwork_interior_nvg::player_light(); thread vault_objective(); } begin_interior_vault_scene() { var_0 = common_scripts\utility::array_combine( getentarray( "chaos_decals", "targetname" ), getentarray( "chaos_decals1", "targetname" ) ); var_0 = common_scripts\utility::array_combine( var_0, getentarray( "chaos_decals2", "targetname" ) ); var_0 = common_scripts\utility::array_combine( var_0, getentarray( "chaos_decals_delete", "targetname" ) ); foreach ( var_2 in var_0 ) var_2 hide(); if ( level.woof ) thread handle_dog_interior_attack(); maps\clockwork_code::setup_drill( 1 ); maps\_utility::disable_trigger_with_targetname( "pickup_drill_trigger" ); setup_vault_door( 1 ); setup_vault_props(); thread new_vault_scene(); thread interior_vault_handle_ps4_ssao(); common_scripts\utility::flag_wait( "interior_finished" ); maps\_utility::delaythread( 4, maps\_utility::autosave_by_name, "vault_open" ); } interior_vault_handle_ps4_ssao() { if ( !level.ps4 ) return; common_scripts\utility::flag_wait( "explosion_start" ); maps\_art::disable_ssao_over_time( 0.2 ); wait 6; maps\_art::enable_ssao_over_time( 2 ); } handle_dog_interior_attack() { level.dog setdogattackradius( 200 ); } setup_vault_props() { level.tablet_prop = maps\_utility::spawn_anim_model( "vault_tablet_prop" ); level.tablet = maps\_utility::spawn_anim_model( "vault_tablet" ); level.tablet linkto( level.tablet_prop, "J_prop_1" ); level.tablet hide(); playfxontag( level._effect["vfx/moments/clockwork/vfx_vault_tablet_screen"], level.tablet_prop, "J_prop_1" ); level.thermite1 = maps\_utility::spawn_anim_model( "vault_thermite1" ); level.thermite2 = maps\_utility::spawn_anim_model( "vault_thermite2" ); level.thermite3 = maps\_utility::spawn_anim_model( "vault_thermite3" ); level.thermite1 hide(); level.thermite2 hide(); level.thermite3 hide(); level.charge1 = maps\_utility::spawn_anim_model( "vault_charge1" ); level.charge2 = maps\_utility::spawn_anim_model( "vault_charge2" ); level.charge1 hide(); level.charge2 hide(); level.drill_prop = maps\_utility::spawn_anim_model( "vault_drill_prop" ); maps\clockwork_code::setup_drill( 0 ); foreach ( var_1 in level.drill_pickup ) var_1 linkto( level.drill_prop, "J_prop_1", ( 0, 0, 0 ), ( 0, 0, 0 ) ); level.vault_props = maps\_utility::make_array( level.thermite1, level.thermite2, level.charge1, level.charge2 ); level.spool_prop = maps\_utility::spawn_anim_model( "vault_spool_prop" ); level.spool = maps\_utility::spawn_anim_model( "vault_spool" ); level.spool linkto( level.spool_prop, "J_prop_1" ); level.spool hide(); level.glowstick1_prop = maps\_utility::spawn_anim_model( "vault_glowstick1_prop" ); level.glowstick1 = maps\_utility::spawn_anim_model( "vault_glowstick1" ); level.glowstick1 linkto( level.glowstick1_prop, "J_prop_1" ); level.glowstick1 hide(); level.glowstick2_prop = maps\_utility::spawn_anim_model( "vault_glowstick2_prop" ); level.glowstick2 = maps\_utility::spawn_anim_model( "vault_glowstick2" ); level.glowstick2 linkto( level.glowstick2_prop, "J_prop_1" ); level.glowstick2 hide(); } vault_nvg_off_hint() { common_scripts\utility::flag_wait( "at_vault_door" ); level.player thread maps\_utility::display_hint_timeout( "disable_nvg", 5 ); common_scripts\utility::flag_wait( "approaching_vault_door" ); while ( level.player isswitchingweapon() ) wait 0.01; thread maps\clockwork_code::nvg_goggles_off(); } new_vault_scene() { level.number = 1; level.drilled_good_line = 0; common_scripts\utility::flag_wait( "FLAG_eyes_and_ears_complete" ); thread vault_vo(); common_scripts\utility::array_thread( level.allies, maps\_utility::disable_ai_color ); var_0 = getent( "vault_door_scene", "targetname" ); level.allies[0].animname = "baker"; level.allies[1].animname = "keegan"; level.allies[2].animname = "cypher"; var_0 thread maps\_anim::anim_reach_together( level.allies, "vault_approach" ); common_scripts\utility::array_thread( level.allies, ::ally_animate_vault_scene ); level.allies[0] waittill( "anim_reach_complete" ); var_1 = getaiarray( "axis" ); common_scripts\utility::array_thread( var_1, maps\clockwork_code::die_quietly ); thread vault_nvg_off_hint(); common_scripts\utility::flag_set( "FLAG_obj_enterbase_complete" ); thread vault_objective(); thread animate_vault_door(); thread maps\clockwork_audio::vault_foley(); thread handle_misc_drill_details(); wait 1; maps\_utility::autosave_by_name_silent( "at_vault" ); common_scripts\utility::flag_wait_or_timeout( "vault_blast_area", 1 ); getdrill(); level.player_arms = maps\_utility::spawn_anim_model( "player_rig" ); level.player_arms hide(); common_scripts\utility::flag_wait( "drill_spot1_ready" ); var_0 thread maps\_anim::anim_first_frame_solo( level.player_arms, "back1" ); handle_drill_spot( "drill_spot1", "drill1_start", "drill1_complete", "TAG_FX_XMark_RI" ); var_0 thread maps\_anim::anim_single_solo( level.player_arms, "back1" ); level.player allowads( 0 ); level.player playerlinktodelta( level.player_arms, "tag_player", 1, 45, 45, 10, 10 ); level.player_arms waittillmatch( "single anim", "end" ); level.player unlink(); level.player allowads( 1 ); common_scripts\utility::flag_wait( "drill_spot2_ready" ); var_0 thread maps\_anim::anim_first_frame_solo( level.player_arms, "back2" ); handle_drill_spot( "drill_spot2", "drill2_start", "drill2_complete", "TAG_FX_XMark_LE" ); var_2 = getanimlength( level.scr_anim["player_rig"]["back2"] ); var_0 thread maps\_anim::anim_single_solo( level.player_arms, "back2" ); level.player allowads( 0 ); level.player playerlinktodelta( level.player_arms, "tag_player", 0.5, 90, 20, 10, 10 ); level.player_arms waittillmatch( "single anim", "end" ); level.player unlink(); level.player enableweaponpickup(); level.player giveweapon( level.pre_drill_weapon ); level.player switchtoweapon( level.pre_drill_weapon ); level.player allowads( 1 ); wait 1; level.player takeweapon( "drill_press" ); level.player setactionslot( 1, "" ); common_scripts\utility::flag_wait( "explosion_start" ); common_scripts\utility::array_thread( level.allies, maps\_utility::enable_ai_color ); if ( common_scripts\utility::flag( "vault_blast_area" ) ) { var_3 = getent( "smoke_spot", "targetname" ); level.player dodamage( level.player.health - 5, var_3.origin ); level.player shellshock( "default", 5 ); level.player setstance( "prone" ); level.player pushplayervector( ( 100, 0, 0 ), 1 ); wait 0.2; level.player pushplayervector( ( 0, 0, 0 ), 1 ); } level.player playrumbleonentity( "artillery_rumble" ); maps\_utility::battlechatter_on( "axis" ); maps\_utility::battlechatter_on( "allies" ); maps\_utility::set_team_bcvoice( "allies", "taskforce" ); } getdrill() { common_scripts\utility::flag_wait( "drill_pickup_ready" ); common_scripts\utility::array_thread( level.drill_pickup, maps\_utility::show_entity ); maps\_utility::enable_trigger_with_targetname( "pickup_drill_trigger" ); common_scripts\utility::flag_wait( "got_drill" ); maps\_utility::disable_trigger_with_targetname( "pickup_drill_trigger" ); common_scripts\utility::array_thread( level.drill_pickup, maps\_utility::hide_entity ); switchtodrill(); } switchtodrill() { level.pre_drill_weapon = level.player getcurrentweapon(); level.player giveweapon( "drill_press" ); level.player disableweaponpickup(); level.player switchtoweapon( "drill_press" ); level.player disableweapons(); wait 0.75; level.player playsound( "clkw_scn_vault_drill_from_bag" ); level.player takeweapon( level.pre_drill_weapon ); wait 0.5; level.player enableweapons(); wait 1; } handle_drill_spot( var_0, var_1, var_2, var_3 ) { thread handle_drilling( var_2, var_1 ); var_4 = 0; var_5 = 0; var_6 = 0; var_7 = 0; var_8 = 1; var_9 = 1; var_10 = undefined; var_11 = undefined; var_12 = getent( "vault_door_scene", "targetname" ); var_13 = spawn( "script_origin", ( 0, 0, 0 ) ); var_14 = spawn( "script_origin", ( 0, 0, 0 ) ); var_15 = getent( "pip_xray_cam", "targetname" ); maps\_utility::enable_trigger_with_targetname( var_0 ); while ( !common_scripts\utility::flag( var_2 ) ) { if ( !common_scripts\utility::flag( var_1 ) || var_6 == 1 && level.player getcurrentweapon() != "drill_press" || var_7 == 1 && level.player getcurrentweapon() == "drill_press" ) { var_8 = 1; var_9 = 1; var_6 = 0; var_7 = 0; if ( isdefined( var_10 ) ) { var_10 maps\_utility::hint_delete(); var_10 = undefined; } if ( isdefined( var_11 ) ) { var_11 maps\_utility::hint_delete(); var_11 = undefined; } } common_scripts\utility::flag_wait( var_1 ); if ( common_scripts\utility::flag( "drill_toofar" ) ) return; if ( var_8 ) { var_8 = 0; if ( level.player getcurrentweapon() == "drill_press" ) { var_10 = maps\_utility::hint_create( &"CLOCKWORK_HINT_DRILL" ); var_6 = 1; } else { var_10 = maps\_utility::hint_create( &"CLOCKWORK_HINT_DRILL_SWITCH" ); var_7 = 1; } } if ( ( level.player adsbuttonpressed() || level.player attackbuttonpressed() ) && level.player getcurrentweapon() == "drill_press" && !level.player isswitchingweapon() ) { if ( isdefined( var_10 ) ) { var_10 maps\_utility::hint_delete(); var_10 = undefined; } if ( var_5 == 0 ) { level.frag_ammo = level.player getweaponammostock( "fraggrenade" ); level.flash_ammo = level.player getweaponammostock( "flash_grenade" ); level.player takeweapon( "fraggrenade" ); level.player takeweapon( "flash_grenade" ); level.player setstance( "stand" ); level.player allowcrouch( 0 ); level.player allowprone( 0 ); var_5 = 1; level.player disableweaponswitch(); level.player playerlinktoblend( level.player_arms, "tag_player", 0.25 ); thread maps\clockwork_audio::drill_plant(); level.player setactionslot( 1, "" ); if ( level.drill_bink ) { } else maps\clockwork_pip::pip_enable( var_15, undefined, undefined, undefined, undefined, 50, 50, 400, 225, "clockwork_pillar_room" ); wait 0.3; common_scripts\utility::flag_set( "drill_attached" ); } if ( var_9 ) { if ( level.drill_bink ) { if ( !isdefined( var_11 ) ) var_11 = maps\_utility::hint_create( &"CLOCKWORK_HINT_DRILL" ); } var_9 = 0; } if ( level.player attackbuttonpressed() && level.player getcurrentweapon() == "drill_press" && !level.player isswitchingweapon() ) { if ( isdefined( var_11 ) ) { var_11 maps\_utility::hint_delete(); var_11 = undefined; } if ( var_4 == 0 ) { level notify( "started_drilling" ); thread showdrillhole( var_3 ); if ( level.drill_bink ) pausecinematicingame( 0 ); var_4 = 1; playfxontag( level._effect["drill_sparks"], level.vault_door, var_3 ); thread drill_progress_fx( var_3 ); level.player playsound( "clkw_scn_vault_drill_wind_up" ); var_13 playloopsound( "clkw_scn_vault_drill_lp" ); } } else if ( var_4 == 1 ) { if ( level.drill_bink ) pausecinematicingame( 1 ); var_4 = 0; stopfxontag( level._effect["drill_sparks"], level.vault_door, var_3 ); level notify( "kill_drill_progress_fx" ); stop_drilling_sounds( var_13, var_14 ); } } else { if ( var_4 == 1 ) { var_4 = 0; stopfxontag( level._effect["drill_sparks"], level.vault_door, var_3 ); level notify( "kill_drill_progress_fx" ); thread stop_drilling_sounds( var_13, var_14 ); } if ( var_5 == 1 ) { common_scripts\utility::waitframe(); restore_grenade_weapons(); var_8 = 1; var_9 = 1; var_5 = 0; common_scripts\utility::flag_clear( "drill_attached" ); if ( !common_scripts\utility::flag( var_2 ) ) level.player unlink(); level.player thread maps\_utility::play_sound_on_entity( "clkw_scn_vault_drill_off_door" ); if ( isdefined( var_11 ) ) { var_11 maps\_utility::hint_delete(); var_11 = undefined; } level.player setactionslot( 1, "nightvision" ); if ( level.drill_bink ) reset_tablet_screen(); else maps\clockwork_pip::pip_disable(); level.player enableweaponswitch(); level.player allowcrouch( 1 ); level.player allowprone( 1 ); } } wait 0.01; } if ( isdefined( var_11 ) ) { var_11 maps\_utility::hint_delete(); var_11 = undefined; } if ( isdefined( var_10 ) ) { var_10 maps\_utility::hint_delete(); var_10 = undefined; } if ( var_4 == 1 ) { var_4 = 0; stopfxontag( level._effect["drill_sparks"], level.vault_door, var_3 ); level notify( "kill_drill_progress_fx" ); thread stop_drilling_sounds( var_13, var_14 ); } if ( var_5 == 1 ) { restore_grenade_weapons(); level.player thread maps\_utility::play_sound_on_entity( "clkw_scn_vault_drill_pullout" ); level.player setactionslot( 1, "nightvision" ); if ( level.drill_bink ) reset_tablet_screen(); else thread maps\clockwork_pip::pip_disable(); level.player enableweaponswitch(); level.player allowcrouch( 1 ); level.player allowprone( 1 ); } common_scripts\utility::flag_clear( "aud_drilling_door" ); maps\_utility::disable_trigger_with_targetname( var_0 ); common_scripts\utility::flag_set( var_1 ); } restore_grenade_weapons() { if ( level.woof ) return; level.player giveweapon( "fraggrenade" ); level.player giveweapon( "flash_grenade" ); level.player setweaponammostock( "fraggrenade", level.frag_ammo ); level.player setweaponammostock( "flash_grenade", level.flash_ammo ); } drill_fail_animation() { var_0 = []; var_0[0] = getent( "piston_01", "targetname" ); var_0[1] = getent( "piston_02", "targetname" ); var_0[2] = getent( "piston_03", "targetname" ); var_0[3] = getent( "piston_04", "targetname" ); var_1 = []; var_1[0] = getent( "cog_01", "targetname" ); var_1[1] = getent( "cog_02", "targetname" ); var_1[2] = getent( "cog_03", "targetname" ); var_1[3] = getent( "cog_04", "targetname" ); var_1[0] rotatepitch( 90, 1 ); var_1[1] rotatepitch( 90, 1.5 ); var_1[2] rotatepitch( -90, 1 ); var_1[3] rotatepitch( -90, 1.5 ); wait 0.25; foreach ( var_3 in var_0 ) { var_3 movey( 200, 0.5 ); wait 0.25; } } stop_drilling_sounds( var_0, var_1 ) { level.player playsound( "clkw_scn_vault_drill_wind_down" ); wait 0.05; var_0 stoploopsound( "clkw_scn_vault_drill_lp" ); var_1 stopsounds(); } reset_tablet_screen() { if ( level.drill_bink ) { level endon( "started_drilling" ); cinematicingame( "clockwork_vault_drill" ); wait 0.05; while ( cinematicgetframe() < 2 ) wait 0.05; pausecinematicingame( 1 ); } } handle_drilling( var_0, var_1 ) { common_scripts\utility::flag_clear( "drill_safezone" ); common_scripts\utility::flag_clear( "drill_toofar" ); var_2 = 300; if ( level.drill_bink ) var_2 = var_2 + 50; var_3 = 550; var_4 = 450; level.backplate_sound_on = 0; level.safezone_sound_on = 0; var_5 = spawn( "script_origin", ( 0, 0, 0 ) ); var_6 = spawn( "script_origin", ( 0, 0, 0 ) ); var_7 = 0; var_8 = ( 0, 4, 0 ); var_9 = 0; var_10 = 1; var_11 = getent( "pip_drill", "targetname" ); var_12 = var_11.angles; if ( isdefined( level.drill_reset_pos ) ) var_13 = level.drill_reset_pos; else { var_13 = var_11.origin + ( 0, -900, 0 ); level.drill_reset_pos = var_13; } var_11.origin = var_13; var_14 = var_13; var_15 = 0; var_16 = 115; var_17 = 160; var_18 = 200; var_19 = 0; common_scripts\utility::flag_clear( "aud_drilling_door" ); while ( !common_scripts\utility::flag( var_0 ) && !common_scripts\utility::flag( "drill_toofar" ) ) { common_scripts\utility::flag_wait( var_1 ); if ( ( level.player adsbuttonpressed() || level.player attackbuttonpressed() ) && level.player getcurrentweapon() == "drill_press" && !level.player isswitchingweapon() ) { var_15 = cinematicgetframe(); if ( level.player attackbuttonpressed() ) { common_scripts\utility::flag_set( "aud_drilling_door" ); var_13 = var_13 + var_8; var_11.angles = var_11.angles + ( 45, 0, 0 ); var_11.origin = var_13; var_9 = var_13 - var_14[1]; if ( var_15 > var_16 ) { if ( !var_7 ) { thread drilled_good_vo( var_0 ); level.player playrumbleonentity( "drill_through" ); var_7 = 1; level.player thread maps\_utility::play_sound_on_entity( "clkw_scn_vault_drill_safezone_beep" ); } } if ( var_15 <= var_16 ) { if ( var_15 > var_16 - 15 && var_19 == 0 ) { var_19 = 1; var_6 playsound( "clkw_scn_vault_drill_safezone" ); level notify( "drill_progress_safe" ); } thread drillthrough_plate_sound( var_5, "clkw_scn_vault_drill_frontplate" ); } if ( var_15 > var_18 ) { level notify( "stop_drilling_sounds" ); common_scripts\utility::flag_set( "drill_toofar" ); common_scripts\utility::flag_set( "drill_safezone" ); if ( !level.drill_bink ) thread drill_fail_animation(); level.player maps\_utility::play_sound_on_entity( "clkw_scn_vault_drill_gears" ); thread vault_fail_vo(); thread maps\clockwork_code::screenshakefade( 1, 0.5 ); level.player playrumbleonentity( "drill_through" ); level.player playrumbleonentity( "drill_through" ); if ( level.drill_bink ) { setdvar( "ui_deadquote", &"CLOCKWORK_QUOTE_BACKPLATE" ); maps\_utility::missionfailedwrapper(); } else wait 10; break; } if ( var_15 > var_17 ) { thread drillthrough_plate_sound( var_5, "clkw_scn_vault_drill_backplate" ); level notify( "drill_progress_danger" ); } } else { level notify( "stop_drilling_sounds" ); if ( var_15 > var_16 && !common_scripts\utility::flag( var_0 ) ) common_scripts\utility::flag_set( var_0 ); } } else { level notify( "stop_drilling_sounds" ); common_scripts\utility::flag_clear( "aud_drilling_door" ); var_6 stopsounds(); var_11.origin = var_14; var_13 = var_11.origin; var_19 = 0; if ( var_15 > var_16 ) { common_scripts\utility::flag_set( var_0 ); common_scripts\utility::flag_set( "drill_safezone" ); } } wait 0.05; } level notify( "stop_drilling_sounds" ); if ( common_scripts\utility::flag( "drill_toofar" ) ) wait 100; var_11.origin = level.drill_reset_pos; } vault_fail_vo() { var_0 = []; var_0[0] = "clockwork_cyr_toofar"; var_0[1] = "clockwork_cyr_lockingdown"; level.allies[2] maps\clockwork_code::char_dialog_add_and_go( var_0[randomint( var_0.size )] ); level.allies[2] thread maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_abortmission" ); } drillthrough_plate_sound( var_0, var_1 ) { if ( level.backplate_sound_on == 0 ) { level.backplate_sound_on = 1; common_scripts\utility::flag_wait( "drill_attached" ); if ( level.player attackbuttonpressed() ) { var_0 playsound( var_1 ); level waittill( "stop_drilling_sounds" ); var_0 stopsounds(); } level.backplate_sound_on = 0; } } waittill_fired_or_timeout( var_0, var_1 ) { self endon( var_0 ); wait( var_1 ); return 0; } watch_for_ally() { level.aiming_at_ally = 0; while ( !common_scripts\utility::flag( "thermite_start" ) ) { var_0 = level.player waittill_fired_or_timeout( "weapon_fired", 0.2 ); if ( isdefined( var_0 ) ) { level.aiming_at_ally = 1; continue; } level.aiming_at_ally = 0; } } handle_misc_drill_details() { var_0 = spawn( "script_origin", ( 0, 0, 0 ) ); var_1 = 0; var_2 = 0; var_3 = 0; thread watch_for_ally(); while ( !common_scripts\utility::flag( "thermite_start" ) ) { var_4 = level.player getcurrentweapon(); if ( var_4 == "drill_press" ) { setsaveddvar( "ammoCounterHide", "1" ); level.player setactionslot( 1, "" ); } else { setsaveddvar( "ammoCounterHide", "0" ); level.player setactionslot( 1, "nightvision" ); } if ( var_4 == "drill_press" && level.player attackbuttonpressed() && !level.aiming_at_ally ) { common_scripts\utility::waitframe(); if ( var_1 != 1 ) { if ( !common_scripts\utility::flag( "aud_drilling_door" ) ) { var_1 = 1; if ( var_1 == 1 ) { level.player playsound( "clkw_scn_vault_drill_wind_up" ); var_0 playloopsound( "clkw_scn_vault_drill_removed_lp" ); } } } } else if ( var_1 == 1 ) { var_1 = 0; level.player playsound( "clkw_scn_vault_drill_wind_down_removed" ); wait 0.05; var_0 stoploopsound( "clkw_scn_vault_drill_lp" ); } if ( var_4 == "drill_press" ) { level.player givemaxammo( var_4 ); level.player setweaponammoclip( var_4, weaponclipsize( var_4 ) ); if ( level.player attackbuttonpressed() ) { if ( ( common_scripts\utility::flag( "drill1_start" ) || common_scripts\utility::flag( "drill2_start" ) ) && ( level.player adsbuttonpressed() || level.player attackbuttonpressed() ) ) { thread maps\clockwork_code::screenshakefade( 0.15, 0.5 ); level.player playrumbleonentity( "drill_vault" ); } else if ( !level.aiming_at_ally ) { thread maps\clockwork_code::screenshakefade( 0.1, 0.5 ); level.player playrumbleonentity( "drill_normal" ); } } if ( level.player adsbuttonpressed() || level.player attackbuttonpressed() ) { if ( var_2 == 0 ) { var_3 = 0; var_2 = 1; thread maps\clockwork_audio::drill_pullout(); } } else if ( var_3 == 0 ) { var_3 = 1; var_2 = 0; thread maps\clockwork_audio::drill_pullout(); } } wait 0.05; } } get_animating_actors( var_0, var_1 ) { var_2 = []; foreach ( var_4 in var_0 ) { if ( isdefined( var_4 ) && isdefined( level.scr_anim[var_4.animname][var_1] ) ) var_2[var_2.size] = var_4; } return var_2; } ally_animate_vault_scene() { var_0 = getent( "vault_door_scene", "targetname" ); var_1 = ally_vault_props(); var_2 = common_scripts\utility::array_add( var_1, self ); self waittill( "anim_reach_complete" ); if ( self.animname == "cypher" && level.drill_bink ) setsaveddvar( "cg_cinematicFullScreen", "0" ); var_3 = get_animating_actors( var_2, "vault_approach" ); var_0 maps\_anim::anim_single( var_3, "vault_approach" ); if ( self.animname == "cypher" ) level.tablet unlink(); if ( !common_scripts\utility::flag( "drill1_complete" ) ) { var_3 = get_animating_actors( var_2, "vault_loop1" ); var_0 thread maps\_anim::anim_loop( var_3, "vault_loop1", "drill1_complete" + self.animname ); common_scripts\utility::flag_wait( "drill1_complete" ); var_0 notify( "drill1_complete" + self.animname ); } if ( self.animname == "cypher" ) level.tablet linkto( level.tablet_prop, "J_prop_1" ); var_3 = get_animating_actors( var_2, "vault_betweener" ); var_0 thread maps\_anim::anim_single( var_3, "vault_betweener" ); self waittillmatch( "single anim", "end" ); if ( !common_scripts\utility::flag( "drill2_complete" ) ) { var_3 = get_animating_actors( var_2, "vault_loop2" ); var_0 thread maps\_anim::anim_loop( var_3, "vault_loop2", "drill2_complete" + self.animname ); common_scripts\utility::flag_wait( "drill2_complete" ); var_0 notify( "drill2_complete" + self.animname ); } var_3 = get_animating_actors( var_2, "vault_finish" ); var_0 maps\_anim::anim_single( var_3, "vault_finish" ); var_0 thread maps\_anim::anim_loop_solo( self, "vault_loop3", "loop3_complete" + self.animname ); common_scripts\utility::flag_wait( "explosion_start" ); var_0 notify( "loop3_complete" + self.animname ); var_3 = get_animating_actors( var_2, "vault_exit" ); var_0 maps\_anim::anim_single( var_3, "vault_exit" ); if ( self.animname == "keegan" ) maps\_utility::forceuseweapon( "cz805bren+reflex_sp", "primary" ); if ( self.animname == "baker" ) maps\_utility::forceuseweapon( "cz805bren+reflex_sp", "primary" ); if ( self.animname == "cypher" ) maps\_utility::forceuseweapon( "mts255", "primary" ); } animate_vault_door() { var_0 = getent( "vault_door_scene", "targetname" ); var_1 = maps\_utility::make_array( level.vault_door ); common_scripts\utility::flag_wait( "drill2_complete" ); var_0 notify( "animate_vault" ); waittillframeend; thread vault_ceiling_lights( var_0 ); wait 1; thread thermite_fx(); common_scripts\utility::flag_wait( "glow_start" ); level.player thread maps\_utility::display_hint( "disable_nvg" ); thread maps\clockwork_audio::thermite(); common_scripts\utility::flag_wait( "thermite_start" ); level.player setactionslot( 1, "" ); thread maps\clockwork_code::nvg_goggles_off(); level.player setactionslot( 1, "" ); var_0 thread maps\_anim::anim_single( var_1, "vault_burn" ); common_scripts\utility::flag_wait( "explosion_start" ); var_0 thread maps\_anim::anim_single( var_1, "vault_finish" ); thread turn_on_lights(); maps\clockwork_code::toggle_visibility( "vault_ceiling_structure", 0 ); maps\clockwork_code::toggle_visibility( "vault_ceiling_structure_damaged", 1 ); maps\clockwork_code::toggle_visibility( "vault_frame_damage", 1 ); maps\clockwork_code::toggle_visibility( "drill_hole_01", 0 ); maps\clockwork_code::toggle_visibility( "drill_hole_02", 0 ); level.tablet_prop delete(); level.tablet delete(); level.thermite3 delete(); foreach ( var_3 in level.vault_props ) var_3 delete(); foreach ( var_6 in level.chalk_mark ) var_6 delete(); if ( isdefined( level.spool_prop ) ) level.spool_prop delete(); if ( isdefined( level.spool ) ) level.spool delete(); if ( isdefined( level.glowstick1 ) ) level.glowstick1 delete(); if ( isdefined( level.glowstick1_prop ) ) level.glowstick1_prop delete(); if ( isdefined( level.glowstick2 ) ) level.glowstick2 delete(); if ( isdefined( level.glowstick2_prop ) ) level.glowstick2_prop delete(); if ( isdefined( level.charge1 ) ) level.charge1 delete(); if ( isdefined( level.charge2 ) ) level.charge2 delete(); if ( isdefined( level.thermite1 ) ) level.thermite1 delete(); if ( isdefined( level.thermite2 ) ) level.thermite2 delete(); thread maps\clockwork_code::screenshakefade( 0.45, 1.25, 0.25, 0.8 ); var_8 = getent( "smoke_spot", "targetname" ); playfx( level._effect["vault_smoke"], var_8.origin ); common_scripts\utility::exploder( 1001 ); common_scripts\utility::exploder( 1005 ); level.player giveweapon( "fraggrenade" ); level.player setweaponammoclip( "fraggrenade", level.grenades ); level.player setweaponammostock( "fraggrenade", level.grenades ); level.player setweaponammoclip( "flash_grenade", level.flashbangs ); thread handle_pip_cams(); common_scripts\utility::flag_set( "interior_finished" ); thread maps\clockwork_code::nvg_goggles_off(); open_vault( 0, var_0 ); } ally_vault_props() { var_0 = []; if ( self.animname == "cypher" ) var_0 = maps\_utility::make_array( level.tablet_prop ); if ( self.animname == "baker" ) var_0 = maps\_utility::make_array( level.thermite1, level.thermite2, level.thermite3, level.glowstick1_prop, level.spool_prop ); if ( self.animname == "keegan" ) var_0 = maps\_utility::make_array( level.drill_prop, level.charge1, level.charge2, level.glowstick2_prop ); return var_0; } tablet_light_on( var_0 ) { playfxontag( level._effect["vfx/moments/clockwork/vfx_vault_tablet_screen"], level.tablet_prop, "J_prop_1" ); } tablet_light_off( var_0 ) { stopfxontag( level._effect["vfx/moments/clockwork/vfx_vault_tablet_screen"], level.tablet_prop, "J_prop_1" ); } start_scan( var_0 ) { if ( level.drill_bink ) { thread maps\clockwork_audio::drill_monitor(); cinematicingameloopresident( "clockwork_vault_scan" ); } } stop_scan( var_0 ) { if ( level.drill_bink ) { cinematicingame( "clockwork_vault_drill" ); wait 0.05; while ( cinematicgetframe() < 2 ) wait 0.05; pausecinematicingame( 1 ); } } vault_ceiling_lights( var_0 ) { var_1 = getent( "vault_ceiling_light_right", "targetname" ); var_2 = getent( "vault_ceiling_light_left", "targetname" ); var_1.animname = "vault_light_r"; var_1 maps\_utility::assign_animtree(); var_2.animname = "vault_light_l"; var_2 maps\_utility::assign_animtree(); common_scripts\utility::flag_wait( "explosion_start" ); var_1 thread animate_vault_light( var_0 ); var_2 thread animate_vault_light( var_0 ); } animate_vault_light( var_0 ) { level endon( "death" ); var_0 maps\_anim::anim_single_solo( self, "light_explode" ); } setup_vault_door( var_0 ) { level.drill_bink = 1; level.world_vault_door = getent( "model_vault_door", "targetname" ); level.world_vault_door delete(); level.world_vault_clip = getent( "vault_door_clip", "targetname" ); level.vault_door = maps\_utility::spawn_anim_model( "vault_door" ); level.vault_door.animname = "vault_door"; if ( isdefined( var_0 ) && var_0 == 1 ) { var_1 = getent( "vault_door_scene", "targetname" ); var_1 thread maps\_anim::anim_loop_solo( level.vault_door, "vault_closed", "animate_vault" ); maps\clockwork_code::toggle_visibility( "vault_ceiling_structure_damaged", 0 ); maps\clockwork_code::toggle_visibility( "vault_frame_damage", 0 ); maps\clockwork_code::toggle_visibility( "vault_frame_hotmetal", 0 ); maps\clockwork_code::toggle_visibility( "vault_frame_destroyed_hotmetal", 0 ); } level.chalk_mark = []; level.chalk_mark[0] = getent( "chalk_swipe_1a", "targetname" ); level.chalk_mark[1] = getent( "chalk_swipe_1b", "targetname" ); level.chalk_mark[2] = getent( "chalk_swipe_2a", "targetname" ); level.chalk_mark[3] = getent( "chalk_swipe_2b", "targetname" ); common_scripts\utility::array_thread( level.chalk_mark, maps\clockwork_code::safe_hide ); thread align_chalk_marks(); } align_chalk_marks() { wait 1; var_0 = level.vault_door gettagorigin( "TAG_FX_XMark_RI" ); level.chalk_mark[0].origin = var_0; level.chalk_mark[1].origin = var_0; level.fx_charge1_pos = common_scripts\utility::spawn_tag_origin(); level.fx_charge1_pos.origin = var_0; var_0 = level.vault_door gettagorigin( "TAG_FX_XMark_LE" ); level.chalk_mark[2].origin = var_0; level.chalk_mark[3].origin = var_0; level.fx_charge2_pos = common_scripts\utility::spawn_tag_origin(); level.fx_charge2_pos.origin = var_0; } showdrillhole( var_0 ) { var_1 = level.vault_door gettagorigin( var_0 ); var_2 = getent( "drill_hole_01", "targetname" ); if ( var_0 != "TAG_FX_XMark_RI" ) var_2 = getent( "drill_hole_02", "targetname" ); var_2.origin = var_1; } chalk_swipe1( var_0 ) { thread maps\clockwork_audio::chalk_swipe1(); level.chalk_mark[1] show(); wait 0.3; level.chalk_mark[0] show(); } chalk_swipe2( var_0 ) { thread maps\clockwork_audio::chalk_swipe2(); level.chalk_mark[3] show(); wait 0.3; level.chalk_mark[2] show(); } turn_on_lights() { wait 2; common_scripts\utility::flag_set( "lights_on" ); thread maps\clockwork_interior_nvg::nvg_area_lights_on_fx(); common_scripts\utility::exploder( 5 ); maps\_utility::vision_set_changes( "clockwork_indoor", 0 ); wait 0.05; maps\_utility::vision_set_changes( "clockwork_lights_off", 0 ); wait 0.1; maps\_utility::vision_set_changes( "clockwork_indoor", 0 ); wait 0.05; maps\_utility::vision_set_changes( "clockwork_lights_off", 0.1 ); wait 0.1; maps\_utility::vision_set_changes( "clockwork_indoor", 0 ); wait 0.05; maps\_utility::vision_set_changes( "clockwork_lights_off", 0.1 ); wait 0.5; maps\_utility::vision_set_changes( "clockwork_indoor", 0 ); wait 0.1; maps\_utility::vision_set_changes( "clockwork_lights_off", 0.2 ); wait 0.1; maps\_utility::vision_set_changes( "clockwork_indoor", 0 ); wait 0.05; maps\_utility::vision_set_changes( "clockwork_lights_off", 0.1 ); wait 0.6; maps\_utility::vision_set_changes( "clockwork_indoor", 0 ); wait 0.05; maps\_utility::vision_set_changes( "clockwork_lights_off", 0.1 ); wait 0.1; maps\_utility::vision_set_changes( "clockwork_indoor", 0 ); wait 0.1; maps\_utility::vision_set_changes( "clockwork_lights_off", 0.2 ); wait 0.65; maps\_utility::vision_set_changes( "clockwork_indoor", 0 ); wait 0.1; maps\_utility::vision_set_changes( "clockwork_lights_off", 0.2 ); wait 0.3; maps\_utility::vision_set_changes( "clockwork_indoor", 0.1 ); } drill_progress_fx( var_0 ) { level endon( "kill_drill_progress_fx" ); level waittill( "drill_progress_safe" ); playfxontag( level._effect["drill_progress1"], level.vault_door, var_0 ); level waittill( "drill_progress_danger" ); playfxontag( level._effect["drill_progress2"], level.vault_door, var_0 ); } thermite_fx() { var_0 = common_scripts\utility::getfx( "vfx/moments/clockwork/vfx_vault_thermite_fuse" ); var_1 = common_scripts\utility::getfx( "vfx/moments/clockwork/vfx_vault_thermite_start" ); var_2 = common_scripts\utility::getfx( "vfx/moments/clockwork/vfx_vault_thermite_end" ); common_scripts\utility::flag_wait( "glow_start" ); playfxontag( var_0, level.thermite1, "tag_thermite_strip" ); wait 0.1; playfxontag( var_0, level.thermite2, "tag_thermite_strip" ); wait 0.15; playfxontag( var_0, level.thermite3, "tag_thermite_strip" ); common_scripts\utility::flag_wait( "thermite_start" ); playfxontag( var_1, level.vault_door, "TAG_FX_Thermite_Top_LE" ); playfxontag( var_2, level.vault_door, "TAG_FX_Thermite_Top_LE" ); stopfxontag( var_0, level.thermite1, "tag_thermite_strip" ); wait 0.25; playfxontag( var_1, level.vault_door, "TAG_FX_Thermite_Bot_LE" ); playfxontag( var_2, level.vault_door, "TAG_FX_Thermite_Bot_LE" ); stopfxontag( var_0, level.thermite2, "tag_thermite_strip" ); wait 0.35; playfxontag( var_1, level.vault_door, "TAG_FX_Thermite_Mid_RI" ); playfxontag( var_2, level.vault_door, "TAG_FX_Thermite_Mid_RI" ); stopfxontag( var_0, level.thermite3, "tag_thermite_strip" ); level waittill( "thermite_stop" ); stopfxontag( var_1, level.vault_door, "TAG_FX_Thermite_Top_LE" ); wait 0.25; stopfxontag( var_1, level.vault_door, "TAG_FX_Thermite_Bot_LE" ); wait 0.5; stopfxontag( var_1, level.vault_door, "TAG_FX_Thermite_Mid_RI" ); common_scripts\utility::flag_wait( "explosion_start" ); stopfxontag( var_2, level.vault_door, "TAG_FX_Thermite_Top_LE" ); stopfxontag( var_2, level.vault_door, "TAG_FX_Thermite_Bot_LE" ); stopfxontag( var_2, level.vault_door, "TAG_FX_Thermite_Mid_RI" ); } breach_charge_fx_unhide( var_0 ) { var_1 = common_scripts\utility::getfx( "vfx/moments/clockwork/vfx_vault_charge_warmup" ); playfxontag( var_1, var_0, "TAG_LIGHT" ); } breach_charge_fx_set( var_0 ) { var_1 = common_scripts\utility::getfx( "vfx/moments/clockwork/vfx_vault_charge_warmup" ); var_2 = common_scripts\utility::getfx( "vfx/moments/clockwork/vfx_vault_charge_set" ); stopfxontag( var_1, var_0, "TAG_LIGHT" ); playfxontag( var_2, var_0, "TAG_LIGHT" ); } breach_charge_fx_activate() { var_0 = common_scripts\utility::getfx( "vfx/moments/clockwork/vfx_vault_charge_warmup" ); var_1 = common_scripts\utility::getfx( "vfx/moments/clockwork/vfx_vault_charge_set" ); var_2 = common_scripts\utility::getfx( "vfx/moments/clockwork/vfx_vault_charge_activate" ); var_3 = common_scripts\utility::getfx( "vfx/moments/clockwork/vfx_vault_charge_explode" ); stopfxontag( var_1, level.charge1, "TAG_LIGHT" ); stopfxontag( var_1, level.charge2, "TAG_LIGHT" ); playfxontag( var_2, level.charge1, "TAG_LIGHT" ); playfxontag( var_2, level.charge2, "TAG_LIGHT" ); common_scripts\utility::flag_wait( "explosion_start" ); playfxontag( var_3, level.fx_charge1_pos, "tag_origin" ); wait 0.2; playfxontag( var_3, level.fx_charge2_pos, "tag_origin" ); wait 30; level.fx_charge1_pos delete(); level.fx_charge2_pos delete(); } open_vault( var_0, var_1 ) { if ( !isdefined( var_1 ) ) var_1 = getent( "vault_door_scene", "targetname" ); if ( isdefined( var_0 ) && var_0 == 1 ) { maps\clockwork_code::setup_drill( 1 ); maps\_utility::disable_trigger_with_targetname( "pickup_drill_trigger" ); maps\clockwork_code::toggle_visibility( "vault_frame_hotmetal", 0 ); maps\clockwork_code::toggle_visibility( "vault_ceiling_structure", 0 ); } level.world_vault_clip notsolid(); level.world_vault_clip connectpaths(); level.world_vault_clip delete(); maps\clockwork_code::glass_destroy_targetname( "post_vault_door_glass" ); } drilled_good_vo( var_0 ) { var_1 = []; var_1[0] = "clockwork_hsh_stopthatsgood"; var_1[1] = "clockwork_cyr_farenough"; var_1[2] = "clockwork_cyr_woahwoah"; while ( !common_scripts\utility::flag( var_0 ) && !common_scripts\utility::flag( "drill_toofar" ) ) { level.allies[2] maps\clockwork_code::char_dialog_add_and_go( var_1[level.drilled_good_line] ); level.drilled_good_line++; if ( level.drilled_good_line >= var_1.size ) level.drilled_good_line = 0; } } vault_vo() { var_0 = level.allies[0]; var_1 = level.allies[1]; var_2 = level.allies[2]; level.drill_nag_num = 0; common_scripts\utility::flag_wait( "green_zone" ); level.grenades = level.player getweaponammoclip( "fraggrenade" ); level.flashbangs = level.player getweaponammoclip( "flash_grenade" ); level.player takeweapon( "fraggrenade" ); level.player takeweapon( "flash_grenade" ); var_0 maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_preppingvictor" ); level.player maps\clockwork_code::radio_dialog_add_and_go( "clockwork_diz_powerisrestored" ); var_0 maps\clockwork_code::char_dialog_add_and_go( "clockwork_mrk_hydraulicsealneedsto" ); common_scripts\utility::flag_wait_either( "drill_spot1_ready", "drill1_start" ); if ( !common_scripts\utility::flag( "drill1_start" ) ) { var_2 maps\clockwork_code::char_dialog_add_and_go( "clockwork_cyr_drillhere" ); thread drill_nag( "drill1_start", "drill1_complete" ); common_scripts\utility::flag_wait( "drill1_start" ); } var_2 maps\clockwork_code::char_dialog_add_and_go( "clockwork_hsh_theresabacktrip" ); common_scripts\utility::flag_wait( "drill1_complete" ); var_2 maps\clockwork_code::char_dialog_add_and_go( "clockwork_cyr_1stshell" ); var_1 maps\clockwork_code::char_dialog_add_and_go( "clockwork_kgn_settingcharge" ); var_2 maps\clockwork_code::char_dialog_add_and_go( "clockwork_cyr_number2" ); level.player maps\clockwork_code::radio_dialog_add_and_go( "clockwork_brv_20seconds" ); common_scripts\utility::flag_wait( "drill_spot2_ready" ); var_2 maps\clockwork_code::char_dialog_add_and_go( "clockwork_cyr_yourspot" ); thread drill_nag( "drill2_start", "drill2_complete" ); common_scripts\utility::flag_wait( "drill2_complete" ); var_2 maps\clockwork_code::char_dialog_add_and_go( "clockwork_hsh_hydraulicsealsaredown" ); var_1 maps\clockwork_code::char_dialog_add_and_go( "clockwork_kgn_armed" ); var_0 maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_ignitethermite" ); thread thermite_timing(); var_0 maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_backup2" ); common_scripts\utility::flag_wait( "thermite_stop" ); wait 1; thread maps\clockwork_audio::blowit_beep(); var_0 maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_blowit" ); thread breach_charge_fx_activate(); wait 0.25; common_scripts\utility::flag_set( "explosion_start" ); } thermite_timing() { wait 0.1; common_scripts\utility::flag_set( "glow_start" ); wait 1.36; common_scripts\utility::flag_set( "thermite_start" ); wait 6; common_scripts\utility::flag_set( "thermite_stop" ); } drill_nag( var_0, var_1 ) { var_2 = []; var_2[0] = "clockwork_cyr_drillit"; var_2[1] = "clockwork_hsh_wastingtimehere"; var_3 = 0; wait 8; while ( !common_scripts\utility::flag( var_0 ) && !common_scripts\utility::flag( var_1 ) ) { level.allies[2] maps\clockwork_code::char_dialog_add_and_go( var_2[level.drill_nag_num] ); level.drill_nag_num++; if ( level.drill_nag_num >= var_2.size ) level.drill_nag_num = 0; wait 8; } } setup_interior_combat() { maps\clockwork_code::dog_setup(); maps\clockwork_code::setup_player(); maps\clockwork_code::spawn_allies(); level.player switchtoweapon( "cz805bren+reflex_sp+silencer_sp" ); var_0 = getent( "vault_door_scene", "targetname" ); maps\_utility::disable_trigger_with_targetname( "drill_spot1" ); maps\_utility::disable_trigger_with_targetname( "drill_spot2" ); setup_vault_door(); open_vault( 1 ); common_scripts\utility::flag_set( "lights_on" ); common_scripts\utility::flag_set( "interior_finished" ); thread handle_pip_cams(); maps\_utility::vision_set_changes( "clockwork_indoor", 0 ); var_1 = getent( "smoke_spot", "targetname" ); playfx( level._effect["vault_smoke"], var_1.origin ); maps\_utility::battlechatter_off( "allies" ); maps\_utility::battlechatter_off( "axis" ); common_scripts\utility::waitframe(); thread maps\clockwork_audio::checkpoint_interior_combat(); } vault_objective() { var_0 = maps\_utility::obj( "vaultobj" ); objective_add( var_0, "current", &"CLOCKWORK_DISABLE_THE_SECURITY" ); common_scripts\utility::flag_wait( "obj_vault_complete" ); maps\_utility::objective_complete( var_0 ); } fight_objective() { var_0 = maps\_utility::obj( "fightobj" ); objective_add( var_0, "current", &"CLOCKWORK_ADVANCE_TO_THE_DATA_CENTER" ); common_scripts\utility::flag_wait( "Obj_datacenter_complete" ); maps\_utility::objective_complete( var_0 ); } begin_interior_combat() { var_0 = common_scripts\utility::array_combine( getentarray( "chaos_decals", "targetname" ), getentarray( "chaos_decals1", "targetname" ) ); var_0 = common_scripts\utility::array_combine( var_0, getentarray( "chaos_decals2", "targetname" ) ); var_0 = common_scripts\utility::array_combine( var_0, getentarray( "chaos_decals_delete", "targetname" ) ); foreach ( var_2 in var_0 ) var_2 hide(); common_scripts\utility::flag_clear( "player_dynamic_move_speed" ); thread maps\clockwork_code::blend_movespeedscale_custom( 85, 1 ); thread ambient_combat_guys(); foreach ( var_5 in level.allies ) { common_scripts\utility::array_thread( level.allies, maps\_utility::cqb_walk, "on" ); var_5.old_baseaccuracy = var_5.baseaccuracy; var_5 maps\_utility::set_baseaccuracy( 500 ); var_5.ignoreall = 0; var_5.disablereactionanims = 1; if ( var_5.animname == "keegan" ) var_5 maps\_utility::forceuseweapon( "cz805bren+reflex_sp", "primary" ); if ( var_5.animname == "baker" ) var_5 maps\_utility::forceuseweapon( "cz805bren+reflex_sp", "primary" ); if ( var_5.animname == "cypher" ) var_5 maps\_utility::forceuseweapon( "mts255", "primary" ); } maps\_utility::battlechatter_on( "axis" ); maps\_utility::battlechatter_on( "allies" ); maps\_utility::set_team_bcvoice( "allies", "taskforce" ); common_scripts\utility::flag_set( "obj_vault_complete" ); thread fight_objective(); thread spawn_discovery_guys(); thread cqb_dog(); thread handle_combat_guys(); thread combat_handle_allies(); thread handle_combat_guys2(); wait 3.5; thread combat_vo(); common_scripts\utility::flag_wait( "discovery_guys" ); common_scripts\utility::flag_wait( "to_cqb2" ); } spawn_discovery_guys() { common_scripts\utility::flag_wait( "discovery_spawn" ); level.discovery_guys = maps\clockwork_code::array_spawn_targetname_allow_fail( "discovery_grunt", 1 ); level.override_dog_enemy = level.discovery_guys[0]; thread maps\clockwork_code::ai_array_killcount_flag_set( level.discovery_guys, 2, "end_discovery" ); var_0 = common_scripts\utility::getstruct( "discovery_scene", "targetname" ); var_1 = 1; foreach ( var_3 in level.discovery_guys ) { if ( isdefined( var_3 ) && isalive( var_3 ) && !var_3 maps\_utility::doinglongdeath() ) { var_3.allowdeath = 1; var_3.ignoreall = 0; var_3.animname = "discoverguy" + maps\_utility::string( var_1 ); var_1++; } } var_0 thread maps\_anim::anim_single( level.discovery_guys, "discover_vault" ); thread discovery_guys_wakeup(); common_scripts\utility::flag_wait_or_timeout( "discovery_guys", 3 ); wait 1; maps\clockwork_code::attack_targets( level.allies, level.discovery_guys ); wait 1; common_scripts\utility::flag_set( "discovery_guys" ); } discovery_guys_wakeup() { common_scripts\utility::flag_wait( "discovery_guys" ); level.discovery_guys = maps\_utility::array_removedead_or_dying( level.discovery_guys ); foreach ( var_1 in level.discovery_guys ) { var_1 maps\_utility::anim_stopanimscripted(); var_1 maps\_utility::set_ignoreall( 0 ); var_1 getenemyinfo( level.player ); } } combat_handle_allies() { common_scripts\utility::flag_wait( "end_discovery" ); maps\clockwork_code::safe_activate_trigger_with_targetname( "allies_start_combat" ); common_scripts\utility::flag_wait( "combat_guys1" ); thread combat_allies_mainhall(); common_scripts\utility::flag_wait( "combat_1_over" ); maps\clockwork_code::safe_activate_trigger_with_targetname( "to_second_combat" ); } combat_allies_mainhall() { common_scripts\utility::flag_wait( "combat_first_guys_dead" ); if ( !common_scripts\utility::flag( "combat_sidehall" ) ) maps\clockwork_code::safe_activate_trigger_with_targetname( "combat_mainhall1" ); } handle_combat_guys() { common_scripts\utility::flag_wait_either( "combat_guys1", "end_discovery" ); foreach ( var_1 in level.allies ) var_1 maps\_utility::set_baseaccuracy( var_1.old_baseaccuracy ); maps\_utility::battlechatter_on( "allies" ); maps\_utility::battlechatter_on( "axis" ); var_3 = maps\clockwork_code::array_spawn_targetname_allow_fail( "combat_guys1_pre", 1 ); common_scripts\utility::array_thread( var_3, maps\_utility::disable_careful ); thread maps\clockwork_code::ai_array_killcount_flag_set( var_3, 1, "combat_guys1" ); thread maps\clockwork_code::ai_array_killcount_flag_set( var_3, var_3.size, "combat_first_guys_dead" ); common_scripts\utility::flag_wait( "combat_guys1" ); var_3 = maps\clockwork_code::array_spawn_targetname_allow_fail( "combat_guys1", 1 ); thread maps\clockwork_code::ai_array_killcount_flag_set( var_3, var_3.size, "combat_1_over" ); } ambient_combat_guys() { var_0 = getentarray( "pillar_ambient_guys", "targetname" ); common_scripts\utility::array_thread( var_0, maps\clockwork_code::ambient_animate, 0, "bogus", 1 ); } handle_combat_guys2() { common_scripts\utility::flag_wait_any( "combat_1_over", "combat_guys2" ); var_0 = maps\clockwork_code::array_spawn_targetname_allow_fail( "combat_guys2_pre" ); var_1 = getentarray( "combat_guys2_waver", "targetname" ); foreach ( var_3 in var_1 ) var_3 thread maps\clockwork_code::ambient_animate( 0, "start_combat2", 0, 0 ); common_scripts\utility::flag_wait( "combat_guys2" ); var_0 = maps\clockwork_code::array_spawn_targetname_allow_fail( "combat_guys2" ); thread combat_ambient_guys2(); common_scripts\utility::flag_wait_or_timeout( "start_combat2", 5 ); level notify( "start_combat2" ); foreach ( var_6 in var_0 ) { if ( isalive( var_6 ) ) { var_6.ignoreme = 0; var_6.ignoreall = 0; } } wait 1; var_8 = maps\clockwork_code::array_spawn_targetname_allow_fail( "combat_guys2b" ); var_9 = maps\_utility::get_ai_group_ai( "waver_guy" ); var_10 = common_scripts\utility::array_combine( var_0, var_8 ); var_10 = common_scripts\utility::array_combine( var_10, var_9 ); var_10 = maps\_utility::array_removedead_or_dying( var_10 ); thread maps\clockwork_code::ai_array_killcount_flag_set( var_10, var_10.size, "to_cqb" ); common_scripts\utility::flag_wait( "to_cqb" ); maps\clockwork_code::safe_activate_trigger_with_targetname( "to_cqb" ); maps\_utility::disable_trigger_with_targetname( "to_cqb" ); common_scripts\utility::flag_wait( "kick_a_door" ); } combat_ambient_guys2() { var_0 = getentarray( "flee_guy1", "targetname" ); maps\_utility::array_spawn_function( var_0, maps\clockwork_defend::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 ); maps\_utility::array_spawn_function( var_0, ::set_scientist_sprinting ); common_scripts\utility::array_thread( var_0, maps\clockwork_code::ambient_animate, 1, "", 0, 1 ); common_scripts\utility::flag_wait( "combat_flee" ); wait 2; var_0 = getentarray( "flee_guy2", "targetname" ); maps\_utility::array_spawn_function( var_0, maps\clockwork_defend::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 ); maps\_utility::array_spawn_function( var_0, ::set_scientist_sprinting ); common_scripts\utility::array_thread( var_0, maps\clockwork_code::ambient_animate, 1, "", 0, 1 ); } set_scientist_sprinting() { if ( !isdefined( self ) ) return; maps\_utility::clear_run_anim(); maps\_utility::clear_generic_idle_anim(); common_scripts\utility::waitframe(); self.animname = "generic"; var_0 = "defend_run_scientist_" + randomintrange( 1, 4 ); maps\_utility::set_run_anim( var_0 ); maps\_utility::set_generic_idle_anim( "scientist_idle" ); } setup_interior_cqb() { maps\clockwork_code::dog_setup(); maps\clockwork_code::setup_player(); maps\clockwork_code::spawn_allies(); common_scripts\utility::flag_set( "to_cqb" ); 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" ); } maps\_utility::disable_trigger_with_targetname( "to_cqb" ); maps\_utility::vision_set_changes( "clockwork_indoor", 0 ); level.player switchtoweapon( "cz805bren+reflex_sp+silencer_sp" ); thread handle_cqb_pip_cams(); thread maps\clockwork_audio::checkpoint_interior_cqb(); } begin_interior_cqb() { common_scripts\utility::flag_set( "aud_stop_interior_combat_pa" ); var_0 = getent( "ai_closet_clip", "targetname" ); var_0 notsolid(); var_0 connectpaths(); maps\_utility::battlechatter_on( "axis" ); maps\_utility::battlechatter_on( "allies" ); maps\_utility::set_team_bcvoice( "allies", "taskforce" ); thread handle_cqb_enemies(); thread handle_cqb_allies(); thread spin_fans( "interior_cqb_finished" ); var_1 = getent( "cqb_exit_clip", "targetname" ); var_1 notsolid(); var_2 = getent( "cqb_exterior_door", "targetname" ); var_2.animname = "cqb_ext_door"; var_2 maps\_utility::assign_animtree(); var_3 = getent( "combat_exit_door_clip2", "targetname" ); var_3 linkto( var_2 ); var_4 = common_scripts\utility::getstruct( "cqb_door_kick1", "targetname" ); var_4 maps\_anim::anim_first_frame_solo( var_2, "slow_open_door" ); var_5 = maps\_utility::spawn_anim_model( "cqb_int_door" ); var_6 = getent( "combat_exit_door_clip1", "targetname" ); var_7 = getent( "combat_exit_inside_door", "targetname" ); var_4 maps\_anim::anim_first_frame_solo( var_5, "bust_door" ); wait 0.01; var_7 linkto( var_5, "J_prop_1" ); var_6 linkto( var_5, "J_prop_1" ); var_8 = level.allies[1]; var_4 maps\_anim::anim_generic_reach( var_8, "bust_door" ); thread maps\clockwork_audio::cqb_door_shove(); level.allies[0] thread maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_throughhere" ); var_4 thread maps\_anim::anim_single_solo( var_5, "bust_door" ); var_4 maps\_anim::anim_generic_run( var_8, "bust_door" ); var_6 connectpaths(); var_8 maps\_utility::enable_ai_color(); level.allies[0] thread door_closer_guy( var_5, var_6 ); level.allies[1] thread wait_at_slow_door(); thread handle_closet_clip( level.allies[2] ); common_scripts\utility::array_thread( level.allies, maps\_utility::disable_ai_color ); maps\clockwork_code::safe_activate_trigger_with_targetname( "cqb_move_up4" ); thread ambient_road_vehicles(); common_scripts\utility::flag_wait( "interior_combat_finished" ); common_scripts\utility::array_thread( level.allies, maps\_utility::enable_ai_color ); thread rotunda_kill(); thread start_rotunda_fight(); thread maps\_utility::autosave_by_name( "pillar_room_complete" ); maps\_utility::battlechatter_off( "allies" ); maps\_utility::battlechatter_off( "axis" ); maps\_utility::player_speed_percent( 85 ); common_scripts\utility::flag_wait( "interior_cqb_finished" ); thread maps\_utility::autosave_by_name( "cqb_finished" ); } handle_closet_clip( var_0 ) { var_1 = getnode( "keegan_catwalk_door_node", "targetname" ); var_0.oldgoalradius = var_0.goalradius; var_0.goalradius = 20; var_0 setgoalnode( var_1 ); var_0 waittill( "goal" ); while ( distance2d( var_0.origin, var_1.origin ) > var_0.goalradius ) { var_0 setgoalnode( var_1 ); var_0 waittill( "goal" ); } common_scripts\utility::flag_set( "hesh_ready_for_catwalks" ); var_0.goalradius = var_0.oldgoalradius; common_scripts\utility::flag_wait( "at_slow_door" ); var_2 = getent( "ai_closet_clip", "targetname" ); var_2 solid(); var_2 disconnectpaths(); } spin_fans( var_0 ) { var_1 = getentarray( "clk_fan_spin01", "targetname" ); var_2 = randomfloatrange( -5.0, 5.0 ); while ( !common_scripts\utility::flag( var_0 ) ) { foreach ( var_4 in var_1 ) var_4 rotatepitch( 30 + var_2, 0.25 ); wait 0.25; } common_scripts\utility::flag_set( "aud_stop_fan_sound" ); } ambient_road_vehicles() { common_scripts\utility::flag_wait( "interior_combat_finished" ); var_0 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "catwalk_gaz" ); var_0 maps\_vehicle::vehicle_lights_on( "running" ); } wait_at_slow_door() { var_0 = getent( "cqb_door_kick2", "targetname" ); self.animname = "generic"; var_0 maps\_anim::anim_reach_and_approach_solo( self, "slow_open_door_idle", undefined, "Cover Right" ); common_scripts\utility::flag_set( "at_slow_door" ); var_0 thread maps\_anim::anim_generic_loop( self, "slow_open_door_idle", "stop_waiting" ); common_scripts\utility::flag_wait( "shut_catwalk_door" ); thread maps\clockwork_audio::cqb_door_open_slow(); var_0 notify( "stop_waiting" ); var_0 = common_scripts\utility::getstruct( "cqb_door_kick1", "targetname" ); var_1 = getent( "cqb_exterior_door", "targetname" ); var_1.animname = "cqb_ext_door"; var_1 maps\_utility::assign_animtree(); thread maps\clockwork_fx::turn_effects_on( "ch_industrial_light_02_on_red", "fx/lights/bulb_single_offset_red" ); thread maps\clockwork_fx::turn_effects_on( "clk_cargoship_wall_light_on", "fx/lights/bulb_single_cargoship" ); common_scripts\utility::exploder( 200 ); common_scripts\utility::exploder( 850 ); common_scripts\utility::exploder( 6400 ); var_2 = getent( "combat_exit_door_clip2", "targetname" ); common_scripts\utility::exploder( 40 ); var_2 notsolid(); var_2 connectpaths(); self.animname = "generic"; var_0 thread maps\_anim::anim_single_solo( var_1, "slow_open_door" ); var_0 maps\_anim::anim_single_run_solo( self, "slow_open_door" ); common_scripts\utility::flag_set( "catwalks_open" ); maps\_utility::enable_ai_color(); maps\clockwork_code::blend_movespeedscale_custom( 85, 1 ); maps\_utility::player_speed_percent( 85 ); } door_closer_guy( var_0, var_1 ) { var_2 = common_scripts\utility::getstruct( "cqb_door_kick1", "targetname" ); var_2 maps\_anim::anim_generic_reach( self, "shut_door_start" ); var_2 maps\_anim::anim_generic( self, "shut_door_start" ); var_3 = maps\_utility::make_array( self, var_0 ); self.animname = "generic"; if ( !common_scripts\utility::flag( "to_catwalks" ) || !common_scripts\utility::flag( "hesh_ready_for_catwalks" ) ) { var_2 thread maps\_anim::anim_loop( var_3, "shut_door_loop", "shut_door" ); common_scripts\utility::flag_wait_all( "to_catwalks", "hesh_ready_for_catwalks" ); var_2 notify( "shut_door" ); } common_scripts\utility::flag_set( "shut_catwalk_door" ); thread maps\clockwork_audio::cqb_door_close_behind(); var_4 = getent( "cqb_exit_clip", "targetname" ); var_4 notsolid(); thread turn_off_safety_clip(); self.animname = "generic"; var_2 maps\_anim::anim_single( var_3, "shut_door_end" ); var_4 = getent( "cqb_exit_clip", "targetname" ); var_4 notsolid(); var_1 disconnectpaths(); maps\_utility::enable_ai_color(); thread maps\clockwork_code::transient_switch_to_end(); var_5 = getaiarray( "axis" ); common_scripts\utility::array_thread( var_5, maps\clockwork_code::die_quietly ); var_6 = maps\clockwork_code::array_spawn_targetname_allow_fail( "combat_run_past_guys", 1 ); common_scripts\utility::array_thread( var_6, maps\clockwork_code::delete_on_path_end ); common_scripts\utility::array_thread( var_6, maps\_utility::pathrandompercent_set, 200 ); wait 5; var_6 = maps\clockwork_code::array_spawn_targetname_allow_fail( "combat_run_past_guys2", 1 ); common_scripts\utility::array_thread( var_6, maps\clockwork_code::delete_on_path_end ); common_scripts\utility::array_thread( var_6, maps\_utility::pathrandompercent_set, 200 ); } turn_off_safety_clip() { wait 2; var_0 = getent( "player_door_guy_clip", "targetname" ); var_0 notsolid(); } catwalk_melee() { var_0 = level.allies[1]; var_1 = getent( "cqb_guys5", "targetname" ); var_2 = var_1 maps\_utility::spawn_ai( 1 ); var_2.ignoreme = 1; var_2.no_dog_target = 1; wait 0.01; var_3 = var_0.animname; var_0.animname = "winner"; var_2.animname = "loser"; var_4 = maps\_utility::make_array( var_0, var_2 ); var_5 = common_scripts\utility::getstruct( "catwalk_melee_org", "targetname" ); var_5 thread maps\_anim::anim_first_frame_solo( var_2, "catwalk_melee" ); var_2 maps\_utility::magic_bullet_shield(); var_2 thread catwalk_melee_abort(); var_0.ignoreall = 1; var_0 maps\_utility::disable_arrivals(); var_5 maps\_anim::anim_reach_solo( var_0, "catwalk_melee" ); if ( !common_scripts\utility::flag( "catwalk_melee_abort" ) ) { var_2 notify( "ambushing" ); var_0.animname = "winner"; var_2.animname = "loser"; var_5 thread maps\_anim::anim_single( var_4, "catwalk_melee" ); thread maps\clockwork_audio::locker_brawl(); thread maps\clockwork_audio::locker_brawl_vo(); wait 1.5; common_scripts\utility::flag_set( "cqb5_dead" ); var_0 waittillmatch( "single anim", "end" ); var_2 maps\_utility::stop_magic_bullet_shield(); var_2 maps\clockwork_code::die_quietly(); } var_0.ignoreall = 0; var_0 maps\_utility::enable_arrivals(); var_0 maps\_utility::enable_ai_color(); var_0.animname = var_3; maps\clockwork_code::blend_movespeedscale_custom( 100, 1 ); maps\_utility::player_speed_percent( 100 ); } catwalk_melee_glass_break( var_0 ) { maps\clockwork_code::glass_destroy_targetname( "exterior_catwalk_glass01" ); } catwalk_melee_abort() { self endon( "ambushing" ); common_scripts\utility::flag_wait( "catwalk_melee_abort" ); common_scripts\utility::waitframe(); maps\_utility::anim_stopanimscripted(); maps\_utility::stop_magic_bullet_shield(); thread maps\_anim::anim_generic( self, "surprise_stop" ); self.ignoreall = 0; self.ignoreme = 0; wait 1; common_scripts\utility::flag_set( "cqb5_dead" ); } rotunda_kill() { var_0 = level.allies[1]; var_1 = common_scripts\utility::getstruct( "melee_moment", "targetname" ); common_scripts\utility::flag_wait( "rotunda_runners" ); maps\_utility::autosave_by_name( "pre_rotunda" ); var_2 = maps\clockwork_code::array_spawn_targetname_allow_fail( "run_squad2", 1 ); common_scripts\utility::array_thread( var_2, maps\_utility::pathrandompercent_set, 200 ); common_scripts\utility::array_thread( var_2, ::attack_if_provoked ); wait 1; level.rotunda_knife = spawn( "script_model", ( 0, 0, 0 ) ); level.rotunda_knife setmodel( "weapon_commando_knife" ); level.rotunda_knife linkto( var_0, "tag_inhand", ( 0, 0, 0 ), ( 0, 0, 0 ) ); level.rotunda_knife hide(); common_scripts\utility::flag_wait( "hold_fire" ); if ( !common_scripts\utility::flag( "round_room_fight" ) ) { var_3 = maps\clockwork_code::array_spawn_targetname_allow_fail( "rotunda_kill_guys", 1 ); common_scripts\utility::array_thread( var_3, ::interrupt_rotunda_kill ); var_4 = 1; foreach ( var_6 in var_3 ) { var_6.animname = "guard" + maps\_utility::string( var_4 ); var_6.grenadeawareness = 0; var_6.allowdeath = 1; var_6.health = 1; var_6.nodrop = 1; if ( var_4 <= 2 ) { var_6.health = 1; var_6 thread rotunda_kill_gun_sync(); } var_4++; } var_1 maps\_anim::anim_first_frame( var_3, "rotunda_kill" ); common_scripts\utility::flag_wait_either( "rotunda_kill", "moved_into_rotunda" ); thread handle_troll_player( var_3 ); if ( !common_scripts\utility::flag( "round_room_fight" ) ) { var_0.animname = "cipher"; var_0 thread interrupt_ally_rotunda_kill(); thread activate_rotunda_fight( var_1, var_0 ); common_scripts\utility::flag_wait_any( "moved_into_rotunda", "round_room_fight", "starting_rotunda_kill" ); if ( !common_scripts\utility::flag( "starting_rotunda_kill" ) ) { maps\_anim::anim_reach_cleanup_solo( var_0 ); var_0 notify( "cancel_rotunda_kill" ); maps\_utility::array_notify( var_3, "cancel" ); maps\_utility::array_delete( var_3 ); wait 0.1; } else { var_8 = var_3; var_3 = common_scripts\utility::array_add( var_3, var_0 ); thread maps\clockwork_audio::rotunda_kill(); var_1 thread maps\_anim::anim_single( var_3, "rotunda_kill" ); common_scripts\utility::array_thread( var_8, ::enemy_waittill_rotunda_animation_finished ); var_0 waittill_rotunda_animation_finished(); level common_scripts\utility::waittill_any( "rotunda_kill_done", "rotunda_kill_interrupted" ); wait 0.5; } } else { maps\_utility::array_notify( var_3, "cancel" ); maps\_utility::array_delete( var_3 ); } } var_0 maps\_utility::enable_ai_color(); maps\clockwork_code::safe_disable_trigger_with_targetname( "rotunda_allies0" ); maps\clockwork_code::safe_activate_trigger_with_targetname( "rotunda_allies1" ); if ( isdefined( level.rotunda_knife ) ) { level.rotunda_knife unlink(); level.rotunda_knife hide(); level.rotunda_knife delete(); } } waittill_rotunda_animation_finished() { level endon( "rotunda_kill_interrupted" ); self waittillmatch( "single anim", "end" ); level notify( "rotunda_kill_done" ); } enemy_waittill_rotunda_animation_finished() { level endon( "rotunda_kill_interrupted" ); self endon( "death" ); self waittillmatch( "single anim", "end" ); self.ignoreme = 0; self.ignoreall = 0; maps\_utility::enable_ai_color(); } activate_rotunda_fight( var_0, var_1 ) { var_1 endon( "cancel_rotunda_kill" ); var_0 maps\_anim::anim_reach_solo( var_1, "rotunda_kill" ); common_scripts\utility::flag_set( "starting_rotunda_kill" ); } handle_troll_player( var_0 ) { thread troll_stairs_trigger(); level common_scripts\utility::waittill_either( "cqb_guys7", "troll_stairs_trigger" ); if ( isdefined( var_0[0] ) && isalive( var_0[0] ) ) var_0[0] notify( "damage", 1, level.player ); level notify( "rotunda_kill_interrupted" ); } troll_stairs_trigger() { level endon( "cqb_guys7" ); var_0 = getent( "rotunda_stairs", "targetname" ); if ( !isdefined( var_0 ) ) return; var_0 waittill( "trigger" ); level notify( "troll_stairs_trigger" ); } start_rotunda_fight() { level common_scripts\utility::waittill_any( "rotunda_kill_done", "rotunda_kill_interrupted", "runner_killed" ); var_0 = getaiarray( "axis" ); maps\_utility::array_notify( var_0, "fight" ); wait 0.5; common_scripts\utility::array_thread( level.allies, maps\_utility::enable_ai_color ); } rotunda_knife_stab( var_0 ) { var_0.stabbed = 1; } show_rotunda_knife( var_0 ) { level.rotunda_knife show(); } hide_rotunda_knife( var_0 ) { level.rotunda_knife hide(); } get_killed( var_0 ) { if ( !isalive( var_0 ) ) return; var_0.allowdeath = 1; var_0.a.nodeath = 1; var_0 maps\_utility::set_battlechatter( 0 ); var_0 kill(); } catch_interrupt_notify() { self endon( "death" ); level waittill( "rotunda_kill_interrupted" ); self notify( "rotunda_interrupt" ); } catch_death_notify() { self waittill( "death", var_0 ); if ( isdefined( var_0 ) && isplayer( var_0 ) ) self notify( "death_by_player" ); } catch_damage_notify() { self waittill( "damage", var_0, var_1 ); if ( isdefined( var_1 ) && isplayer( var_1 ) ) self notify( "damage_by_player" ); } interrupt_rotunda_kill() { thread catch_interrupt_notify(); thread catch_death_notify(); thread catch_damage_notify(); self addaieventlistener( "grenade danger" ); self addaieventlistener( "projectile_impact" ); self addaieventlistener( "silenced_shot" ); self addaieventlistener( "bulletwhizby" ); self addaieventlistener( "gunshot" ); self addaieventlistener( "gunshot_teammate" ); self addaieventlistener( "explode" ); common_scripts\utility::waittill_any( "ai_event", "death_by_player", "damage_by_player", "rotunda_interrupt" ); wait 0.25; level notify( "rotunda_kill_interrupted" ); if ( !isdefined( self ) || !isalive( self ) ) return; self.player_interrupted = 1; self.noragdoll = 0; maps\_utility::anim_stopanimscripted(); if ( isdefined( self.stabbed ) ) return; maps\_utility::pathrandompercent_set( 0 ); maps\_utility::enable_ai_color(); maps\_utility::gun_recall(); self endon( "death" ); wait 0.5; self.ignoreme = 0; wait 0.5; self.ignoreall = 0; return; } rotunda_kill_gun_sync() { maps\_utility::gun_remove(); var_0 = spawn( "script_model", self.origin ); var_0 setmodel( "weapon_sc2010" ); var_0 linkto( self, "tag_sync", ( 0, 0, 0 ), ( 0, 0, 0 ) ); thread unlink_gun( var_0 ); common_scripts\utility::waittill_any( "death", "damage", "cancel" ); if ( isdefined( self.player_interrupted ) ) { var_0 unlink(); var_1 = spawn( "weapon_sc2010", var_0.origin ); var_1.angles = var_0.angles; var_0 delete(); } else if ( !common_scripts\utility::flag( "starting_rotunda_kill" ) ) var_0 delete(); } unlink_gun( var_0 ) { level endon( "rotunda_kill_interrupted" ); level waittill( "rotunda_kill_done" ); var_0 unlink(); var_1 = spawn( "weapon_sc2010", var_0.origin, 1 ); var_1.angles = var_0.angles; var_0 delete(); } interrupt_ally_rotunda_kill( var_0 ) { level waittill( "rotunda_kill_interrupted" ); maps\_utility::anim_stopanimscripted(); self.ignoreme = 0; self.ignoreall = 0; maps\_utility::enable_ai_color(); maps\clockwork_code::safe_disable_trigger_with_targetname( "rotunda_allies0" ); maps\clockwork_code::safe_activate_trigger_with_targetname( "rotunda_allies1" ); } cqb_encounter( var_0, var_1, var_2, var_3, var_4, var_5, var_6 ) { common_scripts\utility::flag_wait( var_0 ); var_7 = getentarray( var_4, "targetname" ); var_8 = []; foreach ( var_10 in var_7 ) { if ( isdefined( var_10.animation ) ) var_8[var_8.size] = var_10 maps\clockwork_code::ambient_animate( 0, "cqb_attack5" ); } var_8 = common_scripts\utility::array_combine( var_8, maps\clockwork_code::array_spawn_targetname_allow_fail( var_4 ) ); thread maps\clockwork_code::ai_array_killcount_flag_set( var_8, var_8.size, var_1 ); thread cqb_encounter_allies_move_up( var_1, var_2 ); if ( isdefined( var_5 ) ) common_scripts\utility::flag_wait( var_5 ); else wait 1; thread maps\clockwork_code::attack_targets( var_3, var_8, undefined, undefined, var_6 ); } cqb_encounter_allies_move_up( var_0, var_1 ) { common_scripts\utility::flag_wait( var_0 ); maps\clockwork_code::safe_activate_trigger_with_targetname( var_1 ); } handle_cqb_allies() { thread cqb_ally_vo(); common_scripts\utility::flag_wait( "cqb5_dead" ); maps\clockwork_code::safe_activate_trigger_with_targetname( "cqb_move_up5" ); common_scripts\utility::flag_wait( "cqb_guys6" ); maps\_utility::autosave_by_name( "catwalks" ); wait 1; while ( level.run_guy_count > 0 && !common_scripts\utility::flag( "moved_into_rotunda" ) ) wait 0.25; common_scripts\utility::flag_wait( "cqb_guys7" ); level.player allowsprint( 1 ); level.player allowjump( 1 ); thread maps\clockwork_code::blend_movespeedscale_custom( 80, 1 ); common_scripts\utility::flag_wait( "interior_cqb_finished" ); maps\clockwork_code::blend_movespeedscale_custom( 100, 1 ); maps\_utility::player_speed_percent( 100 ); } handle_cqb_enemies() { common_scripts\utility::flag_wait( "cqb_guys5" ); thread catwalk_melee(); common_scripts\utility::flag_wait( "round_room_fight" ); common_scripts\utility::flag_wait( "cqb_guys7" ); var_0 = maps\_utility::get_ai_group_ai( "roundroom_runners" ); foreach ( var_2 in var_0 ) var_2.ignoreme = 0; if ( var_0.size < 3 ) { thread maps\clockwork_code::ai_array_killcount_flag_set( var_0, var_0.size, "extra_guys_dead" ); thread cqb_encounter( "cqb_guys7", "cqb7_dead", "cqb_move_up7", level.allies, "cqb_guys7" ); } else { common_scripts\utility::flag_set( "extra_guys_dead" ); thread maps\clockwork_code::ai_array_killcount_flag_set( var_0, var_0.size, "cqb7_dead" ); thread cqb_encounter_allies_move_up( "cqb7_dead", "cqb_move_up7" ); } thread cqb_encounter( "cqb_guys8", "interior_cqb_finished", "cqb_move_up8", level.allies, "cqb_guys8" ); } attack_if_provoked() { self addaieventlistener( "grenade danger" ); self addaieventlistener( "projectile_impact" ); self addaieventlistener( "silenced_shot" ); self addaieventlistener( "bulletwhizby" ); self addaieventlistener( "gunshot" ); self addaieventlistener( "gunshot_teammate" ); self addaieventlistener( "explode" ); common_scripts\utility::waittill_any( "ai_event", "fight", "damage" ); level notify( "runner_killed" ); wait 1; if ( !isdefined( self ) || !isalive( self ) ) return; self notify( "stop_going_to_node" ); self.ignoreall = 0; self.ignoreme = 0; self setgoalpos( self.origin ); maps\_utility::pathrandompercent_set( 0 ); maps\_utility::enable_ai_color(); wait 0.1; if ( !common_scripts\utility::flag( "round_room_fight" ) ) maps\clockwork_code::reassign_goal_volume( self, "round_room_alerted_volume" ); else maps\clockwork_code::reassign_goal_volume( self, "round_room_combat_volume" ); level notify( "round_room_enemies_provoked" ); } watch_for_round_room_combat() { level endon( "death" ); level common_scripts\utility::waittill_any( "round_room_enemies_provoked", "rotunda_kill_interrupted" ); common_scripts\utility::flag_set( "round_room_fight" ); level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_goinghot" ); level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_pickitupboys" ); maps\clockwork_code::safe_activate_trigger_with_targetname( "rotunda_allies0" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs2_gunfirecatwalks", 1, "cqb7_dead" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs1_sendallunits", 2, "cqb7_dead" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs2_ontheway", 3, "cqb7_dead" ); } combat_vo() { maps\_utility::delaythread( 3, common_scripts\utility::flag_set, "start_pip_cams" ); level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_mrk_frontdoorsopeneta" ); common_scripts\utility::flag_wait( "discovery_guys" ); level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_weaponsfree" ); wait 1; maps\clockwork_code::radio_dialog_add_and_go( "clockwork_dz_patchyouin" ); maps\clockwork_code::radio_dialog_add_and_go( "clockwork_oby_bossyougottamess" ); common_scripts\utility::flag_wait( "combat_guys1" ); wait 2; level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_eyeonlabs" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs2_gunfirelevel1", 3, "combat_1_over" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs3_securitybreach", 4, "combat_1_over" ); common_scripts\utility::flag_wait( "combat_1_over" ); level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_letsgo" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs3_intruderslevel2", 2, "combat_guys2" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs1_locksectordown", 3, "combat_guys2" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs4_engaginglevel2", 4, "combat_guys2" ); common_scripts\utility::flag_wait( "combat_guys2" ); wait 1; level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_getthatguy" ); common_scripts\utility::flag_wait( "combat_flee" ); level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_headright" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs4_engaginglevel2", 1, "to_cqb" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs2_takethemalive", 2, "to_cqb" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs4_siberianuniforms", 3, "to_cqb" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs2_traitors", 4, "to_cqb" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs4_idontknow", 5, "to_cqb" ); common_scripts\utility::flag_wait( "start_combat2" ); level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_boggeddown" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs4_requestassistance", 10, "to_cqb" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs2_evacuatingpersonnel", 11, "to_cqb" ); common_scripts\utility::flag_wait( "to_cqb" ); maps\clockwork_code::radio_dialog_add_and_go( "clockwork_dz_allclear" ); level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_movemove" ); } cqb_ally_vo() { common_scripts\utility::flag_wait( "shut_catwalk_door" ); maps\clockwork_code::radio_dialog_add_and_go( "clockwork_dz_southcorridor" ); maps\clockwork_code::radio_dialog_add_and_go( "clockwork_dz_tangoesconverging" ); level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_mrk_exitingthetreetaking" ); maps\clockwork_code::radio_dialog_add_and_go( "clockwork_dz_minimalactivity" ); maps\clockwork_code::radio_dialog_add_and_go( "clockwork_dz_offradar" ); common_scripts\utility::flag_wait( "cqb5_dead" ); level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_watchthosecorners" ); common_scripts\utility::flag_wait( "hold_fire" ); maps\clockwork_code::radio_dialog_add_and_go( "clockwork_bkr_hold" ); wait 3; common_scripts\utility::flag_set( "rotunda_kill" ); wait 2; thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs2_squad1reportin", 2, "round_room_fight" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs2_squad3status", 4, "round_room_fight" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs2_confirmid", 6, "round_room_fight" ); wait 3; thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs2_squadsunresponsive", 8, "round_room_fight" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs1_sendentirecompany", 10, "round_room_fight" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs2_yessir", 12, "round_room_fight" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs3_massivecasualties", 14, "round_room_fight" ); thread maps\clockwork_code::overheard_radio_chatter( "clockwork_rs2_locateintruders", 16, "round_room_fight" ); common_scripts\utility::flag_wait( "cqb_guys7" ); level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_wholebase" ); common_scripts\utility::flag_wait( "cqb7_dead" ); level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_targetlocation" ); common_scripts\utility::flag_wait_all( "almost_there", "interior_cqb_finished", "extra_guys_dead" ); level.allies[0] maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_90secstonest" ); } handle_pip_cams() { common_scripts\utility::flag_wait( "start_pip_cams" ); common_scripts\utility::flag_wait_either( "combat_guys1", "end_discovery" ); common_scripts\utility::flag_wait( "combat_1_over" ); wait 2; maps\clockwork_code::radio_dialog_add_and_go( "clockwork_dz_majoractivity" ); common_scripts\utility::flag_wait( "combat_flee" ); thread handle_cqb_pip_cams(); } handle_cqb_pip_cams() { common_scripts\utility::flag_wait( "shut_catwalk_door" ); wait 5; common_scripts\utility::flag_wait( "cqb_guys5" ); common_scripts\utility::flag_wait( "cqb_guys6" ); var_0 = maps\clockwork_code::array_spawn_targetname_allow_fail( "run_squad1", 1 ); level.run_guy_count = var_0.size; common_scripts\utility::array_thread( var_0, maps\_utility::pathrandompercent_set, 200 ); common_scripts\utility::array_thread( var_0, maps\clockwork_code::delete_on_path_end, "round_room_enemies_provoked", ::run_guy_done ); common_scripts\utility::array_thread( var_0, ::attack_if_provoked ); thread watch_for_round_room_combat(); wait 1; maps\clockwork_code::radio_dialog_add_and_go( "clockwork_dz_tangoesmassing" ); level.allies[0] thread maps\clockwork_code::char_dialog_add_and_go( "clockwork_bkr_takeitslow" ); common_scripts\utility::flag_set( "rotunda_cam" ); common_scripts\utility::flag_wait( "cqb_guys7" ); } run_guy_done() { level.run_guy_count--; } cqb_dog() { if ( !isdefined( level.dog ) ) return; common_scripts\utility::flag_wait( "discovery_spawn" ); level.dog setdogattackradius( 64 ); wait 0.1; var_0 = level.override_dog_enemy; wait 2; level.dog maps\ally_attack_dog::dog_disable_ai_color(); if ( isalive( var_0 ) ) { level.player notify( "dog_attack_override" ); var_0 common_scripts\utility::waittill_notify_or_timeout( "dead", 15 ); } common_scripts\utility::flag_wait( "to_cqb" ); level.dog maps\ally_attack_dog::dog_enable_ai_color(); level.dog maps\ally_attack_dog::lock_player_control_until_flag( "catwalks_open" ); }