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

2109 lines
76 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
friendly_stream_navigation()
{
level.close_stream_enemies = [];
var_0 = getentarray( "watersheet", "targetname" );
common_scripts\utility::array_thread( var_0, ::watersheet_trig_setup );
thread stream_vo();
switch ( level.start_point )
{
case "jungle_hill":
case "jungle_corridor":
case "parachute":
case "default":
thread jungle_cleanup();
case "stream":
case "waterfall":
thread second_distant_sat_launch();
common_scripts\utility::flag_wait( "player_rescued_hostage" );
thread chopper_crash();
thread chopper_hear_vo();
level.squad = common_scripts\utility::array_combine( level.alpha, level.bravo );
common_scripts\utility::flag_wait( "second_distant_sat_launch" );
common_scripts\utility::array_thread( level.squad, maps\jungle_ghosts_util::stream_waterfx, "stop_water_footsteps", "step_walk_water" );
common_scripts\utility::array_thread( level.bravo, maps\_utility::set_force_color, "b" );
level.alpha2 maps\_utility::set_force_color( "g" );
common_scripts\utility::array_thread( level.squad, maps\_utility::enable_ai_color );
common_scripts\utility::array_thread( level.squad, maps\jungle_ghosts_util::generic_ignore_on );
common_scripts\utility::flag_wait( "obj_get_to_river" );
if ( !common_scripts\utility::flag( "waterfall_to_stream" ) )
maps\_utility::activate_trigger_with_targetname( "stream_pos_1" );
var_1 = getentarray( "stream_color_trigs", "script_noteworthy" );
common_scripts\utility::array_thread( var_1, common_scripts\utility::trigger_off );
common_scripts\utility::flag_wait( "chopper_crash_arrive" );
maps\_utility::autosave_by_name( "stream_fight" );
thread stream_player_rushes_chopper();
common_scripts\utility::flag_wait_any( "smaw_target_detroyed", "stream_heli_out" );
thread stream_fight_goes_hot();
thread stream_fight_stealth();
common_scripts\utility::flag_wait( "bridge_area_exit" );
var_1 = getentarray( "stream_color_trigs", "script_noteworthy" );
common_scripts\utility::array_thread( var_1, common_scripts\utility::trigger_off );
common_scripts\utility::flag_wait( "squad_to_waterfall_ambush" );
case "stream waterfall":
maps\_utility::autosave_by_name( "waterfall_ambush" );
if ( !common_scripts\utility::flag( "stream_backend_start" ) )
{
if ( !common_scripts\utility::flag( "ambush_open_fire" ) )
{
maps\_utility::activate_trigger_with_targetname( "waterfall_ambush_setup" );
var_2 = getent( "ambush_area", "targetname" );
badplace_cylinder( "axis_badplace", -1, var_2.origin, 353, 200, "axis" );
ambush_stealth_settings();
var_3 = [];
while ( var_3.size != level.squad.size && !common_scripts\utility::flag( "stream_backend_start" ) )
{
foreach ( var_5 in level.squad )
{
if ( var_5 istouching( var_2 ) && !maps\_utility::is_in_array( var_3, var_5 ) )
var_3 = common_scripts\utility::add_to_array( var_3, var_5 );
}
wait 0.5;
}
foreach ( var_5 in var_3 )
var_5.perfectaim = 1;
var_3 = undefined;
common_scripts\utility::flag_set( "squad_in_ambush_position" );
maps\_stealth_utility::stealth_detect_ranges_set( level.ambush_hidden_settings );
thread player_ambush_area_monitor( var_2 );
common_scripts\utility::flag_wait( "player_in_ambush_position" );
common_scripts\utility::flag_set( "waterfall_ambush_begin" );
thread waterfall_goes_hot();
common_scripts\utility::flag_wait_any( "waterfall_patrollers_dead", "waterfall_patrollers_passed", "player_rushed_waterfall_passers" );
thread common_scripts\utility::play_sound_in_space( "scn_sold1_enemy_radio_static", ( 3588, 5594, 628 ) );
maps\_utility::autosave_by_name( "stream_backend" );
wait 4;
common_scripts\utility::array_thread( level.squad, maps\_utility::enable_ai_color );
foreach ( var_5 in level.squad )
var_5.perfectaim = 0;
}
else
maps\_utility::activate_trigger_with_targetname( "stream2_pos1" );
}
common_scripts\utility::flag_set( "waterfall_ambush_over" );
case "stream backend":
if ( !common_scripts\utility::flag( "stream_backend_start" ) )
maps\_utility::activate_trigger_with_targetname( "stream2_pos1" );
var_11 = maps\jungle_ghosts_jungle::jungle_enemy_logic;
maps\_utility::array_spawn_function_targetname( "tall_grass_intro_guys_stealth", var_11, "zero", 1 );
maps\_utility::array_spawn_function_targetname( "tall_grass_intro_guys_stealth", ::pre_tall_grass_patroller_break_on_sight );
maps\_utility::array_spawn_function_noteworthy( "tall_grass_patroller", ::pre_tall_grass_patroller_logic );
common_scripts\utility::flag_wait( "stream_exit" );
if ( common_scripts\utility::flag( "ambush_open_fire" ) )
{
var_12 = getent( "stream_backend_moveup_stealth", "targetname" );
var_12 delete();
common_scripts\utility::flag_wait_any( "stream_backend_enemies_dead", "stream_backend_moveup" );
if ( !common_scripts\utility::flag( "stream_backend_moveup" ) )
maps\_utility::activate_trigger_with_targetname( "stream_backend_moveup" );
}
else
{
common_scripts\utility::array_thread( level.squad, level.ignore_on_func );
var_12 = getent( "stream_backend_moveup", "targetname" );
if ( isdefined( var_12 ) )
var_12 delete();
common_scripts\utility::flag_wait( "stream_exit" );
maps\_utility::activate_trigger_with_targetname( "stream_backend_moveup_stealth" );
common_scripts\utility::trigger_off( "stream_backend_moveup_stealth", "targetname" );
}
case "grass cold":
case "grass":
common_scripts\utility::array_thread( level.squad, ::squad_save_old_color );
var_0 = getentarray( "pre_tall_grass_color_trigs", "targetname" );
common_scripts\utility::array_thread( var_0, common_scripts\utility::trigger_off );
maps\_utility::autosave_now();
if ( !common_scripts\utility::flag( "ambush_open_fire" ) )
{
wait 0.1;
common_scripts\utility::array_thread( level.squad, maps\_utility::set_force_color, "c" );
common_scripts\utility::array_thread( level.squad, ::set_goal_ent_flags );
level thread set_up_when_patroller_goes();
}
common_scripts\utility::flag_wait( "to_grassy_field" );
if ( !common_scripts\utility::flag( "ambush_open_fire" ) )
common_scripts\utility::array_thread( level.squad, ::backend_friendly_stealth_logic );
maps\_utility::array_notify( level.squad, "stop_water_footsteps" );
level.player notify( "stop_water_footsteps" );
thread tall_grass_friendly_navigation();
}
}
set_up_when_patroller_goes()
{
common_scripts\utility::flag_wait( "begin_pre_tall_grass_scene" );
common_scripts\utility::flag_wait( "to_grassy_field" );
common_scripts\utility::flag_set( "start_pre_grass_patroller" );
}
set_goal_ent_flags()
{
maps\_utility::ent_flag_init( "at_goal" );
self waittill( "goal" );
maps\_utility::ent_flag_set( "at_goal" );
}
chopper_hear_vo()
{
level endon( "can_see_chopper" );
common_scripts\utility::flag_wait( "obj_get_to_river" );
wait 7;
level.merrick maps\_utility::smart_dialogue( "jungleg_mrk_soundslikeachoppers" );
wait 0.1;
level.alpha1 maps\_utility::smart_dialogue( "jungleg_els_ihearitthese" );
wait 0.2;
level.hesh maps\_utility::smart_dialogue( "jungleg_hsh_letsuseitto" );
}
stream_enemy_setup( var_0 )
{
level thread stream_guys_start_removing();
maps\_utility::array_spawn_function_targetname( "close_guys", ::stream_close_enemy_logic );
maps\_utility::array_spawn_function_targetname( "close_guys", ::on_death_chopper_leave_immediate );
maps\_utility::array_spawn_function_targetname( "bridge_guard", ::stream_bridge_guard_logic );
maps\_utility::array_spawn_function_targetname( "upper_stream_right", ::stream_upper_logic );
maps\_utility::array_spawn_function_targetname( "upper_stream_left", ::stream_upper_logic );
maps\_utility::array_spawn_function_noteworthy( "stream_enemies", ::stream_enemy_logic );
maps\_utility::array_spawn_function_targetname( "ambush_patrol", ::ambush_patrol_logic );
maps\_utility::array_spawn_function_targetname( "stream_backend_enemies", ::stream_enemy_logic );
maps\_utility::array_spawn_function_targetname( "tall_grass_intro_guys_stealth", ::pre_tallgrass_stealth_guys_logic );
maps\_utility::array_spawn_function_targetname( "tall_grass_intro_guys", ::pre_tallgrass_guys_logic );
switch ( var_0 )
{
case "start":
maps\_utility::array_spawn_targetname( "close_guys", 1 );
maps\_utility::array_spawn_targetname( "bridge_guard", 1 );
common_scripts\utility::flag_wait_any( "smaw_target_detroyed", "player_rushed_chopper_crash", "stream_heli_out" );
common_scripts\utility::flag_set( "stream_fight_begin" );
thread stream_enemy_setup_on_going_hot();
common_scripts\utility::flag_wait( "bridge_area_exit" );
if ( common_scripts\utility::flag( "stream_clear" ) )
{
common_scripts\utility::array_thread( level.squad, level.ignore_on_func );
common_scripts\utility::array_thread( level.squad, maps\_stealth_utility::enable_stealth_for_ai );
common_scripts\utility::flag_clear( "_stealth_spotted" );
common_scripts\utility::flag_clear( "stream_enemy_alert" );
}
if ( common_scripts\utility::flag( "bridge_area_exit" ) && ( common_scripts\utility::flag( "_stealth_spotted" ) || common_scripts\utility::flag( "stream_enemy_alert" ) ) )
common_scripts\utility::flag_set( "ambush_open_fire" );
else
{
}
level.alpha2 maps\_utility::set_force_color( "r" );
case "waterfall":
level.ambush_patrollers = maps\_utility::array_spawn_targetname( "ambush_patrol", 1 );
level thread ambush_kickoff_logic();
common_scripts\utility::flag_wait( "player_in_ambush_position" );
common_scripts\utility::flag_wait_or_timeout( "ambush_open_fire", 6 );
level.ambush_patrollers = maps\_utility::array_removedead_or_dying( level.ambush_patrollers );
level thread waterfall_check_patrollers();
var_1 = randomintrange( 0, 4 );
var_2 = "SP_" + var_1 + "_order_action_coverme";
var_1 = randomintrange( 0, 4 );
var_3 = "SP_" + var_1 + "_resp_ack_co_gnrc_affirm";
if ( isdefined( level.ambush_patrollers[0] ) )
{
level.ambush_patrollers[0] maps\_utility::delaythread( 1.5, maps\_utility::play_sound_on_tag, var_2, undefined, 1 );
level.ambush_patrollers[0] maps\_utility::delaythread( 3, maps\_utility::play_sound_on_tag, var_3, undefined, 1 );
}
common_scripts\utility::flag_wait_any( "waterfall_patrollers_dead", "waterfall_patrollers_passed", "player_rushed_waterfall_passers" );
thread pre_tall_grass_stealth_settings();
case "backend":
common_scripts\utility::flag_wait( "stream_backend_start" );
if ( common_scripts\utility::flag( "ambush_open_fire" ) )
common_scripts\utility::array_thread( level.squad, level.ignore_off_func );
level.player.ignoreme = 0;
var_4 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "stream_ambient_heli" );
var_4 maps\_vehicle::mgoff();
thread tall_grass_globals();
if ( common_scripts\utility::flag( "ambush_open_fire" ) )
{
var_5 = maps\_utility::array_spawn_targetname( "stream_backend_enemies", 1 );
wait 4.5;
var_0 = ( 4562, 7708, 844 );
var_6 = ( 4600, 5640, 810 );
var_7 = magicbullet( "rpg_straight", var_0, var_6 );
var_7 thread maps\jungle_ghosts_util::escape_earthquake_on_missile_impact();
level thread rpg_vo_react();
maps\_utility::battlechatter_on( "allies" );
}
case "none":
null_func();
}
}
null_func()
{
}
rpg_vo_react()
{
wait 0.5;
level.merrick thread maps\_utility::smart_dialogue( "jungleg_mrk_rpg" );
}
jungle_cleanup()
{
maps\jungle_ghosts_util::delete_ai_array_safe( level.hill_patrollers );
maps\jungle_ghosts_util::delete_ai_array_safe( level.jungle_enemies );
}
second_distant_sat_launch()
{
common_scripts\utility::flag_wait( "second_distant_sat_launch" );
level.player thread common_scripts\utility::play_sound_in_space( "jg_sat_launch_distant_second", level.player.origin );
earthquake( 0.15, 5, level.player.origin, 850 );
thread maps\_utility::autosave_by_name( "stream_start" );
level.player playrumblelooponentity( "damage_light" );
wait 4.5;
level.player stoprumble( "damage_light" );
}
stream_player_rushes_chopper()
{
level endon( "stream_heli_out" );
common_scripts\utility::flag_wait( "stream_rush_chopper" );
var_0 = getaiarray( "axis" );
foreach ( var_2 in var_0 )
{
var_2 thread maps\jungle_ghosts_util::manually_alert_me();
var_2.favoriteenemy = level.player;
}
}
stream_fight_goes_hot()
{
level endon( "bridge_area_exit" );
common_scripts\utility::flag_wait_any( "_stealth_spotted", "smaw_target_detroyed" );
var_0 = getaiarray( "axis" );
foreach ( var_2 in var_0 )
var_2 thread maps\jungle_ghosts_util::manually_alert_me();
var_4 = getentarray( "stream_color_trigs", "script_noteworthy" );
common_scripts\utility::array_thread( var_4, common_scripts\utility::trigger_on );
common_scripts\utility::flag_wait( "stream_fight_begin" );
if ( common_scripts\utility::flag( "smaw_target_detroyed" ) )
wait 7;
common_scripts\utility::array_thread( level.squad, level.ignore_off_func );
common_scripts\utility::array_thread( level.squad, maps\_stealth_utility::disable_stealth_for_ai );
maps\_utility::activate_trigger_with_targetname( "stream_fight_pos_1" );
level.alpha2 maps\_utility::set_force_color( "r" );
}
stream_fight_stealth()
{
level endon( "_stealth_spotted" );
common_scripts\utility::flag_wait( "stream_heli_out" );
wait 7;
var_0 = getentarray( "stream_color_trigs", "script_noteworthy" );
common_scripts\utility::array_thread( var_0, common_scripts\utility::trigger_on );
common_scripts\utility::array_thread( level.squad, common_scripts\utility::delaycall, 2, ::clearentitytarget );
maps\_utility::activate_trigger_with_targetname( "stream_fight_pos_1" );
level.alpha2 maps\_utility::set_force_color( "r" );
common_scripts\utility::flag_set( "stream_clear" );
}
stream_enemy_setup_on_going_hot()
{
level endon( "bridge_approach" );
common_scripts\utility::flag_wait_any( "_stealth_spotted", "smaw_target_detroyed" );
thread maps\jungle_ghosts_util::spawn_ai_throttled_targetname( "lower_stream_group_1", 1, 2.5 );
wait 2;
if ( common_scripts\utility::cointoss() )
var_0 = "upper_stream_left";
else
var_0 = "upper_stream_right";
thread spawn_bridge_guys( var_0 );
level thread stream_set_cleared_when_guys_dead();
common_scripts\utility::waittill_notify_or_timeout( "done_throttled_spawn", 7 );
}
stream_set_cleared_when_guys_dead()
{
level endon( "stream_clear" );
level endon( "bridge_area_exit" );
level.stream_baddies = getaiarray( "axis" );
if ( !isdefined( level.ambush_patrol_guys ) )
level.ambush_patrol_guys = [];
level.stream_baddies = common_scripts\utility::array_remove_array( level.stream_baddies, level.ambush_patrol_guys );
thread maps\jungle_ghosts_util::set_flag_when_x_remain_custom_stream( 0, "stream_clear" );
for (;;)
{
wait 0.25;
var_0 = getaiarray( "axis" );
var_0 = common_scripts\utility::array_remove_array( var_0, level.ambush_patrol_guys );
level.stream_baddies = var_0;
}
}
stream_upper_logic()
{
maps\_utility::set_ai_bcvoice( "shadowcompany" );
self.goalradius = 64;
self.dropweapon = 0;
self setgoalnode( getnode( self.target, "targetname" ) );
}
stream_close_enemy_logic()
{
level endon( "_stealth_spotted" );
self endon( "death" );
level endon( "stream_enemy_alert" );
maps\_utility::set_ai_bcvoice( "shadowcompany" );
level.close_stream_enemies = common_scripts\utility::array_add( level.close_stream_enemies, self );
common_scripts\utility::flag_wait( "chopper_about_to_leave" );
thread stream_enemy_alert_team_after_chopper_leaves();
thread stream_enemy_alerted_after_chopper_logic();
maps\_utility::clear_run_anim();
if ( isdefined( self.script_noteworthy ) && ( self.script_noteworthy == "crate_guy1" || self.script_noteworthy == "crate_guy2" || self.script_noteworthy == "crate_guy3" ) )
{
if ( self.script_noteworthy == "crate_guy1" )
wait 0.5;
if ( self.script_noteworthy == "crate_guy2" )
wait 1;
if ( self.script_noteworthy == "crate_guy3" )
wait 1.5;
}
else
wait( randomfloatrange( 2, 4 ) );
self setgoalpos( self.origin );
self setgoalvolumeauto( getent( "stream_runaway_delete_vol", "targetname" ) );
wait 3;
self waittill( "goal" );
common_scripts\utility::flag_set( "start_removing_stream_guys" );
}
stream_guys_start_removing()
{
common_scripts\utility::flag_wait( "start_removing_stream_guys" );
thread maps\_utility::ai_delete_when_out_of_sight( level.close_stream_enemies, 1000 );
}
stream_enemy_alert_team_after_chopper_leaves()
{
self waittill( "damage" );
common_scripts\utility::flag_set( "stream_enemy_alert" );
}
stream_squad_disengage_stealth_after_chopper_leaves_on_hot()
{
common_scripts\utility::flag_wait( "stream_enemy_alert" );
common_scripts\utility::array_thread( level.squad, maps\_stealth_utility::disable_stealth_for_ai );
common_scripts\utility::array_thread( level.squad, maps\jungle_ghosts_util::generic_ignore_off );
}
stream_enemy_alerted_after_chopper_logic()
{
self endon( "death" );
common_scripts\utility::flag_wait( "stream_enemy_alert" );
self.goalradius = 800;
self setgoalentity( level.player );
maps\jungle_ghosts_util::manually_alert_me();
thread maps\_utility::set_battlechatter( 1 );
}
stream_bridge_guard_logic()
{
level endon( "_stealth_spotted" );
self endon( "death" );
maps\_utility::set_ai_bcvoice( "shadowcompany" );
self.og_node = getnode( self.target, "targetname" );
common_scripts\utility::flag_wait( "chopper_about_to_leave" );
thread bridge_guards_backup_alert_after_chopper_leaves();
self.goalradius = 64;
maps\_utility::clear_run_anim();
wait( randomfloatrange( 2, 4 ) );
self setgoalnode( getnode( "bridge_guard_run_node", "targetname" ) );
wait 3;
self setgoalnode( getnode( "bridge_guard_run_node", "targetname" ) );
wait 3;
self setgoalnode( getnode( "bridge_guard_run_node", "targetname" ) );
wait 3;
self setgoalnode( getnode( "bridge_guard_run_node", "targetname" ) );
self waittill( "goal" );
self delete();
}
bridge_guards_backup_alert_after_chopper_leaves()
{
self endon( "death" );
common_scripts\utility::flag_wait( "_stealth_spotted" );
thread maps\_utility::set_battlechatter( 1 );
wait 1;
self.goalradius = 64;
for (;;)
{
self.goalradius = 128;
self setgoalnode( self.og_node );
wait 0.5;
}
}
crate_casualty_enemy_logic()
{
level endon( "_stealth_spotted" );
self endon( "death" );
}
spawn_bridge_guys( var_0 )
{
var_1 = getentarray( var_0, "targetname" );
foreach ( var_3 in var_1 )
{
if ( isdefined( var_3.script_noteworthy ) )
{
var_4 = var_3 maps\_utility::spawn_ai( 1 );
var_4 thread stream_enemy_logic();
var_4 maps\_utility::enable_sprint();
var_1 = common_scripts\utility::array_remove( var_1, var_3 );
break;
}
}
wait 2;
foreach ( var_3 in var_1 )
{
var_4 = var_3 maps\_utility::spawn_ai( 1 );
var_4 thread stream_enemy_logic();
var_4 maps\_utility::enable_sprint();
wait( randomfloatrange( 2, 4 ) );
}
}
stream_enemy_logic()
{
if ( self.target == "director_goto" )
thread direct_chopper_crate_anim();
self.goalradius = 32;
maps\_utility::set_ai_bcvoice( "shadowcompany" );
thread maps\_utility::set_battlechatter( 0 );
maps\_utility::disable_long_death();
maps\_utility::disable_blood_pool();
thread maps\jungle_ghosts_util::grenade_ammo_probability( 20 );
}
direct_chopper_crate_anim()
{
self endon( "death" );
self.allowdeath = 1;
var_0 = common_scripts\utility::get_target_ent( "director_node" );
var_0 thread maps\_anim::anim_generic_loop( self, "chopper_crate_directing", "stop_loop" );
thread maps\jungle_ghosts_util::stop_anim_on_damage_stealth( var_0 );
thread maps\jungle_ghosts_util::stop_anim_on_spotted_or_chopper_leaves( var_0 );
maps\_utility::gun_remove();
level common_scripts\utility::waittill_any( "chopper_about_to_leave", "_stealth_spotted", "stream_rush_chopper" );
wait 2;
var_0 notify( "stop_loop" );
maps\_utility::anim_stopanimscripted();
common_scripts\utility::waitframe();
maps\_utility::gun_recall();
}
#using_animtree("vehicles");
chopper_crash()
{
level endon( "stream_heli_out" );
chopper_crash_enemies();
thread chopper_rumble_earthquake();
var_0 = getent( "crash_final_collision", "targetname" );
var_0 notsolid();
var_1 = getent( "dest_crate", "targetname" );
var_1 notsolid();
var_1 connectpaths();
var_2 = common_scripts\utility::getstruct( "new_crash", "targetname" );
var_2.chopper = maps\_vehicle::spawn_vehicle_from_targetname( "supply_heli" );
var_2.chopper endon( "suspend_drive_anims" );
var_2.chopper setmodel( "vehicle_aas_72x_destructible" );
var_2.chopper.animname = "aas";
wait 1;
var_2.chopper thread chopper_sound();
var_2.crate_clip = getent( "chopper_clip", "targetname" );
var_2.crate_clip thread kill_player_on_touch();
var_2.crate_clip.origin = var_2.chopper.origin;
var_2.crate_clip.angles = var_2.chopper.angles;
var_2.crate_clip linkto( var_2.chopper, "tag_origin" );
var_2.crate_clip thread notify_on_damage_chopper();
level.chopper_pilot_ent = var_2.crate_clip;
var_3 = getent( "chopper_pilot", "targetname" );
var_3 setspawnerteam( "axis" );
var_2.pristine_crate = maps\_utility::spawn_anim_model( "pristine_crate" );
var_2.damaged_crate = maps\_utility::spawn_anim_model( "damaged_crate" );
var_2.damaged_crate hide();
var_2.pilot = maps\_utility::spawn_targetname( "chopper_pilot", 1 );
var_2.pilot.animname = "pilot";
var_2.pilot.team = "axis";
var_2.pilot.name = "";
var_2.pilot thread crash_pilot_logic( var_2.chopper );
var_2.pilot thread notify_on_damage();
var_2.actors = [ var_2.pristine_crate, var_2.damaged_crate, var_2.chopper ];
var_2.pilot linkto( var_2.chopper, "tag_pilot1", ( 0, 0, 0 ), ( 0, 0, 0 ) );
var_2.chopper thread maps\_anim::anim_loop_solo( var_2.pilot, "new_crash_idle", "stop_loop", "tag_pilot1" );
var_2 thread maps\_anim::anim_loop( var_2.actors, "new_crash_idle" );
var_2 thread chopper_leaves_after_time();
common_scripts\utility::flag_wait( "smaw_target_detroyed" );
var_4 = getaiarray( "axis" );
foreach ( var_6 in var_4 )
var_6 thread maps\jungle_ghosts_util::manually_alert_me();
var_8 = getanimlength( %jungle_ghost_helicrash_helicopter );
var_2.crate_clip thread crate_clip_of_doom();
var_2.crate_clip thread maps\_utility::notify_delay( "stop_checking_collision", var_8 );
maps\_utility::delaythread( var_8, common_scripts\utility::flag_set, "chopper_crash_complete" );
var_2 notify( "stop_loop" );
var_2.chopper notify( "stop_loop" );
var_2.pilot notify( "stop_loop" );
var_2.chopper thread maps\_anim::anim_single_solo( var_2.pilot, "new_crash", "tag_pilot1" );
var_2.pilot linkto( var_2.chopper, "tag_pilot1" );
var_2 maps\_anim::anim_single( var_2.actors, "new_crash" );
level notify( "chopper down" );
}
kill_player_on_touch()
{
level endon( "chopper down" );
level endon( "stream_heli_out" );
for (;;)
{
if ( level.player istouching( self ) )
{
level.player enabledeathshield( 0 );
level.player enablehealthshield( 0 );
level.player kill();
}
wait 0.1;
}
}
chopper_leaves_after_time()
{
level endon( "smaw_target_detroyed" );
self.chopper endon( "death" );
common_scripts\utility::flag_wait( "can_see_chopper" );
common_scripts\utility::flag_wait( "time_for_chopper_to_leave" );
self notify( "stop_loop" );
self.chopper notify( "stop_loop" );
self.pilot notify( "stop_loop" );
common_scripts\utility::flag_set( "stream_heli_out" );
self.pristine_crate linkto( self.chopper, "tag_origin" );
self.chopper thread maps\_anim::anim_loop_solo( self.pilot, "new_crash_idle", "stop_loop", "tag_pilot1" );
self.chopper stopanimscripted();
self.chopper setanim( level.vehicle_driveidle["vehicle_aas_72x"], 1, 0.2, 1 );
var_0 = getent( "supply_chopper_leave", "targetname" );
var_1 = 20;
self.chopper setlookatent( var_0 );
self.chopper setvehgoalpos( var_0.origin, 1 );
self.chopper vehicle_setspeed( var_1, var_1 / 2, var_1 / 2 );
wait 3;
while ( isdefined( var_0.target ) )
{
var_0 = getent( var_0.target, "targetname" );
self.chopper setlookatent( var_0 );
self.chopper setvehgoalpos( var_0.origin, 0 );
wait 8;
}
wait 22;
if ( isdefined( self.pilot ) )
self.pilot delete();
if ( isdefined( self.pristine_crate ) )
self.pristine_crate delete();
if ( isdefined( self.damaged_crate ) )
self.damaged_crate delete();
if ( isdefined( self.chopper ) )
self.chopper delete();
}
chopper_rumble_earthquake()
{
common_scripts\utility::flag_wait( "chopper_impact" );
earthquake( 0.6, 0.75, level.player.origin, 800 );
level.player playrumbleonentity( "grenade_rumble" );
wait 0.8;
earthquake( 0.4, 0.5, level.player.origin, 800 );
level.player playrumbleonentity( "grenade_rumble" );
}
chopper_sound()
{
level endon( "stream_heli_out" );
thread common_scripts\utility::play_loop_sound_on_entity( "aascout72x_engine_high" );
common_scripts\utility::flag_wait( "smaw_target_detroyed" );
thread common_scripts\utility::stop_loop_sound_on_entity( "aascout72x_engine_high" );
wait 4;
self notify( "stop_kicking_up_dust" );
}
crash_pilot_logic( var_0 )
{
self.ignoreme = 1;
self.ignoreall = 1;
self.ragdoll_immediate = 1;
common_scripts\utility::flag_wait( "chopper_impact" );
wait 3;
self.allowdeath = 1;
self.a.nodeath = 1;
maps\_utility::die();
self startragdoll();
}
notify_on_damage()
{
level endon( "stream_heli_out" );
self setcandamage( 1 );
self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
var_10 = 0.5;
if ( !common_scripts\utility::flag( "smaw_target_detroyed" ) )
{
if ( isdefined( var_1 ) )
{
if ( var_1 == level.player )
{
wait( var_10 );
common_scripts\utility::flag_set( "smaw_target_detroyed" );
}
}
}
}
notify_on_damage_chopper()
{
level endon( "stream_heli_out" );
self setcandamage( 1 );
for ( var_0 = 0; var_0 < 600; var_0 = var_0 + var_1 )
self waittill( "damage", var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10 );
self waittill( "damage", var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10 );
common_scripts\utility::flag_set( "do_stream_chopper_fx" );
if ( !common_scripts\utility::flag( "smaw_target_detroyed" ) )
{
if ( isdefined( var_2 ) )
{
if ( var_2 == level.player )
common_scripts\utility::flag_set( "smaw_target_detroyed" );
}
}
}
crate_clip_of_doom()
{
self endon( "stop_checking_collision" );
var_0 = getaiarray( "axis" );
var_0 = common_scripts\utility::add_to_array( var_0, level.player );
for (;;)
{
foreach ( var_2 in var_0 )
{
if ( isalive( var_2 ) && var_2 istouching( self ) )
var_2 thread maps\_utility::die();
}
wait 0.05;
}
}
chopper_crash_enemies()
{
maps\_utility::array_spawn_function_targetname( "crate_casualty", ::chopper_crash_guy_logic );
maps\_utility::array_spawn_function_targetname( "crate_casualty", ::crate_casualty_enemy_logic );
maps\_utility::array_spawn_function_targetname( "crate_casualty", ::on_death_chopper_leave_immediate );
maps\_utility::array_spawn_function_targetname( "crate_casualty", ::stream_close_enemy_logic );
maps\_utility::array_spawn_function_targetname( "bridge_guard", ::on_death_chopper_leave_immediate );
maps\_utility::array_spawn_targetname( "crate_casualty", 1 );
thread stream_enemy_setup( "start" );
level.crash_hidden_settings["prone"] = 70;
level.crash_hidden_settings["crouch"] = 300;
level.crash_hidden_settings["stand"] = 450;
maps\_stealth_utility::stealth_detect_ranges_set( level.crash_hidden_settings );
}
crate_death_fling()
{
animscripts\shared::dropallaiweapons();
self.skipdeathanim = 1;
self startragdollfromimpact( "torso_lower", ( randomintrange( -4000, -2000 ), 2500, 2250 ) );
wait 0.05;
}
on_death_chopper_leave_immediate()
{
level endon( "stream_heli_out" );
maps\_utility::set_ai_bcvoice( "shadowcompany" );
common_scripts\utility::waittill_any( "death", "damage" );
var_0 = getaiarray( "axis" );
foreach ( var_2 in var_0 )
{
var_2 thread maps\jungle_ghosts_util::manually_alert_me();
var_2.favoriteenemy = level.player;
}
wait( randomfloatrange( 0.25, 1.0 ) );
common_scripts\utility::flag_set( "time_for_chopper_to_leave" );
}
chopper_crash_guy_logic()
{
self endon( "death" );
maps\_utility::set_ai_bcvoice( "shadowcompany" );
thread maps\_utility::set_battlechatter( 0 );
self.goalradius = 32;
maps\_utility::set_grenadeammo( 0 );
maps\_utility::disable_long_death();
self.animname = "generic";
common_scripts\utility::flag_wait( "box_swap" );
self.old_deathfunction = self.deathfunction;
self.deathfunction = ::crate_death_fling;
wait 2;
self.deathfunction = self.old_deathfunction;
}
stop_anim_on_damage()
{
self endon( "death" );
self waittill( "damage" );
self stopanimscripted();
}
watersheet_trig_setup()
{
level endon( "tall_grass_begin" );
level thread watersheet_sound( self );
for (;;)
{
self waittill( "trigger" );
level.player setwatersheeting( 1, 2 );
level.player playrumbleonentity( "damage_light" );
wait 0.5;
if ( level.player istouching( self ) )
{
level.player setwatersheeting( 0 );
continue;
}
wait 1.5;
}
}
watersheet_sound( var_0 )
{
level endon( "tall_grass_begin" );
for (;;)
{
var_0 waittill( "trigger" );
var_1 = spawn( "script_origin", level.player geteye() );
var_1 thread maps\_utility::play_sound_on_entity( "scn_jungle_under_falls_plr_enter" );
var_1 playloopsound( "scn_jungle_under_falls_plr" );
var_1 scalevolume( 0.0, 0.0 );
wait 0.1;
var_1 scalevolume( 1.0, 0.15 );
while ( level.player istouching( var_0 ) )
wait 0.1;
var_1 thread maps\_utility::play_sound_on_entity( "scn_jungle_under_falls_plr_exit" );
wait 0.15;
var_1 scalevolume( 0.0, 0.15 );
wait 0.2;
var_1 common_scripts\utility::stop_loop_sound_on_entity( "scn_jungle_under_falls_plr" );
var_1 delete();
}
}
ambush_stealth_settings()
{
var_0 = [];
var_0["player_dist"] = 1;
var_0["sight_dist"] = 1;
var_0["detect_dist"] = 1;
var_0["found_dist"] = 1;
var_0["found_dog_dist"] = 1;
maps\_stealth_utility::stealth_corpse_ranges_custom( var_0 );
level.ambush_hidden_settings = [];
level.ambush_hidden_settings["prone"] = 1;
level.ambush_hidden_settings["crouch"] = 1;
level.ambush_hidden_settings["stand"] = 1;
level.ambush_visible_settings = [];
level.ambush_visible_settings["prone"] = 1024;
level.ambush_visible_settings["crouch"] = 1024;
level.ambush_visible_settings["stand"] = 1024;
}
player_ambush_area_monitor( var_0 )
{
level endon( "ambush_open_fire" );
level endon( "waterfall_patrollers_passed" );
var_1 = 1;
var_2 = 0.5;
var_3 = 10;
var_4 = getent( "hidden_in_waterfalls", "targetname" );
while ( !level.player istouching( var_0 ) && !level.player istouching( var_4 ) )
common_scripts\utility::waitframe();
common_scripts\utility::flag_set( "player_in_ambush_position" );
if ( !common_scripts\utility::flag( "ambush_open_fire" ) )
{
common_scripts\utility::array_thread( level.squad, level.ignore_on_func );
common_scripts\utility::array_thread( level.squad, maps\_stealth_utility::enable_stealth_for_ai );
}
for (;;)
{
while ( level.player istouching( var_0 ) || level.player istouching( var_4 ) )
wait 0.25;
common_scripts\utility::flag_clear( "player_in_ambush_position" );
maps\_stealth_utility::stealth_detect_ranges_set( level.ambush_visible_settings );
common_scripts\utility::array_thread( level.ambush_patrollers, maps\_stealth_shared_utilities::ai_clear_custom_animation_reaction );
common_scripts\utility::array_thread( level.ambush_patrollers, maps\_utility::set_baseaccuracy, var_3 );
while ( !level.player istouching( var_0 ) && !level.player istouching( var_4 ) )
wait 0.25;
common_scripts\utility::flag_set( "player_in_ambush_position" );
maps\_stealth_utility::stealth_detect_ranges_set( level.ambush_hidden_settings );
foreach ( var_6 in level.ambush_patrollers )
{
if ( maps\jungle_ghosts_util::isdefined_and_alive( var_6 ) )
{
var_6 thread maps\_stealth_shared_utilities::ai_set_custom_animation_reaction( var_6, var_6.script_noteworthy, "tag_origin", "steve_ender" );
var_6 thread maps\_utility::set_baseaccuracy( var_2 );
}
}
}
}
ambush_patrol_logic()
{
self endon( "death" );
if ( !isdefined( level.ambush_patrol_guys ) )
level.ambush_patrol_guys = [];
level.ambush_patrol_guys = common_scripts\utility::array_add( level.ambush_patrol_guys, self );
self.oldmaxsight = self.maxsightdistsqrd;
self.maxsightdistsqrd = 1;
maps\_utility::enable_cqbwalk();
maps\_utility::set_ai_bcvoice( "shadowcompany" );
thread maps\_utility::set_battlechatter( 0 );
self.goalradius = 32;
self.interval = 0;
maps\_utility::set_grenadeammo( 0 );
thread ambush_damage_notify();
maps\_utility::disable_long_death();
self.animname = "generic";
self.disablearrivals = 1;
thread ambush_guy_outcome_logic();
thread ambush_guy_change_sight_dist();
thread follow_on_went_hot();
thread delete_me_after_time();
thread maps\_utility::pathrandompercent_zero();
thread maps\_utility::walkdist_zero();
if ( maps\jungle_ghosts_util::has_script_parameters( "orders_guy" ) )
{
thread ambush_guy_does_anim( "patrol_jog_orders_once" );
return;
}
if ( maps\jungle_ghosts_util::has_script_parameters( "360_guy" ) )
{
thread ambush_guy_does_anim( "patrol_jog_360_once" );
return;
}
maps\_stealth_shared_utilities::ai_set_custom_animation_reaction( self, self.script_noteworthy, "tag_origin", "steve_ender" );
}
set_ignore_until_fired_at()
{
self endon( "death" );
self.ignoreme = 1;
common_scripts\utility::flag_wait( "ambush_open_fire" );
self.ignoreme = 0;
}
delete_me_after_time()
{
self endon( "death" );
wait 50;
while ( isdefined( self ) )
{
if ( !maps\_utility::player_can_see_ai( self ) && !maps\_utility::within_fov_of_players( self.origin, cos( 45 ) ) && level.player.origin[0] > 4096 )
{
common_scripts\utility::array_remove( level.ambush_patrollers, self );
self delete();
}
wait 0.5;
}
}
follow_on_went_hot()
{
self endon( "death" );
thread follow_on_went_hot_logic();
common_scripts\utility::waittill_any( "_stealth_spotted", "_stealth_enemy_alert_level_change" );
common_scripts\utility::flag_set( "waterfall_went_hot_late" );
}
follow_on_went_hot_logic()
{
self endon( "death" );
common_scripts\utility::flag_wait_any( "ambush_open_fire", "waterfall_went_hot_late" );
wait( randomfloatrange( 0.25, 1.25 ) );
thread maps\jungle_ghosts_util::manually_alert_me();
self.goalradius = 250;
self setgoalentity( level.player );
}
ambush_guy_change_sight_dist()
{
self endon( "death" );
level endon( "ambush_open_fire" );
var_0 = getent( "hidden_in_waterfalls", "targetname" );
for (;;)
{
if ( level.player istouching( var_0 ) )
self.maxsightdistsqrd = 1;
else
self.maxsightdistsqrd = self.oldmaxsight;
wait 0.5;
}
}
ambush_guy_outcome_logic()
{
self endon( "death" );
common_scripts\utility::flag_wait( "ambush_open_fire" );
wait 0.5;
self.maxsightdistsqrd = self.oldmaxsight;
self.goalradius = 100;
self setgoalentity( level.player );
if ( common_scripts\utility::flag( "player_didnt_ambush" ) )
{
common_scripts\utility::flag_set( "waterfall_ambush_begin" );
self stopanimscripted();
maps\_utility::disable_cqbwalk();
self.perfectaim = 1;
self.favoriteenemy = level.player;
return;
}
}
ambush_guy_does_anim( var_0 )
{
self endon( "death" );
self endon( "damage" );
self endon( "_stealth_enemy_alert_level_change" );
common_scripts\utility::flag_wait( "waterfall_ambush_begin" );
maps\_utility::disable_cqbwalk();
maps\_utility::set_generic_run_anim( "patrol_jog" );
var_1 = common_scripts\utility::getstruct( var_0, "script_noteworthy" );
var_1 maps\_anim::anim_reach_solo( self, var_0 );
var_1 maps\_anim::anim_single_solo( self, var_0 );
}
ambush_damage_notify()
{
thread maps\_stealth_utility::stealth_enemy_endon_alert();
common_scripts\utility::waittill_any( "damage", "bulletwhizby", "stealth_enemy_endon", "_stealth_enemy_alert_level_change" );
level notify( "ambush_enemy_shot" );
common_scripts\utility::flag_set( "ambush_open_fire" );
self stopanimscripted();
}
ambush_kickoff_logic()
{
thread ambush_player_ran_ahead();
thread ambush_player_did_ambush();
}
waterfall_goes_hot()
{
common_scripts\utility::flag_wait( "ambush_open_fire" );
badplace_delete( "axis_badplace" );
common_scripts\utility::array_thread( level.squad, level.ignore_off_func );
maps\_utility::battlechatter_on();
}
ambush_player_ran_ahead()
{
level endon( "waterfall_patrollers_passed" );
level endon( "waterfall_patrollers_dead" );
var_0 = getent( "ambush_early", "targetname" );
var_0 waittill( "trigger" );
thread sky_change();
common_scripts\utility::flag_set( "player_didnt_ambush" );
common_scripts\utility::flag_set( "player_in_ambush_position" );
maps\_stealth_utility::disable_stealth_system();
common_scripts\utility::array_thread( level.squad, level.ignore_off_func );
maps\_utility::battlechatter_on();
common_scripts\utility::flag_wait( "stream_backend_start" );
if ( !common_scripts\utility::flag( "waterfall_patrollers_dead" ) && !common_scripts\utility::flag( "waterfall_patrollers_passed" ) )
common_scripts\utility::flag_set( "player_rushed_waterfall_passers" );
}
ambush_player_did_ambush()
{
level endon( "ambush_enemy_shot" );
common_scripts\utility::flag_wait( "player_in_ambush_position" );
thread sky_change();
wait 0.5;
var_0 = 13;
if ( !common_scripts\utility::flag( "player_didnt_ambush" ) )
{
wait( var_0 );
level notify( "ambush_safe_timeout" );
common_scripts\utility::flag_set( "waterfall_patrollers_passed" );
}
}
waterfall_check_patrollers()
{
level endon( "stream_exit" );
maps\_utility::waittill_dead_or_dying( level.ambush_patrollers );
common_scripts\utility::flag_set( "waterfall_patrollers_dead" );
}
pre_tall_grass_stealth_settings()
{
var_0 = [];
var_0["prone"] = 70;
var_0["crouch"] = 400;
var_0["stand"] = 600;
var_1 = [];
var_1["prone"] = 500;
var_1["crouch"] = 1500;
var_1["stand"] = 2000;
maps\_stealth_utility::stealth_detect_ranges_set( var_0, var_1 );
var_2 = [];
var_2["player_dist"] = 600;
var_2["sight_dist"] = 200;
var_2["detect_dist"] = 100;
var_2["found_dist"] = 50;
var_2["found_dog_dist"] = 50;
maps\_stealth_utility::stealth_corpse_ranges_custom( var_2 );
}
backend_friendly_stealth_logic()
{
level common_scripts\utility::flag_wait_any( "_stealth_spotted", "backend_friendlies_go_hot" );
common_scripts\utility::array_thread( level.squad, level.ignore_off_func );
if ( isdefined( self.old_color ) )
{
if ( common_scripts\utility::flag( "pre_tall_grass_friendly_moveup_3" ) )
common_scripts\utility::flag_wait( "moving_into_tall_grass" );
maps\_utility::set_force_color( self.old_color );
}
self allowedstances( "crouch", "prone", "stand" );
badplace_delete( "pre_tall_grass0" );
badplace_delete( "pre_tall_grass1" );
}
squad_save_old_color()
{
if ( isdefined( self.script_forcecolor ) )
self.old_color = self.script_forcecolor;
else if ( isdefined( self.old_forcecolor ) )
self.old_color = self.old_forcecolor;
}
pre_tallgrass_stealth_guys_logic()
{
self endon( "death" );
maps\_utility::set_ai_bcvoice( "shadowcompany" );
thread check_death();
common_scripts\utility::waittill_any( "_stealth_spotted", "_stealth_enemy_alert_level_change" );
common_scripts\utility::flag_set( "backend_friendlies_go_hot" );
thread check_if_went_hot_late();
wait( randomintrange( 1, 3 ) );
self.goalradius = 250;
self setgoalentity( level.player );
}
check_death()
{
if ( isdefined( self.script_noteworthy ) )
return;
self waittill( "death" );
var_0 = getaiarray( "axis" );
foreach ( var_2 in var_0 )
var_2 maps\jungle_ghosts_util::manually_alert_me();
}
check_if_went_hot_late()
{
self endon( "death" );
common_scripts\utility::flag_wait( "field_entrance" );
common_scripts\utility::flag_set( "backend_friendlies_go_hot_late" );
common_scripts\utility::flag_clear( "clear_to_move_into_tall_grass" );
wait 1;
var_0 = getaiarray( "axis" );
foreach ( var_2 in var_0 )
var_2 thread maps\jungle_ghosts_util::manually_alert_me();
wait 5;
var_0 = getaiarray( "axis" );
foreach ( var_2 in var_0 )
var_2 thread maps\jungle_ghosts_util::manually_alert_me();
wait 5;
var_0 = getaiarray( "axis" );
foreach ( var_2 in var_0 )
var_2 thread maps\jungle_ghosts_util::manually_alert_me();
wait 5;
var_0 = getaiarray( "axis" );
foreach ( var_2 in var_0 )
var_2 thread maps\jungle_ghosts_util::manually_alert_me();
}
pre_tall_grass_went_hot_vo()
{
level endon( "field_entrance" );
thread player_caught_in_the_middle();
common_scripts\utility::flag_wait( "backend_friendlies_go_hot" );
maps\jungle_ghosts_util::dialogue_stop();
level.alpha1 maps\_utility::smart_dialogue( "jungleg_els_shitgoloud" );
while ( getaiarray( "axis" ).size > 0 )
wait 0.25;
wait 0.75;
level.alpha1 maps\_utility::smart_dialogue( "jungleg_gs1_okwereclear" );
}
player_caught_in_the_middle()
{
level endon( "field_halfway" );
common_scripts\utility::flag_wait( "field_entrance" );
wait 5;
level common_scripts\utility::waittill_any( "backend_friendlies_go_hot", "_stealth_spotted" );
var_0 = getaiarray( "axis" );
var_1 = 0;
foreach ( var_3 in var_0 )
{
if ( var_3.origin[1] < 9500 )
var_1 = 1;
}
if ( var_1 )
{
maps\jungle_ghosts_util::dialogue_stop();
level.alpha1 maps\_utility::smart_dialogue( "jungleg_pri_targetsfrontandbehind" );
}
}
pre_tallgrass_guys_logic()
{
self endon( "death" );
maps\_utility::set_ai_bcvoice( "shadowcompany" );
common_scripts\utility::flag_wait( "retreat_to_tall_grass" );
thread maps\jungle_ghosts_util::kill_me_from_closest_enemy();
wait( randomfloatrange( 0.1, 2.5 ) );
maps\_utility::set_force_color( "p" );
maps\_utility::enable_ai_color();
}
pre_tall_grass_patroller_logic()
{
maps\_utility::set_ai_bcvoice( "shadowcompany" );
level thread pre_tall_grass_patroller_watcher();
thread pre_tall_grass_patroller_break_on_sight();
thread clean_up_on_death();
}
clean_up_on_death()
{
level endon( "_stealth_spotted" );
level endon( "_stealth_enemy_alert_level_change" );
level endon( "pre_tall_grass_friendly_moveup_3" );
self waittill( "death" );
level.alpha2 maps\_utility::smart_dialogue( "jungleg_kgn_hesdone" );
if ( !common_scripts\utility::flag( "_stealth_spotted" ) )
{
common_scripts\utility::flag_set( "pre_tall_grass_friendly_moveup_1" );
wait 10;
common_scripts\utility::flag_set( "pre_tall_grass_friendly_moveup_2" );
wait 20;
common_scripts\utility::flag_set( "pre_tall_grass_friendly_moveup_3" );
}
}
pre_tall_grass_patroller_break_on_sight()
{
self endon( "death" );
maps\_utility::set_ai_bcvoice( "shadowcompany" );
common_scripts\utility::waittill_any( "_stealth_spotted", "_stealth_enemy_alert_level_change" );
common_scripts\utility::flag_set( "backend_friendlies_go_hot" );
self setgoalentity( level.player );
}
pre_tall_grass_friendly_movement()
{
level endon( "_stealth_spotted" );
level endon( "backend_friendlies_go_hot" );
var_0 = common_scripts\utility::getstructarray( "pre_grass_friendly_bad_places", "targetname" );
foreach ( var_3, var_2 in var_0 )
badplace_cylinder( "pre_tall_grass" + var_3, 0, var_2.origin, var_2.radius, 300, "allies" );
var_4 = getent( "pre_tall_grass_stealth_move_1", "script_noteworthy" );
var_5 = getent( "pre_tall_grass_stealth_move_2", "script_noteworthy" );
var_6 = getent( "pre_tall_grass_stealth_move_3", "script_noteworthy" );
if ( level.start_point != "grass chopper" )
{
level.squad[0] maps\_utility::ent_flag_wait( "at_goal" );
level.squad[1] maps\_utility::ent_flag_wait( "at_goal" );
level.squad[2] maps\_utility::ent_flag_wait( "at_goal" );
level.squad[3] maps\_utility::ent_flag_wait( "at_goal" );
}
common_scripts\utility::flag_set( "begin_pre_tall_grass_scene" );
common_scripts\utility::array_call( level.squad, ::allowedstances, "crouch", "prone" );
common_scripts\utility::flag_wait( "pre_tall_grass_friendly_moveup_1" );
wait 5.5;
var_4 notify( "trigger" );
common_scripts\utility::flag_wait( "pre_tall_grass_friendly_moveup_2" );
wait 0.25;
var_5 notify( "trigger" );
common_scripts\utility::flag_wait( "pre_tall_grass_friendly_moveup_3" );
wait 0.25;
var_6 notify( "trigger" );
}
pre_tall_grass_patroller_watcher()
{
level endon( "_stealth_spotted" );
level endon( "backend_friendlies_go_hot" );
var_0 = common_scripts\utility::getstruct( "pre_tall_grass_patrol_1", "script_noteworthy" );
var_1 = common_scripts\utility::getstruct( "pre_tall_grass_patrol_2", "script_noteworthy" );
var_2 = common_scripts\utility::getstruct( "pre_tall_grass_patrol_3", "script_noteworthy" );
var_3 = common_scripts\utility::getstruct( "pre_tall_grass_patrol_4", "script_noteworthy" );
var_4 = common_scripts\utility::getstruct( "pre_tall_grass_patrol_5", "script_noteworthy" );
var_1 waittill( "trigger" );
common_scripts\utility::flag_set( "pre_tall_grass_friendly_moveup_1" );
var_3 waittill( "trigger" );
common_scripts\utility::flag_set( "pre_tall_grass_friendly_moveup_2" );
var_4 waittill( "trigger" );
common_scripts\utility::flag_set( "pre_tall_grass_friendly_moveup_3" );
}
tall_grass_intro_goes_hot()
{
common_scripts\utility::flag_wait( "tall_grass_intro_goes_hot" );
common_scripts\utility::array_thread( level.squad, level.ignore_off_func );
}
tall_grass_globals( var_0 )
{
setsaveddvar( "ai_foliageSeeThroughDist", 50000 );
thread tall_grass_moving_grass_settings();
thread tall_grass_vo();
thread tall_grass_weather();
thread pre_tall_grass_stealth_settings();
thread pre_tall_grass_went_hot_vo();
common_scripts\utility::flag_wait( "to_grassy_field" );
common_scripts\utility::flag_set( "clear_to_move_into_tall_grass" );
if ( !isdefined( var_0 ) && common_scripts\utility::flag( "ambush_open_fire" ) )
{
maps\_utility::delaythread( 7, common_scripts\utility::flag_set, "tall_grass_intro_goes_hot" );
maps\_utility::battlechatter_on();
}
level.player setviewkickscale( 0.5 );
level.player setmovespeedscale( 0.8 );
createthreatbiasgroup( "axis_preffered_targets" );
setthreatbias( "axis", "axis_preffered_targets", 100000 );
common_scripts\utility::array_thread( level.squad, maps\_utility::set_baseaccuracy, 0.5 );
common_scripts\utility::flag_wait( "field_entrance" );
thread grass_aas_approach();
common_scripts\utility::flag_wait( "tall_grass_heli_unloaded" );
thread maps\jungle_ghosts_util::music_tall_grass();
}
grass_aas_approach()
{
if ( !common_scripts\utility::flag( "_stealth_enabled" ) )
thread maps\_stealth_utility::enable_stealth_system();
level.clear_to_go_flag_set_once = 0;
level thread tall_grass_stealth_settings();
level thread tall_grass_friendly_ignore_state();
level thread tall_grass_handle_player_opening_fire();
maps\_utility::array_spawn_function_targetname( "tall_grass_chopper_guys", ::aas_guys_spawn_logic );
common_scripts\utility::array_call( level.squad, ::setthreatbiasgroup, "friendly_squad" );
if ( level.player.origin[0] > 4000 )
{
var_0[0] = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "chops_r1" );
var_0[1] = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "chops_r2" );
var_0[2] = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "chops_r3" );
}
else
{
var_0[0] = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "chops_l1" );
var_0[1] = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "chops_l2" );
var_0[2] = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "chops_l3" );
}
common_scripts\utility::array_thread( var_0, ::aas_think );
maps\_utility::ignoreeachother( "chopper_guys", "friendly_squad" );
}
tall_grass_handle_player_opening_fire()
{
level endon( "moving_into_tall_grass" );
common_scripts\utility::flag_waitopen( "clear_to_move_into_tall_grass" );
for (;;)
{
var_0 = getaiarray( "axis" );
if ( var_0.size < 2 || common_scripts\utility::flag( "went_hot_and_out" ) )
break;
wait 0.5;
}
common_scripts\utility::flag_set( "clear_to_move_into_tall_grass" );
common_scripts\utility::flag_set( "tall_grass_hot_early_skip" );
}
tall_grass_friendly_ignore_state()
{
level endon( "field_halfway" );
if ( !common_scripts\utility::flag( "backend_friendlies_go_hot_late" ) )
{
common_scripts\utility::array_thread( level.squad, maps\jungle_ghosts_util::generic_ignore_on );
level common_scripts\utility::waittill_any( "grass_went_hot" );
}
maps\jungle_ghosts_util::dialogue_stop();
if ( !common_scripts\utility::flag( "field_halfway" ) )
{
level.alpha1 thread maps\_utility::smart_dialogue( "jungleg_els_takeemout" );
level thread tall_grass_hot_vo_end();
}
common_scripts\utility::array_thread( level.squad, maps\jungle_ghosts_util::generic_ignore_off );
common_scripts\utility::array_call( level.squad, ::setthreatbiasgroup );
level maps\_utility::delaythread( 1, maps\_utility::battlechatter_on );
}
tall_grass_hot_vo_end()
{
level endon( "field_halfway" );
for ( var_0 = getaiarray( "axis" ); var_0.size > 0; var_0 = getaiarray( "axis" ) )
wait 0.5;
level.alpha1 thread maps\_utility::smart_dialogue( "jungleg_gs1_okwereclear" );
}
aas_think()
{
wait 7;
self notify( "stop_kicking_up_dust" );
}
aas_guys_spawn_logic()
{
self endon( "death" );
self setthreatbiasgroup( "chopper_guys" );
maps\_stealth_utility::disable_stealth_for_ai();
maps\_utility::set_ai_bcvoice( "shadowcompany" );
thread maps\_utility::set_battlechatter( 0 );
self.grenadeammo = 0;
level.tall_grass_chopper_group_flag = maps\_stealth_utility::stealth_get_group_spotted_flag();
thread tall_grass_guys_path_to_trees();
thread tall_grass_guys_went_hot();
for (;;)
{
self waittill( "damage", var_0, var_1 );
if ( var_1 == level.player )
break;
wait 0.1;
}
common_scripts\utility::flag_set( "grass_went_hot" );
if ( !level.clear_to_go_flag_set_once && !common_scripts\utility::flag( "moving_into_tall_grass" ) )
{
common_scripts\utility::flag_clear( "clear_to_move_into_tall_grass" );
level.clear_to_go_flag_set_once = 1;
}
}
tall_grass_guys_went_hot()
{
self endon( "death" );
common_scripts\utility::flag_wait( level.tall_grass_chopper_group_flag );
common_scripts\utility::flag_set( "grass_went_hot" );
self notify( "_utility::follow_path" );
wait( randomintrange( 1, 3 ) );
maps\_stealth_utility::enable_stealth_for_ai();
self.goalradius = 250;
maps\_utility::battlechatter_on();
maps\_utility::disable_cqbwalk();
self setthreatbiasgroup();
for (;;)
{
self.goalradius = 250;
self setgoalentity( level.player );
wait 1;
}
}
tall_grass_guys_path_to_trees()
{
self endon( "death" );
self waittill( "unload" );
common_scripts\utility::flag_set( "tall_grass_heli_unloaded" );
wait 3;
maps\_stealth_utility::enable_stealth_for_ai();
maps\_utility::enable_cqbwalk();
wait 10;
var_0 = common_scripts\utility::getstructarray( "tall_grass_guys_paths_out", "targetname" );
for ( var_1 = undefined; !isdefined( var_1 ) || var_0.size > 0; var_0 = common_scripts\utility::array_remove( var_0, var_2 ) )
{
var_2 = common_scripts\utility::getclosest( self.origin, var_0 );
if ( !isdefined( var_2.used ) )
{
var_2.used = 1;
var_1 = var_2;
break;
}
}
maps\_utility::follow_path( var_1 );
var_3 = getnodesinradiussorted( self.origin, 1024, 0, 512, "cover" );
foreach ( var_5 in var_3 )
{
if ( var_5.angles[1] < 345 && var_5.angles[1] > 190 )
{
if ( !isdefined( var_5.jg_occupied ) )
{
self.goalradius = 128;
var_5.jg_occupied = 1;
self setgoalnode( var_5 );
break;
}
}
}
}
tall_grass_stealth_settings()
{
var_0 = [];
var_0["prone"] = 70;
var_0["crouch"] = 70;
var_0["stand"] = 300;
var_1 = [];
var_1["prone"] = 500;
var_1["crouch"] = 1500;
var_1["stand"] = 2000;
maps\_stealth_utility::stealth_detect_ranges_set( var_0, var_1 );
var_2 = [];
var_2["player_dist"] = 50;
var_2["sight_dist"] = 50;
var_2["detect_dist"] = 50;
var_2["found_dist"] = 50;
var_2["found_dog_dist"] = 50;
maps\_stealth_utility::stealth_corpse_ranges_custom( var_2 );
}
sky_change()
{
if ( common_scripts\utility::flag( "skybox_changed" ) )
return;
if ( maps\_utility::game_is_current_gen() )
{
var_0 = getmapsunlight();
var_1 = ( 0.804688, 0.878906, 0.996094 );
thread maps\_utility::sun_light_fade( var_0, var_1, 10 );
}
common_scripts\utility::flag_set( "skybox_changed" );
if ( isdefined( level.rain_skybox ) )
level.rain_skybox show();
}
tall_grass_weather()
{
common_scripts\utility::flag_wait( "field_entrance" );
thread maps\jungle_ghosts_util::thunder_and_lightning( 10, 15 );
wait 3;
thread maps\jungle_ghosts_util::start_raining();
thread maps\jungle_ghosts_util::thunder_and_lightning( 8, 12 );
level.player setclienttriggeraudiozone( "jungle_ghosts_escape_rain", 10 );
}
tall_grass_moving_grass_settings()
{
setsaveddvar( "r_reactiveMotionActorRadius", 80 );
setsaveddvar( "r_reactiveMotionWindDir", ( -1, 0, 1 ) );
maps\jungle_ghosts_util::adjust_moving_grass( 2, 1, 0.5 );
common_scripts\utility::flag_wait( "field_entrance" );
thread tall_grass_wind_gust_logic();
}
tall_grass_wind_gust_logic()
{
chopper_arrive_wind_gust();
level endon( "field_end" );
for (;;)
{
wait( randomintrange( 5, 9 ) );
tall_grass_do_wind_gust();
}
}
tall_grass_do_wind_gust()
{
if ( common_scripts\utility::flag( "adjusting_wind" ) )
return;
common_scripts\utility::flag_set( "adjusting_wind" );
level.player maps\_utility::delaythread( 0.5, maps\_utility::play_sound_on_entity, "elm_wind_leafy_jg" );
var_0 = randomfloatrange( 2.5, 4.5 );
thread maps\jungle_ghosts_util::blend_wind_setting_internal( var_0, "r_reactiveMotionWindStrength" );
var_1 = randomfloatrange( 2.5, 4 );
maps\jungle_ghosts_util::blend_wind_setting_internal( var_1, "r_reactiveMotionWindAmplitudeScale" );
thread maps\jungle_ghosts_util::blend_wind_setting_internal( 1, "r_reactiveMotionWindStrength" );
maps\jungle_ghosts_util::blend_wind_setting_internal( 0.2, "r_reactiveMotionWindAmplitudeScale" );
common_scripts\utility::flag_clear( "adjusting_wind" );
}
chopper_arrive_wind_gust()
{
level.player maps\_utility::delaythread( 0.5, maps\_utility::play_sound_on_entity, "elm_wind_leafy_jg" );
maps\jungle_ghosts_util::blend_wind_setting_internal( 1, "r_reactiveMotionWindFrequencyScale" );
var_0 = randomfloatrange( 1.5, 3.5 );
thread maps\jungle_ghosts_util::blend_wind_setting_internal( var_0, "r_reactiveMotionWindStrength" );
var_1 = randomfloatrange( 1.5, 2.5 );
maps\jungle_ghosts_util::blend_wind_setting_internal( var_1, "r_reactiveMotionWindAmplitudeScale" );
wait 7;
thread maps\jungle_ghosts_util::blend_wind_setting_internal( 1, "r_reactiveMotionWindStrength" );
maps\jungle_ghosts_util::blend_wind_setting_internal( 0.2, "r_reactiveMotionWindAmplitudeScale" );
maps\jungle_ghosts_util::blend_wind_setting_internal( 0.17, "r_reactiveMotionWindFrequencyScale" );
}
tall_grass_get_enemies_except_prone_and_rpg_guys()
{
var_0 = getaiarray( "axis" );
return var_0;
}
tall_grass_friendly_navigation()
{
if ( !common_scripts\utility::flag( "ambush_open_fire" ) )
thread pre_tall_grass_friendly_movement();
level thread tall_grass_intro_goes_hot();
common_scripts\utility::flag_wait( "field_entrance" );
if ( !common_scripts\utility::flag( "_stealth_spotted" ) )
maps\_utility::autosave_by_name( "tall_grass_begin" );
common_scripts\utility::flag_wait( "moving_into_tall_grass" );
common_scripts\utility::flag_wait( "clear_to_move_into_tall_grass" );
var_0 = common_scripts\utility::getstructarray( "friendly_start_structs", "targetname" );
wait 0.25;
foreach ( var_2 in level.squad )
{
var_2.start_struct = common_scripts\utility::getclosest( var_2.origin, var_0 );
var_2 thread tall_grass_friendly_logic( var_2.start_struct );
}
common_scripts\utility::flag_wait( "field_halfway" );
level thread maps\jungle_ghosts_runway::runway_setup();
common_scripts\utility::array_thread( level.squad, ::tall_grass_friendly_exit_logic );
common_scripts\utility::flag_wait( "field_end" );
if ( common_scripts\utility::flag( "_stealth_spotted" ) )
common_scripts\utility::flag_set( "keep_tall_grass_alive_longer" );
var_4 = getaiarray( "axis" );
if ( var_4.size != 0 && !common_scripts\utility::flag( "keep_tall_grass_alive_longer" ) )
{
foreach ( var_2 in var_4 )
var_2 maps\jungle_ghosts_util::delete_if_player_cant_see_me();
}
else if ( var_4.size != 0 && common_scripts\utility::flag( "keep_tall_grass_alive_longer" ) )
thread auto_spot_player();
}
auto_spot_player()
{
for ( var_0 = getaiarray( "axis" ); var_0.size != 0; var_0 = getaiarray( "axis" ) )
wait 0.25;
common_scripts\utility::flag_clear( "keep_tall_grass_alive_longer" );
}
tall_grass_friendly_exit_logic()
{
self [[ level.ignore_on_func ]]();
self notify( "stop_tall_grass_beahavior" );
if ( isdefined( self.old_color ) )
maps\_utility::set_force_color( self.old_color );
maps\_utility::enable_ai_color();
self allowedstances( "crouch", "stand", "prone" );
self.moveplaybackrate = 1;
}
tall_grass_friendly_logic( var_0 )
{
maps\_utility::disable_ai_color();
self.goalradius = 32;
self.script_forcegoal = 1;
if ( !common_scripts\utility::flag( "grass_went_hot" ) )
self allowedstances( "crouch", "prone" );
var_1 = distance( self.origin, var_0.origin );
if ( common_scripts\utility::flag( "ambush_open_fire" ) || common_scripts\utility::flag( "backend_friendlies_go_hot" ) )
{
if ( var_1 < 100 && var_1 > 60 )
wait 2;
}
else if ( self.origin[0] > 5050 )
wait 2;
self pushplayer( 1 );
maps\_utility::follow_path( var_0 );
}
get_latest_struct()
{
self endon( "death" );
for (;;)
{
if ( distancesquared( self.origin, self.goal_struct.origin ) <= 22500 )
{
if ( isdefined( self.goal_struct.target ) )
self.goal_struct = common_scripts\utility::getstruct( self.goal_struct.target, "targetname" );
else
maps\_utility::ent_flag_set( "end_of_spline" );
}
wait 1;
}
}
delete_me_on_parent_ai_death( var_0 )
{
var_0 waittill( "death" );
self delete();
}
stream_vo()
{
var_0 = [ "jungleg_gs1_lightemup", "jungleg_gs1_goinloud", "jungleg_gs1_openfire", "jungleg_gs1_openfire_2" ];
var_1 = 1000;
switch ( level.start_point )
{
case "stream":
case "waterfall":
case "jungle_hill":
case "jungle_corridor":
case "parachute":
case "default":
common_scripts\utility::flag_wait( "waterfall_to_stream" );
level.hesh.anmimname = "diaz";
level.merrick.anmimname = "baker";
common_scripts\utility::flag_wait( "can_see_chopper" );
maps\jungle_ghosts_util::dialogue_stop();
thread stream_went_hot_vo();
if ( !common_scripts\utility::flag( "smaw_target_detroyed" ) && !common_scripts\utility::flag( "stream_heli_out" ) && !common_scripts\utility::flag( "_stealth_spotted" ) )
{
if ( distance( level.alpha1.origin, level.player.origin ) < var_1 )
level.alpha1 thread maps\_utility::smart_dialogue( "jungleg_els_supplydroplookslike" );
wait 2;
}
if ( !common_scripts\utility::flag( "smaw_target_detroyed" ) && !common_scripts\utility::flag( "stream_heli_out" ) && !common_scripts\utility::flag( "_stealth_spotted" ) )
{
if ( distance( level.alpha1.origin, level.player.origin ) < var_1 )
{
if ( !common_scripts\utility::flag( "player_about_to_break_stream_stealth" ) )
level.alpha1 thread maps\_utility::smart_dialogue( "jungleg_els_waitforthemto" );
else
level.alpha1 thread maps\_utility::smart_dialogue( "jungleg_hsh_whereareyougoing" );
}
wait 4;
}
if ( !common_scripts\utility::flag( "smaw_target_detroyed" ) && !common_scripts\utility::flag( "stream_heli_out" ) && !common_scripts\utility::flag( "_stealth_spotted" ) )
{
if ( distance( level.alpha1.origin, level.player.origin ) < var_1 )
{
if ( !common_scripts\utility::flag( "player_about_to_break_stream_stealth" ) )
level.alpha1 thread maps\_utility::smart_dialogue( "jungleg_els_waitforit" );
else
level.merrick thread maps\_utility::smart_dialogue( "jungleg_mrk_idontlikethe" );
}
common_scripts\utility::flag_set( "chopper_about_to_leave" );
level thread stream_squad_disengage_stealth_after_chopper_leaves_on_hot();
wait 4;
}
common_scripts\utility::flag_set( "time_for_chopper_to_leave" );
if ( !common_scripts\utility::flag( "smaw_target_detroyed" ) && !common_scripts\utility::flag( "_stealth_spotted" ) )
{
wait 4;
if ( distance( level.alpha1.origin, level.player.origin ) < var_1 )
level.alpha1 thread maps\_utility::smart_dialogue( "jungleg_els_okaylooksliketheyre" );
}
common_scripts\utility::flag_wait( "stream_fight_begin" );
thread stealthed_stream_vo();
common_scripts\utility::flag_wait( "bridge_area_exit" );
if ( !common_scripts\utility::flag( "ambush_open_fire" ) )
{
level.player playsound( "SP_0_order_move_combat_d" );
level.player common_scripts\utility::delaycall( 1, ::playsound, "SP_1_response_ack_yes_d" );
common_scripts\utility::flag_set( "squad_to_waterfall_ambush" );
wait 2.1;
if ( !common_scripts\utility::flag( "ambush_open_fire" ) )
{
level.merrick maps\_utility::smart_dialogue( "jungleg_mrk_moreofthemcoming" );
wait 0.2;
level.alpha2 maps\_utility::smart_dialogue( "jungleg_gs2_sirthatwaterfalll" );
wait 0.2;
level.alpha1 maps\_utility::smart_dialogue( "jungleg_gs1_righteveryoneunderthat" );
}
}
case "stream waterfall":
common_scripts\utility::flag_set( "squad_to_waterfall_ambush" );
if ( !common_scripts\utility::flag( "ambush_open_fire" ) )
{
common_scripts\utility::flag_wait( "squad_in_ambush_position" );
level.alpha1 maps\_utility::delaythread( 2, maps\jungle_ghosts_util::do_nags_til_flag, "player_in_ambush_position", 8, 13, "jungleg_gs1_rookunderthewaterfall", "jungleg_gs1_rookwhataredoing" );
common_scripts\utility::flag_wait( "player_in_ambush_position" );
wait 5;
level.alpha1 maps\_utility::smart_dialogue( "jungleg_gs1_iseeem" );
wait 2;
if ( !common_scripts\utility::flag( "ambush_open_fire" ) )
{
level.alpha1 maps\_utility::smart_dialogue( "jungleg_els_staystillandlet" );
wait 1;
}
if ( !common_scripts\utility::flag( "ambush_open_fire" ) )
level.alpha1 maps\_utility::smart_dialogue( "jungleg_mrk_dontmove" );
common_scripts\utility::flag_wait_any( "ambush_open_fire", "waterfall_ambush_over", "waterfall_patrollers_dead" );
if ( common_scripts\utility::flag( "ambush_open_fire" ) )
{
level.alpha1 maps\_utility::smart_dialogue( common_scripts\utility::random( var_0 ) );
common_scripts\utility::flag_wait( "waterfall_ambush_over" );
level.alpha1 thread maps\_utility::smart_dialogue( "jungleg_gs1_weshouldkeepmovin" );
}
if ( common_scripts\utility::flag( "waterfall_ambush_over" ) && !common_scripts\utility::flag( "ambush_open_fire" ) )
level.alpha1 maps\_utility::smart_dialogue( "jungleg_els_letsmovebeforethey" );
}
if ( common_scripts\utility::flag( "ambush_open_fire" ) )
{
maps\_utility::activate_trigger_with_targetname( "stream2_pos1" );
common_scripts\utility::flag_wait( "stream_backend_start" );
wait 6;
level.alpha1 maps\_utility::smart_dialogue( "jungleg_gs2_ambush" );
return;
}
}
}
stream_went_hot_vo()
{
common_scripts\utility::flag_wait( "stream_fight_begin" );
if ( common_scripts\utility::flag( "_stealth_spotted" ) || common_scripts\utility::flag( "smaw_target_detroyed" ) )
{
maps\jungle_ghosts_util::dialogue_stop();
level.hesh maps\_utility::smart_dialogue( "jungleg_diz_soundslikereenforcements" );
}
}
stealthed_stream_vo()
{
level endon( "_stealth_spotted" );
level endon( "bridge_approach" );
wait 7;
if ( !common_scripts\utility::flag( "_stealth_spotted" ) && !common_scripts\utility::flag( "smaw_target_detroyed" ) )
{
level.alpha1 maps\_utility::smart_dialogue( "jungleg_els_makoyoureadwere" );
wait 0.5;
level.player maps\_utility::play_sound_on_entity( "jungleg_mko_stillmovingupriverstalker" );
}
}
tall_grass_vo()
{
level endon( "runway_halfway" );
thread pre_tall_grass_vo_stealth();
common_scripts\utility::flag_wait( "retreat_to_tall_grass" );
maps\_utility::battlechatter_off( "allies" );
var_0 = getaiarray( "axis" );
if ( var_0.size > 0 && common_scripts\utility::flag( "ambush_open_fire" ) )
level.alpha2 maps\_utility::smart_dialogue( "jungleg_kgn_theyreretreatingintothe" );
common_scripts\utility::flag_wait( "field_entrance" );
if ( !common_scripts\utility::flag( "grass_went_hot" ) && !common_scripts\utility::flag( "backend_friendlies_go_hot_late" ) )
{
wait 2;
level.hesh maps\_utility::smart_dialogue( "jungleg_hsh_youhearthat" );
wait 0.5;
}
if ( !common_scripts\utility::flag( "grass_went_hot" ) && !common_scripts\utility::flag( "backend_friendlies_go_hot_late" ) )
level.alpha1 maps\_utility::smart_dialogue( "jungleg_els_helisoverheadwaitat" );
common_scripts\utility::flag_wait( "tall_grass_heli_unloaded" );
wait 1;
if ( !common_scripts\utility::flag( "grass_went_hot" ) && !common_scripts\utility::flag( "backend_friendlies_go_hot_late" ) )
{
level.hesh maps\_utility::smart_dialogue( "jungleg_gs2_terrific" );
wait 1;
}
if ( !common_scripts\utility::flag( "grass_went_hot" ) && !common_scripts\utility::flag( "backend_friendlies_go_hot_late" ) )
level.alpha1 thread maps\_utility::smart_dialogue( "jungleg_gs1_fanout5meter" );
common_scripts\utility::flag_wait( "clear_to_move_into_tall_grass" );
common_scripts\utility::flag_set( "moving_into_tall_grass" );
common_scripts\utility::flag_set( "clear_to_move_into_tall_grass" );
if ( !common_scripts\utility::flag( "tall_grass_hot_early_skip" ) )
{
if ( !common_scripts\utility::flag( "field_halfway" ) && !common_scripts\utility::flag( "grass_went_hot" ) && !common_scripts\utility::flag( "backend_friendlies_go_hot_late" ) )
{
wait 1;
level.alpha1 maps\_utility::smart_dialogue( "jungleg_els_staybehindmesingle" );
level thread track_distance_from_friendlies();
}
if ( !common_scripts\utility::flag( "field_halfway" ) && !common_scripts\utility::flag( "grass_went_hot" ) && !common_scripts\utility::flag( "backend_friendlies_go_hot_late" ) )
{
wait 5;
level.alpha1 maps\_utility::smart_dialogue( "jungleg_gs1_staylow" );
}
if ( !common_scripts\utility::flag( "field_halfway" ) && !common_scripts\utility::flag( "grass_went_hot" ) && !common_scripts\utility::flag( "backend_friendlies_go_hot_late" ) )
{
wait 5;
level.alpha1 maps\_utility::smart_dialogue( "jungleg_gs1_staylowwww" );
}
}
common_scripts\utility::flag_wait( "field_halfway" );
maps\jungle_ghosts_util::dialogue_stop();
if ( !common_scripts\utility::flag( "tall_grass_hot_early_skip" ) )
{
level.alpha1 maps\_utility::smart_dialogue( "jungleg_els_alrightletskeepmoving" );
wait 1;
}
level.merrick maps\_utility::smart_dialogue( "jungleg_mrk_werealmostatthe" );
wait 1;
level.alpha1 maps\_utility::smart_dialogue( "jungleg_els_heshcallitin" );
wait 1;
level.hesh maps\_utility::smart_dialogue( "jungleg_hsh_makoactualthisis" );
common_scripts\utility::flag_set( "field_dialogue_cue" );
wait 1;
level.merrick maps\_utility::smart_dialogue( "jungleg_mrk_whatsdoingthisshit" );
wait 5;
level.hesh maps\_utility::smart_dialogue( "jungleg_hsh_holy" );
wait 1;
level.player maps\_utility::play_sound_on_entity( "jungleg_mko_actualwegota" );
wait 0.2;
level.hesh maps\_utility::smart_dialogue( "jungleg_els_onourwayto" );
wait 2;
level.hesh maps\_utility::smart_dialogue( "jungleg_els_geteyesonthe" );
}
track_distance_from_friendlies()
{
level endon( "field_halfway" );
level endon( "grass_went_hot" );
wait 3;
var_0 = 1;
while ( var_0 )
{
var_1 = 0;
for ( var_2 = 0; var_2 < level.squad.size; var_2++ )
{
var_3 = distance( level.player.origin, level.squad[var_2].origin );
if ( var_3 > 200 )
var_1++;
if ( var_1 >= 3 )
var_0 = 0;
}
wait 0.25;
}
maps\jungle_ghosts_util::dialogue_stop();
level.alpha1 maps\_utility::smart_dialogue( "jungleg_pri_keepittightpeople" );
}
pre_tall_grass_vo_stealth()
{
level endon( "backend_friendlies_go_hot" );
level endon( "field_halfway" );
if ( common_scripts\utility::flag( "ambush_open_fire" ) )
return;
common_scripts\utility::flag_wait( "stream_backend_moveup_stealth" );
thread maps\_utility::battlechatter_off();
level.alpha1 maps\_utility::smart_dialogue( "jungleg_els_keepitupwere" );
maps\jungle_ghosts_util::waittill_y_passed( 7260 );
wait 1;
level.merrick maps\_utility::smart_dialogue( "jungleg_mrk_morepatrols" );
common_scripts\utility::flag_wait( "start_pre_grass_patroller" );
level.hesh maps\_utility::smart_dialogue( "jungleg_hsh_rightsidelooksclear" );
wait 0.5;
level.alpha1 maps\_utility::smart_dialogue( "jungleg_els_alrightflankrightstay" );
wait 0.25;
level.alpha1 maps\_utility::smart_dialogue( "jungleg_els_onmymark" );
common_scripts\utility::flag_wait( "pre_tall_grass_friendly_moveup_1" );
wait 0.25;
level.alpha1 maps\_utility::smart_dialogue( "jungleg_els_okaygo" );
common_scripts\utility::flag_wait( "pre_tall_grass_friendly_moveup_2" );
wait 0.25;
level.alpha1 maps\_utility::smart_dialogue( "jungleg_els_now" );
common_scripts\utility::flag_wait( "pre_tall_grass_friendly_moveup_3" );
wait 0.25;
level.alpha1 maps\_utility::smart_dialogue( "jungleg_els_move" );
}