1956 lines
64 KiB
Plaintext
1956 lines
64 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
intro_setup()
|
|
{
|
|
thread maps\jungle_ghosts_util::cull_distance_logic();
|
|
thread maps\jungle_ghosts_util::fade_out_in( "black", undefined, 1 );
|
|
level.player setclienttriggeraudiozone( "jungle_ghosts_falling_through_air", 1.5 );
|
|
thread maps\_utility::vision_set_fog_changes( "", 1 );
|
|
var_0 = maps\_utility::spawn_anim_model( "player_harness", ( 0, 0, 0 ) );
|
|
level.harness_model = var_0;
|
|
var_1 = common_scripts\utility::getstruct( "parachute_anim_ent_player", "targetname" );
|
|
var_2 = maps\_utility::spawn_anim_model( "player_rig", var_1.origin );
|
|
var_2 hide();
|
|
thread sunflare_toggle();
|
|
level.player enableinvulnerability();
|
|
maps\jungle_ghosts_util::move_player_to_start( "player_freefall_start" );
|
|
var_3 = level.player common_scripts\utility::spawn_tag_origin();
|
|
level.player playerlinkto( var_3 );
|
|
var_3 movegravity( ( 500, 900, 100 ), 15 );
|
|
level.player freezecontrols( 1 );
|
|
maps\_utility::trigger_wait_targetname( "player_freefall_impact" );
|
|
level.player unlink();
|
|
var_3 delete();
|
|
level.player clearclienttriggeraudiozone( 0.8 );
|
|
level.player playrumbleonentity( "grenade_rumble" );
|
|
thread maps\jungle_ghosts_util::fade_out_in( "white", undefined, 0.4 );
|
|
level.player freezecontrols( 0 );
|
|
thread setup_friendlies();
|
|
thread setup_jungle_enemies();
|
|
thread close_to_waterfall_enemy_logic();
|
|
thread parachute_intro_fx();
|
|
level.player allowstand( 1 );
|
|
level.player setstance( "stand" );
|
|
level.player allowsprint( 0 );
|
|
level.player allowcrouch( 0 );
|
|
maps\_utility::delaythread( 1, maps\jungle_ghosts_util::hud_on, 0 );
|
|
var_2 common_scripts\utility::delaycall( 0.4, ::show );
|
|
level.player playerlinktoblend( var_2, "tag_player", 0.4, 0.2, 0.2 );
|
|
level.player playerlinktodelta( var_2, "tag_player", 1, 12, 12, 5, 20 );
|
|
level.player notify( "start_falling_anim" );
|
|
var_4 = [ var_2, var_0 ];
|
|
level thread chute_flies_up();
|
|
var_1 maps\_anim::anim_single( var_4, "para_crash" );
|
|
var_2 attach( "viewmodel_knife_iw6", "tag_weapon_right" );
|
|
level.player notify( "done_falling" );
|
|
var_1 thread maps\_anim::anim_loop( var_4, "para_idle", "stop_idle" );
|
|
parachute_waittill_player_cuts();
|
|
thread player_landing_sound();
|
|
var_1 notify( "stop_idle" );
|
|
var_2 maps\_utility::anim_stopanimscripted();
|
|
level.player playerlinktoblend( var_2, "tag_player", 0.4, 0, 0 );
|
|
thread cut_exploders();
|
|
var_1 maps\_anim::anim_single( var_4, "para_cut" );
|
|
var_2 detach( "viewmodel_knife_iw6", "tag_weapon_right" );
|
|
var_2 delete();
|
|
level.player unlink();
|
|
thread tree_delete();
|
|
var_0 delete();
|
|
thread maps\_utility::autosave_stealth();
|
|
thread hill_fx();
|
|
thread maps\jungle_ghosts_util::do_bokeh( "hill_pos_1" );
|
|
thread stand_player_up();
|
|
thread do_birds();
|
|
level thread jungle_stealth_settings();
|
|
thread connect_dropdown_traverse();
|
|
thread first_distant_sat_launch();
|
|
thread dead_pilot_hang();
|
|
level.did_inactive_vo = 0;
|
|
level.laser_count = 0;
|
|
common_scripts\utility::flag_wait( "jungle_entrance" );
|
|
|
|
if ( !common_scripts\utility::flag( "_stealth_spotted" ) )
|
|
maps\_utility::autosave_stealth();
|
|
|
|
thread maps\jungle_ghosts_util::battle_chatter_controller_friendlies();
|
|
}
|
|
|
|
sunflare_toggle()
|
|
{
|
|
common_scripts\utility::exploder( "sunflare" );
|
|
|
|
while ( level.player.origin[1] < 9330 )
|
|
wait 1;
|
|
|
|
maps\_utility::stop_exploder( "sunflare" );
|
|
}
|
|
|
|
cut_exploders()
|
|
{
|
|
var_0 = "j_RightDown4";
|
|
var_1 = "j_LeftDown4";
|
|
var_2 = common_scripts\utility::spawn_tag_origin();
|
|
var_3 = common_scripts\utility::spawn_tag_origin();
|
|
var_2.origin = level.harness_model gettagorigin( var_0 ) - ( 0, 0, 2 );
|
|
var_3.origin = level.harness_model gettagorigin( var_1 );
|
|
var_2 linkto( level.harness_model );
|
|
var_3 linkto( level.harness_model );
|
|
wait 0.85;
|
|
playfxontag( common_scripts\utility::getfx( "vfx_parachute_strap_cut" ), var_2, "tag_origin" );
|
|
level.player playrumbleonentity( "grenade_rumble" );
|
|
wait 2.5;
|
|
playfxontag( common_scripts\utility::getfx( "vfx_parachute_strap_cut" ), var_3, "tag_origin" );
|
|
level.player playrumbleonentity( "grenade_rumble" );
|
|
}
|
|
|
|
player_landing_sound()
|
|
{
|
|
wait 4.6;
|
|
level.player thread maps\_utility::play_sound_on_entity( "scn_jungle_tree_jumpland" );
|
|
level.player thread maps\_gameskill::blood_splat_on_screen( "bottom" );
|
|
level.player thread maps\_gameskill::grenade_dirt_on_screen( "bottom" );
|
|
level.player thread maps\_gameskill::blood_splat_on_screen( "right" );
|
|
level.player thread maps\_gameskill::grenade_dirt_on_screen( "right" );
|
|
}
|
|
|
|
#using_animtree("generic_human");
|
|
|
|
dead_pilot_hang()
|
|
{
|
|
var_0 = getentarray( "dead_guy_chutes", "targetname" );
|
|
var_0[0].linker = var_0[0] common_scripts\utility::spawn_tag_origin();
|
|
var_0[1].linker = var_0[1] common_scripts\utility::spawn_tag_origin();
|
|
var_1 = 286;
|
|
var_0[0].linker.origin = var_0[0].origin + ( 0, 0, var_1 );
|
|
var_0[1].linker.origin = var_0[1].origin + ( 0, 0, var_1 );
|
|
var_0[0] linkto( var_0[0].linker, "tag_origin" );
|
|
var_0[1] linkto( var_0[1].linker, "tag_origin" );
|
|
var_2 = common_scripts\utility::get_target_ent( "lt_jokes" );
|
|
var_2.animname = "dead_jungle_pilot";
|
|
var_2 attach( "head_pilot_a", "", 1 );
|
|
var_2.anim_ent = var_2 common_scripts\utility::spawn_tag_origin();
|
|
var_2 linkto( var_2.anim_ent, "tag_origin" );
|
|
var_2.anim_ent linkto( var_0[0].linker, "tag_origin" );
|
|
var_2 useanimtree( #animtree );
|
|
var_2.anim_ent thread maps\_anim::anim_loop_solo( var_2, "dead_idle", "dead_hang_ender" );
|
|
|
|
for (;;)
|
|
{
|
|
var_0[0].linker rotateto( var_0[0].linker.angles + ( 0.5, 0, 0 ), 6, 0, 0 );
|
|
var_0[1].linker rotateto( var_0[1].linker.angles - ( 0.5, 0, 0 ), 6, 0, 0 );
|
|
wait 5;
|
|
var_0[0].linker rotateto( var_0[0].linker.angles - ( 0.5, 0, 0 ), 6, 0, 0 );
|
|
var_0[1].linker rotateto( var_0[1].linker.angles + ( 0.5, 0, 0 ), 6, 0, 0 );
|
|
wait 5;
|
|
var_0[0].linker rotateto( var_0[0].linker.angles - ( 0.5, 0, 0 ), 6, 0, 0 );
|
|
var_0[1].linker rotateto( var_0[1].linker.angles + ( 0.5, 0, 0 ), 6, 0, 0 );
|
|
wait 5;
|
|
var_0[0].linker rotateto( var_0[0].linker.angles + ( 0.5, 0, 0 ), 6, 0, 0 );
|
|
var_0[1].linker rotateto( var_0[1].linker.angles - ( 0.5, 0, 0 ), 6, 0, 0 );
|
|
wait 5;
|
|
}
|
|
}
|
|
|
|
tree_delete()
|
|
{
|
|
var_0 = getentarray( "intro_trees", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 delete();
|
|
}
|
|
|
|
hill_fx()
|
|
{
|
|
common_scripts\utility::exploder( "wind" );
|
|
common_scripts\utility::flag_wait( "hill_pos_1" );
|
|
common_scripts\utility::flag_wait_any( "crash_arrive", "_stealth_spotted" );
|
|
wait 3.5;
|
|
maps\_utility::stop_exploder( "wind" );
|
|
common_scripts\utility::exploder( "nonwind" );
|
|
|
|
if ( level.ps3 )
|
|
common_scripts\utility::exploder( "crash_site_fire_nonwind_ps3" );
|
|
else
|
|
common_scripts\utility::exploder( "crash_site_fire_nonwind" );
|
|
}
|
|
|
|
jungle_moving_foliage_settings()
|
|
{
|
|
setsaveddvar( "r_reactiveMotionPlayerRadius", 100 );
|
|
setsaveddvar( "r_reactiveMotionActorRadius", 20 );
|
|
setsaveddvar( "r_reactiveMotionActorVelocityMax", 0.5 );
|
|
setsaveddvar( "r_reactiveMotionEffectorStrengthScale", 10 );
|
|
setsaveddvar( "r_reactiveMotionWindDir", ( 1, 1, 1 ) );
|
|
setsaveddvar( "r_reactiveMotionWindFrequencyScale", 0.03 );
|
|
setsaveddvar( "r_reactiveMotionWindAmplitudeScale", 2 );
|
|
setsaveddvar( "r_reactiveMotionWindStrength", 0 );
|
|
maps\jungle_ghosts_util::adjust_moving_grass( 0.8, 1, 0.4, 0.15 );
|
|
}
|
|
|
|
keep_up_with_player( var_0 )
|
|
{
|
|
self endon( var_0 );
|
|
thread keep_up_with_player_reset( var_0 );
|
|
self.orig_speed = self.moveplaybackrate;
|
|
|
|
for (;;)
|
|
{
|
|
if ( maps\_utility::ent_flag( "override_follow_logic" ) )
|
|
{
|
|
wait 0.1;
|
|
continue;
|
|
}
|
|
|
|
var_1 = distance2d( self.origin, level.player.origin );
|
|
var_2 = 250;
|
|
|
|
if ( var_1 > var_2 && !common_scripts\utility::within_fov( level.player.origin, level.player.angles, self.origin, cos( 90 ) ) )
|
|
{
|
|
self.moveplaybackrate = 1.25;
|
|
var_1 = distance2d( self.origin, level.player.origin );
|
|
|
|
while ( var_1 > 100 && !common_scripts\utility::within_fov( level.player.origin, level.player.angles, self.origin, cos( 90 ) ) )
|
|
{
|
|
var_1 = distance2d( self.origin, level.player.origin );
|
|
wait 0.05;
|
|
}
|
|
|
|
self.moveplaybackrate = self.orig_speed;
|
|
}
|
|
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
keep_up_with_player_reset( var_0 )
|
|
{
|
|
self waittill( var_0 );
|
|
self.moveplaybackrate = self.orig_speed;
|
|
}
|
|
|
|
parachute_waittill_player_cuts()
|
|
{
|
|
notifyoncommand( "cut", "+melee" );
|
|
notifyoncommand( "cut", "+melee_breath" );
|
|
notifyoncommand( "cut", "+melee_zoom" );
|
|
thread draw_cut_hint();
|
|
level.player waittill( "cut" );
|
|
|
|
if ( isdefined( level.cut_hint ) )
|
|
{
|
|
var_0 = 1.5;
|
|
thread fade_out_cut_hint( var_0 );
|
|
thread destroy_hint( var_0 );
|
|
}
|
|
}
|
|
|
|
destroy_hint( var_0 )
|
|
{
|
|
wait( var_0 );
|
|
|
|
foreach ( var_2 in level.cut_hint )
|
|
var_2 destroy();
|
|
}
|
|
|
|
draw_cut_hint()
|
|
{
|
|
level.player endon( "cut" );
|
|
wait 5;
|
|
var_0 = 125;
|
|
var_1 = 0;
|
|
var_2 = 1;
|
|
var_3 = level.player maps\_hud_util::createclientfontstring( "default", 2 );
|
|
var_3.x = var_1 * -1;
|
|
var_3.y = var_0;
|
|
var_3.horzalign = "right";
|
|
var_3.alignx = "right";
|
|
var_3 set_default_hud_stuff();
|
|
var_3 settext( &"JUNGLE_GHOSTS_MELEE_HINT" );
|
|
|
|
if ( !level.console && !level.player usinggamepad() )
|
|
var_3.fontscale = 2;
|
|
else
|
|
var_3.fontscale = 2 * var_2;
|
|
|
|
var_4 = [];
|
|
var_4["text"] = var_3;
|
|
level.cut_hint = var_4;
|
|
thread pulse_cut_hint();
|
|
}
|
|
|
|
set_default_hud_stuff()
|
|
{
|
|
level.player endon( "cut" );
|
|
self.alignx = "center";
|
|
self.aligny = "middle";
|
|
self.horzalign = "center";
|
|
self.vertalign = "middle";
|
|
self.hidewhendead = 1;
|
|
self.hidewheninmenu = 1;
|
|
self.sort = 205;
|
|
self.foreground = 1;
|
|
self.alpha = 0;
|
|
}
|
|
|
|
pulse_cut_hint()
|
|
{
|
|
level.player endon( "cut" );
|
|
|
|
for (;;)
|
|
{
|
|
fade_in_cut_hint();
|
|
fade_out_cut_hint();
|
|
}
|
|
}
|
|
|
|
fade_in_cut_hint( var_0 )
|
|
{
|
|
level.player endon( "cut" );
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 1.5;
|
|
|
|
foreach ( var_2 in level.cut_hint )
|
|
{
|
|
var_2 fadeovertime( var_0 );
|
|
var_2.alpha = 0.95;
|
|
}
|
|
|
|
wait( var_0 );
|
|
}
|
|
|
|
fade_out_cut_hint( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 1.5;
|
|
|
|
foreach ( var_2 in level.cut_hint )
|
|
{
|
|
var_2 fadeovertime( var_0 );
|
|
var_2.alpha = 0;
|
|
}
|
|
|
|
wait( var_0 );
|
|
}
|
|
|
|
chute_flies_up()
|
|
{
|
|
wait 2.2;
|
|
var_0 = level.player common_scripts\utility::spawn_tag_origin();
|
|
var_0 setmodel( "parachute_hanging_static" );
|
|
var_0 show();
|
|
var_0.origin = level.player.origin + ( 280, 0, -130 );
|
|
wait 4;
|
|
var_0 delete();
|
|
}
|
|
|
|
parachute_sway_settings()
|
|
{
|
|
wait 0.15;
|
|
var_0 = level.player getplayerangles();
|
|
var_0 = ( 0, var_0[1], 0 );
|
|
var_1 = anglestoright( var_0 );
|
|
var_2 = var_1 * 10;
|
|
var_3 = var_2 * -1;
|
|
level endon( "player_landed" );
|
|
var_4 = level.player.origin + var_2;
|
|
var_5 = level.player.origin + var_3;
|
|
var_6 = 12;
|
|
self moveto( var_4, var_6 * 0.5 );
|
|
wait( var_6 * 0.5 );
|
|
|
|
for (;;)
|
|
{
|
|
var_6 = randomintrange( 13, 18 );
|
|
self moveto( var_5, var_6, var_6 * 0.1, var_6 * 0.9 );
|
|
wait( var_6 );
|
|
self moveto( var_4, var_6, var_6 * 0.1, var_6 * 0.9 );
|
|
wait( var_6 );
|
|
}
|
|
}
|
|
|
|
parachute_intro_fx()
|
|
{
|
|
level endon( "player_landed" );
|
|
thread parachute_intro_sound();
|
|
level.player thread parachute_heartbeat();
|
|
common_scripts\utility::exploder( 1 );
|
|
level.player waittill( "done_falling" );
|
|
setblur( 5, 0.1 );
|
|
wait 2;
|
|
setblur( 0, 2 );
|
|
heartbeat();
|
|
wait 1;
|
|
do_bird_single();
|
|
heartbeat();
|
|
wait 2;
|
|
heartbeat();
|
|
wait 3;
|
|
heartbeat();
|
|
}
|
|
|
|
parachute_heartbeat()
|
|
{
|
|
level.player endon( "done_falling" );
|
|
|
|
for (;;)
|
|
{
|
|
heartbeat();
|
|
wait 1.5;
|
|
}
|
|
}
|
|
|
|
heartbeat()
|
|
{
|
|
setblur( 5, 0.25 );
|
|
level.player thread maps\_utility::play_sound_on_entity( "breathing_heartbeat" );
|
|
wait 0.25;
|
|
setblur( 0, 0.25 );
|
|
}
|
|
|
|
parachute_intro_sound()
|
|
{
|
|
thread parachute_player_land_sounds();
|
|
level endon( "player_landed" );
|
|
level.player thread maps\_utility::play_sound_on_entity( "scn_jungle_tree_landing" );
|
|
level.player common_scripts\utility::delaycall( 3.0, ::setclienttriggeraudiozonepartial, "jungle_ghosts_intro_alley_no_ping", "mix" );
|
|
}
|
|
|
|
parachute_player_land_sounds()
|
|
{
|
|
common_scripts\utility::flag_wait( "player_landed" );
|
|
level.player playrumbleonentity( "grenade_rumble" );
|
|
wait 0.5;
|
|
level.player playrumbleonentity( "grenade_rumble" );
|
|
}
|
|
|
|
first_distant_sat_launch()
|
|
{
|
|
common_scripts\utility::flag_wait( "jungle_entrance" );
|
|
level.player thread common_scripts\utility::play_sound_in_space( "jg_sat_launch_distant_first", level.player.origin );
|
|
wait 0.3;
|
|
earthquake( 0.1, 4, level.player.origin, 850 );
|
|
level.player playrumblelooponentity( "damage_light" );
|
|
wait 4.0;
|
|
level.player stoprumble( "damage_light" );
|
|
}
|
|
|
|
connect_dropdown_traverse()
|
|
{
|
|
var_0 = getent( "dropdown_disconnect", "targetname" );
|
|
var_0 disconnectpaths();
|
|
common_scripts\utility::flag_wait( "hill_pos_1" );
|
|
var_0.origin = var_0.origin + ( 0, 0, 1000 );
|
|
var_0 connectpaths();
|
|
}
|
|
|
|
stand_player_up()
|
|
{
|
|
level.player.ground_ref_ent = common_scripts\utility::spawn_tag_origin();
|
|
level.player playersetgroundreferenceent( level.player.ground_ref_ent );
|
|
level.player thread enable_tired( 75 );
|
|
level.player allowstand( 0 );
|
|
level.player allowcrouch( 0 );
|
|
level.player allowprone( 1 );
|
|
level.player setstance( "prone" );
|
|
thread maps\_utility::player_speed_set( 75, 0.1 );
|
|
level.player setbobrate( 2.25 );
|
|
level.player disableinvulnerability();
|
|
|
|
while ( level.player.origin[0] < -7900 )
|
|
common_scripts\utility::waitframe();
|
|
|
|
level.player thread transition_stance_cover( 6, 3, 2, 75 );
|
|
wait 1.5;
|
|
level.player allowcrouch( 1 );
|
|
level.player allowprone( 0 );
|
|
level.player setstance( "crouch" );
|
|
level.player maps\_utility::play_sound_on_entity( "scn_player_get_up_to_crouch" );
|
|
|
|
while ( level.player.origin[0] < -7510 )
|
|
common_scripts\utility::waitframe();
|
|
|
|
level.player thread transition_stance_cover( 6, 3, 2, 75 );
|
|
wait 1.5;
|
|
level.player allowstand( 1 );
|
|
level.player allowcrouch( 0 );
|
|
level.player allowprone( 0 );
|
|
level.player setstance( "stand" );
|
|
level.player maps\_utility::play_sound_on_entity( "scn_player_get_up_to_stand" );
|
|
|
|
while ( level.player.origin[0] < -7346 )
|
|
common_scripts\utility::waitframe();
|
|
|
|
level.player allowstand( 1 );
|
|
level.player allowcrouch( 1 );
|
|
level.player allowprone( 1 );
|
|
|
|
while ( level.player.origin[0] < -7346 )
|
|
common_scripts\utility::waitframe();
|
|
|
|
var_0 = [ "p226_tactical+silencerpistol_sp+tactical_sp" ];
|
|
wait 0.25;
|
|
level.player clearclienttriggeraudiozone( 0.1 );
|
|
maps\jungle_ghosts_util::arm_player( var_0 );
|
|
maps\jungle_ghosts_util::hud_on( 1 );
|
|
wait 1;
|
|
|
|
while ( level.player.origin[0] < -6877 )
|
|
common_scripts\utility::waitframe();
|
|
|
|
common_scripts\utility::flag_set( "intro_lines" );
|
|
level.player thread disable_tired( 1 );
|
|
setsaveddvar( "cg_footsteps", 1 );
|
|
|
|
if ( level.start_point == "parachute" )
|
|
maps\_introscreen::introscreen( 1 );
|
|
|
|
wait 3;
|
|
level thread player_spotted_logic();
|
|
}
|
|
|
|
transition_stance_cover( var_0, var_1, var_2, var_3 )
|
|
{
|
|
level.player disable_tired();
|
|
level.player allowjump( 0 );
|
|
thread maps\_utility::player_speed_set( 25, 3 );
|
|
level.player setbobrate( 2.25 );
|
|
setblur( var_0, var_1 );
|
|
level.player thread stumble( level.player.angles + ( 0, 0, 35 ), 0.75, 0.75 );
|
|
wait( var_1 );
|
|
setblur( 0, var_2 );
|
|
level.player thread enable_tired( var_3 );
|
|
}
|
|
|
|
enable_tired( var_0 )
|
|
{
|
|
init_default_tired();
|
|
self.limp_strength = 1.0;
|
|
self.ground_ref_ent = spawn( "script_model", ( 0, 0, 0 ) );
|
|
self playersetgroundreferenceent( self.ground_ref_ent );
|
|
maps\_utility::player_speed_set( var_0, 3 );
|
|
self.player_speed = var_0;
|
|
level.player setbobrate( 2.25 );
|
|
thread tired();
|
|
}
|
|
|
|
init_default_tired()
|
|
{
|
|
level.player_tired = [];
|
|
level.player_tired["pitch"]["min"] = -3;
|
|
level.player_tired["pitch"]["max"] = 4;
|
|
level.player_tired["yaw"]["min"] = -8;
|
|
level.player_tired["yaw"]["max"] = 5;
|
|
level.player_tired["roll"]["min"] = 3;
|
|
level.player_tired["roll"]["max"] = 5;
|
|
}
|
|
|
|
disable_tired( var_0, var_1 )
|
|
{
|
|
self notify( "stop_limp" );
|
|
self notify( "stop_random_blur" );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 0;
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
self playersetgroundreferenceent( undefined );
|
|
setsaveddvar( "player_sprintUnlimited", "0" );
|
|
self notify( "stop_limp_forgood" );
|
|
level.player maps\_utility::player_speed_percent( 90, 5 );
|
|
level.player setbobrate( 1.1 );
|
|
self allowstand( 1 );
|
|
self allowcrouch( 1 );
|
|
self allowsprint( 1 );
|
|
self allowjump( 1 );
|
|
}
|
|
else
|
|
{
|
|
var_2 = randomfloatrange( 0.65, 1.25 );
|
|
var_3 = adjust_angles_to_player( ( 0, 0, 0 ) );
|
|
self.ground_ref_ent rotateto( var_3, var_2, 0, var_2 / 2 );
|
|
self.ground_ref_ent waittill( "rotatedone" );
|
|
}
|
|
|
|
setblur( 0, randomfloatrange( 0.5, 0.75 ) );
|
|
}
|
|
|
|
tired( var_0 )
|
|
{
|
|
self endon( "stop_limp" );
|
|
self allowsprint( 0 );
|
|
self allowjump( 0 );
|
|
thread player_random_blur();
|
|
thread player_hurt_sounds();
|
|
|
|
for (;;)
|
|
{
|
|
if ( self playerads() > 0.3 )
|
|
{
|
|
wait 0.05;
|
|
continue;
|
|
}
|
|
|
|
var_1 = self getvelocity();
|
|
var_2 = abs( var_1[0] ) + abs( var_1[1] );
|
|
|
|
if ( var_2 < 10 )
|
|
{
|
|
wait 0.05;
|
|
continue;
|
|
}
|
|
|
|
var_3 = var_2 / self.player_speed;
|
|
var_4 = randomfloatrange( level.player_tired["pitch"]["min"], level.player_tired["pitch"]["max"] );
|
|
|
|
if ( randomint( 100 ) < 20 )
|
|
var_4 = var_4 * 1.5;
|
|
|
|
var_5 = randomfloatrange( level.player_tired["roll"]["min"], level.player_tired["roll"]["max"] );
|
|
var_6 = randomfloatrange( level.player_tired["yaw"]["min"], level.player_tired["yaw"]["max"] );
|
|
var_7 = ( var_4, var_6, var_5 );
|
|
var_7 = var_7 * var_3;
|
|
var_7 = var_7 * self.limp_strength;
|
|
var_8 = randomfloatrange( 0.15, 0.45 );
|
|
var_9 = randomfloatrange( 0.65, 1.25 );
|
|
thread stumble( var_7, var_8, var_9 );
|
|
wait( var_8 );
|
|
self waittill( "recovered" );
|
|
}
|
|
}
|
|
|
|
stumble( var_0, var_1, var_2, var_3 )
|
|
{
|
|
self endon( "stop_stumble" );
|
|
self endon( "stop_limp" );
|
|
var_0 = adjust_angles_to_player( var_0 );
|
|
self notify( "stumble" );
|
|
self.ground_ref_ent rotateto( var_0, var_1, var_1 / 4 * 3, var_1 / 4 );
|
|
self.ground_ref_ent waittill( "rotatedone" );
|
|
var_4 = ( randomfloat( 4 ) - 4, randomfloat( 5 ), 0 );
|
|
var_4 = adjust_angles_to_player( var_4 );
|
|
self.ground_ref_ent rotateto( var_4, var_2, 0, var_2 / 2 );
|
|
self.ground_ref_ent waittill( "rotatedone" );
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
self notify( "recovered" );
|
|
}
|
|
|
|
player_random_blur()
|
|
{
|
|
self endon( "dying" );
|
|
self endon( "stop_random_blur" );
|
|
|
|
for (;;)
|
|
{
|
|
wait 0.05;
|
|
|
|
if ( randomint( 100 ) > 10 )
|
|
continue;
|
|
|
|
var_0 = randomint( 3 ) + 4;
|
|
var_1 = randomfloatrange( 0.1, 0.3 );
|
|
var_2 = randomfloatrange( 0.3, 1 );
|
|
setblur( var_0 * 1.2, var_1 );
|
|
wait( var_1 );
|
|
setblur( 0, var_2 );
|
|
wait( var_2 );
|
|
wait( randomfloatrange( 0, 1.5 ) );
|
|
common_scripts\utility::waittill_notify_or_timeout( "blur", 5 );
|
|
}
|
|
}
|
|
|
|
player_hurt_sounds()
|
|
{
|
|
self endon( "stop_limp" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( player_playing_hurt_sounds() )
|
|
{
|
|
wait 0.05;
|
|
continue;
|
|
}
|
|
|
|
self notify( "blur" );
|
|
common_scripts\utility::play_sound_in_space( "breathing_limp_start" );
|
|
common_scripts\utility::play_sound_in_space( "breathing_limp_better" );
|
|
wait( randomfloatrange( 0, 1 ) );
|
|
self waittill( "stumble" );
|
|
}
|
|
}
|
|
|
|
player_playing_hurt_sounds()
|
|
{
|
|
if ( level.player.health < 50 )
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
adjust_angles_to_player( var_0 )
|
|
{
|
|
var_1 = var_0[0];
|
|
var_2 = var_0[2];
|
|
var_3 = anglestoright( self.angles );
|
|
var_4 = anglestoforward( self.angles );
|
|
var_5 = ( var_3[0], 0, var_3[1] * -1 );
|
|
var_6 = ( var_4[0], 0, var_4[1] * -1 );
|
|
var_7 = var_5 * var_1;
|
|
var_7 = var_7 + var_6 * var_2;
|
|
return var_7 + ( 0, var_0[1], 0 );
|
|
}
|
|
|
|
assign_archetypes()
|
|
{
|
|
foreach ( var_1 in level.alpha )
|
|
var_1.animarchetype = "jungle_soldier";
|
|
}
|
|
|
|
setup_jungle_enemies()
|
|
{
|
|
setsaveddvar( "laserradius", 0.4 );
|
|
maps\_utility::array_spawn_function_targetname( "jungle_patroller", ::jungle_enemy_logic, "zero", 1 );
|
|
maps\_utility::array_spawn_function_targetname( "lookout_guys", ::lookout_guys_logic );
|
|
maps\_utility::array_spawn_function_targetname( "right_meeting_guys", ::right_meeting_guys_logic );
|
|
maps\_utility::array_spawn_function_targetname( "left_meeting_guys", ::left_meeting_guys_logic );
|
|
level.jungle_enemies = maps\_utility::array_spawn_targetname( "jungle_patroller", 1 );
|
|
var_0 = maps\_utility::array_spawn_targetname( "lookout_guys", 1 );
|
|
waittillframeend;
|
|
level.jungle_enemies = common_scripts\utility::array_combine( level.jungle_enemies, var_0 );
|
|
level.right_meeting_guys = maps\_utility::array_spawn_targetname( "right_meeting_guys", 1 );
|
|
level.left_meeting_guys = maps\_utility::array_spawn_targetname( "left_meeting_guys", 1 );
|
|
level.meeting_guys = common_scripts\utility::array_combine( level.right_meeting_guys, level.left_meeting_guys );
|
|
waittillframeend;
|
|
level.jungle_enemies = common_scripts\utility::array_combine( level.jungle_enemies, level.meeting_guys );
|
|
level thread meeting_guys_vo( level.left_meeting_guys );
|
|
level thread meeting_guys_vo( level.right_meeting_guys );
|
|
thread setup_hill_enemies();
|
|
}
|
|
|
|
jungle_stealth_settings()
|
|
{
|
|
var_0 = [];
|
|
var_0["prone"] = 100;
|
|
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 );
|
|
}
|
|
|
|
player_spotted_count()
|
|
{
|
|
maps\_utility::ent_flag_wait( "_stealth_behavior_first_reaction" );
|
|
|
|
if ( level.laser_count < 5 )
|
|
{
|
|
self laserforceon();
|
|
level.laser_count++;
|
|
}
|
|
|
|
thread delay_notify_alive();
|
|
|
|
if ( !maps\_utility::is_in_array( level.stealth_player_aware_enemies, self ) )
|
|
level.stealth_player_aware_enemies = common_scripts\utility::add_to_array( level.stealth_player_aware_enemies, self );
|
|
|
|
self waittill( "death" );
|
|
level.laser_count--;
|
|
level.stealth_player_aware_enemies = common_scripts\utility::array_remove( level.stealth_player_aware_enemies, self );
|
|
}
|
|
|
|
delay_notify_alive()
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( maps\jungle_ghosts_util::isdefined_and_alive( self ) )
|
|
level notify( "enemy_stealth_reaction" );
|
|
}
|
|
|
|
player_spotted_logic()
|
|
{
|
|
level endon( "waterfall_approach" );
|
|
|
|
for (;;)
|
|
{
|
|
level.player setmovespeedscale( 0.75 );
|
|
common_scripts\utility::flag_wait( "_stealth_spotted" );
|
|
level.player setmovespeedscale( 0.9 );
|
|
setsaveddvar( "player_sprintSpeedScale", 1.4 );
|
|
common_scripts\utility::flag_waitopen( "_stealth_spotted" );
|
|
|
|
if ( common_scripts\utility::flag( "waterfall_approach" ) )
|
|
thread maps\jungle_ghosts_util::stop_music_jg( 1 );
|
|
}
|
|
}
|
|
|
|
alert_on_chopper_damage()
|
|
{
|
|
self endon( "death" );
|
|
self waittill( "damage" );
|
|
var_0 = common_scripts\utility::get_array_of_closest( self.origin, getaiarray( "axis" ) );
|
|
|
|
for ( var_1 = 0; var_1 < 3 || var_1 < var_0.size; var_1++ )
|
|
{
|
|
if ( maps\jungle_ghosts_util::isdefined_and_alive( var_0[var_1] ) )
|
|
{
|
|
var_0[var_1] thread maps\jungle_ghosts_util::manually_alert_me();
|
|
wait( randomfloatrange( 0.5, 1 ) );
|
|
}
|
|
}
|
|
}
|
|
|
|
jungle_enemy_logic( var_0, var_1 )
|
|
{
|
|
maps\jungle_ghosts_util::enemy_weapons_force_use_silencer();
|
|
self endon( "death" );
|
|
|
|
if ( !common_scripts\utility::flag( "second_distant_sat_launch" ) )
|
|
maps\_utility::set_moveplaybackrate( 0.7 );
|
|
else
|
|
maps\_utility::set_moveplaybackrate( 1 );
|
|
|
|
if ( isdefined( self.target ) )
|
|
thread maps\_patrol::patrol();
|
|
|
|
thread set_nearest_stealth_group();
|
|
maps\_utility::disable_long_death();
|
|
self.diequietly = 1;
|
|
self.no_pain_sound = 1;
|
|
self.skipbloodpool = 1;
|
|
thread player_spotted_count();
|
|
thread jungle_enemy_sfx();
|
|
maps\_utility::set_ai_bcvoice( "shadowcompany" );
|
|
thread maps\_utility::set_battlechatter( 0 );
|
|
maps\_utility::ent_flag_init( "stealth_kill" );
|
|
|
|
if ( !common_scripts\utility::flag( "second_distant_sat_launch" ) )
|
|
thread maps\_patrol_anims_creepwalk::enable_creepwalk();
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
if ( var_0 == "zero" )
|
|
self.grenadeammo = 0;
|
|
else
|
|
self.grenadeammo = var_0;
|
|
}
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
self.stealth_blockers = 0;
|
|
self._stealth.logic.alert_level.min_bulletwhizby_altert_dist = 500;
|
|
}
|
|
}
|
|
|
|
jungle_enemy_sfx()
|
|
{
|
|
self endon( "death" );
|
|
var_0 = 1000000;
|
|
|
|
while ( !isdefined( level.meeting_guys ) )
|
|
wait 0.1;
|
|
|
|
if ( maps\_utility::is_in_array( level.meeting_guys, self ) )
|
|
return;
|
|
|
|
if ( isdefined( self.script_noteworthy ) )
|
|
{
|
|
if ( self.script_noteworthy == "tall_grass_patroller" || self.script_noteworthy == "no_chatter" )
|
|
return;
|
|
}
|
|
|
|
var_1 = [ "jungleg_safr_salvageteametato", "jungleg_safr_lookslikeuhhzerosurvivors", "jungleg_safr_maintainsweepchutes", "jungleg_safr_standbyforrules", "jungleg_safr_team2reportingzero", "jungleg_safr_team3hasrecovered", "jungleg_safr_primarytargetrecoveredall" ];
|
|
var_1 = common_scripts\utility::array_randomize( var_1 );
|
|
var_2 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
var_3 = distancesquared( self.origin, level.player.origin );
|
|
|
|
if ( var_3 <= var_0 )
|
|
{
|
|
if ( maps\jungle_ghosts_util::is_moving() )
|
|
play_foilage_sound_custom();
|
|
|
|
var_4 = var_1[var_2];
|
|
maps\_utility::play_sound_on_tag( var_4, undefined, 1 );
|
|
var_2++;
|
|
|
|
if ( var_2 > var_1.size - 1 )
|
|
var_2 = 0;
|
|
|
|
wait( randomintrange( 5, 8 ) );
|
|
}
|
|
|
|
wait 2;
|
|
}
|
|
}
|
|
|
|
play_foilage_sound_custom()
|
|
{
|
|
thread maps\_utility::play_sound_on_tag( "scn_tree_snap", undefined, 1 );
|
|
wait 0.1;
|
|
thread maps\_utility::play_sound_on_tag( "scn_bush_movement", undefined, 1 );
|
|
wait 0.25;
|
|
thread maps\_utility::play_sound_on_tag( "scn_tree_snap", undefined, 1 );
|
|
}
|
|
|
|
lookout_guys_logic()
|
|
{
|
|
maps\jungle_ghosts_util::enemy_weapons_force_use_silencer();
|
|
thread jungle_enemy_logic( "zero", 1 );
|
|
maps\_utility::trigger_wait_targetname( "jungle_entrance" );
|
|
thread lookout_animation();
|
|
}
|
|
|
|
right_meeting_guys_logic()
|
|
{
|
|
maps\jungle_ghosts_util::enemy_weapons_force_use_silencer();
|
|
thread jungle_enemy_logic( "zero", 1 );
|
|
var_0 = common_scripts\utility::getstruct( "right_meeting", "targetname" );
|
|
thread meeting_animation( var_0, "meeting_trig" );
|
|
}
|
|
|
|
left_meeting_guys_logic()
|
|
{
|
|
maps\jungle_ghosts_util::enemy_weapons_force_use_silencer();
|
|
thread jungle_enemy_logic( "zero", 1 );
|
|
var_0 = common_scripts\utility::getstruct( "left_meeting", "targetname" );
|
|
thread meeting_animation( var_0, undefined );
|
|
}
|
|
|
|
meeting_animation( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
var_2 = undefined;
|
|
|
|
switch ( self.script_noteworthy )
|
|
{
|
|
case "guy1":
|
|
var_2 = "meeting_idle1";
|
|
break;
|
|
case "guy2":
|
|
var_2 = "meeting_idle2";
|
|
break;
|
|
case "guy3":
|
|
var_2 = "meeting_idle3";
|
|
break;
|
|
}
|
|
|
|
var_0 thread maps\jungle_ghosts_util::stealth_ai_idle( self, var_2, undefined, undefined );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
thread stealth_anim_interupt_detection( "meeting" );
|
|
self endon( "abort_meeting" );
|
|
maps\_utility::trigger_wait_targetname( var_1 );
|
|
self notify( "stop_meeting_vo" );
|
|
var_0 notify( "stop_loop" );
|
|
self.animname = self.script_noteworthy;
|
|
var_0 maps\_anim::anim_single_solo( self, "meeting" );
|
|
self notify( "meeting" );
|
|
self.animname = self.og_animname;
|
|
thread maps\_patrol::patrol();
|
|
}
|
|
else
|
|
{
|
|
thread stealth_anim_interupt_detection( "death" );
|
|
var_3 = maps\_stealth_shared_utilities::group_get_flagname( "_stealth_spotted" );
|
|
common_scripts\utility::flag_wait( var_3 );
|
|
wait( randomintrange( 1, 3 ) );
|
|
maps\jungle_ghosts_util::manually_alert_me();
|
|
self.goalradius = 250;
|
|
self setgoalentity( level.player );
|
|
}
|
|
}
|
|
|
|
meeting_guys_vo( var_0 )
|
|
{
|
|
level endon( "_stealth_spotted" );
|
|
var_1 = [ "jungleg_saf1_hqisreportingsurvivors", "jungleg_saf2_howmany", "jungleg_saf1_twosofartheyre", "jungleg_saf2_vasquezsaidhesaw", "jungleg_saf1_conflictingreportsfromthe" ];
|
|
var_2 = [ "jungleg_saf3_team2iscoverng", "jungleg_saf4_idontunderstandwho", "jungleg_saf3_itswhowasnton", "jungleg_saf4_copythattheyrealready", "jungleg_saf3_weregoingtobe" ];
|
|
var_3 = [ "jungleg_saf1_noimsayinghe", "jungleg_saf4_howdoyoueven", "jungleg_saf1_itdoesntmatterwhat", "jungleg_saf4_weregonnaneedmore", "jungleg_saf2_lesscomplainingmore", "jungleg_saf4_myteamsonit" ];
|
|
var_4 = [ var_1, var_2, var_3 ];
|
|
|
|
foreach ( var_6 in var_0 )
|
|
var_6 endon( "stop_meeting_vo" );
|
|
|
|
for (;;)
|
|
{
|
|
foreach ( var_13, var_9 in var_4 )
|
|
{
|
|
foreach ( var_11 in var_9 )
|
|
{
|
|
var_6 = common_scripts\utility::random( var_0 );
|
|
|
|
if ( !maps\jungle_ghosts_util::isdefined_and_alive( var_6 ) )
|
|
return;
|
|
else
|
|
var_6 maps\_utility::play_sound_on_tag( var_11, undefined, 1 );
|
|
}
|
|
}
|
|
|
|
wait 5;
|
|
}
|
|
}
|
|
|
|
lookout_animation()
|
|
{
|
|
if ( !isdefined( self ) )
|
|
return;
|
|
|
|
self.og_animname = self.animname;
|
|
self.animname = self.script_noteworthy;
|
|
thread stealth_anim_interupt_detection( "helpup_lookout" );
|
|
var_0 = common_scripts\utility::getstruct( "lookout_scene", "targetname" );
|
|
var_0 thread maps\_anim::anim_single_solo( self, "helpup_lookout" );
|
|
wait 0.05;
|
|
self setanimtime( maps\_utility::getanim( "helpup_lookout" ), 0.7 );
|
|
self.animname = self.og_animname;
|
|
maps\_utility::notify_delay( "helpup_lookout", 5 );
|
|
self.patrol_walk_anim = "active_patrolwalk_gundown";
|
|
thread maps\_patrol::patrol();
|
|
}
|
|
|
|
stealth_anim_interupt_detection( var_0 )
|
|
{
|
|
self endon( var_0 );
|
|
thread maps\_stealth_utility::stealth_enemy_endon_alert();
|
|
common_scripts\utility::waittill_any( "enemy_stealth_reaction", "damage", "stealth_enemy_endon_alert", "enemy_awareness_reaction", "bulletwhizby" );
|
|
self stopanimscripted();
|
|
var_1 = get_my_meeting_group();
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
var_1 = maps\_utility::array_removedead_or_dying( var_1 );
|
|
maps\_utility::array_notify( var_1, "abort_meeting" );
|
|
}
|
|
}
|
|
|
|
get_my_meeting_group()
|
|
{
|
|
if ( maps\_utility::is_in_array( level.left_meeting_guys, self ) )
|
|
return level.left_meeting_guys;
|
|
else if ( maps\_utility::is_in_array( level.right_meeting_guys, self ) )
|
|
return level.right_meeting_guys;
|
|
else
|
|
return undefined;
|
|
}
|
|
|
|
hill_enemy_stealth_logic()
|
|
{
|
|
maps\jungle_ghosts_util::enemy_weapons_force_use_silencer();
|
|
self endon( "death" );
|
|
maps\_utility::disable_long_death();
|
|
thread player_spotted_count();
|
|
thread set_nearest_stealth_group();
|
|
maps\_stealth_utility::stealth_pre_spotted_function_custom( ::jungle_prespotted_func );
|
|
maps\_utility::set_ai_bcvoice( "shadowcompany" );
|
|
thread maps\_utility::set_battlechatter( 0 );
|
|
thread maps\_patrol_anims_creepwalk::enable_creepwalk();
|
|
maps\_utility::forceuseweapon( "sc2010+silencer_sp", "primary" );
|
|
self.grenadeammo = 0;
|
|
|
|
if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "cliff_looker" )
|
|
{
|
|
thread cliff_guy_logic();
|
|
return;
|
|
}
|
|
|
|
level endon( "_stealth_spotted" );
|
|
self laserforceon();
|
|
}
|
|
|
|
set_nearest_stealth_group()
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( common_scripts\utility::flag( "second_distant_sat_launch" ) )
|
|
return;
|
|
|
|
self.og_script_stealthgroup = self.script_stealthgroup;
|
|
|
|
for (;;)
|
|
{
|
|
var_0[0] = self;
|
|
var_1 = maps\_utility::get_closest_ai( self.origin, "axis", var_0 );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
if ( distance( var_1.origin, self.origin ) < 600 )
|
|
{
|
|
if ( isdefined( var_1.script_stealthgroup ) && var_1.script_stealthgroup != self.script_stealthgroup )
|
|
self.script_stealthgroup = var_1.script_stealthgroup;
|
|
}
|
|
else if ( self.script_stealthgroup != self.og_script_stealthgroup )
|
|
self.script_stealthgroup = self.og_script_stealthgroup;
|
|
}
|
|
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
cliff_guy_logic()
|
|
{
|
|
self endon( "death" );
|
|
self.animname = "generic";
|
|
var_0 = common_scripts\utility::getstruct( self.target, "targetname" );
|
|
self forceteleport( var_0.origin, var_0.angles );
|
|
var_0 maps\_stealth_utility::stealth_ai_idle_and_react( self, "cliff_look", "cliff_look_react" );
|
|
}
|
|
|
|
hill_enemy_on_spotted()
|
|
{
|
|
self endon( "death" );
|
|
common_scripts\utility::flag_wait( "_stealth_spotted" );
|
|
maps\_utility::disable_cqbwalk();
|
|
self stopanimscripted();
|
|
maps\_utility::set_moveplaybackrate( 1 );
|
|
}
|
|
|
|
jungle_prespotted_func()
|
|
{
|
|
wait( level.stealth_spotted_time );
|
|
}
|
|
|
|
stealth_hard_reset()
|
|
{
|
|
self.ignoreme = 1;
|
|
self.ignoreall = 1;
|
|
maps\_stealth_utility::disable_stealth_for_ai();
|
|
wait 1;
|
|
maps\_stealth_utility::enable_stealth_for_ai();
|
|
self.ignoreme = 0;
|
|
self.ignoreall = 0;
|
|
}
|
|
|
|
knife_victim_death_func()
|
|
{
|
|
self startragdoll();
|
|
}
|
|
|
|
jungle_friendly_logic()
|
|
{
|
|
self.disableplayeradsloscheck = 1;
|
|
maps\_utility::ent_flag_init( "stealth_kill" );
|
|
maps\_utility::ent_flag_init( "override_follow_logic" );
|
|
self.grenadeammo = 0;
|
|
thread maps\_utility::magic_bullet_shield( 1 );
|
|
thread maps\_stealth_utility::stealth_default();
|
|
thread maps\jungle_ghosts_util::friendly_jungle_stealth_color_behavior();
|
|
self.maxsightdistsqrd = 810000;
|
|
maps\_utility::set_ai_bcvoice( "taskforce" );
|
|
self.npcid = 0;
|
|
maps\_utility::disable_surprise();
|
|
maps\_utility::set_force_color( "r" );
|
|
}
|
|
|
|
setup_hill_enemies()
|
|
{
|
|
maps\_utility::array_spawn_function_targetname( "hill_patrollers", ::hill_enemy_stealth_logic );
|
|
maps\_utility::array_spawn_function_targetname( "hill_patrollers", ::hill_enemy_on_spotted );
|
|
maps\_utility::array_spawn_function_targetname( "plane_meeting_guys", ::plane_meeting_guys_logic );
|
|
thread hill_chopper();
|
|
common_scripts\utility::flag_wait( "hill_pos_1" );
|
|
|
|
if ( !common_scripts\utility::flag( "_stealth_spotted" ) )
|
|
maps\_utility::autosave_stealth();
|
|
|
|
if ( common_scripts\utility::flag( "_stealth_spotted" ) )
|
|
{
|
|
level.hill_patrollers = maps\_utility::array_spawn_targetname( "hill_patrollers", 1 );
|
|
level thread handle_enemies_behind_player();
|
|
}
|
|
else
|
|
{
|
|
level.hill_patrollers = maps\_utility::array_spawn_targetname( "hill_patrollers", 1 );
|
|
var_0 = maps\_utility::array_spawn_targetname( "plane_meeting_guys", 1 );
|
|
level.hill_patrollers = common_scripts\utility::array_combine( var_0, level.hill_patrollers );
|
|
level thread handle_enemies_behind_player();
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "hill_pos_4" );
|
|
wait 2;
|
|
|
|
while ( level.hill_patrollers.size != 0 )
|
|
{
|
|
level.hill_patrollers = maps\_utility::array_removedead( level.hill_patrollers );
|
|
wait 2;
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "hill_clear" );
|
|
}
|
|
|
|
heli_guys_logic()
|
|
{
|
|
self.ignoreme = 1;
|
|
self.ignoreall = 1;
|
|
}
|
|
|
|
plane_meeting_guys_logic()
|
|
{
|
|
thread jungle_enemy_logic( "zero", 1 );
|
|
var_0 = common_scripts\utility::getstruct( "plane_meeting", "targetname" );
|
|
thread meeting_animation( var_0 );
|
|
}
|
|
|
|
spawn_hill_enemies_hot()
|
|
{
|
|
var_0 = getent( "hill_main_volume", "targetname" );
|
|
var_1 = getent( "hill_main_volume", "targetname" );
|
|
level.hill_patrollers = common_scripts\utility::array_removeundefined( level.hill_patrollers );
|
|
var_2 = getentarray( "hill_hot_enemies", "targetname" );
|
|
var_3 = maps\jungle_ghosts_util::enemy_weapons_force_use_silencer;
|
|
maps\_utility::array_spawn_function_targetname( "hill_hot_enemies", var_3 );
|
|
level.hill_holders = [];
|
|
level.hill_squad = [];
|
|
level.hill_squad = maps\jungle_ghosts_util::create_a_squad_from_spawner( var_2[0], level.hill_squad, 5 );
|
|
level thread maps\jungle_ghosts_util::squad_manager( level.hill_squad );
|
|
wait 5;
|
|
level.hill_holders = maps\jungle_ghosts_util::spawn_ai_from_spawner_send_to_volume( var_2[1], 5, var_1 );
|
|
level.hill_patrollers = common_scripts\utility::array_combine( level.hill_holders, level.hill_squad );
|
|
}
|
|
|
|
handle_enemies_behind_player()
|
|
{
|
|
level endon( "waterfall_approach" );
|
|
common_scripts\utility::flag_wait( "hill_pos_1" );
|
|
|
|
if ( common_scripts\utility::flag( "_stealth_spotted" ) )
|
|
return;
|
|
|
|
common_scripts\utility::flag_wait( "_stealth_spotted" );
|
|
var_0 = undefined;
|
|
|
|
if ( isdefined( level.jungle_enemies ) )
|
|
{
|
|
if ( common_scripts\utility::flag( "hill_pos_4" ) )
|
|
common_scripts\utility::array_thread( level.jungle_enemies, maps\jungle_ghosts_util::delete_if_player_cant_see_me );
|
|
else
|
|
{
|
|
level.jungle_enemies = maps\_utility::array_removedead_or_dying( level.jungle_enemies );
|
|
|
|
if ( level.jungle_enemies.size > 2 )
|
|
{
|
|
var_0 = common_scripts\utility::get_array_of_closest( level.player.origin, level.jungle_enemies );
|
|
|
|
for ( var_1 = 2; var_1 < var_0.size; var_1++ )
|
|
var_0[var_1] maps\jungle_ghosts_util::delete_if_player_cant_see_me();
|
|
|
|
var_0 = common_scripts\utility::array_removeundefined( var_0 );
|
|
}
|
|
else if ( level.jungle_enemies.size != 0 )
|
|
var_0 = level.jungle_enemies;
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
var_3 maps\_utility::enable_sprint();
|
|
var_4 = level.player;
|
|
var_3 setgoalentity( var_4 );
|
|
var_3 thread set_flag_when_close( var_4 );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
hill_chopper()
|
|
{
|
|
maps\_utility::array_spawn_function_targetname( "heli_guys", ::heli_guys_logic );
|
|
var_0 = maps\_vehicle::spawn_vehicle_from_targetname( "hill_heli" );
|
|
var_0 vehicle_turnengineoff();
|
|
var_0 endon( "death" );
|
|
var_0 thread alert_on_chopper_damage();
|
|
common_scripts\utility::flag_wait( "hill_pos_1" );
|
|
level.player setclienttriggeraudiozonepartial( "jungle_ghosts_intro_no_vehicle_npc", "mix" );
|
|
var_0 vehicle_turnengineon();
|
|
thread hill_heli_fade_in_sounds();
|
|
common_scripts\utility::flag_wait_any( "crash_arrive", "_stealth_spotted" );
|
|
var_0 maps\_vehicle::gopath();
|
|
wait 10;
|
|
var_0 vehicle_setspeedimmediate( 40, 10 );
|
|
}
|
|
|
|
hill_heli_fade_in_sounds()
|
|
{
|
|
level.player clearclienttriggeraudiozone( 3.0 );
|
|
}
|
|
|
|
hill_reenforcements()
|
|
{
|
|
level.spawned_reenforcements = 0;
|
|
common_scripts\utility::flag_wait( "hill_pos_4" );
|
|
send_hill_reenforcements_if_hot();
|
|
common_scripts\utility::flag_wait( "hill_pos_5" );
|
|
|
|
if ( level.spawned_reenforcements == 0 )
|
|
send_hill_reenforcements_if_hot();
|
|
}
|
|
|
|
send_hill_reenforcements_if_hot()
|
|
{
|
|
level endon( "waterfall_approach" );
|
|
|
|
if ( common_scripts\utility::flag( "_stealth_spotted" ) )
|
|
{
|
|
level.spawned_reenforcements = 1;
|
|
var_0 = getent( "hilltop_volume_1", "targetname" );
|
|
var_1 = getent( "hill_backup_left", "targetname" );
|
|
var_2 = maps\jungle_ghosts_util::spawn_ai_from_spawner_send_to_volume( var_1, 4, var_0 );
|
|
level.hill_patrollers = common_scripts\utility::array_combine( level.hill_patrollers, var_2 );
|
|
common_scripts\utility::flag_set( "player_agro_near_execution" );
|
|
}
|
|
}
|
|
|
|
set_flag_when_close( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
level endon( "hill_flanked" );
|
|
|
|
for (;;)
|
|
{
|
|
var_1 = distancesquared( self.origin, var_0.origin );
|
|
|
|
if ( var_1 <= 202500 )
|
|
{
|
|
common_scripts\utility::flag_set( "hill_flanked" );
|
|
iprintlnbold( "enemies flanking!" );
|
|
return;
|
|
}
|
|
|
|
wait 0.5;
|
|
}
|
|
}
|
|
|
|
setup_friendlies()
|
|
{
|
|
thread battlechatter_setup();
|
|
thread jungle_vo();
|
|
common_scripts\utility::flag_wait( "waterfall_approach" );
|
|
maps\_utility::array_spawn_function_targetname( "alpha_team", ::jungle_friendly_logic );
|
|
level.alpha = maps\_utility::array_spawn_targetname( "alpha_team", 1 );
|
|
|
|
foreach ( var_1 in level.alpha )
|
|
{
|
|
if ( var_1.script_friendname == "Elias" )
|
|
{
|
|
level.alpha1 = var_1;
|
|
level.alpha1.animname = "alpha1";
|
|
level.alpha1 maps\_utility::forceuseweapon( "honeybadger", "primary" );
|
|
level.alpha1.name = "Elias";
|
|
continue;
|
|
}
|
|
|
|
level.alpha2 = var_1;
|
|
level.alpha2.animname = "alpha2";
|
|
level.alpha2 maps\_utility::forceuseweapon( "honeybadger", "primary" );
|
|
}
|
|
|
|
level.alpha1.animname = "alpha1";
|
|
common_scripts\utility::flag_set( "friendlies_ready" );
|
|
assign_archetypes();
|
|
level thread friendly_navigation();
|
|
thread delete_bloomdome();
|
|
thread waterfall_execution();
|
|
level.player thread maps\jungle_ghosts_util::stream_waterfx( "stop_water_footsteps", "step_run_plr_water" );
|
|
thread maps\jungle_ghosts_util::stop_music_jg( 1 );
|
|
}
|
|
|
|
battlechatter_setup()
|
|
{
|
|
common_scripts\utility::waitframe();
|
|
var_0 = getaiarray();
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 thread maps\_utility::set_battlechatter( 0 );
|
|
}
|
|
|
|
friendly_navigation()
|
|
{
|
|
common_scripts\utility::flag_wait( "friendlies_ready" );
|
|
|
|
foreach ( var_1 in level.alpha )
|
|
{
|
|
var_1 maps\_utility::set_moveplaybackrate( 1 );
|
|
var_1.ignoreall = 1;
|
|
}
|
|
}
|
|
|
|
bravo_friendly_logic()
|
|
{
|
|
self.ignoreall = 1;
|
|
self.ignoreme = 1;
|
|
self.goalradius = 32;
|
|
self.disableplayeradsloscheck = 1;
|
|
thread maps\_utility::magic_bullet_shield( 1 );
|
|
maps\_utility::set_ai_bcvoice( "taskforce" );
|
|
thread maps\_stealth_utility::stealth_default();
|
|
thread maps\jungle_ghosts_util::friendly_jungle_stealth_color_behavior();
|
|
|
|
if ( self.script_friendname == "Merrick" )
|
|
level.merrick = self;
|
|
else
|
|
level.hesh = self;
|
|
}
|
|
|
|
delete_bloomdome()
|
|
{
|
|
var_0 = getentarray( "bloomdome", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 delete();
|
|
}
|
|
|
|
close_to_waterfall_enemy_logic()
|
|
{
|
|
thread final_jungle_ai_cleanup();
|
|
level endon( "waterfall_trig" );
|
|
level endon( "hostage_flag_set" );
|
|
common_scripts\utility::flag_wait( "waterfall_approach" );
|
|
var_0 = getent( "hilltop_volume_1", "targetname" );
|
|
|
|
for (;;)
|
|
{
|
|
var_1 = getaiarray( "axis" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
if ( maps\jungle_ghosts_util::isdefined_and_alive( var_3 ) )
|
|
{
|
|
if ( common_scripts\utility::flag( "_stealth_spotted" ) )
|
|
{
|
|
if ( level.player.origin[1] > 850 && var_3.origin[1] > -350 )
|
|
{
|
|
var_3 setgoalpos( var_3.origin );
|
|
var_3 setgoalvolumeauto( var_0 );
|
|
var_3 maps\_stealth_utility::disable_stealth_for_ai();
|
|
continue;
|
|
}
|
|
|
|
var_3 setgoalentity( level.player );
|
|
}
|
|
}
|
|
}
|
|
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
final_jungle_ai_cleanup()
|
|
{
|
|
level common_scripts\utility::waittill_any( "waterfall_trig", "hostage_flag_set" );
|
|
var_0 = getaiarray( "axis" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( isdefined( var_2.script_noteworthy ) )
|
|
{
|
|
if ( var_2.script_noteworthy != "guard1" && var_2.script_noteworthy != "guard2" && var_2.script_noteworthy != "execution_guards" )
|
|
var_2 delete();
|
|
|
|
continue;
|
|
}
|
|
|
|
var_2 delete();
|
|
}
|
|
}
|
|
|
|
waterfall_execution()
|
|
{
|
|
common_scripts\utility::trigger_off( "mid_stream", "targetname" );
|
|
common_scripts\utility::trigger_off( "waterfall_to_stream", "targetname" );
|
|
level thread maps\jungle_ghosts_stream::friendly_stream_navigation();
|
|
slomo_sound_scale_setup();
|
|
maps\_utility::array_spawn_function_targetname( "bravo_team", ::bravo_friendly_logic );
|
|
var_0 = maps\_utility::spawn_targetname( "guard_a_1", 1 );
|
|
var_0.ignoreme = 1;
|
|
var_1 = maps\_utility::spawn_targetname( "guard_a_2", 1 );
|
|
var_1.ignoreme = 1;
|
|
var_2 = maps\_utility::spawn_targetname( "guard_b_1", 1 );
|
|
var_2.ignoreme = 1;
|
|
var_3 = maps\_utility::spawn_targetname( "guard_b_2", 1 );
|
|
var_3.ignoreme = 1;
|
|
level.bravo = maps\_utility::array_spawn_targetname( "bravo_team", 1 );
|
|
maps\_utility::friendlyfire_warnings_off();
|
|
var_4 = level.bravo[0];
|
|
var_4.deathfunc = ::knife_victim_death_func;
|
|
var_5 = level.bravo[1];
|
|
var_5.deathfunc = ::knife_victim_death_func;
|
|
var_4.animname = "hostage_a";
|
|
var_5.animname = "hostage_b";
|
|
var_0.animname = "guard_a_1";
|
|
var_1.animname = "guard_a_2";
|
|
var_2.animname = "guard_b_1";
|
|
var_3.animname = "guard_b_2";
|
|
var_0.skipbloodpool = 1;
|
|
var_1.skipbloodpool = 1;
|
|
var_2.skipbloodpool = 1;
|
|
var_3.skipbloodpool = 1;
|
|
var_6 = spawnstruct();
|
|
var_6.guard_a_1 = var_0;
|
|
var_6.guard_a_2 = var_1;
|
|
var_6.guard_b_1 = var_2;
|
|
var_6.guard_b_2 = var_3;
|
|
var_6.hostage_a = var_4;
|
|
var_6.hostage_b = var_5;
|
|
var_6.guard_a_2 thread check_guard_death_to_stop_pistol_fire();
|
|
var_6.guard_a_2.allowdeath = 1;
|
|
var_6.guard_b_2.allowdeath = 1;
|
|
var_4 maps\_utility::gun_remove();
|
|
var_6.outcome_decided = 0;
|
|
var_6.a_guys = [ var_0, var_1, var_4 ];
|
|
var_6.b_guys = [ var_2, var_3, var_5 ];
|
|
var_6.a_bad_guys = [ var_0, var_1 ];
|
|
var_6.b_bad_guys = [ var_2, var_3 ];
|
|
common_scripts\utility::array_thread( var_6.a_bad_guys, ::check_hostage_flag_a );
|
|
common_scripts\utility::array_thread( var_6.b_bad_guys, ::check_hostage_flag_b );
|
|
var_6.anim_ent_a = common_scripts\utility::get_target_ent( "hostage_a_anim_ent" );
|
|
var_6.anim_ent_b = common_scripts\utility::get_target_ent( "hostage_b_anim_ent" );
|
|
var_6.anim_ent_c = common_scripts\utility::get_target_ent( "elias_walkin" );
|
|
common_scripts\utility::array_thread( var_6.a_guys, maps\_utility::disable_long_death );
|
|
var_7 = getent( "waterfall_spotted", "targetname" );
|
|
var_6 thread monitor_player_close( var_7 );
|
|
var_6.anim_ent_a thread maps\_anim::anim_loop( var_6.a_guys, "rescue_a_idle", "stop_loop" );
|
|
var_6.anim_ent_b thread maps\_anim::anim_loop( var_6.b_guys, "rescue_b_idle", "stop_loop" );
|
|
var_6 thread scene_vo();
|
|
common_scripts\utility::flag_wait_any( "waterfall_trig", "hostage_flag_set" );
|
|
common_scripts\utility::flag_set( "player_at_execution" );
|
|
thread hostage_timer();
|
|
common_scripts\utility::flag_wait_any( "took_long_enough_to_rescue", "hostage_a_group_shot", "hostage_b_group_shot", "got_close_enough_to_rescue" );
|
|
level thread set_friendlies_to_not_shoot_at_hostages_mid_anim();
|
|
var_6 thread friendlies_execute_enemies( var_6.anim_ent_a );
|
|
var_6.a_bad_guys = maps\_utility::array_removedead( var_6.a_bad_guys );
|
|
var_6.b_bad_guys = maps\_utility::array_removedead( var_6.b_bad_guys );
|
|
common_scripts\utility::array_thread( var_6.a_bad_guys, ::auto_kill_enemies );
|
|
common_scripts\utility::array_thread( var_6.b_bad_guys, ::auto_kill_enemies );
|
|
var_6.anim_ent_a maps\_utility::anim_stopanimscripted();
|
|
var_6.anim_ent_b maps\_utility::anim_stopanimscripted();
|
|
var_6.a_guys = maps\_utility::array_removedead( var_6.a_guys );
|
|
var_6.b_guys = maps\_utility::array_removedead( var_6.b_guys );
|
|
|
|
if ( common_scripts\utility::flag( "hostage_a_group_shot" ) )
|
|
{
|
|
var_6.anim_ent_a thread maps\_anim::anim_single( var_6.a_guys, "rescue_a_shot" );
|
|
var_6.anim_ent_b maps\_anim::anim_single( var_6.b_guys, "rescue_b" );
|
|
}
|
|
else if ( common_scripts\utility::flag( "hostage_b_group_shot" ) )
|
|
{
|
|
var_6.anim_ent_a thread maps\_anim::anim_single( var_6.a_guys, "rescue_a" );
|
|
var_6.anim_ent_b maps\_anim::anim_single( var_6.b_guys, "rescue_b_shot" );
|
|
}
|
|
else
|
|
{
|
|
var_6.anim_ent_b thread maps\_anim::anim_single( var_6.b_guys, "rescue_b" );
|
|
var_6.anim_ent_a maps\_anim::anim_single( var_6.a_guys, "rescue_a" );
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "player_rescued_hostage" );
|
|
wait 4;
|
|
var_6.anim_ent_c maps\_anim::anim_reach_solo( level.alpha1, "elias_rescue" );
|
|
common_scripts\utility::flag_set( "starting_elias_rescue" );
|
|
var_6.anim_ent_c thread maps\_anim::anim_single_solo( level.alpha1, "elias_rescue" );
|
|
maps\_utility::delaythread( 5.3, maps\jungle_ghosts_anim::set_missile_reply );
|
|
maps\_utility::delaythread( 3.3, maps\jungle_ghosts_anim::set_missile_reaction );
|
|
common_scripts\utility::flag_wait( "second_distant_sat_launch" );
|
|
var_8 = common_scripts\utility::get_target_ent( "river_blocker" );
|
|
var_8 connectpaths();
|
|
var_8 delete();
|
|
common_scripts\utility::trigger_on( "mid_stream", "targetname" );
|
|
common_scripts\utility::trigger_on( "waterfall_to_stream", "targetname" );
|
|
common_scripts\utility::flag_wait( "obj_get_to_river" );
|
|
wait 1;
|
|
thread maps\jungle_ghosts_util::music_stealth_tension_loop();
|
|
}
|
|
|
|
check_guard_death_to_stop_pistol_fire()
|
|
{
|
|
level.fire_notetracks = 0;
|
|
level.execution_guy_dead = 0;
|
|
self waittill( "death" );
|
|
level.execution_guy_dead = 1;
|
|
}
|
|
|
|
auto_kill_enemies()
|
|
{
|
|
self endon( "death" );
|
|
wait 8;
|
|
self kill();
|
|
}
|
|
|
|
hostage_timer()
|
|
{
|
|
wait 9;
|
|
common_scripts\utility::flag_set( "took_long_enough_to_rescue" );
|
|
}
|
|
|
|
check_hostage_flag_a()
|
|
{
|
|
level endon( "hostage_flag_set" );
|
|
thread check_whizby();
|
|
self waittill( "damage" );
|
|
common_scripts\utility::flag_set( "hostage_a_group_shot" );
|
|
common_scripts\utility::flag_set( "hostage_flag_set" );
|
|
}
|
|
|
|
check_hostage_flag_b()
|
|
{
|
|
level endon( "hostage_flag_set" );
|
|
thread check_whizby();
|
|
self waittill( "damage" );
|
|
common_scripts\utility::flag_set( "hostage_b_group_shot" );
|
|
common_scripts\utility::flag_set( "hostage_flag_set" );
|
|
}
|
|
|
|
check_whizby()
|
|
{
|
|
level endon( "hostage_flag_set" );
|
|
self waittill( "bulletwhizby" );
|
|
common_scripts\utility::flag_set( "got_close_enough_to_rescue" );
|
|
common_scripts\utility::flag_set( "hostage_flag_set" );
|
|
}
|
|
|
|
scene_vo()
|
|
{
|
|
self.guard_a_1 endon( "death" );
|
|
level endon( "got_close_enough_to_rescue" );
|
|
level endon( "took_long_enough_to_rescue" );
|
|
level endon( "hostage_a_group_shot" );
|
|
level endon( "hostage_b_group_shot" );
|
|
common_scripts\utility::flag_wait( "squad_to_waterfall" );
|
|
wait 2;
|
|
self.guard_a_1 maps\_utility::smart_dialogue( "jungleg_saf1_wherestherestof" );
|
|
wait 1;
|
|
self.guard_a_1 maps\_utility::smart_dialogue( "jungleg_saf1_howmanymenwere" );
|
|
wait 2;
|
|
self.guard_a_1 maps\_utility::play_sound_on_tag( "jungleg_saf1_yourfriendisgoing", undefined, 1 );
|
|
}
|
|
|
|
friendlies_execute_enemies( var_0 )
|
|
{
|
|
if ( !self.outcome_decided )
|
|
{
|
|
self.outcome_decided = 1;
|
|
thread execution_slowmo( var_0 );
|
|
wait 0.4;
|
|
|
|
if ( isalive( self.guard_a_1 ) )
|
|
magicbullet( level.alpha[0].weapon, level.alpha[0] gettagorigin( "tag_flash" ), self.guard_a_1 geteye() );
|
|
|
|
common_scripts\utility::array_thread( level.alpha, maps\_utility::set_baseaccuracy, 1000 );
|
|
common_scripts\utility::array_thread( self.a_bad_guys, maps\_utility::set_ignoreall, 0 );
|
|
common_scripts\utility::array_thread( self.a_bad_guys, maps\_utility::set_ignoreme, 0 );
|
|
common_scripts\utility::array_thread( self.b_bad_guys, maps\_utility::set_ignoreall, 0 );
|
|
common_scripts\utility::array_thread( self.b_bad_guys, maps\_utility::set_ignoreme, 0 );
|
|
common_scripts\utility::flag_wait( "player_rescued_hostage" );
|
|
wait 3;
|
|
common_scripts\utility::array_thread( level.alpha, maps\_utility::set_baseaccuracy, 1 );
|
|
maps\_utility::activate_trigger_with_targetname( "squad_covers_helpup" );
|
|
wait 3;
|
|
level.squad = common_scripts\utility::array_combine( level.alpha, level.bravo );
|
|
common_scripts\utility::array_thread( level.squad, maps\_utility::disable_ai_color );
|
|
}
|
|
}
|
|
|
|
monitor_player_close( var_0 )
|
|
{
|
|
var_0 waittill( "trigger" );
|
|
self notify( "player_interupted" );
|
|
common_scripts\utility::flag_set( "got_close_enough_to_rescue" );
|
|
}
|
|
|
|
execution_slowmo( var_0 )
|
|
{
|
|
if ( distance( level.player.origin, var_0.origin ) > 500 || !level.player maps\_utility::point_in_fov( var_0.origin ) )
|
|
return;
|
|
|
|
level.player thread maps\_utility::play_sound_on_entity( "weap_sniper_breathin" );
|
|
level thread player_heartbeat();
|
|
setslowmotion( 1, 0.5, 0.15 );
|
|
wait 1;
|
|
setslowmotion( 0.5, 1, 0.15 );
|
|
level notify( "stop_player_heartbeat" );
|
|
level.player thread maps\_utility::play_sound_on_entity( "ui_camera_whoosh_in" );
|
|
}
|
|
|
|
do_birds()
|
|
{
|
|
maps\_utility::trigger_wait_targetname( "jungle_entrance" );
|
|
level endon( "hill_pos_6" );
|
|
|
|
for (;;)
|
|
{
|
|
do_bird_single();
|
|
wait( randomintrange( 20, 45 ) );
|
|
}
|
|
}
|
|
|
|
do_bird_single_enemy( var_0 )
|
|
{
|
|
var_1 = vectornormalize( anglestoforward( self.angles ) );
|
|
var_2 = self.origin + var_1 * randomintrange( 10, 30 );
|
|
var_3 = var_2 + ( 0, 0, 1000 );
|
|
var_4 = randomintrange( -100, 100 );
|
|
var_5 = maps\_utility::groundpos( var_3 ) + ( var_4, var_4, 0 );
|
|
thread common_scripts\utility::play_sound_in_space( "anml_bird_startle_foliage", var_5 );
|
|
wait 0.5;
|
|
maps\interactive_models\_birds::birds_spawnandflyaway( "parakeets", var_5, ( 1000, 0, 1000 ), randomintrange( 3, 8 ) );
|
|
}
|
|
|
|
do_bird_single( var_0 )
|
|
{
|
|
var_1 = vectornormalize( anglestoforward( level.player getplayerangles() ) );
|
|
var_2 = level.player.origin + var_1 * 1200;
|
|
var_3 = var_2 + ( 0, 0, 1000 );
|
|
var_4 = randomintrange( -300, 300 );
|
|
var_5 = maps\_utility::groundpos( var_3 ) + ( var_4, var_4, 0 );
|
|
|
|
if ( randomint( 100 ) < 33 )
|
|
{
|
|
thread common_scripts\utility::play_sound_in_space( "anml_bird_startle_foliage", var_5 );
|
|
wait 0.5;
|
|
}
|
|
|
|
maps\interactive_models\_birds::birds_spawnandflyaway( "parakeets", var_5, ( 500, 0, 500 ), randomintrange( 3, 8 ) );
|
|
}
|
|
|
|
birds_on_baddy()
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( isdefined( self.doing_enemy_birds ) )
|
|
return;
|
|
|
|
self.doing_enemy_birds = 1;
|
|
do_bird_single_enemy();
|
|
wait 25;
|
|
self.doing_enemy_birds = undefined;
|
|
}
|
|
|
|
motion_tracker_setup()
|
|
{
|
|
common_scripts\utility::flag_wait( "jungle_entrance" );
|
|
var_0 = undefined;
|
|
var_1 = 2;
|
|
var_2 = var_1;
|
|
level.motion_tracker_sweep_speed = var_1;
|
|
level.motion_tracker_sweep_range = 1600;
|
|
setsaveddvar( "MotionTrackerRange", level.motion_tracker_sweep_range );
|
|
setsaveddvar( "MotionTrackerSweepInterval", level.motion_tracker_sweep_speed );
|
|
|
|
for (;;)
|
|
{
|
|
var_3 = getaiarray( "axis" );
|
|
|
|
if ( var_3.size != 0 )
|
|
{
|
|
var_3 = sortbydistance( var_3, level.player.origin );
|
|
var_4 = distancesquared( var_3[0].origin, level.player.origin );
|
|
|
|
if ( var_4 < 160000 )
|
|
var_0 = 0.5;
|
|
else if ( var_4 < 360000 )
|
|
var_0 = 1;
|
|
else if ( var_4 < 640000 )
|
|
var_0 = 1.5;
|
|
else
|
|
var_0 = var_1;
|
|
|
|
if ( var_0 != var_2 )
|
|
{
|
|
update_motion_tracker_speed( var_0 );
|
|
var_2 = var_0;
|
|
}
|
|
}
|
|
else if ( var_2 != var_1 )
|
|
{
|
|
update_motion_tracker_speed( var_1 );
|
|
var_2 = var_1;
|
|
}
|
|
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
update_motion_tracker_speed( var_0 )
|
|
{
|
|
setsaveddvar( "MotionTrackerSweepInterval", var_0 );
|
|
}
|
|
|
|
jungle_vo( var_0 )
|
|
{
|
|
switch ( level.start_point )
|
|
{
|
|
case "jungle_corridor":
|
|
case "jungle":
|
|
case "parachute":
|
|
case "default":
|
|
common_scripts\utility::flag_wait( "player_landed" );
|
|
maps\jungle_ghosts_util::waittill_x_passed( -7949 );
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_els_everyonereportin" );
|
|
wait 1;
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_hsh_itsheshimwith" );
|
|
wait 0.75;
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_els_goodkeeganswithme" );
|
|
maps\jungle_ghosts_util::waittill_x_passed( -7750 );
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_els_adam" );
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_hsh_sawhimgetsnagged" );
|
|
maps\jungle_ghosts_util::waittill_x_passed( -7406 );
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_hsh_shitgetdown" );
|
|
wait 0.5;
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_hsh_lookslikewegot" );
|
|
wait 0.7;
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_els_werecomingtoyou" );
|
|
case "e3":
|
|
maps\jungle_ghosts_util::waittill_x_passed( -6983 );
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_els_adamifyoucan" );
|
|
common_scripts\utility::flag_set( "obj_regroup" );
|
|
wait 0.5;
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_els_staylowandquiet" );
|
|
wait 0.5;
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_els_youcandothis" );
|
|
common_scripts\utility::flag_wait( "jungle_entrance" );
|
|
wait 1;
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_hsh_whatthehellwas" );
|
|
wait 0.5;
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_els_atremormaybe" );
|
|
wait 0.5;
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_els_butivebeenwrong" );
|
|
wait 0.25;
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_hsh_westillhavepatrols" );
|
|
common_scripts\utility::flag_wait( "early_jungle_flag" );
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_hsh_youllhaveagroup" );
|
|
wait 1;
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_els_copythatstaysafe" );
|
|
wait 1;
|
|
common_scripts\utility::flag_wait( "mid_jungle_flag" );
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_hsh_theseguysaregetting" );
|
|
wait 0.5;
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_hsh_leftleftside" );
|
|
wait 0.25;
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_els_heshhesh" );
|
|
wait 1;
|
|
case "jungle_hill":
|
|
common_scripts\utility::flag_wait( "crash_arrive" );
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_els_theyremovingthroughthe" );
|
|
level.player maps\_utility::play_sound_on_entity( "jungleg_els_stayclearofthat" );
|
|
common_scripts\utility::flag_wait_any( "hill_clear", "hill_pos_6" );
|
|
level.player thread maps\_utility::play_sound_on_entity( "jungleg_els_loganwecansee" );
|
|
common_scripts\utility::flag_wait( "waterfall_see_friendlies" );
|
|
common_scripts\utility::flag_wait( "friendlies_ready" );
|
|
maps\_utility::autosave_stealth();
|
|
|
|
if ( !level.was_spotted )
|
|
{
|
|
level.alpha2 maps\_utility::smart_dialogue( "jungleg_kgn_nicework" );
|
|
wait 0.5;
|
|
level.alpha2 maps\_utility::smart_dialogue( "jungleg_kgn_kidsgoodelias" );
|
|
}
|
|
else if ( !common_scripts\utility::flag( "player_agro_near_execution" ) )
|
|
{
|
|
level.alpha1 maps\_utility::smart_dialogue( "jungleg_els_weheardgunfire" );
|
|
wait 0.25;
|
|
level.alpha1 maps\_utility::smart_dialogue( "jungleg_els_youok" );
|
|
}
|
|
else
|
|
level.alpha2 maps\_utility::smart_dialogue( "jungleg_kgn_youtryingtoget" );
|
|
|
|
wait 0.25;
|
|
level.alpha1 maps\_utility::smart_dialogue( "jungleg_els_gotheshandmerrick" );
|
|
common_scripts\utility::flag_set( "obj_save_team" );
|
|
case "waterfall":
|
|
common_scripts\utility::flag_wait( "waterfall_trig" );
|
|
|
|
if ( !common_scripts\utility::flag( "hostage_flag_set" ) && !common_scripts\utility::flag( "got_close_enough_to_rescue" ) )
|
|
{
|
|
level thread stop_execution_dialoigue_on_shot();
|
|
level.alpha1 maps\_utility::smart_dialogue( "jungleg_els_heshweseeyou" );
|
|
wait 0.25;
|
|
|
|
if ( !common_scripts\utility::flag( "hostage_flag_set" ) && !common_scripts\utility::flag( "got_close_enough_to_rescue" ) )
|
|
level.alpha1 maps\_utility::smart_dialogue( "jungleg_els_adamdoit" );
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "player_rescued_hostage" );
|
|
common_scripts\utility::flag_wait( "starting_elias_rescue" );
|
|
common_scripts\utility::flag_wait( "second_distant_sat_launch" );
|
|
level.player playrumblelooponentity( "damage_heavy" );
|
|
wait 3;
|
|
level.player stoprumble( "damage_heavy" );
|
|
common_scripts\utility::flag_wait( "do_jungleg_bkr_coughingcatchingbreath" );
|
|
common_scripts\utility::flag_set( "obj_get_to_river" );
|
|
}
|
|
}
|
|
|
|
set_friendlies_to_not_shoot_at_hostages_mid_anim()
|
|
{
|
|
wait 5;
|
|
common_scripts\utility::array_thread( level.alpha, maps\jungle_ghosts_util::generic_ignore_on );
|
|
wait 10;
|
|
common_scripts\utility::array_thread( level.alpha, maps\jungle_ghosts_util::generic_ignore_off );
|
|
}
|
|
|
|
stop_execution_dialoigue_on_shot()
|
|
{
|
|
common_scripts\utility::flag_wait_any( "took_long_enough_to_rescue", "hostage_flag_set", "got_close_enough_to_rescue" );
|
|
maps\jungle_ghosts_util::dialogue_stop();
|
|
maps\_utility::radio_dialogue_stop();
|
|
}
|
|
|
|
do_story_line( var_0 )
|
|
{
|
|
common_scripts\utility::flag_set( "doing_story_vo" );
|
|
maps\_utility::radio_dialogue_stop();
|
|
maps\_utility::smart_radio_dialogue( var_0 );
|
|
common_scripts\utility::flag_clear( "doing_story_vo" );
|
|
}
|
|
|
|
do_safe_radio_line( var_0 )
|
|
{
|
|
if ( !common_scripts\utility::flag( "_stealth_spotted" ) && !common_scripts\utility::flag( "doing_story_vo" ) )
|
|
{
|
|
level.vo_activity = 1;
|
|
maps\_utility::smart_radio_dialogue( var_0 );
|
|
level.vo_activity = 0;
|
|
}
|
|
}
|
|
|
|
slomo_sound_scale_setup()
|
|
{
|
|
soundsettimescalefactor( "Music", 0 );
|
|
soundsettimescalefactor( "Menu", 0 );
|
|
soundsettimescalefactor( "local3", 0.0 );
|
|
soundsettimescalefactor( "Mission", 0.0 );
|
|
soundsettimescalefactor( "Announcer", 0.0 );
|
|
soundsettimescalefactor( "Bulletimpact", 0.6 );
|
|
soundsettimescalefactor( "Voice", 0.4 );
|
|
soundsettimescalefactor( "effects2", 0.2 );
|
|
soundsettimescalefactor( "local", 0.4 );
|
|
soundsettimescalefactor( "physics", 0.2 );
|
|
soundsettimescalefactor( "ambient", 0.5 );
|
|
soundsettimescalefactor( "auto", 0.5 );
|
|
}
|
|
|
|
player_heartbeat()
|
|
{
|
|
level endon( "stop_player_heartbeat" );
|
|
|
|
for (;;)
|
|
{
|
|
level.player playlocalsound( "breathing_heartbeat" );
|
|
wait 0.5;
|
|
}
|
|
}
|