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

1562 lines
54 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
start()
{
maps\factory_util::actor_teleport( level.squad["ALLY_ALPHA"], "ambush_start_alpha" );
maps\factory_util::actor_teleport( level.squad["ALLY_BRAVO"], "ambush_start_bravo" );
maps\factory_util::actor_teleport( level.squad["ALLY_CHARLIE"], "ambush_start_charlie" );
thread ambush_dest_screens();
level.squad["ALLY_ALPHA"] thread maps\_utility::enable_cqbwalk();
level.squad["ALLY_BRAVO"] thread maps\_utility::enable_cqbwalk();
level.squad["ALLY_CHARLIE"] thread maps\_utility::enable_cqbwalk();
maps\factory_util::safe_trigger_by_targetname( "ambush_intro_ally01_position" );
maps\factory_util::safe_trigger_by_targetname( "ambush_intro_ally02_position" );
maps\factory_util::safe_trigger_by_targetname( "ambush_intro_ally03_position" );
level.player maps\factory_util::move_player_to_start_point( "playerstart_ambush" );
common_scripts\utility::flag_set( "lgt_ambush_jump" );
thread maps\factory_anim::factory_assembly_line_play();
level thread maps\factory_util::open_door( "ambush_door_pivot_left", -160, 0.5, 1 );
level thread maps\factory_util::open_door( "ambush_door_pivot_right", 145, 0.5, 1 );
thread ambush_setup();
thread maps\factory_intro::train_cleanup();
wait 0.1;
}
section_precache()
{
precachemodel( "fac_keyboard_obj" );
precachemodel( "factory_ambush_monitor_obj" );
precachemodel( "fac_io_device_obj" );
precachemodel( "factory_assembly_automated_arm_damaged" );
precacheitem( "smoke_grenade_factory" );
precacheshader( "nightvision_overlay_goggles" );
precacheshellshock( "flashbang" );
}
section_flag_init()
{
common_scripts\utility::flag_init( "factory_assembly_line_resume_speed_front" );
common_scripts\utility::flag_init( "factory_assembly_line_resume_speed_back" );
common_scripts\utility::flag_init( "enable_ambush_use" );
common_scripts\utility::flag_init( "player_used_computer" );
common_scripts\utility::flag_init( "ambush_start_fx" );
common_scripts\utility::flag_init( "ambush_vignette_done" );
common_scripts\utility::flag_init( "ambush_moment_clear" );
common_scripts\utility::flag_init( "ambush_prep_smoke_01" );
common_scripts\utility::flag_init( "ambush_smoke_01" );
common_scripts\utility::flag_init( "ambush_used_thermal" );
common_scripts\utility::flag_init( "walking_cough_guy_done" );
common_scripts\utility::flag_init( "ambush_thermal_flashed" );
common_scripts\utility::flag_init( "ambush_arm_malfunction" );
common_scripts\utility::flag_init( "ambush_thermal_allies_movedup_01" );
common_scripts\utility::flag_init( "ambush_wave_3_done" );
common_scripts\utility::flag_init( "ambush_lower_back_clear" );
common_scripts\utility::flag_init( "thermal_battle_clear" );
common_scripts\utility::flag_init( "stop_smoke_penalty" );
common_scripts\utility::flag_init( "stop_assembly_line" );
common_scripts\utility::flag_init( "lgt_ambush_jump" );
}
section_hint_string_init()
{
maps\_utility::add_hint_string( "HINT_THERMAL", &"FACTORY_HINT_THERMAL", ::hint_thermal_timeout );
maps\_utility::add_hint_string( "HINT_THERMAL_OFF", &"FACTORY_HINT_THERMAL_OFF", ::hint_thermal_off_timeout );
maps\_utility::add_hint_string( "HINT_THERMAL_SHORT", &"FACTORY_HINT_THERMAL_SHORT", ::hint_thermal_timeout );
maps\_utility::add_hint_string( "HINT_THERMAL_OFF_SHORT", &"FACTORY_HINT_THERMAL_OFF_SHORT", ::hint_thermal_off_timeout );
}
main()
{
maps\_utility::autosave_by_name( "ambush" );
thread break_ambush_glass();
var_0 = common_scripts\utility::getstruct( "ambush_anim_node", "script_noteworthy" );
level thread maps\factory_anim::ambush_cables( var_0 );
level thread ambush_dialogue();
thread maps\factory_rooftop::rooftop_heli();
thread maps\factory_audio::ambush_line_emitter_create();
level thread ambush_moment_logic();
thread maps\factory_audio::sfx_pa_bursts();
level thread thermal_battle_logic();
common_scripts\utility::flag_wait( "thermal_battle_clear" );
ambush_cleanup();
common_scripts\utility::flag_set( "stop_assembly_line" );
level notify( "stop_assembly_line" );
wait 2.5;
}
ambush_setup()
{
level.ambush_threat_boost = 2600;
level.player.maxvisibledist = 1280;
level.flood_spawner_limited_cap = 9;
level thread setup_ambush_flood_spawner_limited_triggers();
foreach ( var_1 in level.squad )
{
var_1.fixednodesaferadius = 256;
var_1.script_accuracy = 0.5;
var_1.suppressionwait = 3500;
var_1.usechokepoints = 0;
var_1 pushplayer( 1 );
}
var_3 = getentarray( "ambush_desk_prop_post", "targetname" );
var_4 = getentarray( "ambush_desk_post", "targetname" );
var_3 = common_scripts\utility::array_combine( var_3, var_4 );
foreach ( var_6 in var_3 )
{
if ( isdefined( var_6.script_parameters ) )
var_6 connectpaths();
var_6 notsolid();
var_6 hide();
}
var_8 = getentarray( "smoke_canister", "script_noteworthy" );
foreach ( var_10 in var_8 )
var_10 hide();
var_12 = getent( "ambush_breach_player_pda", "targetname" );
var_12 hide();
maps\_utility::set_custom_gameskill_func( ::factory_ambush_grenade_params );
var_13 = getentarray( "ambush_window_mantle", "targetname" );
foreach ( var_15 in var_13 )
var_15 movez( -100, 0.1 );
var_17 = [];
var_17 = getentarray( "ambush_fan", "targetname" );
foreach ( var_19 in var_17 )
var_19 thread ambush_fan_spin();
thread maps\factory_anim::ambush_anim_setup();
maps\factory_fx::fx_assembly_setup();
if ( !level.player.thermal )
common_scripts\utility::exploder( "assembly_ambient_off_in_thermal" );
setlasermaterial( "fac_gfx_laser", "fac_gfx_laser_light" );
maps\factory_anim::setup_smoke_archetype();
var_21 = getent( "ambush_smoke_volume", "targetname" );
maps\_utility::array_spawn_function_targetname( "ambush_groundtroops_01", ::enemy_smoke_reaction, var_21 );
maps\_utility::array_spawn_function_targetname( "ambush_groundtroops_02", ::enemy_smoke_reaction, var_21 );
maps\_utility::array_spawn_function_noteworthy( "ambush_fastropers", ::enemy_smoke_reaction, var_21 );
level.squad["ALLY_ALPHA"] thread ally_smoke_reaction_vision( var_21 );
level.squad["ALLY_BRAVO"] thread ally_smoke_reaction_vision( var_21 );
level.squad["ALLY_CHARLIE"] thread ally_smoke_reaction_vision( var_21 );
common_scripts\utility::flag_wait( "ambush_escape_spawn_helis" );
}
ambush_dialogue()
{
common_scripts\utility::flag_wait( "start_ambush_moment" );
var_0 = getent( "ambush_office_volume", "targetname" );
while ( !level.squad["ALLY_ALPHA"] istouching( var_0 ) )
wait 0.2;
level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_bkr_grabthedata" );
var_1 = [ "factory_mrk_adamusethecomputer", "factory_mrk_adamgivemea", "factory_mrk_adamoverhere" ];
level.squad["ALLY_ALPHA"] thread maps\factory_util::nag_line_generator( var_1, "player_used_computer", undefined, 7 );
common_scripts\utility::flag_set( "enable_ambush_use" );
common_scripts\utility::flag_wait( "ambush_triggered" );
level.squad["ALLY_CHARLIE"] maps\_utility::smart_dialogue( "factory_hsh_lookslikemanufacturing" );
level.squad["ALLY_CHARLIE"] maps\_utility::smart_dialogue( "factory_hsh_thesatelliewefound" );
wait 7.0;
maps\_utility::smart_radio_dialogue( "factory_kck_jerichowevegotmovement" );
common_scripts\utility::flag_wait( "ambush_vignette_done" );
wait 1.0;
level thread ambush_dialogue_pinned_reactions();
common_scripts\utility::flag_wait_any( "ambush_prep_smoke_01", "player_left_ambush_room" );
level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_mrk_okweblindem" );
level.squad["ALLY_CHARLIE"] maps\_utility::smart_dialogue( "factory_hsh_smokeready" );
level.squad["ALLY_CHARLIE"] maps\_utility::smart_dialogue( "factory_kgn_smokeready" );
level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_mrk_popsmoke" );
wait 1.2;
common_scripts\utility::flag_set( "ambush_smoke_01" );
level.player thread maps\factory_util::thermal_vision();
level thread maps\factory_fx::fx_track_thermal();
level thread ambush_dialogue_flashbangs();
level.squad["ALLY_CHARLIE"] maps\_utility::smart_dialogue( "factory_kgn_smokeout_2" );
level.squad["ALLY_CHARLIE"] maps\_utility::smart_dialogue( "factory_mrk_smokeisout" );
wait 1.4;
level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_bkr_gotothermals" );
level thread show_thermal_tooltip( 1 );
level thread thermal_off_tooltip_handler();
common_scripts\utility::flag_wait( "ambush_thermal_allies_movedup_01" );
level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_bkr_totheoffices" );
wait 1.0;
maps\_utility::battlechatter_on( "allies" );
maps\_utility::battlechatter_on( "axis" );
maps\_utility::set_team_bcvoice( "allies", "taskforce" );
level thread ambush_thermal_push_dialog();
level thread ambush_smoke_clear_dialog();
common_scripts\utility::flag_wait( "thermal_battle_clear" );
wait 0.55;
level.squad["ALLY_CHARLIE"] maps\_utility::smart_dialogue( "factory_rgs_clear" );
wait 0.25;
level.squad["ALLY_BRAVO"] maps\_utility::smart_dialogue( "factory_diz_clear2" );
}
ambush_dialogue_pinned_reactions()
{
level endon( "player_left_ambush_room" );
if ( common_scripts\utility::flag( "player_left_ambush_room" ) )
return;
wait 1.2;
level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_bkr_rookstaydown" );
level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_bkr_holdthisposition" );
wait 0.8;
level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_mrk_housemainweare_2" );
wait 0.2;
maps\_utility::smart_radio_dialogue( "factory_hqr_negativejerichoarclightis" );
wait 0.15;
level.squad["ALLY_CHARLIE"] maps\_utility::smart_dialogue( "factory_hsh_shitwedonot" );
level.squad["ALLY_BRAVO"] maps\_utility::smart_dialogue( "factory_kgn_wevegotmoreincoming" );
wait 1.1;
wait 1.5;
wait 0.66;
wait 0.8;
wait 0.4;
common_scripts\utility::flag_set( "ambush_moment_clear" );
}
ambush_thermal_push_dialog()
{
level endon( "ambush_smoke_off_tooltip" );
level.squad["ALLY_BRAVO"] maps\_utility::smart_dialogue( "factory_kgn_twodown" );
common_scripts\utility::flag_wait( "ambush_progress_flag_1" );
level.squad["ALLY_BRAVO"] maps\_utility::smart_dialogue( "factory_kgn_threemoreekia" );
wait 2.5;
level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_bkr_keeppushingforward" );
wait 4.1;
level.squad["ALLY_BRAVO"] maps\_utility::smart_dialogue( "factory_hsh_droppingem" );
wait 4.6;
level.squad["ALLY_BRAVO"] maps\_utility::smart_dialogue( "factory_mrk_goingdown" );
wait 2.25;
level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_bkr_dontstop" );
}
ambush_smoke_clear_dialog()
{
level endon( "thermal_battle_clear" );
common_scripts\utility::flag_wait( "ambush_thermal_flashed" );
while ( level.player common_scripts\utility::isflashed() )
wait 0.1;
wait 6.5;
level.squad["ALLY_CHARLIE"] maps\_utility::smart_dialogue( "factory_hsh_mythermalsarefried" );
wait 0.2;
level.squad["ALLY_BRAVO"] maps\_utility::smart_dialogue( "factory_kgn_minetoo" );
level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_mrk_govisorsofflose" );
wait 8.0;
level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_mrk_dontstopwehave" );
}
ambush_dialogue_flashbangs()
{
common_scripts\utility::flag_wait( "ambush_smoke_off_tooltip" );
level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_hsh_flashbang" );
level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_bkr_flashbangsgetdown" );
}
factory_ambush_grenade_params()
{
level.difficultysettings["playerGrenadeBaseTime"]["easy"] = 48000;
level.difficultysettings["playerGrenadeBaseTime"]["normal"] = 42000;
level.difficultysettings["playerGrenadeBaseTime"]["hardened"] = 25000;
level.difficultysettings["playerGrenadeBaseTime"]["veteran"] = 25000;
level.difficultysettings["playerGrenadeRangeTime"]["easy"] = 24000;
level.difficultysettings["playerGrenadeRangeTime"]["normal"] = 18000;
level.difficultysettings["playerGrenadeRangeTime"]["hardened"] = 10000;
level.difficultysettings["playerGrenadeRangeTime"]["veteran"] = 10000;
level.difficultysettings["double_grenades_allowed"]["easy"] = 0;
level.difficultysettings["double_grenades_allowed"]["normal"] = 0;
level.difficultysettings["double_grenades_allowed"]["hardened"] = 1;
level.difficultysettings["double_grenades_allowed"]["veteran"] = 1;
}
ambush_moment_logic()
{
thread setup_computer_use_hint();
common_scripts\utility::flag_wait( "entered_pre_ambush_room" );
maps\factory_util::safe_trigger_by_targetname( level.default_weapon );
level.squad["ALLY_ALPHA"] thread maps\factory_anim::ambush_get_on_computer_player_nag();
level.squad["ALLY_BRAVO"] thread maps\factory_anim::ambush_bravo_computer_use();
level.squad["ALLY_CHARLIE"] thread maps\factory_anim::ambush_charlie_computer_use();
thread maps\factory_audio::ambush_pre_start_ally1_typing_sfx();
thread maps\factory_audio::ambush_pre_start_ally2_typing_sfx();
maps\_utility::autosave_tactical();
common_scripts\utility::flag_wait( "start_ambush_moment" );
wait 0.1;
var_0 = level.squad["ALLY_ALPHA"].goalradius;
level.squad["ALLY_ALPHA"].goalradius = 16;
level.squad["ALLY_ALPHA"] waittill( "goal" );
level.squad["ALLY_ALPHA"].goalradius = var_0;
common_scripts\utility::flag_wait( "player_used_computer" );
common_scripts\utility::flag_set( "ambush_triggered" );
level.squad["ALLY_ALPHA"] maps\_utility::clear_generic_idle_anim();
thread ambush_slowmo();
thread breach_door();
wait 0.5;
thread ambush_door_breacher();
thread ambush_weapons_drop();
thread ambush_riotshield_no_melee();
wait 0.5;
level thread maps\factory_util::open_door( "ambush_door_pivot_left", 160, 0.5, 1 );
level thread maps\factory_util::open_door( "ambush_door_pivot_right", -145, 0.5, 1 );
thread ambush_leave_room_early();
thread ambush_groundtroops_01();
level waittill( "ambush_start_fx" );
maps\_utility::autosave_by_name_silent( "ambush" );
var_1 = getglass( "desk_glass_panel" );
destroyglass( var_1 );
level waittill( "ambush_glass_break" );
common_scripts\utility::flag_set( "ambush_vignette_done" );
thread ambush_fastropers_01();
level.player.threatbias = level.ambush_threat_boost;
wait 5.0;
level.squad["ALLY_ALPHA"] thread maps\_utility::disable_cqbwalk();
level.squad["ALLY_BRAVO"] thread maps\_utility::disable_cqbwalk();
level.squad["ALLY_CHARLIE"] thread maps\_utility::disable_cqbwalk();
level.squad["ALLY_ALPHA"].grenadeawareness = 0;
level.squad["ALLY_BRAVO"].grenadeawareness = 0;
level.squad["ALLY_CHARLIE"].grenadeawareness = 0;
}
setup_computer_use_hint()
{
common_scripts\utility::flag_wait( "enable_ambush_use" );
level notify( "show_ambush_use_hint" );
var_0 = getent( "ambush_console_use", "targetname" );
var_0 usetriggerrequirelookat();
var_0 sethintstring( &"FACTORY_HINT_AMBUSH_TRIGGER" );
var_0 common_scripts\utility::trigger_off();
var_0 thread ambush_use_loop();
for (;;)
{
var_0 waittill( "trigger" );
if ( level.player.thermal_anim_active )
continue;
else if ( level.player isthrowinggrenade() || level.player ismeleeing() )
continue;
else
break;
wait 0.1;
}
common_scripts\utility::flag_set( "player_used_computer" );
var_0 delete();
}
ambush_use_loop( var_0 )
{
var_1 = 0;
var_2 = getent( "ambush_use_volume", "targetname" );
var_3 = getent( "ambush_office_volume", "targetname" );
while ( isdefined( self ) )
{
if ( level.player istouching( var_2 ) && !var_1 )
{
common_scripts\utility::trigger_on();
var_1 = 1;
}
else if ( !level.player istouching( var_2 ) && var_1 )
{
common_scripts\utility::trigger_off();
var_1 = 0;
}
if ( level.player.thermal_anim_active && var_1 )
{
common_scripts\utility::trigger_off();
var_1 = 0;
}
if ( !level.squad["ALLY_ALPHA"] istouching( var_3 ) || !level.squad["ALLY_BRAVO"] istouching( var_3 ) || !level.squad["ALLY_CHARLIE"] istouching( var_3 ) && var_1 )
{
common_scripts\utility::trigger_off();
var_1 = 0;
}
if ( level.player isthrowinggrenade() || level.player ismeleeing() )
{
common_scripts\utility::trigger_off();
var_1 = 0;
}
wait 0.1;
}
}
ambush_slowmo()
{
level waittill( "ambush_start_fx" );
thread maps\factory_audio::ambush_battle_start_ambience_change();
common_scripts\utility::exploder( "ambush_start_fx" );
level waittill( "ambush_door_breached" );
if ( maps\_utility::is_gen4() )
{
var_0 = maps\_utility::create_sunflare_setting( "default" );
var_0.position = ( 13.8701, -144.781, 0 );
maps\_art::sunflare_changes( "default", 0 );
}
thread maps\_utility::vision_set_fog_changes( "factory_ambush_breach_explosion", 0 );
wait 0.05;
maps\_art::dof_enable_script( 30, 200, 4, 200, 500, 3, 0.2 );
thread maps\_utility::vision_set_fog_changes( "factory_ambush_breach_explosion_1", 0.2 );
wait 0.15;
maps\_utility::slowmo_setspeed_slow( 0.15 );
maps\_utility::slowmo_setlerptime_in( 0.2 );
thread maps\_utility::slowmo_lerp_in();
level.player playrumbleonentity( "artillery_rumble" );
wait 0.1;
thread maps\_utility::vision_set_fog_changes( "factory_ambush_breach_explosion_2", 0.1 );
wait 0.15;
thread maps\_utility::vision_set_fog_changes( "factory_ambush_breach_explosion_3", 0.5 );
wait 0.15;
maps\_utility::slowmo_setspeed_slow( 0.3 );
maps\_utility::slowmo_setlerptime_in( 1 );
thread maps\_utility::slowmo_lerp_in();
wait 1;
thread maps\_utility::vision_set_fog_changes( "", 1.4 );
maps\_art::dof_disable_script( 1.4 );
wait 0.25;
common_scripts\utility::flag_set( "music_ambush_battle" );
maps\_utility::slowmo_setlerptime_out( 2.0 );
thread maps\_utility::slowmo_lerp_out();
thread maps\factory_audio::sfx_end_slomo_sound();
thread maps\factory_audio::sfx_ambush_alarm_sound();
}
breach_door()
{
level waittill( "ambush_start_fx" );
var_0 = getent( "ambush_breach_door_connector", "targetname" );
var_0 connectpaths();
var_0 notsolid();
var_0 delete();
wait 0.2;
common_scripts\utility::exploder( "ambush_door_exploder" );
wait 0.5;
common_scripts\utility::exploder( "ambush_door_exploder_sparks" );
level waittill( "ambush_glass_break" );
wait 1.2;
common_scripts\utility::exploder( "ambush_door_exploder_strobe" );
if ( maps\_utility::is_gen4() )
common_scripts\utility::exploder( "ambush_door_exploder_strobe_ng" );
}
break_ambush_glass()
{
setsaveddvar( "glass_damageToDestroy", 9999 );
setsaveddvar( "glass_damageToWeaken", 9998 );
level waittill( "ambush_glass_break" );
var_0 = getentarray( "ambush_room_window_glass_bp", "targetname" );
foreach ( var_2 in var_0 )
{
var_2 notsolid();
var_2 hide();
}
maps\factory_util::break_glass( "ambush_room_window_glass_right", ( 1, 0, 0 ) );
maps\factory_util::break_glass( "ambush_room_window_glass_angled", ( 1, 0, 0 ) );
setsaveddvar( "glass_damageToDestroy", 275 );
setsaveddvar( "glass_damageToWeaken", 75 );
common_scripts\utility::flag_wait( "ambush_thermal_allies_movedup_01" );
}
ambush_door_breacher()
{
level waittill( "ambush_door_breached" );
wait 0.45;
var_0 = getent( "door_breach_guy", "targetname" );
var_1 = var_0 maps\_utility::spawn_ai();
if ( !maps\_utility::spawn_failed( var_1 ) )
{
var_1.animname = "generic";
var_1.dontmelee = 1;
var_1.fixednode = 1;
var_1.goalradius = 0;
var_1.attackeraccuracy = 3;
var_1.favoriteenemy = level.player;
var_1.ignoreme = 1;
var_1.threatbias = 5000;
var_1 maps\_utility::enable_cqbwalk();
var_1 maps\_utility::delaythread( 4, maps\factory_util::factory_set_ignoreme, 0 );
}
var_2 = getentarray( "ambush_window_breacher_extra", "targetname" );
foreach ( var_4 in var_2 )
{
var_5 = var_4 maps\_utility::spawn_ai();
if ( maps\_utility::spawn_failed( var_5 ) )
continue;
var_5.dontmelee = 1;
var_5.fixednode = 1;
var_5.goalradius = 0;
var_5.attackeraccuracy = 2.0;
var_5.ignoreme = 1;
var_5 maps\_utility::delaythread( randomfloatrange( 6, 8 ), maps\factory_util::factory_set_ignoreme, 0 );
}
}
ambush_leave_room_early()
{
common_scripts\utility::flag_wait( "player_left_ambush_room" );
common_scripts\utility::flag_set( "ambush_moment_clear" );
common_scripts\utility::flag_set( "ambush_thermal_allies_movedup_01" );
common_scripts\utility::flag_set( "walking_cough_guy_done" );
var_0 = level.player.attackeraccuracy;
var_1 = 0;
while ( !common_scripts\utility::flag( "ambush_smoke_01" ) && !common_scripts\utility::flag( "thermal_battle_clear" ) && !common_scripts\utility::flag( "ambush_thermal_flashed" ) )
{
common_scripts\utility::array_thread( getaiarray( "axis" ), maps\_utility::set_favoriteenemy, level.player );
level.player.threatbias = 10000;
level.player maps\_utility::set_player_attacker_accuracy( 4.0 );
wait 0.25;
}
maps\_utility::clear_custom_gameskill_func();
}
ambush_fastropers_01()
{
maps\factory_util::break_glass( "ambush_glass_ropers_1", ( 0, 0, -1 ) );
level.ambush_fast_ropers_mid = [];
level.ambush_fast_ropers_mid[level.ambush_fast_ropers_mid.size] = ambush_fastrope( "ambush_fastroper_mid_1", undefined, 0, 0, 0.75 );
level.ambush_fast_ropers_mid[level.ambush_fast_ropers_mid.size] = ambush_fastrope( "ambush_fastroper_mid_2", undefined, 0, 0, 0.75 );
level.ambush_fast_ropers_mid[level.ambush_fast_ropers_mid.size] = ambush_fastrope( "ambush_fastroper_mid_4", undefined, 0, 0, 0.75 );
level.ambush_fast_ropers_mid[level.ambush_fast_ropers_mid.size] = ambush_fastrope( "ambush_fastroper_mid_6", undefined, 0, 3, 4 );
}
ambush_fastrope( var_0, var_1, var_2, var_3, var_4 )
{
var_5 = getent( var_0, "targetname" );
var_6 = var_5 maps\_utility::spawn_ai( 1, 0 );
if ( maps\_utility::spawn_failed( var_6 ) )
return;
if ( !isdefined( var_1 ) )
var_1 = var_0 + "_node";
else
var_1 = var_1 + "_node";
var_6 thread maps\factory_anim::ambush_fastrope_do_anim( var_1, var_2, var_3, var_4 );
return var_6;
}
ambush_groundtroops_01()
{
level waittill( "ambush_door_breached" );
maps\factory_util::safe_trigger_by_noteworthy( "ambush_groundtroops_01_trigger" );
common_scripts\utility::flag_wait( "ambush_smoke_01" );
maps\factory_util::safe_trigger_by_targetname( "ambush_groundtroops_01_far_killspawner" );
common_scripts\utility::flag_wait( "ambush_thermal_allies_movedup_01" );
maps\factory_util::safe_trigger_by_targetname( "ambush_groundtroops_01_killspawner" );
}
ambush_dest_screens()
{
}
ambush_dest_screen()
{
}
ambush_weapons_drop()
{
level waittill( "ambush_door_breached" );
wait 0.3;
var_0 = spawn( "weapon_mts255+eotech_sp", ( 5120, -1840, 256 ) );
var_0.angles = ( randomfloatrange( 0, 360 ), randomfloatrange( 0, 360 ), randomfloatrange( 0, 360 ) );
var_0 = spawn( "weapon_gm6+scopegm6_sp", ( 5062, -1328, 256 ) );
var_0.angles = ( randomfloatrange( 0, 360 ), randomfloatrange( 0, 360 ), randomfloatrange( 0, 360 ) );
var_0 = spawn( "weapon_mts255+eotech_sp", ( 5414, -1902, 260 ) );
var_0.angles = ( randomfloatrange( 0, 360 ), randomfloatrange( 0, 360 ), randomfloatrange( 0, 360 ) );
var_0 = spawn( "weapon_m27", ( 5374, -2132, 260 ) );
var_0.angles = ( randomfloatrange( 0, 360 ), randomfloatrange( 0, 360 ), randomfloatrange( 0, 360 ) );
var_0 = spawn( "weapon_gm6+scopegm6_sp", ( 4838, -2626, 381 ) );
var_0.angles = ( randomfloatrange( 0, 360 ), randomfloatrange( 0, 360 ), randomfloatrange( 0, 360 ) );
var_0 = spawn( "weapon_gm6+scopegm6_sp", ( 4184, -2433, 381 ) );
var_0.angles = ( randomfloatrange( 0, 360 ), randomfloatrange( 0, 360 ), randomfloatrange( 0, 360 ) );
}
ambush_riotshield_no_melee()
{
for (;;)
{
if ( player_is_using_riot_shield() )
level.player.dontmelee = 1;
if ( !player_is_using_riot_shield() )
level.player.dontmelee = undefined;
wait 0.1;
}
}
player_is_using_riot_shield()
{
var_0 = level.player getcurrentweapon();
if ( var_0 == "riotshield_iw6_sp" )
return 1;
else
return 0;
}
thermal_battle_logic()
{
common_scripts\utility::flag_wait( "ambush_moment_clear" );
thread safety_to_prevent_rushing();
common_scripts\utility::flag_set( "ambush_prep_smoke_01" );
wait 1.5;
thread ambush_allies_throw_smoke();
thread ambush_thermal_off_flashbangs();
common_scripts\utility::flag_wait( "ambush_smoke_01" );
thread maps\factory_fx::fx_ambush_spawn_assembly_smoke();
thread maps\factory_anim::force_smoke_reaction_anims();
wait 1.0;
maps\_utility::autosave_by_name_silent( "ambush" );
thread ambush_smoke_penalty();
level thread thermal_battle_elongate();
common_scripts\utility::flag_wait_any( "ambush_thermal_allies_movedup_01", "player_left_ambush_room" );
common_scripts\utility::flag_wait( "walking_cough_guy_done" );
foreach ( var_1 in level.squad )
{
var_1 stopanimscripted();
var_1 maps\factory_util::enable_awareness();
var_1 maps\_utility::enable_ai_color();
var_1.usechokepoints = 1;
var_1 pushplayer( 0 );
}
waittillframeend;
wait 3.0;
maps\factory_util::safe_trigger_by_targetname( "ambush_allies_move_up" );
common_scripts\utility::array_thread( level.squad, ::ally_start_aggressive_advance );
thread ambush_riotshield_smoke();
thread wait_and_kill_guys_in_volume( 2, "ambush_far_kill_volume" );
wait 3.0;
level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_mrk_cleanhouseweneed" );
thread ambush_groundtroops_02();
thread ambush_allies_move_down_lanes();
wait 5;
common_scripts\utility::flag_wait_any( "ambush_progress_flag_1", "ambush_groundtroops_02_clear" );
var_3 = getent( "assembly_lanes_backstab_prevention", "targetname" );
badplace_brush( "assembly_lane_backstab_preventer", 0, var_3, "axis" );
wait 3.0;
thread ambush_cleanup_left_room();
maps\_utility::autosave_by_name_silent( "ambush" );
maps\factory_util::safe_trigger_by_noteworthy( "ambush_groundtroops_03_trigger" );
thread ambush_riotshield_back();
thread ambush_set_lower_back_clear();
thread ambush_wave_03_killcounter();
common_scripts\utility::flag_wait_any( "ambush_wave_3_done", "ambush_player_approaching_mezzanine" );
if ( !common_scripts\utility::flag( "ambush_player_approaching_mezzanine" ) )
thread ambush_allies_move_up_stairs();
maps\_utility::autosave_by_name_silent( "ambush" );
common_scripts\utility::flag_wait_any( "ambush_player_on_mezzanine_right", "ambush_player_on_mezzanine_left" );
thread wait_and_kill_guys_in_volume( 0.5, "ambush_back_corner_lower" );
if ( common_scripts\utility::flag( "ambush_player_on_mezzanine_left" ) )
thread ambush_wave_4_left_path();
else
thread ambush_wave_4_right_path();
maps\_utility::waittill_aigroupcount( "ambush_groundtroops_04", 2 );
maps\factory_util::safe_trigger_by_targetname( "ambush_sec_office_allies_postup" );
var_4 = maps\_utility::get_ai_group_ai( "ambush_groundtroops_04" );
foreach ( var_6 in var_4 )
{
var_6 thread maps\factory_util::playerseek();
var_6.aggressivemode = 1;
}
common_scripts\utility::flag_wait( "ambush_groundtroops_04_clear" );
maps\factory_util::safe_trigger_by_targetname( "ambush_escape_allies_goto_office" );
common_scripts\utility::flag_set( "thermal_battle_clear" );
}
safety_to_prevent_rushing()
{
level endon( "safe_to_advance" );
level endon( "safety_timeout" );
var_0 = 12;
var_1 = 0;
while ( !common_scripts\utility::flag( "ambush_player_approaching_mezzanine" ) )
{
wait 0.1;
var_1 = var_1 + 0.1;
if ( var_1 >= var_0 )
level notify( "safety_timeout" );
}
var_2 = maps\_utility::get_closest_ai( level.player.origin, "axis" );
while ( level.player.health > 25 )
{
if ( isdefined( var_2 ) && isalive( var_2 ) )
level.player dodamage( 30, var_2.origin, var_2, var_2, "MOD_RIFLE_BULLET" );
else
{
var_3 = getent( "ambush_fastroper_mid_5_node", "targetname" );
level.player dodamage( 30, var_3.origin, undefined, undefined, "MOD_RIFLE_BULLET" );
}
wait 0.2;
}
level.player kill();
}
ambush_allies_throw_smoke()
{
level.player.threatbias = -1000;
level.squad["ALLY_ALPHA"] thread maps\factory_anim::ambush_ally_throw_smoke( "throw_smoke_node_03", "alpha_smoke_throw_node", "pop_smoke_ally01", undefined, 4 );
level.squad["ALLY_BRAVO"] thread maps\factory_anim::ambush_ally_throw_smoke( "throw_smoke_node_02", "ambush_anim_node", "pop_smoke_ally02", undefined, 2.5, "pop_smoke_enter_ally02" );
level.squad["ALLY_CHARLIE"] thread maps\factory_anim::ambush_ally_throw_smoke( "throw_smoke_node_01", "ambush_anim_node", "pop_smoke_ally03", undefined, 2.0, "pop_smoke_enter_ally03" );
}
thermal_battle_elongate()
{
wait 8;
common_scripts\utility::flag_set( "ambush_thermal_allies_movedup_01" );
foreach ( var_1 in level.squad )
var_1 thread ally_pick_up_weapon();
}
ally_pick_up_weapon()
{
level endon( "thermal_battle_clear" );
wait_until_out_of_sight();
if ( self == level.squad["ALLY_ALPHA"] )
maps\_utility::forceuseweapon( "cz805bren+reflex_sp", "primary" );
else if ( self == level.squad["ALLY_BRAVO"] )
maps\_utility::forceuseweapon( "pp19+reflexsmg_sp", "primary" );
else if ( self == level.squad["ALLY_CHARLIE"] )
maps\_utility::forceuseweapon( "m27", "primary" );
}
wait_until_out_of_sight()
{
level endon( "thermal_battle_clear" );
for (;;)
{
if ( level.player maps\_utility::player_can_see_ai( self ) )
break;
wait 0.25;
}
}
ambush_cleanup_left_room()
{
maps\factory_util::safe_trigger_by_targetname( "ambush_left_room_killspawner" );
thread wait_and_kill_guys_in_volume( 0, "left_room_cleanup_vol" );
}
ambush_groundtroops_02()
{
maps\factory_util::safe_trigger_by_noteworthy( "ambush_groundtroops_02_trigger" );
level notify( "safe_to_advance" );
maps\_utility::waittill_aigroupcount( "ambush_groundtroops_02", 3 );
common_scripts\utility::flag_set( "ambush_groundtroops_02_clear" );
}
ambush_allies_move_down_lanes()
{
common_scripts\utility::flag_wait( "ambush_allies_move_down_lanes" );
common_scripts\utility::flag_wait( "ambush_riotshield_smoke_clear" );
maps\factory_util::safe_trigger_by_targetname( "ambush_allies_move_down_lanes" );
common_scripts\utility::flag_wait( "ambush_corner_allies_push" );
maps\factory_util::safe_trigger_by_targetname( "ambush_corner_allies_push" );
common_scripts\utility::array_thread( level.squad, ::ally_start_aggressive_advance );
}
ambush_set_lower_back_clear()
{
level endon( "ambush_lower_back_clear" );
level endon( "thermal_battle_clear" );
var_0 = getent( "ambush_back_corner_lower", "targetname" );
var_1 = [];
for (;;)
{
var_1 = var_0 maps\_utility::get_ai_touching_volume( "axis" );
var_2 = maps\_utility::get_ai_group_count( "riotshield_back" );
if ( !common_scripts\utility::flag( "ambush_smoke_off_tooltip" ) && ( var_2 < 2 || var_1.size < 2 ) )
common_scripts\utility::flag_set( "ambush_smoke_off_tooltip" );
if ( var_1.size <= 2 && var_2 < 1 )
{
common_scripts\utility::flag_set( "ambush_lower_back_clear" );
return;
}
wait 0.2;
}
}
ambush_allies_move_up_stairs()
{
common_scripts\utility::flag_wait_any( "ambush_lower_back_clear", "ambush_player_on_mezzanine_right", "ambush_player_on_mezzanine_left" );
common_scripts\utility::flag_set( "ambush_lower_back_clear" );
maps\factory_util::safe_delete_targetname( "ambush_corner_allies_push" );
maps\factory_util::safe_trigger_by_targetname( "ambush_back_corner_allies_push" );
maps\factory_util::safe_trigger_by_targetname( "ambush_groundtroops_03_killspawner" );
maps\_utility::delaythread( 3.0, common_scripts\utility::flag_set, "music_ambush_battle_ends" );
wait 2.2;
level.squad["ALLY_ALPHA"] thread maps\_utility::smart_dialogue( "factory_bkr_upthestairs" );
}
ambush_groundtroops_02_fallback()
{
var_0 = getent( "ambush_groundtroops_02_cleanup_a", "targetname" );
var_1 = var_0 maps\_utility::get_ai_touching_volume( "axis" );
thread maps\factory_util::safe_set_goal_volume( var_1, "ambush_groundtroops_02_cleanup_b" );
}
ambush_wave_03_killcounter()
{
maps\_utility::waittill_aigroupcount( "ambush_wave_03", 3 );
maps\factory_util::safe_trigger_by_noteworthy( "ambush_groundtroops_035_trigger" );
maps\_utility::waittill_aigroupcount( "ambush_wave_035", 2 );
maps\_utility::waittill_aigroupcount( "ambush_wave_03", 1 );
maps\factory_util::safe_trigger_by_targetname( "ambush_groundtroops_03_killspawner" );
var_0 = getent( "ambush_back_corner_volume", "targetname" );
var_1 = var_0 maps\_utility::get_ai_touching_volume( "axis" );
common_scripts\utility::array_thread( var_1, maps\factory_util::playerseek );
wait 2.0;
common_scripts\utility::flag_set( "ambush_wave_3_done" );
common_scripts\utility::flag_set( "ambush_expl_03" );
}
ambush_wave_4_left_path()
{
maps\factory_util::safe_trigger_by_targetname( "ambush_sec_office_allies_push" );
maps\factory_util::safe_trigger_by_noteworthy( "ambush_groundtroops_04_trigger" );
}
ambush_wave_4_right_path()
{
maps\factory_util::safe_trigger_by_targetname( "ambush_back_corner_allies_right_path" );
var_0 = getentarray( "ambush_groundtroops_04", "targetname" );
foreach ( var_2 in var_0 )
{
if ( isdefined( var_2.script_parameters ) )
var_2.target = var_2.script_parameters;
}
maps\factory_util::safe_trigger_by_noteworthy( "ambush_groundtroops_04_trigger" );
}
ambush_thermal_off_flashbangs()
{
common_scripts\utility::flag_wait( "ambush_smoke_off_tooltip" );
wait 2.2;
var_0 = getentarray( "flash_node_start", "targetname" );
foreach ( var_4, var_2 in var_0 )
{
var_3 = getent( var_2.target, "targetname" );
thread wait_and_flashbang( var_2, var_3 );
}
level.player thread ambush_thermal_player_flash();
common_scripts\utility::flag_set( "ambush_stop_smoke" );
level.player.grenadetimers["fraggrenade"] = level.player.grenadetimers["fraggrenade"] + randomintrange( 6000, 12000 );
anim.grenadetimers["AI_fraggrenade"] = anim.grenadetimers["AI_fraggrenade"] + randomintrange( 6000, 12000 );
common_scripts\utility::flag_set( "ambush_expl_01" );
wait 9;
thread maps\factory_audio::sfx_explo_after_flashbang();
common_scripts\utility::flag_set( "ambush_expl_02" );
radiusdamage( ( 5378, -2197, 262 ), 200, 400, 100 );
}
wait_and_flashbang( var_0, var_1 )
{
wait( randomfloatrange( 0, 0.25 ) );
var_2 = magicgrenade( "flash_grenade", var_0.origin, var_1.origin, 2.5 );
if ( isdefined( var_2 ) )
{
var_2 waittill( "death" );
level.player notify( "flashed" );
}
}
ambush_thermal_player_flash()
{
level endon( "thermal_battle_clear" );
common_scripts\utility::waittill_any( "flashbang", "flashed" );
common_scripts\utility::flag_set( "ambush_thermal_flashed" );
self stopshellshock();
self shellshock( "flashbang", 2.5 );
common_scripts\utility::flag_set( "ambush_arm_malfunction" );
self enablehealthshield( 1 );
self.threatbias = -2000;
wait 7.0;
self enablehealthshield( 0 );
wait 5.0;
self.threatbias = -750;
wait 5.0;
self.threatbias = level.ambush_threat_boost;
}
ambush_riotshield_smoke()
{
var_0 = getentarray( "ambush_riotshield_02", "targetname" );
var_1 = [];
foreach ( var_3 in var_0 )
{
var_4 = var_3 maps\_utility::spawn_ai( 1 );
var_4.destination = getent( var_3.target, "targetname" );
var_4.health = 100;
var_1[var_1.size] = var_4;
}
waittillframeend;
foreach ( var_4 in var_1 )
{
if ( isalive( var_4 ) && isdefined( var_4.destination ) )
{
var_4.goalradius = 16;
var_4 setgoalpos( var_4.destination.origin );
}
}
var_8 = common_scripts\utility::flag_wait_any_return( "riotshield_cleanup_left", "riotshield_cleanup_right" );
if ( var_8 == "riotshield_cleanup_left" )
var_1 = maps\_utility::get_ai_group_ai( "riotshield_right" );
else
var_1 = maps\_utility::get_ai_group_ai( "riotshield_left" );
foreach ( var_4 in var_1 )
var_4 thread kill_after_time( 1, 3 );
}
ambush_riotshield_back()
{
var_0 = getentarray( "ambush_riotshield_03", "targetname" );
var_1 = [];
foreach ( var_3 in var_0 )
{
var_4 = var_3 maps\_utility::spawn_ai();
if ( !maps\_utility::spawn_failed( var_4 ) )
{
var_4.fixednode = 1;
var_4.health = 100;
var_1[var_1.size] = var_4;
}
}
thread ambush_riotshield_back_cleanup( var_1 );
maps\_utility::waittill_aigroupcount( "riotshield_back", 1 );
foreach ( var_4 in var_1 )
var_4 thread kill_after_time( 12 );
}
ambush_riotshield_back_cleanup( var_0 )
{
common_scripts\utility::flag_wait_any( "ambush_player_on_mezzanine_right", "ambush_player_on_mezzanine_left" );
foreach ( var_2 in var_0 )
{
if ( isdefined( var_2 ) && isalive( var_2 ) )
{
var_2.health = 1;
var_2 thread kill_after_time( 20 );
}
}
}
show_thermal_tooltip( var_0, var_1 )
{
level endon( "thermal_battle_clear" );
if ( isdefined( var_0 ) && var_0 == 1 )
{
level.show_thermal_hint = 1;
if ( isdefined( var_1 ) )
{
var_2 = "HINT_THERMAL_SHORT";
level.trigger_hint_func["HINT_THERMAL_SHORT"] = ::thermal_hint_func_on;
}
else
var_2 = "HINT_THERMAL";
}
else
{
level.show_thermal_off_hint = 1;
if ( isdefined( var_1 ) )
{
var_2 = "HINT_THERMAL_OFF_SHORT";
level.trigger_hint_func["HINT_THERMAL_OFF_SHORT"] = ::thermal_hint_func_off;
}
else
var_2 = "HINT_THERMAL_OFF";
}
if ( level.show_thermal_hint == 1 )
{
if ( level.player.thermal == 0 && level.player.thermal_anim_active == 0 )
level.player thread maps\_utility::display_hint( var_2 );
}
else if ( level.show_thermal_off_hint == 1 )
{
if ( level.player.thermal == 1 && level.player.thermal_anim_active == 0 )
level.player thread maps\_utility::display_hint( var_2 );
}
wait 10;
level.show_thermal_hint = 0;
level.show_thermal_off_hint = 0;
}
thermal_hint_func_on()
{
return level.player.thermal;
}
thermal_hint_func_off()
{
return !level.player.thermal;
}
hint_thermal_timeout()
{
if ( !level.show_thermal_hint )
return 1;
return 0;
}
hint_thermal_off_timeout()
{
if ( !level.show_thermal_off_hint )
return 1;
return 0;
}
thermal_off_tooltip_handler()
{
common_scripts\utility::flag_wait( "ambush_thermal_flashed" );
wait 0.5;
if ( level.player.thermal == 1 )
level thread show_thermal_tooltip( 0 );
}
ambush_smoke_penalty()
{
level endon( "stop_smoke_penalty" );
var_0 = getent( "ambush_smoke_volume", "targetname" );
var_1 = getent( "ambush_cleanup_volume", "targetname" );
var_2 = "ambush_stop_smoke";
var_3 = level.player.maxvisibledist;
var_4 = level.player.attackeraccuracy;
for (;;)
{
if ( isdefined( var_0 ) && level.player istouching( var_0 ) )
{
level.player.threatbias = -300;
level.player.maxvisibledist = 475;
level.player.attackeraccuracy = 0.15;
}
else if ( isdefined( var_0 ) && !level.player istouching( var_0 ) )
{
level.player.threatbias = level.ambush_threat_boost;
level.player.ignoreme = 0;
level.player.maxvisibledist = var_3;
level.player.attackeraccuracy = var_4;
}
var_5 = var_1 maps\_utility::get_ai_touching_volume( "axis" );
foreach ( var_7 in var_5 )
{
if ( !isdefined( var_7.ambush_original_accuracy ) )
var_7.ambush_original_accuracy = var_7.script_accuracy;
if ( isdefined( var_0 ) && var_7 istouching( var_0 ) )
{
var_7.script_accuracy = 0.08;
continue;
}
var_7.script_accuracy = var_7.ambush_original_accuracy;
}
if ( common_scripts\utility::flag( var_2 ) && isdefined( var_0 ) )
{
var_0 delete();
wait 5;
var_5 = var_1 maps\_utility::get_ai_touching_volume( "axis" );
foreach ( var_7 in var_5 )
var_7.script_accuracy = 2;
maps\_utility::clear_custom_gameskill_func();
common_scripts\utility::flag_set( "stop_smoke_penalty" );
}
wait 0.25;
}
}
enemy_smoke_reaction( var_0 )
{
maps\_utility::enable_cqbwalk();
thread enemy_smoke_reaction_vision( var_0 );
thread enemy_smoke_reaction_anim( var_0 );
}
enemy_smoke_reaction_vision( var_0 )
{
self endon( "death" );
common_scripts\utility::flag_wait( "ambush_smoke_01" );
var_1 = self.maxsightdistsqrd;
for (;;)
{
wait( randomfloatrange( 0.25, 1.5 ) );
if ( !isdefined( var_0 ) )
return;
if ( self istouching( var_0 ) )
{
self.maxsightdistsqrd = 4096;
wait( randomfloatrange( 1.0, 4.0 ) );
self.maxsightdistsqrd = var_1;
}
}
}
enemy_smoke_reaction_anim( var_0 )
{
self endon( "death" );
level endon( "ambush_stop_smoke" );
common_scripts\utility::flag_wait( "ambush_smoke_01" );
self.animarchetype = "factory_smoke";
for (;;)
{
wait( randomfloatrange( 1.5, 3.0 ) );
if ( !isdefined( var_0 ) )
return;
if ( self istouching( var_0 ) && !isdefined( self.smoke_immune ) )
{
if ( isdefined( self.node ) )
{
self.animname = "generic";
self.allowdeath = 1;
self.claimed_node = self.node;
self.keepclaimednode = 1;
switch ( self.script )
{
case "cover_crouch":
maps\_anim::anim_single_solo( self, common_scripts\utility::random( [ "factory_ambush_smoke_CornerCr_01", "factory_ambush_smoke_CornerCr_02" ] ) );
break;
case "cover_right":
maps\_anim::anim_single_solo( self, common_scripts\utility::random( [ "factory_ambush_smoke_CornerCrR_01", "factory_ambush_smoke_CornerCrR_02", "factory_ambush_smoke_CornerCrR_03" ] ) );
break;
case "cover_left":
maps\_anim::anim_single_solo( self, common_scripts\utility::random( [ "factory_ambush_smoke_CornerCrL_01", "factory_ambush_smoke_CornerCrL_02", "factory_ambush_smoke_CornerCrL_03" ] ) );
break;
case "cover_stand":
maps\_anim::anim_single_solo( self, common_scripts\utility::random( [ "factory_ambush_smoke_stand_01", "factory_ambush_smoke_stand_02" ] ) );
break;
}
self.keepclaimednode = 0;
}
}
}
}
ally_smoke_reaction_vision( var_0 )
{
self endon( "death" );
common_scripts\utility::flag_wait( "ambush_smoke_01" );
var_1 = self.maxvisibledist;
for (;;)
{
wait( randomfloatrange( 1.0, 3.0 ) );
if ( !isdefined( self ) || !isalive( self ) )
return;
if ( !isdefined( var_0 ) )
{
self.ignoreme = 0;
self.maxvisibledist = var_1;
return;
}
if ( self istouching( var_0 ) )
{
self.maxvisibledist = 256;
wait( randomfloatrange( 1.0, 3.0 ) );
if ( !isdefined( self ) || !isalive( self ) )
self.maxvisibledist = var_1;
}
}
}
ambush_smoke_close_enemies()
{
common_scripts\utility::flag_wait( "player_left_ambush_room" );
while ( !common_scripts\utility::flag( "ambush_stop_smoke" ) )
{
var_0 = maps\_utility::get_closest_ai( level.player.origin, "axis" );
if ( isalive( var_0 ) && maps\_utility::players_within_distance( 512, var_0.origin ) )
{
var_0 thread maps\_utility::player_seek();
var_0 thread maps\_utility::set_favoriteenemy( level.player );
var_0.dontevershoot = 1;
var_0.smoke_immune = 1;
var_0.maxvisibledist = 128;
var_0 common_scripts\utility::waittill_any_timeout( 10, "death" );
}
wait 1;
}
}
kill_after_time( var_0, var_1 )
{
self endon( "death" );
if ( isdefined( var_1 ) )
wait( randomfloatrange( var_0, var_1 ) );
else
wait( var_0 );
if ( isdefined( self ) && isai( self ) && isalive( self ) )
self kill();
}
wait_and_kill_guys_in_volume( var_0, var_1 )
{
if ( var_0 > 0 )
wait( var_0 );
var_2 = getent( var_1, "targetname" );
var_3 = var_2 maps\_utility::get_ai_touching_volume( "axis" );
foreach ( var_5 in var_3 )
var_5 thread kill_after_time( 0.0, 3.0 );
}
ambush_fan_spin( var_0 )
{
level endon( "stop_assembly_line" );
for (;;)
{
if ( !isdefined( self ) )
return;
self rotatepitch( 360, 12 );
wait 12;
}
}
ally_start_aggressive_advance()
{
if ( !isdefined( self ) || !issentient( self ) || !isalive( self ) )
return;
var_0 = self.goalradius;
self.goalradius = 4;
self.ignoreall = 1;
self.ignoresuppression = 1;
self.ignorerandombulletdamage = 1;
maps\_utility::disable_bulletwhizbyreaction();
maps\_utility::disable_pain();
maps\_utility::disable_danger_react();
self.grenadeawareness = 0;
self waittill( "goal" );
self.goalradius = var_0;
ally_end_aggressive_advance();
}
ally_end_aggressive_advance()
{
if ( !isdefined( self ) || !issentient( self ) || !isalive( self ) )
return;
self.ignoreall = 0;
self.ignoresuppression = 0;
self.ignorerandombulletdamage = 0;
maps\_utility::enable_bulletwhizbyreaction();
maps\_utility::enable_pain();
self.grenadeawareness = 1;
}
ambush_cleanup( var_0 )
{
if ( !isdefined( var_0 ) )
{
var_1 = getent( "ambush_cleanup_volume", "targetname" );
var_2 = var_1 maps\_utility::get_ai_touching_volume( "axis" );
foreach ( var_4 in var_2 )
{
if ( isdefined( var_4 ) && isai( var_4 ) && var_4.team == "axis" )
var_4 kill();
}
}
common_scripts\utility::flag_set( "ambush_smoke_01" );
common_scripts\utility::flag_set( "thermal_battle_clear" );
common_scripts\utility::flag_set( "ambush_thermal_flashed" );
maps\factory_util::safe_trigger_by_targetname( "ambush_groundtroops_01_killspawner" );
maps\factory_util::safe_trigger_by_targetname( "ambush_groundtroops_02_killspawner" );
maps\factory_util::safe_trigger_by_targetname( "ambush_groundtroops_03_killspawner" );
maps\factory_util::safe_trigger_by_targetname( "ambush_groundtroops_04_killspawner" );
maps\factory_util::safe_trigger_by_targetname( "ambush_fastropers_killspawner" );
maps\factory_util::safe_delete_noteworthy( "ambush_fastropers" );
maps\factory_util::safe_delete_targetname( "ambush_groundtroops_01" );
maps\factory_util::safe_delete_targetname( "ambush_groundtroops_02" );
maps\factory_util::safe_delete_targetname( "ambush_groundtroops_03" );
maps\factory_util::safe_delete_targetname( "ambush_groundtroops_035" );
maps\factory_util::safe_delete_targetname( "ambush_groundtroops_04" );
maps\factory_util::safe_delete_targetname( "ambush_riotshield_01" );
maps\factory_util::safe_delete_targetname( "ambush_riotshield_02" );
maps\factory_util::safe_delete_targetname( "ambush_riotshield_03" );
maps\factory_util::safe_delete_targetname( "ambush_window_breacher_extra" );
maps\factory_util::safe_delete_targetname( "ambush_window_breacher_extra" );
maps\factory_util::safe_delete_targetname( "ambush_trigger_cleanup" );
maps\factory_util::safe_delete_noteworthy( "ambush_groundtroops_02_trigger" );
maps\factory_util::safe_delete_noteworthy( "ambush_groundtroops_04_trigger" );
maps\factory_util::safe_delete_targetname( "ambush_groundtroops_02_killspawner" );
maps\factory_util::safe_delete_targetname( "ambush_groundtroops_03_killspawner" );
maps\factory_util::safe_delete_targetname( "ambush_groundtroops_04_killspawner" );
maps\factory_util::safe_delete_linkname( "ambush_cleanup_object" );
if ( !isdefined( var_0 ) )
{
badplace_delete( "assembly_lane_backstab_preventer" );
maps\_utility::battlechatter_off();
foreach ( var_7 in level.squad )
{
var_7 notify( "cleanup_grenade_throw" );
var_7.suppressionwait = 3000;
var_7.script_accuracy = 1.0;
var_7.usechokepoints = 1;
}
maps\_utility::clear_custom_gameskill_func();
}
level thread maps\factory_anim::factory_assembly_line_cleanup( var_0 );
}
attach_mover_prefab()
{
if ( !isdefined( level.mover_prefabs ) )
create_ambush_mover_prefabs();
for ( var_0 = 0; var_0 < level.mover_prefabs.size; var_0++ )
{
if ( level.mover_prefabs[var_0].in_use == 0 )
{
level.mover_prefabs[var_0].in_use = 1;
var_1 = self gettagorigin( "J_anim_jnt_top_arm_holder" );
level.mover_prefabs[var_0].origin = var_1;
level.mover_prefabs[var_0] linkto( self, "J_anim_jnt_top_arm_holder" );
self.mover_prefab_id = var_0;
return;
}
}
}
detach_mover_prefab()
{
level.mover_prefabs[self.mover_prefab_id].in_use = 0;
self unlink();
}
create_ambush_mover_prefabs()
{
level.mover_prefabs = [];
var_0 = 8;
for ( var_1 = 0; var_1 < var_0; var_1++ )
level.mover_prefabs[level.mover_prefabs.size] = create_mover_prefab( "ambush_mover_prefab", var_1 + 1 );
}
create_mover_prefab( var_0, var_1 )
{
var_2 = undefined;
var_3 = undefined;
var_4 = [];
var_5 = var_0 + "_" + var_1;
var_6 = getentarray( var_5, "targetname" );
foreach ( var_8 in var_6 )
{
if ( var_8.code_classname == "script_brushmodel" )
{
var_4[var_4.size] = var_8;
continue;
}
if ( var_8.code_classname == "script_origin" )
{
if ( isdefined( var_8.script_noteworthy ) )
var_3 = var_8;
else
{
var_2 = var_8;
var_2.audio_org = undefined;
}
continue;
}
}
foreach ( var_11 in var_4 )
var_11 linkto( var_2 );
if ( isdefined( var_3 ) )
{
var_3 linkto( var_2 );
var_2.audio_org = var_3;
}
var_2.in_use = 0;
return var_2;
}
setup_ambush_flood_spawner_limited_triggers()
{
if ( !isdefined( level.flood_spawner_limited_cap ) )
level.flood_spawner_limited_cap = 15;
var_0 = getentarray( "flood_spawner_limited", "targetname" );
foreach ( var_2 in var_0 )
thread flood_trigger_limited_think( var_2 );
}
flood_trigger_limited_think( var_0 )
{
var_1 = getentarray( var_0.target, "targetname" );
common_scripts\utility::array_thread( var_1, ::flood_spawner_limited_init );
var_0 waittill( "trigger" );
var_1 = getentarray( var_0.target, "targetname" );
foreach ( var_3 in var_1 )
{
var_3 thread flood_spawner_limited_think( var_0 );
wait 0.1;
}
}
flood_spawner_limited_init( var_0 )
{
}
flood_spawner_limited_think( var_0 )
{
self endon( "death" );
self notify( "stop current floodspawner" );
self endon( "stop current floodspawner" );
maps\_utility::script_delay();
while ( self.count > 0 )
{
var_1 = isdefined( self.script_stealth ) && common_scripts\utility::flag( "_stealth_enabled" ) && !common_scripts\utility::flag( "_stealth_spotted" );
var_2 = getaiarray( "axis" );
if ( var_2.size >= level.flood_spawner_limited_cap )
{
wait( randomfloatrange( 0.8, 1.2 ) );
continue;
}
if ( isdefined( self.script_forcespawn ) )
var_3 = self stalingradspawn( var_1 );
else
var_3 = self dospawn( var_1 );
if ( maps\_utility::spawn_failed( var_3 ) )
{
wait 1;
continue;
}
var_2 = getaiarray( "axis" );
var_3 thread maps\_spawner::reincrement_count_if_deleted( self );
var_3 thread maps\_spawner::expand_goalradius( var_0 );
var_3 waittill( "death", var_4 );
if ( !maps\_spawner::player_saw_kill( var_3, var_4 ) )
self.count++;
if ( !isdefined( var_3 ) )
continue;
if ( !maps\_utility::script_wait() )
wait( randomfloatrange( 5, 9 ) );
}
}