// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool slowmo_breach_init() { level.last_player_damage = 0; level.slomobreachduration = 3.5; level.breachenemies_active = 0; level.breachignoreenemy_count = 0; level.player_one_already_breached = undefined; level.breachenemies_alive = 0; level.has_special_breach_anim = []; level.breach_passive_time = 0; slomo_sound_scale_setup(); setdvarifuninitialized( "breach_debug", "0" ); setdvarifuninitialized( "breach_requires_friendlies_in_position", "1" ); setdvarifuninitialized( "hostage_missionfail", "0" ); precacheitem( "usp_scripted" ); precacheshader( "breach_icon" ); precachemodel( "weapon_parabolic_knife" ); precachestring( &"SCRIPT_WAYPOINT_BREACH" ); precachestring( &"SCRIPT_PLATFORM_BREACH_ACTIVATE" ); precachestring( &"SCRIPT_BREACH_NEED_PLAYER" ); precachestring( &"SCRIPT_BREACH_NEED_FRIENDLY" ); precachestring( &"SCRIPT_BREACH_TOO_MANY_ENEMIES" ); precachestring( &"SCRIPT_BREACH_ILLEGAL_WEAPON" ); precachestring( &"SCRIPT_BREACH_PARTNER_NOT_READY" ); precachestring( &"SCRIPT_BREACH_YOU_NOT_READY" ); precachestring( &"SCRIPT_MISSIONFAIL_KILLEDHOSTAGE_THROUGH_ENEMY" ); precachestring( &"SCRIPT_MISSIONFAIL_KILLEDHOSTAGE" ); precachestring( &"SCRIPT_MISSIONFAIL_HOSTAGEEXECUTED" ); precachestring( &"SCRIPT_MISSIONFAIL_HOSTAGEEXECUTED_USEMULTIDOOR" ); precachestring( &"SCRIPT_BREACH_RELOADING" ); level._slowmo_functions = []; level._effect["breach_door"] = loadfx( "fx/explosions/breach_door" ); level._effect["breach_room"] = loadfx( "fx/explosions/breach_room" ); level._effect["breach_room_residual"] = loadfx( "fx/explosions/breach_room_residual" ); level._effect["breach_knife_execution"] = loadfx( "fx/impacts/flesh_hit_knife" ); script_models(); player_animations(); friendly_animations(); breach_anims(); create_slowmo_breaches_from_entities(); var_0 = getentarray( "trigger_multiple_breachIcon", "classname" ); common_scripts\utility::array_thread( var_0, ::icon_trigger_setup ); var_1 = getentarray( "breach_solid_delete", "targetname" ); common_scripts\utility::array_call( var_1, ::connectpaths ); common_scripts\utility::array_thread( var_1, maps\_utility::self_delete ); var_1 = getentarray( "breach_delete", "targetname" ); common_scripts\utility::array_thread( var_1, maps\_utility::self_delete ); var_2 = getentarray( "breach_fx", "targetname" ); common_scripts\utility::array_thread( var_2, ::breach_fx_setup ); level.has_special_breach_anim["aa12"] = 1; level.has_special_breach_anim["aa12_reflex"] = 1; level.has_special_breach_anim["aug_reflex"] = 1; level.has_special_breach_anim["aug_scope"] = 1; level.has_special_breach_anim["barrett"] = 1; level.has_special_breach_anim["beretta"] = 1; level.has_special_breach_anim["beretta393"] = 1; level.has_special_breach_anim["cheytac_silencer"] = 1; level.has_special_breach_anim["fal"] = 1; level.has_special_breach_anim["fal_acog"] = 1; level.has_special_breach_anim["fal_reflex"] = 1; level.has_special_breach_anim["fal_shotgun"] = 1; level.has_special_breach_anim["fal_shotgun_attach"] = 1; level.has_special_breach_anim["famas"] = 1; level.has_special_breach_anim["famas_arctic"] = 1; level.has_special_breach_anim["famas_arctic_eotech"] = 1; level.has_special_breach_anim["famas_arctic_reflex"] = 1; level.has_special_breach_anim["famas_mp2"] = 1; level.has_special_breach_anim["famas_shotgun"] = 1; level.has_special_breach_anim["famas_shotgun_attach"] = 1; level.has_special_breach_anim["famas_woodland"] = 1; level.has_special_breach_anim["famas_woodland_eotech"] = 1; level.has_special_breach_anim["famas_woodland_acog"] = 1; level.has_special_breach_anim["famas_woodland_reflex"] = 1; level.has_special_breach_anim["famas_woodland_shotgun"] = 1; level.has_special_breach_anim["famas_woodland_shotgun_attach"] = 1; level.has_special_breach_anim["fn2000"] = 1; level.has_special_breach_anim["fn2000_acog"] = 1; level.has_special_breach_anim["fn2000_eotech"] = 1; level.has_special_breach_anim["fn2000_reflex"] = 1; level.has_special_breach_anim["fn2000_scope"] = 1; level.has_special_breach_anim["fn2000_shotgun"] = 1; level.has_special_breach_anim["fn2000_shotgun_attach"] = 1; level.has_special_breach_anim["fn2000_silencer"] = 1; level.has_special_breach_anim["fn2000_thermal"] = 1; level.has_special_breach_anim["glock"] = 1; level.has_special_breach_anim["kriss"] = 1; level.has_special_breach_anim["kriss_reflex"] = 1; level.has_special_breach_anim["kriss_acog_silencer"] = 1; level.has_special_breach_anim["m1014"] = 1; level.has_special_breach_anim["m14_scoped"] = 1; level.has_special_breach_anim["m14_scoped_arctic"] = 1; level.has_special_breach_anim["m14_scoped_ghil"] = 1; level.has_special_breach_anim["m14_scoped_silencer"] = 1; level.has_special_breach_anim["m14_scoped_silencer_woodland"] = 1; level.has_special_breach_anim["m14_scoped_woodland"] = 1; level.has_special_breach_anim["m14ebr"] = 1; level.has_special_breach_anim["m14ebr_thermal"] = 1; level.has_special_breach_anim["m203"] = 1; level.has_special_breach_anim["m16_acog"] = 1; level.has_special_breach_anim["m16_basic"] = 1; level.has_special_breach_anim["m16_grenadier"] = 1; level.has_special_breach_anim["m16_reflex"] = 1; level.has_special_breach_anim["m16_silencer"] = 1; level.has_special_breach_anim["m21_baseasset"] = 1; level.has_special_breach_anim["m21_scoped_arctic_silenced"] = 1; level.has_special_breach_anim["mp5"] = 1; level.has_special_breach_anim["mp5_arctic"] = 1; level.has_special_breach_anim["mp5_arctic_reflex"] = 1; level.has_special_breach_anim["mp5_eotech"] = 1; level.has_special_breach_anim["mp5_reflex"] = 1; level.has_special_breach_anim["mp5_silencer"] = 1; level.has_special_breach_anim["mp5_silencer_reflex"] = 1; level.has_special_breach_anim["ranger"] = 1; level.has_special_breach_anim["striker"] = 1; level.has_special_breach_anim["striker_reflex"] = 1; level.has_special_breach_anim["striker_woodland"] = 1; level.has_special_breach_anim["striker_woodland_reflex"] = 1; level.has_special_breach_anim["tavor_acog"] = 1; level.has_special_breach_anim["tavor_digital_acog"] = 1; level.has_special_breach_anim["tavor_digital_eotech"] = 1; level.has_special_breach_anim["tavor_digital_mars"] = 1; level.has_special_breach_anim["tavor_digital_reflex"] = 1; level.has_special_breach_anim["tavor_eotech"] = 1; level.has_special_breach_anim["tavor_mars"] = 1; level.has_special_breach_anim["tavor_reflex"] = 1; level.has_special_breach_anim["tavor_woodland_acog"] = 1; level.has_special_breach_anim["tavor_woodland_eotech"] = 1; level.has_special_breach_anim["tavor_woodland_mars"] = 1; level.has_special_breach_anim["tavor_woodland_reflex"] = 1; level.has_special_breach_anim["tmp"] = 1; level.has_special_breach_anim["tmp_reflex"] = 1; level.has_special_breach_anim["tmp_silencer"] = 1; level.has_special_breach_anim["ump45"] = 1; level.has_special_breach_anim["ump45_acog"] = 1; level.has_special_breach_anim["ump45_arctic"] = 1; level.has_special_breach_anim["ump45_arctic_acog"] = 1; level.has_special_breach_anim["ump45_arctic_reflex"] = 1; level.has_special_breach_anim["ump45_reflex"] = 1; level.has_special_breach_anim["ump45_silencer"] = 1; level.has_special_breach_anim["ump45_eotech"] = 1; level.has_special_breach_anim["wa2000"] = 1; level.has_special_breach_anim["wa2000_thermal"] = 1; level.has_special_breach_anim["g36c"] = 1; level.has_special_breach_anim["g36c_acog"] = 1; level.has_special_breach_anim["g36c_reflex"] = 1; level.has_special_breach_anim["g36c_grenadier"] = 1; level.has_special_breach_anim["pecheneg"] = 1; level.has_special_breach_anim["pecheneg_reflex"] = 1; level.has_special_breach_anim["gl_g36c"] = 1; level.has_special_breach_anim["m240"] = 1; level.has_special_breach_anim["m240_reflex"] = 1; level.has_special_breach_anim["m240_acog"] = 1; level.has_special_breach_anim["m4_grenadier"] = 1; level.has_special_breach_anim["m4_grunt"] = 1; level.has_special_breach_anim["m4_grunt_acog"] = 1; level.has_special_breach_anim["m4_grunt_reflex"] = 1; level.has_special_breach_anim["m4_shotgun"] = 1; level.has_special_breach_anim["m4_shotgun_attach"] = 1; level.has_special_breach_anim["m4_silencer"] = 1; level.has_special_breach_anim["m4_silencer_acog"] = 1; level.has_special_breach_anim["alt_m4m203_acog"] = 1; level.has_special_breach_anim["m4m203_acog"] = 1; level.has_special_breach_anim["alt_m4m203_acog_payback"] = 1; level.has_special_breach_anim["m4m203_acog_payback"] = 1; level.has_special_breach_anim["m4m203_reflex"] = 1; level.has_special_breach_anim["m4m203_reflex_arctic"] = 1; level.has_special_breach_anim["m4m203_silencer"] = 1; level.has_special_breach_anim["m4m203_silencer_reflex"] = 1; level.has_special_breach_anim["m4m203_eotech"] = 1; level.has_special_breach_anim["scar_h"] = 1; level.has_special_breach_anim["scar_h_fgrip"] = 1; level.has_special_breach_anim["scar_h_acog"] = 1; level.has_special_breach_anim["scar_h_grenadier"] = 1; level.has_special_breach_anim["scar_h_reflex"] = 1; level.has_special_breach_anim["scar_h_shotgun"] = 1; level.has_special_breach_anim["scar_h_shotgun_attach"] = 1; level.has_special_breach_anim["scar_h_silencer"] = 1; level.has_special_breach_anim["scar_h_thermal_silencer"] = 1; level.has_special_breach_anim["scar_h_thermal"] = 1; level.has_special_breach_anim["scar_h_m203"] = 1; level.has_special_breach_anim["m203_m4"] = 1; level.has_special_breach_anim["m203_m4_acog"] = 1; level.has_special_breach_anim["m203_m4_eotech"] = 1; level.has_special_breach_anim["m203_m4_reflex"] = 1; level.has_special_breach_anim["m203_m4_silencer"] = 1; level.has_special_breach_anim["m203_m4_silencer_reflex"] = 1; level.has_special_breach_anim["m203_m4_reflex_arctic"] = 1; level.has_special_breach_anim["coltanaconda"] = 1; level.has_special_breach_anim["deserteagle"] = 1; level.has_special_breach_anim["pp2000"] = 1; level.has_special_breach_anim["pp2000_reflex"] = 1; level.has_special_breach_anim["pp2000_silencer"] = 1; level.has_special_breach_anim["pp2000_thermal"] = 1; level.has_special_breach_anim["ak47"] = 1; level.has_special_breach_anim["ak47_acog"] = 1; level.has_special_breach_anim["ak47_arctic"] = 1; level.has_special_breach_anim["ak47_arctic_acog"] = 1; level.has_special_breach_anim["ak47_arctic_eotech"] = 1; level.has_special_breach_anim["ak47_arctic_grenadier"] = 1; level.has_special_breach_anim["ak47_arctic_reflex"] = 1; level.has_special_breach_anim["ak47_desert"] = 1; level.has_special_breach_anim["ak47_desert_acog"] = 1; level.has_special_breach_anim["ak47_desert_eotech"] = 1; level.has_special_breach_anim["ak47_desert_grenadier"] = 1; level.has_special_breach_anim["ak47_desert_reflex"] = 1; level.has_special_breach_anim["ak47_digital"] = 1; level.has_special_breach_anim["ak47_digital_acog"] = 1; level.has_special_breach_anim["ak47_digital_eotech"] = 1; level.has_special_breach_anim["ak47_digital_grenadier"] = 1; level.has_special_breach_anim["ak47_digital_reflex"] = 1; level.has_special_breach_anim["ak47_eotech"] = 1; level.has_special_breach_anim["ak47_fall"] = 1; level.has_special_breach_anim["ak47_fall_acog"] = 1; level.has_special_breach_anim["ak47_fall_eotech"] = 1; level.has_special_breach_anim["ak47_fall_grenadier"] = 1; level.has_special_breach_anim["ak47_fall_reflex"] = 1; level.has_special_breach_anim["ak47_grenadier"] = 1; level.has_special_breach_anim["ak47_reflex"] = 1; level.has_special_breach_anim["ak47_shotgun"] = 1; level.has_special_breach_anim["ak47_shotgun_attach"] = 1; level.has_special_breach_anim["ak47_silencer"] = 1; level.has_special_breach_anim["ak47_thermal"] = 1; level.has_special_breach_anim["ak47_woodland"] = 1; level.has_special_breach_anim["ak47_woodland_acog"] = 1; level.has_special_breach_anim["ak47_woodland_eotech"] = 1; level.has_special_breach_anim["ak47_woodland_grenadier"] = 1; level.has_special_breach_anim["ak47_woodland_reflex"] = 1; level.has_special_breach_anim["gl_ak47"] = 1; level.has_special_breach_anim["gl_ak47_arctic"] = 1; level.has_special_breach_anim["masada"] = 1; level.has_special_breach_anim["masada_acog"] = 1; level.has_special_breach_anim["masada_dcburn_mt_black_off"] = 1; level.has_special_breach_anim["masada_dcburn_mt_black_on"] = 1; level.has_special_breach_anim["masada_digital"] = 1; level.has_special_breach_anim["masada_digital_acog"] = 1; level.has_special_breach_anim["masada_digital_eotech"] = 1; level.has_special_breach_anim["masada_digital_grenadier_eotech"] = 1; level.has_special_breach_anim["gl_masada_digital_eotech"] = 1; level.has_special_breach_anim["masada_digital_reflex"] = 1; level.has_special_breach_anim["masada_eotech"] = 1; level.has_special_breach_anim["masada_grenadier_acog"] = 1; level.has_special_breach_anim["masada_reflex"] = 1; level.has_special_breach_anim["masada_silencer_motion_tracker_off"] = 1; level.has_special_breach_anim["masada_silencer_motion_tracker_on"] = 1; level.has_special_breach_anim["masada_silencer_mt_black_off"] = 1; level.has_special_breach_anim["masada_silencer_mt_black_on"] = 1; level.has_special_breach_anim["masada_silencer_mt_camo_off"] = 1; level.has_special_breach_anim["masada_silencer_mt_camo_on"] = 1; level.has_special_breach_anim["masada_silencer_mt_dust_off"] = 1; level.has_special_breach_anim["masada_silencer_mt_dust_on"] = 1; level.has_special_breach_anim["uzi"] = 1; level.has_special_breach_anim["uzi_sd"] = 1; level.has_special_breach_anim["uzi_silencer"] = 1; level.has_special_breach_anim["uzi_akimbo"] = 1; level.has_special_breach_anim["p90"] = 1; level.has_special_breach_anim["p90_acog"] = 1; level.has_special_breach_anim["p90_eotech"] = 1; level.has_special_breach_anim["p90_reflex"] = 1; level.has_special_breach_anim["p90_silencer"] = 1; level.has_special_breach_anim["p90_arctic"] = 1; level.has_special_breach_anim["p90_arctic_acog"] = 1; level.has_special_breach_anim["p90_arctic_eotech"] = 1; level.has_special_breach_anim["p90_arctic_reflex"] = 1; level.has_special_breach_anim["rpd"] = 1; level.has_special_breach_anim["rpd_acog"] = 1; level.has_special_breach_anim["rpd_grip"] = 1; level.has_special_breach_anim["rpd_reflex"] = 1; level.has_special_breach_anim["sa80"] = 1; level.has_special_breach_anim["sa80_scope"] = 1; level.has_special_breach_anim["sa80lmg"] = 1; level.has_special_breach_anim["sa80lmg_reflex"] = 1; level.has_special_breach_anim["sa80lmg_scope"] = 1; level.has_special_breach_anim["at4"] = 1; level.has_special_breach_anim["at4_straight"] = 1; level.has_special_breach_anim["model1887"] = 1; level.has_special_breach_anim["usp"] = 1; level.has_special_breach_anim["usp_airport"] = 1; level.has_special_breach_anim["usp_silencer"] = 1; level.has_special_breach_anim["dragunov"] = 1; level.has_special_breach_anim["dragunov_arctic"] = 1; level.has_special_breach_anim["dragunov_desert"] = 1; level.has_special_breach_anim["dragunov_fall"] = 1; level.has_special_breach_anim["dragunov_woodland"] = 1; level.has_special_breach_anim["mg4"] = 1; level.has_special_breach_anim["mg4_acog"] = 1; level.has_special_breach_anim["mg4_arctic"] = 1; level.has_special_breach_anim["mg4_arctic_reflex"] = 1; level.has_special_breach_anim["mg4_arctic_thermal"] = 1; level.has_special_breach_anim["mg4_reflex"] = 1; level.has_special_breach_anim["mg4_thermal"] = 1; level.has_special_breach_anim["spas12"] = 1; level.has_special_breach_anim["spas12_arctic"] = 1; level.has_special_breach_anim["spas12_arctic_eotech"] = 1; level.has_special_breach_anim["spas12_arctic_grip"] = 1; level.has_special_breach_anim["spas12_arctic_heartbeat"] = 1; level.has_special_breach_anim["spas12_arctic_heartbeat_attach"] = 1; level.has_special_breach_anim["spas12_arctic_reflex"] = 1; level.has_special_breach_anim["spas12_eotech"] = 1; level.has_special_breach_anim["spas12_grip"] = 1; level.has_special_breach_anim["spas12_heartbeat"] = 1; level.has_special_breach_anim["spas12_heartbeat_attach"] = 1; level.has_special_breach_anim["spas12_reflex"] = 1; level.has_special_breach_anim["spas12_silencer"] = 1; level.has_special_breach_anim["paw20_eotech"] = 1; level.has_special_breach_anim["acr_hybrid"] = 1; level.has_special_breach_anim["acr_hybrid_silenced"] = 1; level.has_special_breach_anim["alt_acr_hybrid"] = 1; level.has_special_breach_anim["alt_acr_hybrid_silenced"] = 1; level.has_special_breach_anim["p99"] = 1; level.has_special_breach_anim["rsass"] = 1; level.has_special_breach_anim["fnfiveseven"] = 1; level.has_special_breach_anim["pp90m1"] = 1; level.has_special_breach_anim["pp90m1_acog"] = 1; level.has_special_breach_anim["pp90m1_eotech"] = 1; level.has_special_breach_anim["pp90m1_reflex"] = 1; level.has_special_breach_anim["pp90m1_silencer"] = 1; common_scripts\utility::flag_init( "breaching_on" ); common_scripts\utility::flag_init( "no_mercy" ); } check_missing_animation() { if ( !isdefined( self.animation ) ) return; if ( will_be_manhandled() && self.script_noteworthy == "manhandled" ) { var_0 = getent( self.target, "targetname" ); level.manhandled_spawners[self.export] = var_0; } var_1 = self.script_parameters; if ( isdefined( var_1 ) ) level.missing_animation_parameters[var_1] = 1; level.missing_animations[self.animation] = 1; } is_breach_anim_loop_setup( var_0, var_1, var_2 ) { if ( !isdefined( level.scr_anim["generic"][var_0] ) ) return 0; if ( !isdefined( level.scr_anim["generic"][var_0][var_1] ) ) return 0; return 1; } is_breach_anim_single_setup( var_0, var_1 ) { if ( !isdefined( level.scr_anim["generic"][var_0] ) ) return 0; return 1; } dump_missing_anims() { if ( !level.missing_animations.size ) return; var_0 = []; var_0[var_0.size] = "_survives"; var_0[var_0.size] = "_death"; var_0[var_0.size] = "_death2"; var_0[var_0.size] = "_idle"; var_0[var_0.size] = "_manhandled_guarded"; var_0[var_0.size] = "_manhandled"; var_0[var_0.size] = "_manhandled_guarded_idle"; var_0[var_0.size] = "_manhandled_idle"; var_0[var_0.size] = "_manhandled_guarded_prepare_idle"; var_0[var_0.size] = "_manhandled_prepare_idle"; var_0[var_0.size] = "_manhandled_guarded_prepare"; var_0[var_0.size] = "_manhandled_prepare"; var_1 = []; foreach ( var_7, var_3 in level.missing_animation_parameters ) { foreach ( var_5 in var_0 ) var_1[var_1.size] = var_5 + var_7; } var_0 = common_scripts\utility::array_combine( var_0, var_1 ); foreach ( var_17, var_3 in level.missing_animations ) { var_9 = 0; if ( isdefined( level.scr_stub["generic"][var_17] ) ) { if ( isarray( level.scr_stub["generic"][var_17] ) ) { foreach ( var_12, var_11 in level.scr_stub["generic"][var_17] ) { if ( !is_breach_anim_loop_setup( var_17, var_12, var_11 ) ) var_9 = 1; } } else if ( !is_breach_anim_single_setup( var_17, level.scr_stub["generic"][var_17] ) ) var_9 = 1; } foreach ( var_5 in var_0 ) { var_14 = var_17 + var_5; if ( !isdefined( level.scr_stub["generic"][var_14] ) ) continue; if ( isarray( level.scr_stub["generic"][var_14] ) ) { foreach ( var_12, var_11 in level.scr_stub["generic"][var_14] ) { if ( !is_breach_anim_loop_setup( var_14, var_12, var_11 ) ) var_9 = 1; } continue; } if ( !is_breach_anim_single_setup( var_14, level.scr_stub["generic"][var_14] ) ) var_9 = 1; } if ( var_9 ) level.missing_animations[var_17] = undefined; } level.missing_animation_parameters = undefined; level.missing_animations = undefined; } #using_animtree("generic_human"); breach_anims() { level.breach_death_anims = []; maps\_anim::addnotetrack_attach( "generic", "attach knife right", "weapon_parabolic_knife", "TAG_INHAND" ); maps\_anim::addnotetrack_detach( "generic", "detach knife right", "weapon_parabolic_knife", "TAG_INHAND", "breach_react_knife_charge" ); level.scr_stub["generic"]["takedown_room2B_soldier"] = "takedown_room2B_soldier"; level.scr_stub["generic"]["takedown_room2B_soldier_idle"][0] = "takedown_room2B_soldier_idle"; level.scr_stub["generic"]["takedown_room1Alt_soldier"] = "takedown_room1Alt_soldier"; level.scr_stub["generic"]["takedown_room1Alt_soldier_idle"][0] = "takedown_room1Alt_soldier_idle"; level.scr_stub["generic"]["takedown_room2A_soldier"] = "takedown_room2A_soldier"; level.scr_stub["generic"]["takedown_room2A_soldier_idle"][0] = "takedown_room2A_soldier_end_idle"; level.scr_stub["generic"]["takedown_room1B_soldier"] = "takedown_room1B_soldier"; level.scr_stub["generic"]["takedown_room1B_soldier_idle"][0] = "takedown_room1B_soldier_idle"; level.scr_stub["generic"]["takedown_room1A_soldier"] = "takedown_room1A_soldier"; level.scr_stub["generic"]["takedown_room1A_soldier_idle"][0] = "takedown_room1A_soldier_idle"; level.scr_stub["generic"]["hostage_chair_twitch2"] = "hostage_chair_twitch2"; level.scr_stub["generic"]["hostage_chair_twitch2_idle"][0] = "hostage_chair_idle"; level.scr_stub["generic"]["hostage_chair_twitch"] = "hostage_chair_twitch"; level.scr_stub["generic"]["hostage_chair_twitch_idle"][0] = "hostage_chair_idle"; add_slowmo_breach_custom_function( "hostage_chair_twitch2", ::_slomo_breach_c4_hostage ); add_slowmo_breach_custom_function( "hostage_chair_twitch", ::_slomo_breach_c4_hostage ); level.scr_stub["generic"]["execution_shield_soldier"] = "execution_shield_soldier"; level.scr_stub["generic"]["execution_shield_hostage"] = "execution_shield_hostage"; level.scr_stub["generic"]["execution_shield_hostage_death"] = "execution_shield_hostage_death"; level.scr_stub["generic"]["execution_shield_hostage_survives"] = "execution_shield_hostage_survives"; level.scr_stub["generic"]["execution_shield_hostage_idle"][0] = "hostage_knees_idle"; add_slowmo_breach_custom_function( "execution_shield_soldier", ::_slomo_breach_executioner_pistol ); add_slowmo_breach_custom_function( "execution_shield_hostage", ::_slomo_breach_executed_guy ); level.scr_stub["generic"]["execution_knife_soldier"] = "execution_knife_soldier"; level.scr_stub["generic"]["execution_knife_hostage"] = "execution_knife_hostage"; level.scr_stub["generic"]["execution_knife_hostage_death"] = "execution_knife_hostage_death"; level.scr_stub["generic"]["execution_knife_hostage_idle"][0] = "hostage_knees_idle"; level.scr_stub["generic"]["execution_knife_hostage_manhandled"] = "takedown_room2B_hostageA"; level.scr_stub["generic"]["execution_knife_hostage_manhandled_idle"][0] = "takedown_room2B_hostageA_idle"; add_slowmo_breach_custom_function( "execution_knife_hostage", ::_slomo_breach_executed_guy ); add_slowmo_breach_custom_function( "execution_knife_soldier", ::_slomo_breach_executioner_knife ); level.scr_stub["generic"]["execution_knife2_soldier"] = "execution_knife2_soldier"; level.scr_stub["generic"]["execution_knife2_hostage"] = "execution_knife2_hostage"; level.scr_stub["generic"]["execution_knife2_hostage_death"] = "execution_knife2_hostage_death"; level.scr_stub["generic"]["execution_knife2_hostage_idle"][0] = "hostage_stand_idle"; add_slowmo_breach_custom_function( "execution_knife2_hostage", ::_slomo_breach_executed_guy ); add_slowmo_breach_custom_function( "execution_knife2_soldier", ::_slomo_breach_executioner_knife ); level.scr_stub["generic"]["execution_onknees_soldier"] = "execution_onknees_soldier"; level.scr_stub["generic"]["execution_onknees_hostage"] = "execution_onknees_hostage"; level.scr_stub["generic"]["execution_onknees_hostage_idle"][0] = "execution_onknees_hostage_survives"; level.scr_stub["generic"]["execution_onknees_hostage_death"] = "execution_onknees_hostage_death"; level.scr_stub["generic"]["execution_onknees_hostage_manhandled_guarded"] = "takedown_room1A_hostageB"; level.scr_stub["generic"]["execution_onknees_hostage_manhandled_guarded_idle"][0] = "takedown_room1A_hostageB_idle"; add_slowmo_breach_custom_function( "execution_onknees_soldier", ::_slomo_breach_executioner_pistol ); add_slowmo_breach_custom_function( "execution_onknees_hostage", ::_slomo_breach_executed_guy ); level.scr_stub["generic"]["execution_onknees2_soldier"] = "execution_onknees2_soldier"; level.scr_stub["generic"]["execution_onknees2_hostage"] = "execution_onknees2_hostage"; level.scr_stub["generic"]["execution_onknees2_hostage_survives"] = "execution_onknees2_hostage_survives"; level.scr_stub["generic"]["execution_onknees2_hostage_death"] = "execution_onknees2_hostage_death"; level.scr_stub["generic"]["execution_onknees2_hostage_manhandled_guarded"] = "takedown_room2B_hostageB"; level.scr_stub["generic"]["execution_onknees2_hostage_manhandled_guarded_idle"][0] = "takedown_room2B_hostageB_idle"; level.scr_stub["generic"]["execution_onknees2_hostage_manhandled_guarded_prepare_idleV2"][0] = "takedown_room2A_hostageB_start_idle"; level.scr_stub["generic"]["execution_onknees2_hostage_manhandled_guardedV2"] = "takedown_room2A_hostageB"; level.scr_stub["generic"]["execution_onknees2_hostage_manhandled_guarded_idleV2"][0] = "takedown_room2A_hostageB_end_idle"; add_slowmo_breach_custom_function( "execution_onknees2_soldier", ::_slomo_breach_executioner_pistol ); add_slowmo_breach_custom_function( "execution_onknees2_hostage", ::_slomo_breach_executed_guy_pushed_to_floor ); level.scr_stub["generic"]["execution_slamwall_soldier"] = "execution_slamwall_soldier"; level.scr_stub["generic"]["execution_slamwall_hostage"] = "execution_slamwall_hostage"; level.scr_stub["generic"]["execution_slamwall_hostage_idle"][0] = "hostage_stand_idle"; level.scr_stub["generic"]["execution_slamwall_hostage_death"] = "execution_slamwall_hostage_death"; level.scr_stub["generic"]["execution_slamwall_hostage_manhandled_prepare"] = "takedown_room2A_hostageA_flee"; level.scr_stub["generic"]["execution_slamwall_hostage_manhandled_prepare_idle"][0] = "takedown_room2A_hostageA_hide_idle"; level.scr_stub["generic"]["execution_slamwall_hostage_manhandled"] = "takedown_room2A_hostageA"; level.scr_stub["generic"]["execution_slamwall_hostage_manhandled_idle"][0] = "takedown_room2A_hostageA_end_idle"; add_slowmo_breach_custom_function( "execution_slamwall_soldier", ::_slomo_breach_executioner_pistol ); add_slowmo_breach_custom_function( "execution_slamwall_hostage", ::_slomo_breach_executed_guy ); level.scr_stub["generic"]["execution_fightback_guy1_03"] = "execution_fightback_guy1_03"; level.scr_stub["generic"]["execution_fightback_guy2_03"] = "execution_fightback_guy2_03"; level.scr_stub["generic"]["execution_fightback_guy2_03_death"] = "execution_fightback_guy2_03_death"; level.scr_stub["generic"]["execution_fightback_guy2_03_survives"] = "execution_fightback_guy2_03_survives"; add_slowmo_breach_custom_function( "execution_fightback_guy1_03", ::_slomo_breach_executioner_pistol ); add_slowmo_breach_custom_function( "execution_fightback_guy2_03", ::_slomo_breach_executed_guy_pushed_to_floor ); level.scr_stub["generic"]["patrol_bored_react"] = "patrol_bored_react_walkstop"; level.scr_stub["generic"]["exposed_idle_react"] = "exposed_idle_reactA"; level.scr_stub["generic"]["chess_surprise"] = "parabolic_chessgame_surprise_b"; level.scr_stub["generic"]["breach_chair_reaction_v1"] = "breach_chair_reaction_v1"; level.scr_stub["generic"]["patrol_bored_react_walkstop"] = "patrol_bored_react_walkstop"; level.scr_stub["generic"]["exposed_idle_reactA"] = "exposed_idle_reactA"; level.scr_stub["generic"]["hostage_stand_react_front"] = "hostage_stand_react_front"; level.scr_stub["generic"]["hostage_stand_react_front_idle"][0] = "hostage_stand_idle"; level.scr_stub["generic"]["hostage_stand_react_front_manhandled"] = "takedown_room1Alt_hostage"; level.scr_stub["generic"]["hostage_stand_react_front_manhandled_idle"][0] = "takedown_room1Alt_hostage_idle"; level.scr_stub["generic"]["death_explosion_stand_B_v3"] = "death_explosion_stand_B_v3"; level.scr_stub["generic"]["breach_stackL_approach"] = "breach_stackL_approach"; level.scr_stub["generic"]["react_stand_2_run_R45"] = "react_stand_2_run_R45"; level.breach_death_anims["death_explosion_stand_B_v3"] = 1; add_slowmo_breach_custom_function( "hostage_stand_react_front", ::_slomo_breach_hostage_react ); level.scr_stub["generic"]["hostage_stand_fall"] = "hostage_stand_fall"; level.scr_stub["generic"]["hostage_stand_fall_idle"][0] = "hostage_knees_idle"; level.scr_stub["generic"]["hostage_stand_fall_idle"][1] = "hostage_knees_twitch"; level.scr_stub["generic"]["hostage_stand_fall_manhandled"] = "takedown_room1A_hostageA"; level.scr_stub["generic"]["hostage_stand_fall_manhandled_idle"][0] = "takedown_room1A_hostageA_idle"; level.scr_stub["generic"]["hostage_stand_fall_manhandledV2"] = "takedown_room1B_hostage"; level.scr_stub["generic"]["hostage_stand_fall_manhandled_idleV2"][0] = "takedown_room1B_hostage_idle"; add_slowmo_breach_custom_function( "hostage_stand_fall", ::_slomo_breach_hostage_react ); level.scr_stub["generic"]["breach_react_knife_idle"] = "breach_react_knife_idle"; level.scr_stub["generic"]["breach_react_knife_charge"] = "breach_react_knife_charge"; level.scr_stub["generic"]["breach_react_knife_charge_death"] = "death_shotgun_back_v1"; add_slowmo_breach_custom_function( "breach_react_knife_charge", ::_slomo_breach_knife_charger ); level.scr_stub["generic"]["breach_react_blowback_v1"] = "breach_react_blowback_v1"; level.scr_stub["generic"]["breach_react_blowback_v2"] = "breach_react_blowback_v1"; level.scr_stub["generic"]["breach_react_blowback_v3"] = "breach_react_blowback_v1"; level.scr_stub["generic"]["dying_crawl_back"] = "dying_crawl_back"; add_slowmo_breach_custom_function( "breach_react_blowback_v1", ::_slomo_breach_blowback_guy ); add_slowmo_breach_custom_function( "breach_react_blowback_v2", ::_slomo_breach_blowback_guy ); level.scr_stub["generic"]["breach_react_desk_v1"] = "breach_react_desk_v1"; level.scr_stub["generic"]["breach_react_desk_v2"] = "breach_react_desk_v2"; level.scr_stub["generic"]["breach_react_desk_v3"] = "breach_react_desk_v3"; level.scr_stub["generic"]["breach_react_desk_v4"] = "breach_react_desk_v4"; level.scr_stub["generic"]["breach_react_desk_v5"] = "breach_react_desk_v5"; level.scr_stub["generic"]["breach_react_desk_v6"] = "breach_react_desk_v6"; level.scr_stub["generic"]["breach_react_desk_v7"] = "breach_react_desk_v7"; add_slowmo_breach_custom_function( "breach_react_desk_v7", ::_slomo_breach_desk_guy ); level.scr_stub["generic"]["breach_react_push_guy1"] = "breach_react_push_guy1"; level.scr_stub["generic"]["breach_react_push_guy2"] = "breach_react_push_guy2"; level.scr_stub["generic"]["breach_react_guntoss_v1_guy1"] = "breach_react_guntoss_v1_guy1"; level.scr_stub["generic"]["breach_react_guntoss_v1_guy2"] = "breach_react_guntoss_v1_guy2"; level.scr_stub["generic"]["breach_react_guntoss_v2_guy1"] = "breach_react_guntoss_v2_guy1"; level.scr_stub["generic"]["breach_react_guntoss_v2_guy2"] = "breach_react_guntoss_v2_guy2"; level.scr_stub["generic"]["breach_chair_hide_reaction_v1"] = "breach_chair_hide_reaction_v1"; level.scr_stub["generic"]["breach_chair_hide_reaction_v1_death"] = "covercrouch_death_1"; level.scr_stub["generic"]["breach_chair_hide_reaction_v1_death2"] = "covercrouch_death_2"; level.scr_stub["generic"]["breach_chair_hide_reaction_v2"] = "breach_chair_hide_reaction_v2"; level.scr_stub["generic"]["breach_chair_hide_reaction_v2_death"] = "breach_chair_hide_reaction_death_v2"; add_slowmo_breach_custom_function( "breach_chair_hide_reaction_v1", ::_slomo_breach_chair_guy_normal ); add_slowmo_breach_custom_function( "breach_chair_hide_reaction_v2", ::_slomo_breach_chair_guy_animated ); level.scr_stub["generic"]["execution_fightback_guy1_02"] = "execution_fightback_guy1_02"; level.scr_stub["generic"]["execution_fightback_guy2_02"] = "execution_fightback_guy2_02"; level.scr_anim["generic"]["hostage_knees_loop"][0] = %hostage_knees_idle; level.scr_anim["generic"]["hostage_knees_loop"][1] = %hostage_knees_twitch; } friendly_animations() { level.scr_anim["generic"]["breach_friend_idle_01"][0] = %breach_flash_r1_idle; level.scr_anim["generic"]["breach_friend_enter_01"] = %breach_flash_r1_enter; level.scr_anim["generic"]["breach_friend_idle_02"][0] = %breach_flash_r2_idle; level.scr_anim["generic"]["breach_friend_enter_02"] = %breach_flash_r2_enter; } breach_fx_setup() { var_0 = self.script_fxid; var_1 = self.script_slowmo_breach; var_2 = common_scripts\utility::createexploder( var_0 ); var_2.v["origin"] = self.origin; var_2.v["angles"] = self.angles; var_2.v["fxid"] = var_0; var_2.v["delay"] = 0; var_2.v["exploder"] = "breach_" + var_1; var_2.v["soundalias"] = "nil"; } create_slowmo_breaches_from_entities() { var_0 = []; var_1 = getentarray( "breach_left_org", "targetname" ); var_2 = getentarray( "breach_right_org", "targetname" ); var_3 = getentarray( "breach_enemy_spawner", "targetname" ); var_4 = getentarray( "breach_hostage_spawner", "targetname" ); var_5 = getentarray( "breach_friendlyenemy_spawner", "targetname" ); var_6 = getentarray( "breach_friendlyhostage_spawner", "targetname" ); var_7 = getentarray( "breach_coopenemy_spawner", "targetname" ); var_8 = getentarray( "breach_coophostage_spawner", "targetname" ); var_9 = getentarray( "breach_solid", "targetname" ); var_10 = getentarray( "breach_door_volume", "targetname" ); var_11 = getentarray( "breach_safe_volume", "targetname" ); var_12 = getentarray( "trigger_use_breach", "classname" ); var_13 = getentarray( "trigger_multiple_breachIcon", "classname" ); var_14 = getentarray( "trigger_use_breach", "classname" ); var_15 = getentarray( "breach_damage_trigger", "targetname" ); level.scr_stub = undefined; foreach ( var_17 in var_1 ) { var_18 = var_17.script_slowmo_breach; var_19 = "wood"; if ( isdefined( var_17.script_slowmo_breach_doortype ) ) { switch ( var_17.script_slowmo_breach_doortype ) { case "payback_wood": case "caves_wood": case "estate_wood_backwards": case "estate_wood": case "none": case "wood": case "metal": var_19 = var_17.script_slowmo_breach_doortype; break; default: } } var_20 = spawnstruct(); var_20.left_post = var_17; var_20.doortype = var_19; var_20.spawners = []; var_20.spawners["enemy"] = []; var_20.spawners["hostage"] = []; var_20.spawners["friendlyenemy"] = []; var_20.spawners["friendlyhostage"] = []; var_20.spawners["coopenemy"] = []; var_20.spawners["coophostage"] = []; var_20.lookat_triggers = []; var_20.path_solids = []; var_20.enabled = 1; var_20.door_volume = []; var_20.room_volume = []; var_20.safe_volume = undefined; var_20.friendly_anim_ent = []; var_0[var_18] = var_20; } foreach ( var_17 in var_2 ) { var_18 = var_17.script_slowmo_breach; var_0[var_18].right_post = var_17; var_23 = spawn( "script_origin", var_17.origin ); var_23.angles = var_17.angles; var_20 = spawnstruct(); var_20.entity = var_23; var_20.yaw = -90; var_20 maps\_utility::translate_local(); var_0[var_18].friendly_anim_ent = var_23; } foreach ( var_26 in var_3 ) var_0 = var_26 breach_spawner_setup( var_0, "enemy" ); foreach ( var_26 in var_4 ) var_0 = var_26 breach_spawner_setup( var_0, "hostage" ); foreach ( var_26 in var_5 ) var_0 = var_26 breach_spawner_setup( var_0, "friendlyenemy" ); foreach ( var_26 in var_6 ) var_0 = var_26 breach_spawner_setup( var_0, "friendlyhostage" ); foreach ( var_26 in var_7 ) var_0 = var_26 breach_spawner_setup( var_0, "coopenemy" ); foreach ( var_26 in var_8 ) var_0 = var_26 breach_spawner_setup( var_0, "coophostage" ); foreach ( var_39 in var_13 ) { var_18 = var_39.script_slowmo_breach; var_0[var_18].lookat_triggers[var_0[var_18].lookat_triggers.size] = var_39; var_40 = getent( var_39.target, "targetname" ); var_39.breach_origin = var_40.origin; var_41 = getent( var_40.target, "targetname" ); var_41.breached = 0; var_0[var_18].room_volume = var_41; var_40 thread breach_icon_think( var_39, var_18, var_41 ); var_42 = var_41.script_flag; common_scripts\utility::flag_init( var_42 ); } foreach ( var_39 in var_14 ) { var_39 usetriggerrequirelookat(); var_18 = var_39.script_slowmo_breach; var_0[var_18].trigger = var_39; if ( isdefined( var_39.script_breachgroup ) ) var_39 thread breach_group_trigger_think(); } foreach ( var_47 in var_10 ) { var_18 = var_47.script_slowmo_breach; var_0[var_18].door_volume = var_47; } foreach ( var_47 in var_11 ) { var_18 = var_47.script_slowmo_breach; var_0[var_18].safe_volume = var_47; } foreach ( var_52 in var_9 ) { var_18 = var_52.script_slowmo_breach; var_0[var_18].path_solids[var_0[var_18].path_solids.size] = var_52; } foreach ( var_18, var_55 in var_0 ) level thread slowmo_breach_think( var_55, var_18 ); foreach ( var_39 in var_15 ) { var_18 = var_39.script_slowmo_breach; var_39 thread slowmo_breach_damage_trigger_think( var_18 ); } level.breach_groups = var_0; } objective_breach( var_0, var_1, var_2, var_3, var_4 ) { objective_setpointertextoverride( var_0, &"SCRIPT_WAYPOINT_BREACH" ); objective_position( var_0, ( 0, 0, 0 ) ); var_5 = []; if ( isdefined( var_1 ) ) var_5[var_5.size] = var_1; if ( isdefined( var_2 ) ) var_5[var_5.size] = var_2; if ( isdefined( var_3 ) ) var_5[var_5.size] = var_3; if ( isdefined( var_4 ) ) var_5[var_5.size] = var_4; var_6 = 0; foreach ( var_8 in var_5 ) { var_9 = level.breach_groups[var_8].left_post; if ( !isdefined( var_9 ) ) return; var_10 = anglestoright( var_9.angles ); var_11 = var_9.origin + var_10 * -22.5 + ( 0, 0, 56 ); objective_additionalposition( var_0, var_6, var_11 ); var_6++; } } assign_script_breachgroup_to_ents( var_0 ) { foreach ( var_2 in var_0 ) { var_3 = 0; foreach ( var_9, var_5 in level.breach_groups ) { foreach ( var_7 in var_5.lookat_triggers ) { if ( distance( var_2.origin, var_7.breach_origin ) > 80 ) continue; var_2.script_slowmo_breach = var_9; var_3 = 1; break; } if ( var_3 ) break; } } } get_breach_indices_from_ents( var_0 ) { var_1 = []; foreach ( var_3 in var_0 ) var_1[var_1.size] = var_3.script_slowmo_breach; return var_1; } slowmo_breach_damage_trigger_think( var_0 ) { level waittill( "breaching_number_" + var_0 ); wait 3; var_1 = getaiarray(); var_1 = maps\_utility::array_merge( var_1, level.players ); foreach ( var_3 in var_1 ) { if ( var_3 istouching( self ) ) return; } radiusdamage( self.origin, self.radius, 500, 500 ); self delete(); } icon_trigger_setup() { self.script_flag = "breach_door_icon_" + self.script_slowmo_breach; level thread maps\_trigger::trigger_looking( self ); } breach_icon_think( var_0, var_1, var_2 ) { thread breach_debug_display_animnames( var_2 ); var_3 = newhudelem(); var_3 setshader( "breach_icon", 1, 1 ); var_3.alpha = 0; var_3.color = ( 1, 1, 1 ); var_3.x = self.origin[0]; var_3.y = self.origin[1]; var_3.z = self.origin[2]; var_3 setwaypoint( 1, 1 ); var_4 = spawn( "script_model", self.origin ); var_4 setmodel( "mil_frame_charge" ); var_4 hidepart( "j_frame_charge" ); wait 0.05; var_5 = "breach_door_icon_" + var_1; common_scripts\utility::flag_wait( var_5 ); while ( !var_2.breached ) wait 0.05; var_3 destroy(); var_4 delete(); } breach_spawner_setup( var_0, var_1 ) { var_2 = self.script_slowmo_breach; var_3 = 0; if ( isdefined( self.script_slowmo_breach_spawners ) ) { if ( var_1 == "enemy" || var_1 == "hostage" ) var_3 = self.script_slowmo_breach_spawners; } if ( !isdefined( var_0[var_2].spawners[var_1][var_3] ) ) var_0[var_2].spawners[var_1][var_3] = []; var_4 = var_0[var_2].spawners[var_1][var_3]; var_4[var_4.size] = self; var_0[var_2].spawners[var_1][var_3] = var_4; if ( var_0.size ) return var_0; else return undefined; } slowmo_breach_think( var_0, var_1 ) { var_2 = var_0.left_post; var_3 = var_0.right_post; var_4 = var_0.spawners["enemy"]; var_5 = var_0.spawners["hostage"]; var_6 = var_0.trigger; var_7 = var_0.path_solids; var_8 = var_0.door_volume; var_9 = var_0.room_volume; var_10 = []; var_11 = []; var_12 = []; var_13 = []; if ( isdefined( var_0.spawners["friendlyenemy"][0] ) ) { var_10 = var_0.spawners["friendlyenemy"][0]; var_0.spawners["friendlyenemy"] = var_10; } if ( isdefined( var_0.spawners["friendlyhostage"][0] ) ) { var_11 = var_0.spawners["friendlyhostage"][0]; var_0.spawners["friendlyhostage"] = var_11; } if ( isdefined( var_0.spawners["coopenemy"][0] ) ) { var_12 = var_0.spawners["coopenemy"][0]; var_0.spawners["coopenemy"] = var_12; } if ( isdefined( var_0.spawners["coophostage"][0] ) ) { var_13 = var_0.spawners["coophostage"][0]; var_0.spawners["coophostage"] = var_13; } var_14 = spawnstruct(); var_14.entity = var_2; var_14.forward = 5; var_14.right = 6; var_14.yaw = -90; var_14 maps\_utility::translate_local(); var_14 = spawnstruct(); var_14.entity = var_3; var_14.right = -2; var_14.yaw = 90; var_14 maps\_utility::translate_local(); var_15 = []; foreach ( var_18, var_17 in var_4 ) var_15[var_18] = var_18; foreach ( var_18, var_17 in var_5 ) var_15[var_18] = var_18; if ( var_15.size ) { var_20 = common_scripts\utility::random( var_15 ); if ( isdefined( var_4[var_20] ) ) var_4 = var_4[var_20]; else var_4 = []; if ( isdefined( var_5[var_20] ) ) var_5 = var_5[var_20]; else var_5 = []; } var_0.spawners["enemy"] = var_4; var_0.spawners["hostage"] = var_5; common_scripts\utility::array_thread( var_4, maps\_utility::add_spawn_function, ::breach_enemy_spawner_think ); common_scripts\utility::array_thread( var_5, maps\_utility::add_spawn_function, ::breach_hostage_spawner_think ); common_scripts\utility::array_thread( var_10, maps\_utility::add_spawn_function, ::breach_enemy_spawner_think ); common_scripts\utility::array_thread( var_11, maps\_utility::add_spawn_function, ::breach_hostage_spawner_think ); common_scripts\utility::array_thread( var_12, maps\_utility::add_spawn_function, ::breach_enemy_spawner_think ); common_scripts\utility::array_thread( var_13, maps\_utility::add_spawn_function, ::breach_hostage_spawner_think ); var_6 sethintstring( &"SCRIPT_PLATFORM_BREACH_ACTIVATE" ); if ( !isdefined( level.breach_use_triggers ) ) level.breach_use_triggers = []; level.breach_use_triggers = common_scripts\utility::array_add( level.breach_use_triggers, var_6 ); var_21 = "breach_door_charge"; var_22 = undefined; switch ( var_0.doortype ) { case "metal": var_22 = "breach_door_model_metal"; break; case "estate_wood": var_22 = "breach_door_model_estate"; break; case "estate_wood_backwards": var_22 = "breach_door_model_estate"; break; case "caves_wood": var_22 = "breach_door_model_caves"; break; case "payback_wood": var_22 = "breach_door_model_payback"; var_21 = "breach_door_charge_payback"; break; case "none": case "wood": var_22 = "breach_door_model"; break; default: break; } var_23 = maps\_utility::spawn_anim_model( var_22 ); if ( var_0.doortype == "none" || var_0.doortype == "estate_wood_backwards" ) var_23 hide(); level.breach_doors = []; level.breach_doors[var_1] = var_23; var_24 = maps\_utility::spawn_anim_model( var_21 ); var_24 maps\_utility::hide_notsolid(); var_2.scene_models = []; var_2 add_scene_model( "active_breacher_rig" ); var_25 = var_2.scene_models["active_breacher_rig"]; var_25 hide(); var_26 = undefined; if ( maps\_utility::is_coop() ) { var_2 add_coop_scene_models(); var_26 = var_2.scene_models["passive_breacher_rig"]; var_26 hide(); } var_2.door = var_23; var_2.charge = var_24; var_2.post = var_3; var_2.breach_index = var_1; var_2 maps\_anim::anim_first_frame_solo( var_23, "breach" ); var_2 maps\_anim::anim_first_frame_solo( var_24, "breach" ); var_2 maps\_anim::anim_first_frame_solo( var_25, "breach_player_anim" ); if ( maps\_utility::is_coop() ) var_2 maps\_anim::anim_first_frame_solo( var_26, "breach_player_anim" ); var_2 wait_for_breach_or_deletion( var_0 ); foreach ( var_28 in var_2.scene_models ) var_28 delete(); if ( isdefined( var_6 ) ) var_6 delete(); if ( isdefined( var_23 ) ) var_23 delete(); if ( isdefined( var_24 ) ) var_24 delete(); if ( isdefined( var_2 ) ) var_2 delete(); if ( isdefined( var_3 ) ) var_3 delete(); } breach_should_be_skipped( var_0 ) { if ( !isdefined( level.skip_breach ) ) return 0; if ( !isdefined( level.skip_breach[var_0] ) ) return 0; return 1; } coop_player_touching_valid_door_volume( var_0, var_1 ) { var_2 = []; var_2[0] = var_0; if ( isdefined( var_0.script_breachgroup ) ) var_2 = get_door_volumes_from_breachgroup( var_0.script_breachgroup ); foreach ( var_4 in var_2 ) { if ( var_1 istouching( var_4 ) ) return 1; } return 0; } get_door_volumes_from_breachgroup( var_0 ) { var_1 = []; var_2 = getentarray( "breach_door_volume", "targetname" ); foreach ( var_4 in var_2 ) { if ( isdefined( var_4.script_breachgroup ) && var_4.script_breachgroup == var_0 ) var_1[var_1.size] = var_4; } return var_1; } breach_participants_ready_to_proceed( var_0, var_1, var_2 ) { if ( maps\_utility::is_coop() ) { var_3 = maps\_utility::get_other_player( var_0 ); if ( var_3 maps\_utility::ent_flag_exist( "laststand_downed" ) && var_3 maps\_utility::ent_flag( "laststand_downed" ) ) return 0; if ( coop_player_touching_valid_door_volume( var_2, var_3 ) ) return 1; else return 0; } if ( var_1.size == 0 ) return 1; if ( !room_has_multiple_doors( var_2 ) ) return 1; if ( !breach_friendlies_ready_at_other_door( var_2, 1 ) ) { if ( getdvar( "breach_requires_friendlies_in_position" ) == "1" ) { if ( !breachfriendlies_can_teleport( var_1, var_2 ) ) return 0; } } return 1; } wait_for_breach_or_deletion( var_0 ) { var_1 = var_0.trigger; if ( !isdefined( var_1 ) ) return; var_2 = var_0.door_volume; var_1 endon( "death" ); for (;;) { var_1 waittill( "trigger", var_3, var_4 ); if ( gettime() == level.breach_passive_time ) var_4 = level.breach_passive_player; var_5 = isdefined( var_4 ); if ( !var_0.enabled ) return; if ( isalive( var_3 ) && !var_5 ) { if ( breach_failed_to_start() ) continue; } if ( isdefined( var_0.safe_volume ) && !maps\_utility::is_specialop() ) { if ( isplayer( var_3 ) && isalive( var_3 ) ) { var_6 = var_0.safe_volume maps\_utility::get_ai_touching_volume( "axis" ); if ( var_6.size ) { thread breach_too_many_enemies_hint(); continue; } } } var_7 = get_available_breachfriendlies( var_2 ); if ( isplayer( var_3 ) && isalive( var_3 ) ) { if ( breach_should_be_skipped( var_1.script_slowmo_breach ) ) break; if ( breach_participants_ready_to_proceed( var_3, var_7, var_2 ) ) { if ( player_breach( var_0, var_3 ) ) break; } else thread breach_friendly_hint(); continue; } if ( var_7.size ) { friendlies_breach( var_0, var_7 ); break; } else { breachless_door_opens( var_0 ); break; } } } breachfriendlies_can_teleport( var_0, var_1 ) { var_2 = 0; var_3 = get_player_volume( var_1 ); foreach ( var_5 in var_0 ) { if ( isdefined( var_3 ) ) { if ( var_5 goalpos_within_volume( var_3 ) ) continue; } if ( !var_5 friendly_can_teleport() ) continue; var_2++; } if ( var_2 >= 2 ) return 1; return 0; } friendly_can_teleport() { if ( maps\_utility::player_can_see_ai( self ) ) return 0; if ( distance( level.player.origin, self.origin ) < 96 ) return 0; return 1; } breach_friendly_hint() { if ( maps\_utility::is_coop() ) thread breach_hint_create( &"SCRIPT_BREACH_NEED_PLAYER" ); else thread breach_hint_create( &"SCRIPT_BREACH_NEED_FRIENDLY" ); } breach_too_many_enemies_hint() { thread breach_hint_create( &"SCRIPT_BREACH_TOO_MANY_ENEMIES" ); } breach_reloading_hint() { thread breach_hint_create( &"SCRIPT_BREACH_RELOADING" ); } breach_bad_weapon_hint() { thread breach_hint_create( &"SCRIPT_BREACH_ILLEGAL_WEAPON" ); } breach_not_ready_hint() { if ( maps\_utility::is_coop() ) { thread breach_hint_create( &"SCRIPT_BREACH_PARTNER_NOT_READY" ); return; } thread breach_hint_create( &"SCRIPT_BREACH_YOU_NOT_READY" ); } breach_hint_create( var_0 ) { level notify( "breach_hint_cleanup" ); level endon( "breach_hint_cleanup" ); var_1 = 20; if ( issplitscreen() ) var_1 = -23; thread maps\_utility::hint( var_0, 3, var_1 ); thread breach_hint_cleanup(); } breach_hint_cleanup() { level notify( "breach_hint_cleanup" ); level endon( "breach_hint_cleanup" ); foreach ( var_1 in level.breach_use_triggers ) { if ( isdefined( var_1 ) ) var_1 sethintstring( "" ); } level common_scripts\utility::waittill_notify_or_timeout( "breaching", 3 ); maps\_utility::hint_fade(); foreach ( var_1 in level.breach_use_triggers ) { if ( isdefined( var_1 ) ) var_1 sethintstring( &"SCRIPT_PLATFORM_BREACH_ACTIVATE" ); } } room_has_multiple_doors( var_0 ) { if ( isdefined( var_0.script_breachgroup ) ) return 1; return 0; } breach_friendlies_take_grenades() { if ( !isdefined( level.breachfriendlies ) ) return; level.breachfriendlies_grenades_empty = 1; foreach ( var_1 in level.breachfriendlies ) { var_1.grenadeammo_prebreach = var_1.grenadeammo; var_1.grenadeammo = 0; } } breach_friendlies_restore_grenades() { if ( !isdefined( level.breachfriendlies ) ) return; if ( !isdefined( level.breachfriendlies_grenades_empty ) ) return; foreach ( var_1 in level.breachfriendlies ) { var_1.grenadeammo = var_1.grenadeammo_prebreach; var_1.grenadeammo_prebreach = undefined; } level.breachfriendlies_grenades_empty = undefined; } breach_friendlies_ready_at_other_door( var_0, var_1 ) { var_2 = var_0.script_breachgroup; var_3 = get_door_volumes_from_breachgroup( var_0.script_breachgroup ); var_3 = common_scripts\utility::array_remove( var_3, var_0 ); var_4 = var_3[0]; foreach ( var_6 in level.breachfriendlies ) { if ( isdefined( var_1 ) && var_1 ) { if ( var_6 goalpos_within_volume( var_4 ) ) { if ( var_6 friendly_can_teleport() ) return 1; } } if ( var_6 istouching( var_4 ) ) return 1; } return 0; } add_coop_scene_models() { add_scene_model( "passive_breacher_rig" ); add_scene_model( "active_breacher_3rd_person" ); add_scene_model( "passive_breacher_3rd_person" ); } add_scene_model( var_0 ) { self.scene_models[var_0] = maps\_utility::spawn_anim_model( var_0 ); self.scene_models[var_0] hide(); } set_room_to_breached( var_0, var_1 ) { var_1.breached = 1; var_2 = get_breach_notify( var_0.script_breachgroup ); if ( isdefined( var_0.script_breachgroup ) ) level notify( var_2 ); var_1 notify( "breached" ); var_0 common_scripts\utility::trigger_off(); } breachless_door_opens( var_0 ) { var_1 = var_0.trigger; var_2 = var_0.room_volume; var_3 = var_0.path_solids; var_4 = self.door; var_5 = self.charge; set_room_to_breached( var_1, var_2 ); common_scripts\utility::array_call( var_3, ::connectpaths ); common_scripts\utility::array_thread( var_3, maps\_utility::self_delete ); var_6 = spawnstruct(); var_6.entity = var_4; var_6.forward = 4; var_6.right = 10; var_6.yaw = -170; var_6 maps\_utility::translate_local(); var_5 delete(); if ( !maps\_utility::is_coop() ) return; while ( !var_2.breached ) wait 0.05; var_7 = undefined; var_8 = undefined; if ( var_0.spawners["coopenemy"].size ) { var_7 = var_0.spawners["coopenemy"]; var_8 = var_0.spawners["coophostage"]; } else { var_7 = var_0.spawners["enemy"]; var_8 = var_0.spawners["hostage"]; } if ( var_7.size ) common_scripts\utility::array_call( var_7, ::stalingradspawn ); if ( var_8.size ) common_scripts\utility::array_call( var_8, ::stalingradspawn ); } friendlies_breach( var_0, var_1 ) { var_2 = var_0.trigger; var_3 = var_0.door_volume; var_4 = var_0.room_volume; var_5 = var_0.spawners["enemy"]; var_6 = var_0.spawners["hostage"]; var_7 = var_0.spawners["friendlyenemy"]; var_8 = var_0.spawners["friendlyhostage"]; var_9 = var_0.path_solids; var_10 = self.charge; var_11 = self.scene_models["active_breacher_rig"]; set_room_to_breached( var_2, var_4 ); var_12 = var_0.friendly_anim_ent; var_13 = get_player_volume( var_3 ); var_14 = getdvar( "breach_requires_friendlies_in_position" ) == "1"; if ( !var_14 ) { if ( isdefined( var_13 ) && breach_friendlies_ready_at_other_door( var_13 ) ) { foreach ( var_16 in var_1 ) { if ( !var_16 istouching( var_3 ) ) var_1 = common_scripts\utility::array_remove( var_1, var_16 ); } var_14 = 1; } } if ( var_14 ) var_18 = common_scripts\utility::getclosest( var_12.origin, var_1 ); else var_18 = get_teleport_optimized_breachfriendly( var_12.origin, var_3, var_1, var_13 ); var_1 = common_scripts\utility::array_remove( var_1, var_18 ); if ( var_7.size ) level.breachenemies = maps\_utility::array_spawn( var_7, 1 ); if ( var_8.size ) common_scripts\utility::array_call( var_8, ::stalingradspawn ); common_scripts\utility::array_call( var_9, ::connectpaths ); common_scripts\utility::array_thread( var_9, maps\_utility::self_delete ); var_18 thread friendly_breach( 1, var_12, var_4 ); if ( var_1.size ) { if ( var_14 ) var_19 = common_scripts\utility::getclosest( var_12.origin, var_1 ); else var_19 = get_teleport_optimized_breachfriendly( var_12.origin, var_3, var_1, var_13 ); if ( isdefined( var_19 ) ) var_19 thread friendly_breach( 2, var_12, var_4 ); else { } } wait 1; breach_friendlies_take_grenades(); maps\_anim::anim_single_solo( var_11, "breach_player_anim" ); } get_player_volume( var_0 ) { var_1 = undefined; var_2 = get_grouped_doorvolumes( var_0 ); foreach ( var_4 in var_2 ) { if ( level.player istouching( var_4 ) ) { var_1 = var_4; break; } } return var_1; } get_teleport_optimized_breachfriendly( var_0, var_1, var_2, var_3 ) { var_4 = []; foreach ( var_6 in var_2 ) { if ( isdefined( var_3 ) ) { if ( var_6 goalpos_within_volume( var_3 ) ) continue; } if ( !var_6 friendly_can_teleport() ) continue; var_4[var_4.size] = var_6; } if ( !var_4.size ) return undefined; var_4 = common_scripts\utility::get_array_of_closest( var_0, var_4 ); var_8 = var_4[0]; foreach ( var_6 in var_4 ) { if ( var_6 goalpos_within_volume( var_1 ) ) { var_8 = var_6; break; } } return var_8; } goalpos_within_volume( var_0 ) { if ( isdefined( self.goalpos ) ) { if ( origin_within_volume( self.goalpos + ( 0, 0, 40 ), var_0 ) ) return 1; } return 0; } origin_within_volume( var_0, var_1 ) { var_2 = spawn( "script_origin", var_0 ); var_3 = 0; if ( var_2 istouching( var_1 ) ) var_3 = 1; var_2 delete(); return var_3; } get_grouped_doorvolumes( var_0 ) { var_1 = []; var_1[0] = var_0; if ( isdefined( var_0.script_breachgroup ) ) { foreach ( var_3 in level.breach_groups ) { if ( !isdefined( var_3.door_volume ) ) continue; if ( var_3.door_volume == var_0 ) continue; if ( !isdefined( var_3.door_volume.script_breachgroup ) ) continue; if ( isdefined( var_3.door_volume.script_breachgroup ) && var_3.door_volume.script_breachgroup == var_0.script_breachgroup ) var_1[var_1.size] = var_3.door_volume; } } return var_1; } sort_breachers( var_0, var_1 ) { var_2 = var_1["active"]; var_3 = anglestoright( self.angles ); var_4 = vectornormalize( var_2.origin - var_0.trigger.origin ); var_5 = vectordot( var_3, var_4 ); if ( var_5 < 0 ) { var_1["active"] = var_1["passive"]; var_1["passive"] = var_2; } return var_1; } player_breach( var_0, var_1 ) { var_2 = []; var_2["active"] = var_1; var_3 = self.scene_models["active_breacher_rig"]; var_4 = 0; var_5 = undefined; if ( maps\_utility::is_coop() ) { var_2["passive"] = maps\_utility::get_other_player( var_2["active"] ); var_5 = self.scene_models["passive_breacher_rig"]; var_6 = breach_near_player( var_2["passive"] ); if ( var_6 == var_0 ) { var_4 = 1; var_6.room_volume.has_passive_breacher = 1; var_2 = sort_breachers( var_0, var_2 ); } else { level.breach_passive_player = var_2["passive"]; level.breach_passive_time = gettime(); var_6.trigger notify( "trigger", var_2["passive"], "passive" ); } } var_2["active"] enablebreaching(); if ( var_4 ) var_2["passive"] disableweapons(); foreach ( var_1 in var_2 ) { if ( !isdefined( level.slowmo_breach_disable_stancemod ) ) { var_1 enableinvulnerability(); var_1 disableweaponswitch(); var_1 disableoffhandweapons(); var_1 allowcrouch( 0 ); var_1 allowprone( 0 ); var_1 allowsprint( 0 ); var_1 allowjump( 0 ); } var_1 common_scripts\utility::_disableusability(); if ( !isdefined( var_1.prebreachcurrentweapon ) ) var_1.prebreachcurrentweapon = var_1 getcurrentweapon(); } level notify( "breaching" ); level notify( "breaching_number_" + self.script_slowmo_breach ); setsaveddvar( "objectiveHide", 1 ); var_9 = var_0.room_volume; set_room_to_breached( var_0.trigger, var_9 ); var_10 = undefined; var_11 = isdefined( level.has_special_breach_anim[var_2["active"].prebreachcurrentweapon] ); if ( var_11 ) { level.slowmo_breach_start_delay = 2.25; set_door_charge_anim_special(); var_10 = 0.5; } else { level.slowmo_breach_start_delay = 2.15; set_door_charge_anim_normal(); var_10 = 0.2; } var_2["active"] thread play_detpack_plant_sound( var_10 ); if ( maps\_utility::is_coop() ) { if ( !isdefined( level.player_one_already_breached ) ) { level.breachenemies_alive = 0; level.breachenemies_active = 0; level.player_one_already_breached = 1; } } else { level.breachenemies_alive = 0; level.breachenemies_active = 0; } var_12 = var_0.spawners["enemy"]; common_scripts\utility::array_call( var_12, ::stalingradspawn ); var_13 = var_0.spawners["hostage"]; common_scripts\utility::array_call( var_13, ::stalingradspawn ); var_2["active"] playerlinktoblend( var_3, "tag_player", 0.2, 0.1, 0.1 ); if ( isdefined( var_2["active"].dont_unlink_after_breach ) ) thread maps\_utility::open_up_fov( 0.2, var_3, "tag_player", 45, 45, 90, 45 ); if ( var_4 ) { var_2["passive"] playerlinktoblend( var_5, "tag_player", 0.2, 0.1, 0.1 ); if ( isdefined( var_2["passive"].dont_unlink_after_breach ) ) thread maps\_utility::open_up_fov( 0.2, var_5, "tag_player", 45, 45, 90, 45 ); } var_2["active"] thread take_prebreach_weapons(); if ( !var_11 ) wait 0.05; var_14 = self.charge; thread maps\_anim::anim_single_solo( var_14, "breach" ); var_14 show(); var_2["active"] thread restore_prebreach_weapons(); var_15 = 0; if ( var_4 ) { thread maps\_anim::anim_single_solo( var_5, "breach_player_anim" ); var_2["passive"].animname = "passive_breacher_3rd_person"; var_2["passive"] thread maps\_anim::anim_single_solo( var_2["passive"], "breach_player_anim" ); var_2["passive"] thread enable_passive_weapons(); var_2["passive"] thread restore_prebreach_weapons(); var_2["active"].animname = "active_breacher_3rd_person"; var_2["active"] thread maps\_anim::anim_single_solo( var_2["active"], "breach_player_anim" ); } maps\_anim::anim_single_solo( var_3, "breach_player_anim" ); level notify( "sp_slowmo_breachanim_done" ); thread flag_set_when_room_cleared( var_9 ); var_16 = var_0.path_solids; common_scripts\utility::array_call( var_16, ::connectpaths ); common_scripts\utility::array_thread( var_16, maps\_utility::self_delete ); foreach ( var_1 in var_2 ) { if ( isdefined( var_1.dont_unlink_after_breach ) ) { var_15 = 1; special_gulag_adjustment(); } else var_1 unlink(); var_1 show(); } if ( var_15 ) level waittill( "breach_concludes" ); var_2["active"] disablebreaching(); foreach ( var_1 in var_2 ) { if ( !isdefined( level.slowmo_breach_disable_stancemod ) ) { var_1 disableinvulnerability(); var_1 enableweaponswitch(); var_1 enableoffhandweapons(); var_1 allowcrouch( 1 ); var_1 allowprone( 1 ); var_1 allowsprint( 1 ); var_1 allowjump( 1 ); } var_1 common_scripts\utility::_enableusability(); } return 1; } play_detpack_plant_sound( var_0 ) { self endon( "death" ); wait( var_0 ); self playsound( "detpack_wall_plant" ); } flag_set_when_room_cleared( var_0 ) { var_1 = var_0.script_flag; level endon( var_1 ); var_2 = var_0 maps\_utility::get_ai_touching_volume( "bad_guys" ); maps\_utility::waittill_dead( var_2 ); level notify( "breach_room_has_been_cleared" ); level.breachenemies = undefined; common_scripts\utility::flag_set( var_1 ); } take_prebreach_weapons() { self giveweapon( "usp_scripted" ); self switchtoweaponimmediate( "usp_scripted" ); if ( isdefined( level.has_special_breach_anim[self.prebreachcurrentweapon] ) ) self switchtoweaponimmediate( self.prebreachcurrentweapon ); } restore_prebreach_weapons() { wait 0.5; self takeweapon( "usp_scripted" ); if ( isdefined( self.prebreachcurrentweapon ) ) { var_0 = self.prebreachcurrentweapon; self switchtoweapon( var_0 ); if ( should_topoff_breach_weapon( var_0 ) ) { var_1 = weaponclipsize( var_0 ); if ( self getweaponammoclip( var_0 ) < var_1 ) self setweaponammoclip( var_0, var_1 ); } self.prebreachcurrentweapon = undefined; } } enable_passive_weapons() { wait 2.2; self enableweapons(); } should_topoff_breach_weapon( var_0 ) { if ( level.gameskill > 1 ) return 0; if ( isdefined( level.breach_no_auto_reload ) ) return !level.breach_no_auto_reload; if ( !isdefined( self.prebreachcurrentweapon ) ) return 0; if ( var_0 != self.prebreachcurrentweapon ) return 0; return 1; } friendly_breach( var_0, var_1, var_2 ) { var_3 = var_2.script_flag; if ( var_0 == 2 ) { var_4 = "breach_friend_idle_02"; var_5 = "breach_friend_enter_02"; } else { var_4 = "breach_friend_idle_01"; var_5 = "breach_friend_enter_01"; } self.breaching = 1; var_6 = 1; if ( !isdefined( self.magic_bullet_shield ) ) { var_6 = 0; thread maps\_utility::magic_bullet_shield(); } wait 0.5; self forceteleport( var_1.origin, var_1.angles ); var_1 thread maps\_anim::anim_generic_loop( self, var_4, "stop_idle" ); self setgoalpos( self.origin ); wait 3; thread friendlies_shoot_while_breaching( var_0 ); var_1 notify( "stop_idle" ); var_1 maps\_anim::anim_generic( self, var_5 ); self setgoalpos( self.origin ); level notify( "friendlies_finished_breach" ); common_scripts\utility::flag_wait( var_3 ); if ( !var_6 ) maps\_utility::stop_magic_bullet_shield(); self.breaching = undefined; } friendlies_shoot_while_breaching( var_0 ) { if ( var_0 == 1 ) wait 1; else wait 2; level endon( "friendlies_finished_breach" ); level endon( "breach_room_has_been_cleared" ); while ( !isdefined( level.breachenemies ) ) wait 0.05; while ( isdefined( level.breachenemies ) && level.breachenemies.size ) { wait 0.05; if ( !isdefined( level.breachenemies ) ) break; level.breachenemies = maps\_utility::remove_dead_from_array( level.breachenemies ); foreach ( var_2 in level.breachenemies ) { if ( !isalive( var_2 ) || !isdefined( var_2 ) ) continue; var_3 = var_2 gettagorigin( "tag_eye" ); var_4 = self getmuzzlepos(); var_5 = self getshootatpos() - var_4; if ( self canshoot( var_3, var_5 ) ) { magicbullet( self.weapon, self getmuzzlepos(), var_3 ); bullettracer( self getmuzzlepos(), var_3, 1 ); wait 0.5; } } } } get_available_breachfriendlies( var_0 ) { var_1 = []; if ( !isdefined( level.breachfriendlies ) ) return var_1; var_1 = maps\_utility::array_removedead( level.breachfriendlies ); var_2 = getdvar( "breach_requires_friendlies_in_position" ) == "1"; foreach ( var_4 in var_1 ) { if ( isdefined( var_4.breaching ) && var_4.breaching == 1 ) { var_1 = common_scripts\utility::array_remove( var_1, var_4 ); continue; } if ( var_2 && !var_4 istouching( var_0 ) ) { var_1 = common_scripts\utility::array_remove( var_1, var_4 ); continue; } } return var_1; } get_breach_notify( var_0 ) { if ( !isdefined( var_0 ) ) var_0 = "none"; return "A door in breach group " + var_0 + " has been activated."; } breach_group_trigger_think() { var_0 = self.script_breachgroup; var_1 = get_breach_notify( var_0 ); level waittill( var_1 ); waittillframeend; self notify( "trigger" ); } slowmo_player_cleanup() { if ( isdefined( level.playerspeed ) ) self setmovespeedscale( level.playerspeed ); else self setmovespeedscale( 1 ); } slowmo_begins( var_0 ) { if ( isdefined( level.breaching ) && level.breaching == 1 ) return; level.breaching = 1; common_scripts\utility::flag_set( "breaching_on" ); level notify( "slowmo_go" ); level endon( "slowmo_go" ); var_1 = 0.5; var_2 = 0.75; var_3 = 0.2; if ( isdefined( level.slomobreachplayerspeed ) ) var_3 = level.slomobreachplayerspeed; var_4 = level.player; var_5 = undefined; if ( maps\_utility::is_coop() ) var_5 = maps\_utility::get_other_player( var_4 ); var_4 thread maps\_utility::play_sound_on_entity( "slomo_whoosh_in" ); var_4 thread player_heartbeat(); thread slomo_breach_vision_change( var_1 * 2, var_2 / 2 ); thread slomo_difficulty_dvars(); common_scripts\utility::flag_clear( "can_save" ); maps\_utility::slowmo_start(); var_4 thread set_breaching_variable(); if ( isdefined( var_5 ) ) var_5 thread set_breaching_variable(); var_4 allowmelee( 0 ); if ( isdefined( var_5 ) ) var_5 allowmelee( 0 ); maps\_utility::slowmo_setspeed_slow( 0.25 ); maps\_utility::slowmo_setlerptime_in( var_1 ); maps\_utility::slowmo_lerp_in(); var_4 setmovespeedscale( var_3 ); if ( isdefined( var_5 ) ) var_5 setmovespeedscale( var_3 ); var_6 = gettime(); var_7 = var_6 + level.slomobreachduration * 1000; if ( !maps\_utility::is_coop() ) var_4 thread catch_weapon_switch(); var_4 thread catch_mission_failed(); if ( isdefined( var_5 ) ) var_5 thread catch_mission_failed(); var_8 = 500; var_9 = 1000; for (;;) { if ( isdefined( level.forced_slowmo_breach_slowdown ) ) { if ( !level.forced_slowmo_breach_slowdown ) { if ( isdefined( level.forced_slowmo_breach_lerpout ) ) var_2 = level.forced_slowmo_breach_lerpout; break; } wait 0.05; continue; } if ( gettime() >= var_7 ) break; if ( level.breachenemies_active <= 0 && level.breachignoreenemy_count == 0 ) { var_2 = 1.15; break; } if ( !maps\_utility::is_coop() ) { if ( var_4.lastreloadstarttime >= var_6 + var_8 ) break; if ( var_4.switchedweapons && gettime() - var_6 > var_9 ) break; } if ( maps\_utility::is_specialop() && common_scripts\utility::flag( "special_op_terminated" ) ) break; if ( var_4.breach_missionfailed || maps\_utility::is_coop() && var_5.breach_missionfailed ) { var_2 = 0.5; break; } wait 0.05; } level notify( "slowmo_breach_ending", var_2 ); level notify( "stop_player_heartbeat" ); var_4 thread maps\_utility::play_sound_on_entity( "slomo_whoosh_out" ); maps\_utility::slowmo_setlerptime_out( var_2 ); maps\_utility::slowmo_lerp_out(); var_4 allowmelee( 1 ); if ( isdefined( var_5 ) ) var_5 allowmelee( 1 ); var_4 maps\_utility::delaythread( var_2, ::clear_breaching_variable ); if ( isdefined( var_5 ) ) var_5 maps\_utility::delaythread( var_2, ::clear_breaching_variable ); maps\_utility::slowmo_end(); common_scripts\utility::flag_set( "can_save" ); level.player_one_already_breached = undefined; var_4 slowmo_player_cleanup(); if ( isdefined( var_5 ) ) var_5 slowmo_player_cleanup(); level notify( "slomo_breach_over" ); level.breaching = 0; common_scripts\utility::flag_clear( "breaching_on" ); setsaveddvar( "objectiveHide", 0 ); } set_breaching_variable() { self endon( "clear_breaching_variable" ); self.isbreaching = 1; self.breaching_shots_fired = 0; self.achieve_slowmo_breach_kills = undefined; var_0 = self getcurrentweaponclipammo(); self notifyonplayercommand( "player_shot_fired", "+attack" ); self notifyonplayercommand( "player_shot_fired", "+attack_akimbo_accessible" ); while ( isdefined( self.isbreaching ) ) { self waittill( "player_shot_fired" ); self.breaching_shots_fired = var_0 - self getcurrentweaponclipammo(); wait 0.05; while ( self isfiring() ) { self.breaching_shots_fired = var_0 - self getcurrentweaponclipammo(); wait 0.05; } } } clear_breaching_variable() { self.isbreaching = undefined; thread maps\_utility::notify_delay( "clear_breaching_variable", 0.25 ); } slomo_difficulty_dvars() { var_0 = getdvar( "bg_viewKickScale" ); var_1 = getdvar( "bg_viewKickMax" ); setsaveddvar( "bg_viewKickScale", 0.3 ); setsaveddvar( "bg_viewKickMax", "15" ); setsaveddvar( "bullet_penetration_damage", 0 ); level waittill( "slowmo_breach_ending" ); setsaveddvar( "bg_viewKickScale", var_0 ); setsaveddvar( "bg_viewKickMax", var_1 ); wait 2; setsaveddvar( "bullet_penetration_damage", 1 ); } slomo_breach_vision_change( var_0, var_1 ) { if ( !isdefined( level.slomobasevision ) ) return; visionsetnaked( "slomo_breach", var_0 ); level waittill( "slowmo_breach_ending", var_2 ); if ( isdefined( var_2 ) ) var_1 = var_2; wait 1; visionsetnaked( level.slomobasevision, var_1 ); } player_heartbeat() { level endon( "stop_player_heartbeat" ); for (;;) { self playlocalsound( "breathing_heartbeat" ); wait 0.5; } } catch_weapon_switch() { level endon( "slowmo_breach_ending" ); self.switchedweapons = 0; common_scripts\utility::waittill_any( "weapon_switch_started", "night_vision_on", "night_vision_off" ); self.switchedweapons = 1; } catch_mission_failed() { level endon( "slowmo_breach_ending" ); self.breach_missionfailed = 0; level waittill( "mission failed" ); self.breach_missionfailed = 1; } breach_enemy_spawner_think() { var_0 = self.spawner; self endon( "death" ); maps\_utility::add_damage_function( ::record_last_player_damage ); thread breach_enemy_ignored_by_friendlies(); thread breach_enemy_ragdoll_on_death(); level thread breach_enemy_track_status( self ); if ( isdefined( self.script_parameters ) && common_scripts\utility::string_starts_with( self.script_parameters, "reference" ) ) var_0 = getent( self.script_parameters, "targetname" ); self.reference = var_0; var_0 maps\_anim::anim_generic_first_frame( self, self.animation ); if ( isdefined( level._slowmo_functions[self.animation] ) ) { var_1 = level._slowmo_functions[self.animation]; self thread [[ var_1 ]](); } self.grenadeammo = 0; self.allowdeath = 1; self.health = 10; self.baseaccuracy = 5000; if ( isdefined( self.script_threatbias ) ) self.threatbias = self.script_threatbias; if ( isdefined( level.breach_death_anims[self.animation] ) ) self.skipdeathanim = 1; wait( level.slowmo_breach_start_delay ); maps\_utility::script_delay(); self notify( "starting_breach_reaction" ); level notify( "breach_enemy_anims" ); var_0 maps\_anim::anim_generic_gravity( self, self.animation ); self notify( "finished_breach_start_anim" ); } record_last_player_damage( var_0, var_1, var_2, var_3, var_4, var_5, var_6 ) { if ( !isalive( var_1 ) ) return; if ( !isplayer( var_1 ) ) return; if ( !self isbadguy() ) return; level.last_player_damage = gettime(); } breach_enemy_ignored_by_friendlies() { self endon( "death" ); if ( !common_scripts\utility::flag( "no_mercy" ) ) self.ignoreme = 1; level common_scripts\utility::waittill_either( "slomo_breach_over", "friendlies_finished_breach" ); if ( isdefined( self ) ) self.ignoreme = 0; } breach_enemy_ragdoll_on_death() { self endon( "breach_enemy_cancel_ragdoll_death" ); self.ragdoll_immediate = 1; var_0 = common_scripts\utility::waittill_any_return( "death", "finished_breach_start_anim" ); if ( var_0 == "finished_breach_start_anim" ) self.ragdoll_immediate = undefined; } breach_enemy_cancel_ragdoll() { self notify( "breach_enemy_cancel_ragdoll_death" ); self.ragdoll_immediate = undefined; } breach_enemy_track_status( var_0 ) { level.breachenemies_active++; var_1 = spawnstruct(); var_1.enemy = var_0; var_1 thread breach_enemy_waitfor_death( var_0 ); var_1 thread breach_enemy_waitfor_death_counter( var_0 ); var_1 thread breach_enemy_catch_exceptions( var_0 ); var_1 thread breach_enemy_waitfor_breach_ending(); var_1 waittill( "breach_status_change", var_2 ); level.breachenemies_active--; var_1 = undefined; } breach_enemy_waitfor_death( var_0 ) { self endon( "breach_status_change" ); var_0 waittill( "death" ); self notify( "breach_status_change", "death" ); } breach_enemy_waitfor_death_counter( var_0 ) { level.breachenemies_alive++; var_0 waittill( "death" ); level.breachenemies_alive--; if ( level.breachenemies_alive <= 0 ) breach_friendlies_restore_grenades(); level notify( "breach_all_enemies_dead" ); } breach_enemy_catch_exceptions( var_0 ) { self endon( "breach_status_change" ); while ( isalive( var_0 ) ) wait 0.05; self notify( "breach_status_change", "exception" ); } breach_enemy_waitfor_breach_ending() { self endon( "breach_status_change" ); level waittill( "slowmo_breach_ending" ); self notify( "breach_status_change", "breach_ending" ); } breach_hostage_spawner_think() { self endon( "death" ); self.breachfinished = 0; var_0 = self.spawner; self.reference = var_0; self endon( "cancel_breach_behavior" ); thread hostage_mission_fail(); maps\_anim::anim_generic_first_frame( self, self.animation ); self.health = 10; self.no_friendly_fire_penalty = 1; self.ignorerandombulletdamage = 1; wait( level.slowmo_breach_start_delay ); if ( isdefined( level._slowmo_functions[self.animation] ) ) { var_1 = level._slowmo_functions[self.animation]; self thread [[ var_1 ]](); } self.allowdeath = 1; var_0 maps\_anim::anim_generic( self, self.animation ); self notify( "finished_breach_start_anim" ); if ( isdefined( self.skipendingidle ) ) return; if ( anim_exists( self.animation + "_idle" ) ) thread maps\_anim::anim_generic_loop( self, self.animation + "_idle", "stop_idle" ); else { var_2 = "hostage_knees_loop"; thread maps\_anim::anim_generic_loop( self, var_2, "stop_idle" ); } self.breachfinished = 1; } hostage_health_regen() { var_0 = self.health; self endon( "death" ); self endon( "saved" ); while ( isdefined( self ) ) { self waittill( "damage", var_1, var_2 ); if ( isdefined( var_2 ) ) { if ( isplayer( var_2 ) ) { self kill( self.origin, level.player ); break; } else if ( isdefined( var_2.team ) && var_2.team == "allies" ) self.health = var_0; } } } get_room_volume_from_slomo_breach_number( var_0 ) { return level.breach_groups[var_0].room_volume; } hostage_mission_fail() { if ( maps\_utility::is_specialop() ) level endon( "special_op_terminated" ); level endon( "mission failed" ); var_0 = self.health; var_1 = 0; thread hostage_health_regen(); var_2 = get_room_volume_from_slomo_breach_number( self.script_slowmo_breach ); if ( getdvar( "hostage_missionfail" ) == "0" ) return; while ( isdefined( self ) ) { self waittill( "death", var_3 ); if ( isdefined( var_3 ) ) { if ( isplayer( var_3 ) ) { level notify( "player_shot_a_hostage" ); waittillframeend; if ( level.last_player_damage == gettime() ) maps\_player_death::set_deadquote( &"SCRIPT_MISSIONFAIL_KILLEDHOSTAGE" ); else maps\_player_death::set_deadquote( &"SCRIPT_MISSIONFAIL_KILLEDHOSTAGE", "@SCRIPT_MISSIONFAIL_KILLEDHOSTAGE" ); var_1 = 1; } else if ( isdefined( var_3.team ) && var_3.team == "allies" && !isplayer( var_3 ) ) { maps\_player_death::set_deadquote( &"SCRIPT_MISSIONFAIL_HOSTAGEEXECUTED" ); var_1 = 1; } else { if ( coop_breached_from_same_door_in_a_muliti_door_room( var_2 ) ) maps\_player_death::set_deadquote( &"SCRIPT_MISSIONFAIL_HOSTAGEEXECUTED_USEMULTIDOOR" ); else maps\_player_death::set_deadquote( &"SCRIPT_MISSIONFAIL_HOSTAGEEXECUTED" ); var_1 = 1; } } if ( var_1 == 1 ) { thread maps\_utility::missionfailedwrapper(); level notify( "mission failed" ); } } } coop_breached_from_same_door_in_a_muliti_door_room( var_0 ) { if ( !maps\_utility::is_specialop() ) return 0; if ( !maps\_utility::is_coop() ) return 0; if ( isdefined( var_0.has_passive_breacher ) ) return 1; else return 0; } #using_animtree("script_model"); script_models() { level.scr_anim["breach_door_model"]["breach"] = %breach_player_door_v2; level.scr_animtree["breach_door_model"] = #animtree; level.scr_model["breach_door_model"] = "com_door_01_handleright"; level.scr_anim["breach_door_hinge"]["breach"] = %breach_player_door_hinge_v1; level.scr_animtree["breach_door_hinge"] = #animtree; level.scr_model["breach_door_hinge"] = "com_door_piece_hinge"; level.scr_anim["breach_door_model_metal"]["breach"] = %breach_player_door_v2; level.scr_animtree["breach_door_model_metal"] = #animtree; level.scr_model["breach_door_model_metal"] = "breach_door_metal_right"; level.scr_anim["breach_door_hinge_metal"]["breach"] = %breach_player_door_metal; level.scr_animtree["breach_door_hinge_metal"] = #animtree; level.scr_model["breach_door_hinge_metal"] = "breach_door_metal_right_dst"; level.scr_anim["breach_door_charge"]["breach"] = %breach_player_frame_charge_v3; level.scr_animtree["breach_door_charge"] = #animtree; level.scr_model["breach_door_charge"] = "mil_frame_charge"; level.scr_animtree["desk"] = #animtree; level.scr_anim["desk"]["breach_react_desk_v7_desk"] = %breach_react_desk_v7_desk; level.scr_animtree["chair"] = #animtree; level.scr_anim["chair"]["breach_chair_hide_reaction_v2_chair"] = %breach_chair_hide_reaction_v2_chair; level.scr_anim["chair"]["breach_chair_hide_reaction_death_v2_chair"] = %breach_chair_hide_reaction_death_v2_chair; } set_door_charge_anim_normal() { level.scr_anim["breach_door_charge"]["breach"] = %breach_player_frame_charge_v3; } set_door_charge_anim_special() { level.scr_anim["breach_door_charge"]["breach"] = %breach_player_frame_charge; } #using_animtree("multiplayer"); player_animations() { if ( !isdefined( level.slowmo_viewhands ) ) level.slowmo_viewhands = "viewhands_player_sas_woodland"; level.scr_animtree["active_breacher_rig"] = #animtree; level.scr_model["active_breacher_rig"] = level.slowmo_viewhands; level.scr_anim["active_breacher_rig"]["breach_player_anim"] = %breach_coop_player_1; level._slowmo_breach_funcs = []; add_breach_func( ::breach_explosion ); maps\_anim::addnotetrack_customfunction( "active_breacher_rig", "explode", ::breach_functions ); maps\_anim::addnotetrack_customfunction( "active_breacher_rig", "slowmo", ::slowmo_begins ); } add_breach_func( var_0 ) { level._slowmo_breach_funcs[level._slowmo_breach_funcs.size] = var_0; } breach_functions( var_0 ) { foreach ( var_2 in level._slowmo_breach_funcs ) thread [[ var_2 ]]( var_0 ); } breach_explosion( var_0 ) { var_1 = level.breach_groups[self.breach_index]; var_2 = undefined; var_3 = undefined; switch ( var_1.doortype ) { case "wood": var_2 = "detpack_explo_wood"; var_3 = "breach_door_hinge"; break; case "estate_wood": var_2 = "detpack_explo_wood"; var_3 = "breach_door_hinge_estate"; break; case "estate_wood_backwards": var_2 = "detpack_explo_wood"; var_3 = undefined; break; case "caves_wood": var_2 = "detpack_explo_wood"; var_3 = "breach_door_hinge_caves"; break; case "payback_wood": var_2 = "pybk_breach_blast"; var_3 = "breach_door_hinge_payback"; break; case "metal": var_2 = "detpack_explo_metal"; var_3 = "breach_door_hinge_metal"; break; case "none": var_2 = "detpack_explo_concrete"; break; default: break; } if ( isdefined( var_2 ) ) thread common_scripts\utility::play_sound_in_space( var_2, self.charge.origin ); common_scripts\utility::exploder( "breach_" + self.breach_index ); thread breach_rumble( self.charge.origin ); self.charge delete(); level notify( "breach_explosion" ); if ( isdefined( var_3 ) ) { var_4 = maps\_utility::spawn_anim_model( var_3 ); self.post thread maps\_anim::anim_single_solo( var_4, "breach" ); } wait 0.05; if ( isdefined( self.door ) ) self.door delete(); } breach_rumble( var_0 ) { var_1 = spawn( "script_origin", var_0 ); var_1.origin = var_0; var_1 playrumbleonentity( "grenade_rumble" ); wait 4; var_1 delete(); } _slomo_breach_executioner_knife() { self endon( "death" ); self.dodamagetoall = 1; thread knife_guy_cleanup(); } _slomo_breach_executioner_pistol() { self endon( "death" ); self.dodamagetoall = 1; thread _slomo_breach_pistol_guy(); } _slomo_breach_pistol_guy() { animscripts\notetracks::notetrackpistolpickup(); } _slomo_breach_blowback_guy() { self endon( "death" ); if ( !common_scripts\utility::flag( "no_mercy" ) ) self.ignoreme = 1; self.forcelongdeath = 1; maps\_utility::waittill_notetrack_or_damage( "bodyfall large" ); self waittill( "finished_breach_start_anim" ); self dodamage( self.health - 1, self.origin ); } _slomo_breach_executed_guy() { if ( self.animation == "execution_knife_hostage" || self.animation == "execution_knife2_hostage" ) thread _slomo_breach_knife_hostage_death(); if ( will_be_manhandled() ) thread get_manhandled(); self.skipendingidle = 1; self endon( "death" ); maps\_utility::set_generic_deathanim( self.animation + "_death" ); self waittill( "finished_breach_start_anim" ); if ( isdefined( self.manhandled ) ) return; if ( anim_exists( self.animation + "_survives" ) ) self.reference maps\_anim::anim_generic( self, self.animation + "_survives" ); thread maps\_anim::anim_generic_loop( self, self.animation + "_idle", "stop_idle" ); self.breachfinished = 1; } _slomo_breach_hostage_react() { if ( will_be_manhandled() ) thread get_manhandled(); self.skipendingidle = 1; self waittill( "finished_breach_start_anim" ); if ( isdefined( self.manhandled ) ) return; if ( anim_exists( self.animation + "_idle" ) ) thread maps\_anim::anim_generic_loop( self, self.animation + "_idle", "stop_idle" ); self.breachfinished = 1; } _slomo_breach_c4_hostage() { var_0 = spawn( "script_model", self.reference.origin ); var_0 setmodel( "com_restaurantchair_2" ); var_0.angles = self.reference.angles + ( 0, 90, 0 ); var_0.origin = self.reference.origin; } _slomo_breach_knife_hostage_death() { var_0 = maps\_utility::get_closest_ai( self.origin, "bad_guys" ); self waittill( "finished_breach_start_anim" ); if ( isdefined( var_0 ) && isalive( var_0 ) ) { playfxontag( common_scripts\utility::getfx( "breach_knife_execution" ), self, "J_neck" ); thread maps\_utility::play_sound_on_entity( "melee_knife_hit_body" ); self kill(); } } _slomo_breach_executed_guy_pushed_to_floor() { self.skipendingidle = 1; self endon( "death" ); if ( will_be_manhandled() ) thread get_manhandled(); self waittillmatch( "single anim", "bodyfall large" ); maps\_utility::set_generic_deathanim( self.animation + "_death" ); self waittill( "finished_breach_start_anim" ); maps\_anim::anim_generic( self, self.animation + "_survives" ); if ( isdefined( self.manhandled ) ) return; thread maps\_anim::anim_generic_loop( self, "hostage_knees_loop", "stop_idle" ); self.breachfinished = 1; } _slomo_breach_fightback_guy() { self.skipendingidle = 1; self endon( "death" ); self waittill( "finished_breach_start_anim" ); maps\_utility::set_generic_deathanim( self.animation + "_death" ); maps\_anim::anim_generic( self, self.animation + "_survives" ); thread maps\_anim::anim_generic_loop( self, "hostage_knees_loop", "stop_idle" ); self.breachfinished = 1; } _slomo_breach_knife_charger() { self endon( "death" ); breach_enemy_cancel_ragdoll(); maps\_utility::set_generic_deathanim( self.animation + "_death" ); self waittillmatch( "single anim", "stab" ); wait 0.1; thread knife_guy_stabs_player(); self waittill( "finished_breach_start_anim" ); } knife_guy_stabs_player() { var_0 = maps\_utility::get_closest_player( self.origin ); var_1 = distance( var_0.origin, self.origin ); if ( var_1 <= 50 ) { var_0 playrumbleonentity( "grenade_rumble" ); var_0 thread maps\_utility::play_sound_on_entity( "melee_knife_hit_body" ); var_0 enablehealthshield( 0 ); var_0 enabledeathshield( 0 ); waittillframeend; var_0 dodamage( var_0.health + 50000, self gettagorigin( "tag_weapon_right" ), self ); var_0.breach_missionfailed = 1; } } knife_guy_cleanup() { wait 0.5; common_scripts\utility::waittill_either( "damage", "finished_breach_start_anim" ); if ( isdefined( self ) ) self detach( "weapon_parabolic_knife", "TAG_INHAND" ); } _slomo_breach_chair_guy_normal() { self endon( "death" ); breach_enemy_cancel_ragdoll(); var_0 = randomintrange( 1, 3 ); if ( common_scripts\utility::cointoss() ) maps\_utility::set_generic_deathanim( self.animation + "_death" ); else maps\_utility::set_generic_deathanim( self.animation + "_death2" ); } _slomo_breach_chair_guy_animated() { self endon( "death" ); breach_enemy_cancel_ragdoll(); maps\_utility::set_generic_deathanim( self.animation + "_death" ); thread chair_animate(); self waittill( "finished_breach_start_anim" ); thread _slomo_breach_chair_guy_normal(); } chair_animate() { var_0 = spawn( "script_model", self.reference.origin ); var_0 setmodel( "furniture_chair_metal01" ); var_0.animname = "chair"; var_0 maps\_utility::assign_animtree(); var_0.reference = spawn( "script_origin", self.reference.origin ); var_0.reference.angles = self.reference.angles; self waittill( "starting_breach_reaction" ); var_0.reference thread maps\_anim::anim_single_solo( var_0, "breach_chair_hide_reaction_v2_chair" ); self endon( "finished_breach_start_anim" ); if ( isalive( self ) ) { self waittill( "death" ); var_0.reference thread maps\_anim::anim_single_solo( var_0, "breach_chair_hide_reaction_death_v2_chair" ); } } _slomo_breach_desk_guy() { self endon( "death" ); thread desk_animate(); self waittill( "finished_breach_start_anim" ); } desk_animate() { var_0 = spawn( "script_model", self.reference.origin ); var_0 setmodel( "furniture_long_desk_animate" ); var_0.animname = "desk"; var_0 maps\_utility::assign_animtree(); var_0.reference = spawn( "script_origin", self.reference.origin ); var_0.reference.angles = self.reference.angles; self waittill( "starting_breach_reaction" ); var_0.reference thread maps\_anim::anim_single_solo( var_0, "breach_react_desk_v7_desk" ); } breach_near_player( var_0 ) { foreach ( var_2 in level.breach_groups ) { if ( var_0 istouching( var_2.door_volume ) ) return var_2; } } get_breach_groups() { var_0 = getarraykeys( level.breach_groups ); return var_0; } make_empty_breach( var_0 ) { level.breach_groups[var_0].enabled = 0; } delete_breach( var_0 ) { level.breach_groups[var_0].trigger delete(); var_1 = level.breach_groups[var_0].path_solids; common_scripts\utility::array_call( var_1, ::connectpaths ); common_scripts\utility::array_thread( var_1, maps\_utility::self_delete ); foreach ( var_3 in level.breach_groups[var_0].lookat_triggers ) var_3 delete(); } breach_debug_display_animnames( var_0 ) { if ( !isdefined( self ) ) return; var_1 = self.origin; wait 0.05; if ( getdvar( "breach_debug" ) == "0" ) return; var_2 = []; var_3 = getentarray( "breach_enemy_spawner", "targetname" ); var_4 = getentarray( "breach_hostage_spawner", "targetname" ); var_2 = maps\_utility::array_merge( var_3, var_4 ); foreach ( var_6 in var_2 ) { if ( !var_6 istouching( var_0 ) ) var_2 = common_scripts\utility::array_remove( var_2, var_6 ); } while ( !var_0.breached ) { var_8 = var_1; foreach ( var_6 in var_2 ) { if ( isdefined( var_6.animation ) ) { thread maps\_utility::debug_message( var_6.animation, var_8, 1 ); var_8 = var_8 - ( 0, 0, 10 ); } } wait 1; } } will_be_manhandled() { if ( maps\_utility::is_coop() ) return 0; if ( isdefined( level.hostagemanhandle ) && level.hostagemanhandle == 0 ) return 0; if ( isdefined( self.script_noteworthy ) ) return self.script_noteworthy == "manhandled" || self.script_noteworthy == "manhandled_guarded"; return 0; } manhandler_hold() { if ( level.breachenemies_alive > 0 ) return 1; if ( !self.startmanhandling ) return 1; return 0; } get_manhandled() { self endon( "death" ); self.manhandled = 1; self.readytobemanhandled = 0; self.startmanhandling = 0; var_0 = undefined; if ( self.script_noteworthy == "manhandled" ) var_0 = getent( self.target, "targetname" ); var_1 = undefined; var_2 = undefined; var_3 = undefined; var_4 = undefined; var_5 = undefined; var_6 = ""; if ( isdefined( self.script_parameters ) ) var_6 = self.script_parameters; switch ( self.script_noteworthy ) { case "manhandled": var_4 = self.animation + "_manhandled"; break; case "manhandled_guarded": var_4 = self.animation + "_manhandled_guarded"; break; } var_5 = var_4 + "_idle" + var_6; var_2 = var_4 + "_prepare" + var_6; var_3 = var_4 + "_prepare_idle" + var_6; var_4 = var_4 + var_6; assert_if_anim_not_defined( var_4 ); assert_if_anim_not_defined( var_5 ); if ( self.script_noteworthy == "manhandled" ) { var_1 = var_0 maps\_utility::spawn_ai( 1 ); var_1 hide(); self.reference maps\_anim::anim_generic_first_frame( var_1, var_1.animation ); var_1 pushplayer( 1 ); level.manhandler = var_1; var_1.readytomanhandle = 0; var_1 thread manhandler_think(); } wait 1; if ( self.script_noteworthy == "manhandled" ) var_1 show(); self waittill( "finished_breach_start_anim" ); if ( anim_exists( var_2 ) ) self.reference maps\_anim::anim_generic( self, var_2 ); if ( anim_exists( var_3 ) ) self.reference thread maps\_anim::anim_generic_loop( self, var_3, "stop_idle" ); else var_3 = undefined; self.readytobemanhandled = 1; if ( isdefined( var_3 ) ) { while ( manhandler_hold() ) wait 0.05; } self.reference notify( "stop_idle" ); self notify( "stop_idle" ); if ( self.script_noteworthy == "manhandled" ) self.reference thread maps\_anim::anim_generic( var_1, var_1.animation ); self.reference maps\_anim::anim_generic( self, var_4 ); if ( isdefined( var_1 ) && isdefined( level.scr_anim["generic"][var_1.animation + "_idle"] ) ) self.reference thread maps\_anim::anim_generic_loop( var_1, var_1.animation + "_idle", "stop_idle" ); if ( isdefined( level.scr_anim["generic"][var_5] ) ) self.reference thread maps\_anim::anim_generic_loop( self, var_5, "stop_idle" ); } special_gulag_adjustment() { var_0 = level.player getplayerangles(); var_0 = ( 0, var_0[1], 0 ); var_1 = anglestoforward( var_0 ); var_2 = anglestoup( var_0 ); var_3 = common_scripts\utility::spawn_tag_origin(); var_3.origin = level.player.origin; var_3.angles = var_0; level.player playerlinktodelta( var_3, "tag_origin", 1, 45, 45, 90, 45, 1 ); var_4 = 0.45; var_3 moveto( var_3.origin + var_1 * 32 + var_2 * -14, var_4, var_4 * 0.4, var_4 * 0.4 ); wait( var_4 ); level.player setmovespeedscale( 0.5 ); thread player_slows_down(); level.player unlink(); level.price_breach_ent thread price_breach_ent_rotatesto_player(); level.price_breach_ent thread price_breach_ent_movesto_player(); } player_slows_down() { wait 0.25; var_0 = level maps\_utility::create_blend( ::player_loses_speedscale, 0.5, 0 ); var_0.time = 1.5; } price_breach_ent_movesto_player() { self endon( "stop_following_player" ); wait 1.5; for (;;) { self moveto( level.player.origin, 2, 0, 0 ); wait 0.05; } } price_breach_ent_rotatesto_player() { self endon( "stop_following_player" ); var_0 = spawn( "script_origin", ( 0, 0, 0 ) ); for (;;) { var_1 = level.player.origin; var_1 = maps\_utility::set_z( var_1, 0 ); var_2 = self.origin; var_2 = maps\_utility::set_z( var_2, 0 ); var_3 = vectortoangles( var_1 - var_2 ); var_4 = anglestoforward( var_3 ); var_5 = anglestoforward( self.angles ); var_6 = anglestoright( self.angles ); var_7 = vectordot( var_4, var_6 ); var_0.angles = self.angles; var_8 = abs( acos( var_7 ) ); var_9 = 2; if ( var_9 > var_8 ) var_9 = var_8; if ( var_7 < 0 ) var_0 addyaw( var_9 ); else var_0 addyaw( var_9 * -1 ); self rotateto( var_0.angles, 0.15 ); wait 0.15; } } player_loses_speedscale( var_0, var_1, var_2 ) { level.player setmovespeedscale( var_1 * ( 1 - var_0 ) + var_2 * var_0 ); } manhandler_think() { level endon( "mission failed" ); if ( getdvar( "hostage_missionfail" ) == "1" ) level endon( "player_shot_a_hostage" ); thread maps\_utility::magic_bullet_shield(); maps\_utility::setflashbangimmunity( 1 ); if ( !common_scripts\utility::flag( "no_mercy" ) ) self.ignoreme = 1; self.grenadeawareness = 0; wait 1; var_0 = []; var_1 = getaispeciesarray( "neutral", "civilian" ); foreach ( var_3 in var_1 ) { if ( !isdefined( var_3.readytobemanhandled ) ) continue; if ( isdefined( var_3.script_slowmo_breach ) && var_3.script_slowmo_breach == self.script_slowmo_breach ) { if ( isdefined( var_3.script_noteworthy ) && issubstr( var_3.script_noteworthy, "manhandled" ) ) var_0 = common_scripts\utility::array_add( var_0, var_3 ); } } var_5 = var_0.size; var_6 = var_0; while ( var_5 > 0 ) { wait 0.05; foreach ( var_3 in var_6 ) { if ( !isdefined( var_3 ) || var_3.readytobemanhandled == 1 ) { var_6 = common_scripts\utility::array_remove( var_6, var_3 ); var_5--; } } } foreach ( var_3 in var_0 ) { if ( isdefined( var_3 ) ) var_3.startmanhandling = 1; } } assert_if_anim_not_defined( var_0 ) { } anim_exists( var_0 ) { if ( isdefined( level.scr_anim["generic"][var_0] ) ) return 1; else return 0; } add_slowmo_breach_custom_function( var_0, var_1 ) { level._slowmo_functions[var_0] = var_1; } add_slowmo_breacher() { if ( !isdefined( self ) ) return; if ( !isdefined( level.breachfriendlies ) ) { level.breachfriendlies = []; level.breachfriendlies[0] = self; } else if ( maps\_utility::is_in_array( level.breachfriendlies, self ) ) return; else level.breachfriendlies = common_scripts\utility::array_add( level.breachfriendlies, self ); } remove_slowmo_breacher() { if ( !isdefined( self ) ) return; if ( !isdefined( level.breachfriendlies ) ) return; if ( maps\_utility::is_in_array( level.breachfriendlies, self ) ) level.breachfriendlies = common_scripts\utility::array_remove( level.breachfriendlies, self ); } breach_failed_to_start() { var_0 = []; var_0[var_0.size] = ::ismeleeing; var_0[var_0.size] = ::isswitchingweapon; var_0[var_0.size] = ::isthrowinggrenade; foreach ( var_2 in level.players ) { if ( var_2 isreloading() ) { thread breach_reloading_hint(); return 1; } if ( var_2 using_illegal_breach_weapon() ) { thread breach_bad_weapon_hint(); return 1; } foreach ( var_4 in var_0 ) { if ( var_2 call [[ var_4 ]]() ) { thread breach_not_ready_hint(); return 1; } } } return 0; } using_illegal_breach_weapon() { var_0 = []; var_0["riotshield"] = 1; var_0["claymore"] = 1; var_0["c4"] = 1; var_0["none"] = 1; var_1 = self getcurrentweapon(); return isdefined( var_0[var_1] ); } slomo_sound_scale_setup() { soundsettimescalefactor( "Music", 0 ); soundsettimescalefactor( "Menu", 0 ); soundsettimescalefactor( "local3", 0.0 ); soundsettimescalefactor( "Mission", 0.0 ); soundsettimescalefactor( "Announcer", 0.0 ); soundsettimescalefactor( "Bulletimpact", 0.6 ); soundsettimescalefactor( "Voice", 0.4 ); soundsettimescalefactor( "effects2", 0.2 ); soundsettimescalefactor( "local", 0.4 ); soundsettimescalefactor( "physics", 0.2 ); soundsettimescalefactor( "ambient", 0.5 ); soundsettimescalefactor( "auto", 0.5 ); }