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