1299 lines
32 KiB
Plaintext
1299 lines
32 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
cull_distance_logic()
|
|
{
|
|
switch ( level.start_point )
|
|
{
|
|
case "e3":
|
|
case "jungle_corridor":
|
|
case "parachute":
|
|
case "default":
|
|
if ( game_is_ng() )
|
|
setculldist( 5000 );
|
|
else
|
|
setculldist( 5000 );
|
|
|
|
level.player waittill( "start_falling_anim" );
|
|
|
|
if ( game_is_ng() )
|
|
setculldist( 5000 );
|
|
else
|
|
setculldist( 4500 );
|
|
|
|
common_scripts\utility::flag_wait( "jungle_entrance" );
|
|
|
|
if ( game_is_ng() )
|
|
setculldist( 6000 );
|
|
else
|
|
setculldist( 4500 );
|
|
|
|
common_scripts\utility::flag_wait( "hill_pos_1" );
|
|
case "jungle_hill":
|
|
if ( game_is_ng() )
|
|
setculldist( 19000 );
|
|
else
|
|
setculldist( 15000 );
|
|
|
|
common_scripts\utility::flag_wait_any( "waterfall_approach", "e3_warp" );
|
|
setculldist( 0 );
|
|
}
|
|
}
|
|
|
|
game_is_pc()
|
|
{
|
|
if ( level.xenon )
|
|
return 0;
|
|
|
|
if ( level.ps3 )
|
|
return 0;
|
|
|
|
if ( level.ps4 )
|
|
return 0;
|
|
|
|
if ( level.xb3 )
|
|
return 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
game_is_ng()
|
|
{
|
|
if ( game_is_pc() )
|
|
return 1;
|
|
|
|
if ( level.ps4 )
|
|
return 1;
|
|
|
|
if ( level.xb3 )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
stream_waterfx( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
var_2 = 0;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_2 = 1;
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
common_scripts\utility::flag_assert( var_0 );
|
|
level endon( var_0 );
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
wait( randomfloatrange( 0.15, 0.3 ) );
|
|
var_3 = self.origin + ( 0, 0, 150 );
|
|
var_4 = self.origin - ( 0, 0, 150 );
|
|
var_5 = bullettrace( var_3, var_4, 0, undefined );
|
|
|
|
if ( var_5["surfacetype"] != "water" )
|
|
continue;
|
|
|
|
var_6 = "water_movement";
|
|
|
|
if ( isplayer( self ) )
|
|
{
|
|
if ( distance( self getvelocity(), ( 0, 0, 0 ) ) < 5 )
|
|
var_6 = "water_stop";
|
|
}
|
|
else if ( isdefined( level._effect["water_" + self.a.movement] ) )
|
|
var_6 = "water_" + self.a.movement;
|
|
|
|
var_7 = common_scripts\utility::getfx( var_6 );
|
|
var_3 = var_5["position"];
|
|
var_8 = ( 0, self.angles[1], 0 );
|
|
var_9 = anglestoforward( var_8 );
|
|
var_10 = anglestoup( var_8 );
|
|
playfx( var_7, var_3, var_10, var_9 );
|
|
|
|
if ( var_6 != "water_stop" && var_2 )
|
|
thread common_scripts\utility::play_sound_in_space( var_1, var_3 );
|
|
}
|
|
}
|
|
|
|
player_jump_watcher()
|
|
{
|
|
level endon( "player_jump_watcher_stop" );
|
|
var_0 = "player_jumping";
|
|
|
|
if ( !common_scripts\utility::flag_exist( var_0 ) )
|
|
common_scripts\utility::flag_init( var_0 );
|
|
else
|
|
common_scripts\utility::flag_clear( var_0 );
|
|
|
|
notifyoncommand( "playerjump", "+gostand" );
|
|
notifyoncommand( "playerjump", "+moveup" );
|
|
|
|
for (;;)
|
|
{
|
|
level.player waittill( "playerjump" );
|
|
wait 0.1;
|
|
|
|
if ( !level.player isonground() )
|
|
common_scripts\utility::flag_set( var_0 );
|
|
|
|
while ( !level.player isonground() )
|
|
wait 0.05;
|
|
|
|
common_scripts\utility::flag_clear( var_0 );
|
|
}
|
|
}
|
|
|
|
bigjump_player_blend_to_anim( var_0 )
|
|
{
|
|
var_1 = var_0 common_scripts\utility::spawn_tag_origin();
|
|
var_1 linkto( var_0, "tag_player", ( 5, 0, 3 ), ( 0, 0, 0 ) );
|
|
var_2 = 0.5;
|
|
level.player playerlinktoblend( var_1, "tag_origin", var_2 );
|
|
wait( var_2 );
|
|
level.player playerlinktodelta( var_1, "tag_origin", 1, 0, 0, 0, 0, 1 );
|
|
var_0 show();
|
|
common_scripts\utility::waitframe();
|
|
level.player lerpviewangleclamp( 1, 1, 0, 12, 12, 25, 20 );
|
|
}
|
|
|
|
do_bokeh( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
level.player notify( "stop_bokeh" );
|
|
level.player endon( "stop_bokeh" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
level endon( var_0 );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
level.player thread maps\_utility::notify_delay( "stop_bokeh", var_2 );
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = 10;
|
|
|
|
if ( !isdefined( var_4 ) )
|
|
var_4 = 30;
|
|
|
|
if ( !isdefined( level.player.bokeh_ent ) )
|
|
{
|
|
var_5 = anglestoforward( level.player.angles );
|
|
var_6 = level.player.origin + var_5 * 60;
|
|
var_7 = level.player geteye();
|
|
level.player.bokeh_ent = spawn( "script_model", var_6 );
|
|
level.player.bokeh_ent setmodel( "tag_origin" );
|
|
level.player.bokeh_ent linktoplayerview( level.player, "tag_origin", ( 5, 0, 0 ), ( 0, 0, 0 ), 1 );
|
|
}
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = "vfx_atmos_bokeh_jungle";
|
|
|
|
for (;;)
|
|
{
|
|
playfxontag( common_scripts\utility::getfx( var_1 ), level.player.bokeh_ent, "tag_origin" );
|
|
wait( randomfloatrange( var_3, var_4 ) );
|
|
}
|
|
}
|
|
|
|
kill_me_from_closest_enemy()
|
|
{
|
|
self endon( "death" );
|
|
var_0 = getaiarray( "allies" );
|
|
var_0 = sortbydistance( var_0, self.origin );
|
|
wait( randomfloatrange( 0.5, 2.5 ) );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( bullettracepassed( var_2 gettagorigin( "tag_flash" ), self geteye(), 1, self ) )
|
|
{
|
|
magicbullet( "ak47", var_2 gettagorigin( "tag_flash" ), self geteye() );
|
|
maps\_utility::die();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if ( isalive( self ) )
|
|
maps\_utility::die();
|
|
}
|
|
|
|
stream_trig_logic()
|
|
{
|
|
level endon( "tall_grass_begin" );
|
|
level endon( "player_jump_watcher_stop" );
|
|
common_scripts\utility::flag_wait( "jungle_entrance" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( level.player istouching( self ) )
|
|
level.player allowprone( 0 );
|
|
else
|
|
level.player allowprone( 1 );
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
escape_earthquake_on_missile_impact()
|
|
{
|
|
while ( isdefined( self ) )
|
|
wait 0.05;
|
|
|
|
earthquake( 0.3, 0.5, level.player.origin, 300 );
|
|
level.player playrumbleonentity( "grenade_rumble" );
|
|
}
|
|
|
|
set_flag_when_x_remain( var_0, var_1, var_2 )
|
|
{
|
|
level endon( var_2 );
|
|
|
|
while ( var_0.size > var_1 )
|
|
{
|
|
var_0 = maps\_utility::array_removedead_or_dying( var_0 );
|
|
|
|
if ( var_0.size == 1 )
|
|
{
|
|
if ( !isdefined( var_0[0].imminent_death ) )
|
|
var_0[0] thread timeout_death( 10 );
|
|
}
|
|
|
|
wait 1;
|
|
}
|
|
|
|
if ( !common_scripts\utility::flag( var_2 ) )
|
|
common_scripts\utility::flag_set( var_2 );
|
|
}
|
|
|
|
set_flag_when_x_remain_custom_stream( var_0, var_1 )
|
|
{
|
|
level endon( var_1 );
|
|
|
|
while ( level.stream_baddies.size > var_0 )
|
|
{
|
|
level.stream_baddies = maps\_utility::array_removedead_or_dying( level.stream_baddies );
|
|
|
|
if ( level.stream_baddies.size == 1 )
|
|
{
|
|
if ( !isdefined( level.stream_baddies[0].imminent_death ) )
|
|
level.stream_baddies[0] thread timeout_death( 10 );
|
|
}
|
|
|
|
wait 1;
|
|
}
|
|
|
|
if ( !common_scripts\utility::flag( var_1 ) )
|
|
common_scripts\utility::flag_set( var_1 );
|
|
}
|
|
|
|
timeout_death( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( isdefined( self.imminent_death ) )
|
|
return;
|
|
|
|
self.imminent_death = 1;
|
|
wait( var_0 );
|
|
thread kill_me_from_closest_enemy();
|
|
}
|
|
|
|
start_raining()
|
|
{
|
|
if ( !isdefined( level.rain_effect ) )
|
|
level.rain_effect = common_scripts\utility::getfx( "rain_light" );
|
|
|
|
level endon( "stop_rain" );
|
|
var_0 = 0;
|
|
var_1 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
if ( var_0 > 10 )
|
|
{
|
|
level.rain_effect = common_scripts\utility::getfx( "rain_heavy" );
|
|
var_1 = 1024;
|
|
}
|
|
|
|
playfx( level.rain_effect, level.player.origin + ( 0, 0, var_1 ) );
|
|
wait 0.333333;
|
|
var_0++;
|
|
}
|
|
}
|
|
|
|
thunder_and_lightning( var_0, var_1 )
|
|
{
|
|
level notify( "stop_lightning" );
|
|
level endon( "stop_lightning" );
|
|
|
|
for (;;)
|
|
{
|
|
do_lightning();
|
|
wait( randomintrange( var_0, var_1 ) );
|
|
}
|
|
}
|
|
|
|
do_lightning()
|
|
{
|
|
if ( common_scripts\utility::flag( "doing_lightning" ) )
|
|
return;
|
|
|
|
common_scripts\utility::flag_set( "doing_lightning" );
|
|
var_0 = anglestoforward( level.player.angles );
|
|
var_1 = anglestoup( level.player.angles );
|
|
var_2 = getmapsunlight();
|
|
playfx( common_scripts\utility::getfx( "lightning" ), level.player.origin, var_0, var_1 );
|
|
setsunlight( 2, 2, 2 );
|
|
wait 0.25;
|
|
setsunlight( var_2[0], var_2[1], var_2[2] );
|
|
wait( randomfloatrange( 0.35, 0.85 ) );
|
|
level.player thread maps\_utility::play_sound_on_entity( "thunder_strike" );
|
|
common_scripts\utility::flag_clear( "doing_lightning" );
|
|
}
|
|
|
|
manually_alert_me()
|
|
{
|
|
if ( isdefined( self.script_stealth ) )
|
|
maps\_stealth_shared_utilities::group_flag_set( "_stealth_spotted" );
|
|
}
|
|
|
|
blend_wind_setting_internal( var_0, var_1 )
|
|
{
|
|
var_2 = getdvarfloat( var_1, 0 );
|
|
|
|
if ( var_2 == var_0 )
|
|
return;
|
|
|
|
if ( var_0 > var_2 )
|
|
{
|
|
while ( var_0 >= var_2 )
|
|
{
|
|
var_2 = var_2 + 0.02;
|
|
setsaveddvar( var_1, var_2 );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
else if ( var_0 < var_2 )
|
|
{
|
|
while ( var_0 <= var_2 )
|
|
{
|
|
var_2 = var_2 - 0.02;
|
|
setsaveddvar( var_1, var_2 );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
}
|
|
|
|
has_script_parameters( var_0 )
|
|
{
|
|
if ( !isdefined( self.script_parameters ) )
|
|
return 0;
|
|
|
|
if ( self.script_parameters != var_0 )
|
|
return 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
adjust_moving_grass( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
setsaveddvar( "r_reactiveMotionWindAreaScale", var_1 );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
thread blend_wind_setting_internal( var_0, "r_reactiveMotionWindStrength" );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
thread blend_wind_setting_internal( var_2, "r_reactiveMotionWindAmplitudeScale" );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
thread blend_wind_setting_internal( var_3, "r_reactiveMotionWindFrequencyScale" );
|
|
}
|
|
|
|
stealth_ai_idle( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
|
|
}
|
|
|
|
var_0 maps\_stealth_utility::stealth_insure_enabled();
|
|
var_4 = var_0 maps\_stealth_shared_utilities::group_get_flagname( "_stealth_spotted" );
|
|
|
|
if ( common_scripts\utility::flag( var_4 ) )
|
|
return;
|
|
|
|
var_5 = "stop_loop";
|
|
var_0.allowdeath = 1;
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
thread maps\_anim::anim_generic_custom_animmode_loop( var_0, "gravity", var_1, var_2 );
|
|
else
|
|
thread maps\_anim::anim_generic_loop( var_0, var_1, var_2 );
|
|
|
|
maps\_utility::add_wait( maps\_utility::waittill_msg, "stop_idle_proc" );
|
|
maps\_utility::add_func( maps\_stealth_utility::stealth_ai_clear_custom_idle_and_react );
|
|
thread maps\_stealth_utility::do_wait_thread();
|
|
}
|
|
|
|
arm_player( var_0, var_1, var_2 )
|
|
{
|
|
level.player takeallweapons();
|
|
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
level.player giveweapon( var_4 );
|
|
level.player givemaxammo( var_4 );
|
|
}
|
|
|
|
level.player switchtoweapon( var_0[0] );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
level.player giveweapon( "fraggrenade" );
|
|
}
|
|
|
|
move_player_to_start( var_0 )
|
|
{
|
|
var_1 = common_scripts\utility::getstruct( var_0, "targetname" );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
{
|
|
var_1 = getent( var_0, "targetname" );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
return;
|
|
}
|
|
|
|
level.player setorigin( var_1.origin );
|
|
var_2 = undefined;
|
|
|
|
if ( isdefined( var_1.target ) )
|
|
var_2 = getent( var_1.target, "targetname" );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
level.player setplayerangles( vectortoangles( var_2.origin - var_1.origin ) );
|
|
else
|
|
level.player setplayerangles( var_1.angles );
|
|
|
|
wait 0.1;
|
|
}
|
|
|
|
grenade_ammo_probability( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( randomint( 100 ) > var_0 )
|
|
self.grenadeammo = 0;
|
|
}
|
|
|
|
print3d_on_me( var_0 )
|
|
{
|
|
|
|
}
|
|
|
|
fade_out_in( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = newhudelem();
|
|
var_4.x = 0;
|
|
var_4.y = 0;
|
|
var_4 setshader( var_0, 640, 480 );
|
|
var_4.alignx = "left";
|
|
var_4.aligny = "top";
|
|
var_4.horzalign = "fullscreen";
|
|
var_4.vertalign = "fullscreen";
|
|
var_4.alpha = 1;
|
|
var_4.sort = -2;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
level waittill( var_1 );
|
|
else
|
|
wait( var_2 );
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = 0.5;
|
|
|
|
var_4 fadeovertime( var_3 );
|
|
var_4.alpha = 0;
|
|
wait 1;
|
|
var_4 destroy();
|
|
}
|
|
|
|
play_hand_signal_for_player()
|
|
{
|
|
self.did_handsignal = undefined;
|
|
self waittill( "trigger" );
|
|
|
|
if ( isdefined( self.did_handsignal ) )
|
|
return;
|
|
|
|
if ( isdefined( level.doing_hand_signal ) && level.doing_hand_signal )
|
|
return;
|
|
else
|
|
level.doing_hand_signal = 1;
|
|
|
|
self.did_handsignal = 1;
|
|
var_0 = getaiarray( "allies" );
|
|
|
|
if ( var_0.size == 0 )
|
|
return;
|
|
|
|
var_1 = maps\_utility::get_closest_to_player_view( var_0, level.player, 1 );
|
|
var_1 maps\_utility::disable_ai_color();
|
|
var_1 do_hand_signal();
|
|
var_1 maps\_utility::enable_ai_color();
|
|
wait 5;
|
|
level.doing_hand_signal = 0;
|
|
}
|
|
|
|
do_hand_signal()
|
|
{
|
|
if ( isdefined( self.node ) )
|
|
{
|
|
var_0 = self.node.type;
|
|
|
|
if ( tolower( var_0 ) == "cover right" )
|
|
var_1 = "signal_enemy_coverR";
|
|
else if ( tolower( var_0 ) == "cover left" )
|
|
var_1 = "signal_moveout_coverL";
|
|
else
|
|
var_1 = "signal_go";
|
|
}
|
|
else
|
|
var_1 = "signal_onme_cqb";
|
|
|
|
if ( isdefined( self.animname ) )
|
|
{
|
|
if ( self.animname != "generic" )
|
|
self.old_animname = self.animname;
|
|
}
|
|
|
|
self.animname = "generic";
|
|
|
|
if ( isdefined( self.old_animname ) )
|
|
self.animname = self.old_animname;
|
|
}
|
|
|
|
delete_ai_array_safe( var_0 )
|
|
{
|
|
if ( isdefined( var_0 ) )
|
|
thread maps\_utility::ai_delete_when_out_of_sight( var_0, 800 );
|
|
}
|
|
|
|
isdefined_and_alive( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
return 0;
|
|
|
|
if ( !isalive( var_0 ) )
|
|
return 0;
|
|
|
|
if ( !var_0 maps\_vehicle::isvehicle() )
|
|
{
|
|
if ( var_0 maps\_utility::doinglongdeath() )
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
delete_if_player_cant_see_me()
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( !isdefined_and_alive( self ) )
|
|
return;
|
|
|
|
while ( maps\_utility::player_can_see_ai( self ) )
|
|
wait 0.15;
|
|
|
|
self delete();
|
|
}
|
|
|
|
spawn_ai_throttled_targetname( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = getentarray( var_0, "targetname" );
|
|
var_4 = [];
|
|
|
|
foreach ( var_6 in var_3 )
|
|
{
|
|
var_7 = var_6 maps\_utility::spawn_ai( 1 );
|
|
var_4 = common_scripts\utility::array_add( var_4, var_7 );
|
|
wait( randomfloatrange( var_1, var_2 ) );
|
|
}
|
|
|
|
level notify( "done_throttled_spawn" );
|
|
return var_4;
|
|
}
|
|
|
|
spawn_ai_from_spawner_send_to_volume( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = [];
|
|
var_0.count = var_1;
|
|
|
|
for ( var_4 = 0; var_4 < var_1; var_4++ )
|
|
{
|
|
var_5 = var_0 stalingradspawn();
|
|
wait 0.05;
|
|
var_5 setgoalvolumeauto( var_2 );
|
|
var_5 laserforceon();
|
|
var_3 = common_scripts\utility::add_to_array( var_3, var_5 );
|
|
}
|
|
|
|
return var_3;
|
|
}
|
|
|
|
do_nags_til_flag( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
|
|
{
|
|
if ( common_scripts\utility::flag( var_0 ) || common_scripts\utility::flag( "waterfall_ambush_begin" ) || common_scripts\utility::flag( "stream_backend_start" ) )
|
|
return;
|
|
|
|
level endon( var_0 );
|
|
level endon( "waterfall_ambush_begin" );
|
|
level endon( "stream_backend_start" );
|
|
var_8 = [];
|
|
var_8[0] = var_3;
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_8[1] = var_4;
|
|
|
|
if ( isdefined( var_5 ) )
|
|
var_8[2] = var_5;
|
|
|
|
if ( isdefined( var_6 ) )
|
|
var_8[3] = var_6;
|
|
|
|
if ( isdefined( var_7 ) )
|
|
var_8[4] = var_7;
|
|
|
|
while ( !common_scripts\utility::flag( var_0 ) && !common_scripts\utility::flag( "waterfall_ambush_begin" ) )
|
|
{
|
|
foreach ( var_10 in var_8 )
|
|
{
|
|
maps\jungle_ghosts_jungle::do_story_line( var_10 );
|
|
wait( randomintrange( var_1, var_2 ) );
|
|
}
|
|
|
|
wait 0.15;
|
|
}
|
|
}
|
|
|
|
battle_chatter_controller_friendlies()
|
|
{
|
|
level endon( "field_halfway" );
|
|
|
|
for (;;)
|
|
{
|
|
maps\_utility::battlechatter_off( "allies" );
|
|
|
|
if ( !common_scripts\utility::flag( "ambush_open_fire" ) )
|
|
common_scripts\utility::flag_wait_any( "_stealth_spotted", "ambush_open_fire" );
|
|
else
|
|
common_scripts\utility::flag_wait( "_stealth_spotted" );
|
|
|
|
maps\_utility::battlechatter_on( "allies" );
|
|
|
|
if ( common_scripts\utility::flag( "ambush_open_fire" ) )
|
|
common_scripts\utility::flag_wait( "field_entrance" );
|
|
|
|
common_scripts\utility::flag_waitopen( "_stealth_spotted" );
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
squad_manager( var_0 )
|
|
{
|
|
var_1 = var_0.size;
|
|
|
|
for (;;)
|
|
{
|
|
var_0 = maps\_utility::array_removedead_or_dying( var_0 );
|
|
|
|
if ( var_0.size != var_1 )
|
|
{
|
|
if ( !isdefined( var_0["leader"] ) )
|
|
{
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
if ( isdefined_and_alive( var_3 ) )
|
|
{
|
|
var_3 notify( "elected_squad_leader" );
|
|
var_0["leader"] = var_3;
|
|
var_3 thread squad_leader_logic();
|
|
common_scripts\utility::array_thread( var_0, ::reset_my_leader, var_3 );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( var_0.size == 0 )
|
|
return;
|
|
|
|
var_1 = var_0.size;
|
|
}
|
|
|
|
wait 0.5;
|
|
}
|
|
}
|
|
|
|
create_a_squad_from_spawner( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = var_2;
|
|
var_0.count = var_3;
|
|
var_4 = undefined;
|
|
|
|
for ( var_5 = 0; var_5 < var_3; var_5++ )
|
|
{
|
|
if ( !isdefined( var_4 ) )
|
|
{
|
|
var_6 = var_0 stalingradspawn();
|
|
wait 0.05;
|
|
var_1["leader"] = var_6;
|
|
var_6 thread squad_leader_logic();
|
|
var_1 = common_scripts\utility::add_to_array( var_1, var_6 );
|
|
wait 1.5;
|
|
var_4 = 1;
|
|
continue;
|
|
}
|
|
|
|
var_6 = var_0 stalingradspawn();
|
|
wait 0.05;
|
|
var_6 thread squad_member_logic( var_1 );
|
|
var_1 = common_scripts\utility::add_to_array( var_1, var_6 );
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
reset_my_leader( var_0 )
|
|
{
|
|
self.leader = var_0;
|
|
}
|
|
|
|
squad_leader_logic()
|
|
{
|
|
self laserforceon();
|
|
self.baseaccuracy = 3;
|
|
maps\_utility::disable_long_death();
|
|
|
|
while ( isalive( self ) )
|
|
{
|
|
self.goalradius = randomintrange( 800, 1200 );
|
|
self setgoalpos( level.player.origin );
|
|
wait( randomintrange( 3, 5 ) );
|
|
}
|
|
}
|
|
|
|
squad_member_logic( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self laserforceon();
|
|
maps\_utility::disable_long_death();
|
|
self endon( "elected_squad_leader" );
|
|
self.fixednode = 0;
|
|
self.goalradius = randomintrange( 200, 500 );
|
|
self.leader = var_0["leader"];
|
|
|
|
for (;;)
|
|
{
|
|
if ( isdefined( self.leader ) )
|
|
{
|
|
self setgoalpos( self.leader.origin );
|
|
wait( randomfloatrange( 2.5, 3 ) );
|
|
continue;
|
|
}
|
|
|
|
iprintln( "squad member has no leader to follow" );
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
player_swim_think()
|
|
{
|
|
level.player setblurforplayer( 6, 0.2 );
|
|
wait 0.3;
|
|
thread enable_player_swim();
|
|
level.player setblurforplayer( 0, 0.8 );
|
|
level.player maps\_utility::player_speed_percent( 20, 0.1 );
|
|
common_scripts\utility::flag_wait( "player_out_of_water" );
|
|
}
|
|
|
|
enable_player_swim()
|
|
{
|
|
setsaveddvar( "hud_showStance", "0" );
|
|
setsaveddvar( "compass", "0" );
|
|
level.player_view_pitch_down = getdvar( "player_view_pitch_down" );
|
|
level.bg_viewbobmax = getdvar( "bg_viewBobMax" );
|
|
level.player_sprintcamerabob = getdvar( "player_sprintCameraBob" );
|
|
setsaveddvar( "player_view_pitch_down", 5 );
|
|
setsaveddvar( "bg_viewBobMax", 0 );
|
|
level.player allowstand( 1 );
|
|
level.player allowcrouch( 0 );
|
|
level.player allowprone( 0 );
|
|
level.player allowjump( 0 );
|
|
level.player disableweapons();
|
|
level.player allowsprint( 0 );
|
|
level.player allowmelee( 0 );
|
|
level.player setstance( "stand" );
|
|
}
|
|
|
|
player_water_wade()
|
|
{
|
|
for (;;)
|
|
{
|
|
common_scripts\utility::flag_wait( "player_is_moving" );
|
|
childthread player_water_wade_sounds();
|
|
childthread player_water_wade_speed();
|
|
wait 0.1;
|
|
common_scripts\utility::flag_waitopen( "player_is_moving" );
|
|
level.player notify( "stop_water_sounds" );
|
|
}
|
|
}
|
|
|
|
player_water_wade_sounds()
|
|
{
|
|
level.player endon( "stop_water_sounds" );
|
|
wait( randomfloatrange( 0, 1 ) );
|
|
|
|
for (;;)
|
|
{
|
|
level.player maps\_utility::play_sound_on_entity( "scn_prague_swim_slow_plr" );
|
|
wait( randomfloatrange( 0.5, 1.5 ) );
|
|
}
|
|
}
|
|
|
|
player_water_wade_speed()
|
|
{
|
|
level endon( "player_swim_faster" );
|
|
level.player endon( "stop_water_sounds" );
|
|
|
|
while ( !common_scripts\utility::flag( "player_swim_faster" ) )
|
|
{
|
|
level.player thread maps\_utility::play_sound_on_entity( "scn_prague_swim_slow_plr" );
|
|
thread maps\_utility::player_speed_percent( 27, 1 );
|
|
wait 1;
|
|
thread maps\_utility::player_speed_percent( 18, 0.3 );
|
|
wait 0.5;
|
|
}
|
|
}
|
|
|
|
custom_waterfx( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
common_scripts\utility::flag_assert( var_0 );
|
|
level endon( var_0 );
|
|
}
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = ( 0, 0, 0 );
|
|
|
|
for (;;)
|
|
{
|
|
wait( randomfloatrange( 0.15, 0.3 ) );
|
|
var_2 = self.origin + ( 0, 0, 150 );
|
|
var_3 = self.origin - ( 0, 0, 150 );
|
|
var_4 = bullettrace( var_2, var_3, 0, undefined );
|
|
|
|
if ( var_4["surfacetype"] != "water" )
|
|
continue;
|
|
|
|
var_5 = "water_movement";
|
|
|
|
if ( isplayer( self ) )
|
|
{
|
|
if ( distance( self getvelocity(), ( 0, 0, 0 ) ) < 5 )
|
|
var_5 = "water_stop";
|
|
}
|
|
else if ( isdefined( level._effect["water_" + self.a.movement] ) )
|
|
var_5 = "water_" + self.a.movement;
|
|
|
|
var_6 = common_scripts\utility::getfx( var_5 );
|
|
var_2 = var_4["position"] + var_1;
|
|
var_7 = ( 0, self.angles[1], 0 );
|
|
var_8 = anglestoforward( var_7 );
|
|
var_9 = anglestoup( var_7 );
|
|
playfx( var_6, var_2, var_9, var_8 );
|
|
}
|
|
}
|
|
|
|
enable_ai_swim()
|
|
{
|
|
self.animname = "generic";
|
|
maps\_utility::disable_cqbwalk();
|
|
maps\_utility::disable_sprint();
|
|
self stopanimscripted();
|
|
set_generic_idle_forever( "swim_idle" );
|
|
maps\_utility::set_moveplaybackrate( 1 );
|
|
maps\_utility::set_generic_run_anim( "swim_fast", 1 );
|
|
self pushplayer( 1 );
|
|
self.disableexits = 1;
|
|
self.disablearrivals = 1;
|
|
self.a.disablepain = 1;
|
|
self.ignoreall = 1;
|
|
thread custom_waterfx( "player_out_of_water", ( 0, 0, -0.5 ) );
|
|
thread ai_swim_sound();
|
|
maps\_utility::putgunaway();
|
|
}
|
|
|
|
ai_swim_sound()
|
|
{
|
|
self endon( "stop_swimming" );
|
|
childthread ai_swim_sound_idle();
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "moveanim", var_0 );
|
|
|
|
if ( var_0 == "ps_scn_prague_swim_slow_npc" || var_0 == "end" )
|
|
maps\_utility::play_sound_on_entity( "scn_prague_swim_slow_npc" );
|
|
|
|
wait 0.2;
|
|
}
|
|
}
|
|
|
|
ai_swim_sound_idle()
|
|
{
|
|
self endon( "stop_swimming" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "Special_idle", var_0 );
|
|
|
|
if ( var_0 == "ps_scn_prague_swim_idle_npc" || var_0 == "end" )
|
|
maps\_utility::play_sound_on_entity( "scn_prague_swim_idle_npc" );
|
|
|
|
wait 0.2;
|
|
}
|
|
}
|
|
|
|
set_generic_idle_forever( var_0 )
|
|
{
|
|
thread set_generic_idle_internal( var_0 );
|
|
}
|
|
|
|
set_generic_idle_internal( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "clear_idle_anim" );
|
|
|
|
for (;;)
|
|
{
|
|
maps\_utility::set_generic_idle_anim( var_0 );
|
|
self waittill( "clearing_specialIdleAnim" );
|
|
}
|
|
}
|
|
|
|
pitch_and_roll()
|
|
{
|
|
self endon( "stop_bob" );
|
|
self endon( "death" );
|
|
var_0 = self;
|
|
var_1 = ( 0, var_0.angles[1], 0 );
|
|
var_2 = 20;
|
|
|
|
if ( isdefined( var_0.script_max_left_angle ) )
|
|
var_2 = var_0.script_max_left_angle;
|
|
|
|
var_3 = var_2 * 0.5;
|
|
var_4 = 4;
|
|
|
|
if ( isdefined( var_0.script_duration ) )
|
|
var_4 = var_0.script_duration;
|
|
|
|
var_5 = var_4 * 0.5;
|
|
var_0 = undefined;
|
|
|
|
for (;;)
|
|
{
|
|
var_6 = ( randomfloatrange( var_3, var_2 ), 0, randomfloatrange( var_3, var_2 ) );
|
|
var_7 = randomfloatrange( var_5, var_4 );
|
|
self rotateto( var_1 + var_6, var_7, var_7 * 0.2, var_7 * 0.2 );
|
|
self waittill( "rotatedone" );
|
|
self rotateto( var_1 - var_6, var_7, var_7 * 0.2, var_7 * 0.2 );
|
|
self waittill( "rotatedone" );
|
|
}
|
|
}
|
|
|
|
stop_anim_on_damage_stealth( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
level endon( "_stealth_spotted" );
|
|
self waittill( "damage" );
|
|
var_0 notify( "stop_loop" );
|
|
maps\_utility::anim_stopanimscripted();
|
|
}
|
|
|
|
stop_anim_on_spotted_or_chopper_leaves( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
level common_scripts\utility::waittill_any( "_stealth_spotted", "stream_heli_out" );
|
|
var_0 notify( "stop_loop" );
|
|
maps\_utility::anim_stopanimscripted();
|
|
}
|
|
|
|
generic_ignore_on()
|
|
{
|
|
self.ignoreme = 1;
|
|
self.ignoreall = 1;
|
|
}
|
|
|
|
generic_ignore_off()
|
|
{
|
|
self.ignoreme = 0;
|
|
self.ignoreall = 0;
|
|
}
|
|
|
|
is_moving()
|
|
{
|
|
self endon( "death" );
|
|
var_0 = self.origin;
|
|
wait 0.2;
|
|
var_1 = self.origin;
|
|
|
|
if ( var_0 == var_1 )
|
|
return 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
hud_on( var_0 )
|
|
{
|
|
var_1 = 0;
|
|
var_2 = 1;
|
|
|
|
if ( !var_0 )
|
|
{
|
|
var_1 = 1;
|
|
var_2 = 0;
|
|
}
|
|
|
|
setsaveddvar( "compass", var_2 );
|
|
setsaveddvar( "ammoCounterHide", var_1 );
|
|
setsaveddvar( "actionSlotsHide", var_1 );
|
|
setsaveddvar( "hud_showStance", var_2 );
|
|
setsaveddvar( "hud_drawhud", var_2 );
|
|
}
|
|
|
|
waittill_x_passed( var_0 )
|
|
{
|
|
while ( level.player.origin[0] < var_0 )
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
waittill_y_passed( var_0 )
|
|
{
|
|
while ( level.player.origin[1] < var_0 )
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
enemy_weapons_force_use_init()
|
|
{
|
|
level.jg_enemy_smgs = [];
|
|
level.jg_enemy_smgs = common_scripts\utility::array_add( level.jg_enemy_smgs, "kriss+silencer_sp" );
|
|
level.jg_enemy_smgs = common_scripts\utility::array_add( level.jg_enemy_smgs, "microtar+silencer_sp" );
|
|
level.jg_enemy_ars = [];
|
|
level.jg_enemy_ars = common_scripts\utility::array_add( level.jg_enemy_ars, "cz805bren+silencer_sp" );
|
|
level.jg_enemy_ars = common_scripts\utility::array_add( level.jg_enemy_ars, "ak12+silencer_sp" );
|
|
level.jg_enemy_ars = common_scripts\utility::array_add( level.jg_enemy_ars, "honeybadger" );
|
|
level.jg_enemy_ars = common_scripts\utility::array_add( level.jg_enemy_ars, "sc2010+silencer_sp" );
|
|
}
|
|
|
|
enemy_weapons_force_use_silencer()
|
|
{
|
|
if ( !isdefined( self ) )
|
|
return;
|
|
|
|
if ( !isdefined( self.classname ) )
|
|
return;
|
|
|
|
self endon( "death" );
|
|
|
|
if ( self.classname == "actor_enemy_fed_army_smg_nohelmet" )
|
|
{
|
|
var_0 = common_scripts\utility::array_randomize( level.jg_enemy_smgs );
|
|
maps\_utility::forceuseweapon( var_0[0], "primary" );
|
|
}
|
|
|
|
if ( self.classname == "actor_enemy_fed_army_ar_nohelmet" )
|
|
{
|
|
var_0 = common_scripts\utility::array_randomize( level.jg_enemy_ars );
|
|
maps\_utility::forceuseweapon( var_0[0], "primary" );
|
|
}
|
|
}
|
|
|
|
friendly_jungle_stealth_color_behavior()
|
|
{
|
|
var_0["hidden"] = ::do_nothing;
|
|
var_0["spotted"] = ::do_nothing;
|
|
maps\_stealth_utility::stealth_color_state_custom( var_0 );
|
|
}
|
|
|
|
do_nothing()
|
|
{
|
|
|
|
}
|
|
|
|
music_start()
|
|
{
|
|
level endon( "_stealth_spotted" );
|
|
level endon( "stop_music_jg" );
|
|
wait 0.1;
|
|
thread music_stealth_tension_loop();
|
|
}
|
|
|
|
music_stealth_tension_loop()
|
|
{
|
|
level endon( "_stealth_spotted" );
|
|
level endon( "stop_tension_music_jg" );
|
|
level notify( "stop_stealth_music_jg" );
|
|
thread music_stealth_broken();
|
|
|
|
for (;;)
|
|
{
|
|
var_0 = "mus_jungle_tension";
|
|
|
|
if ( common_scripts\utility::flag( "second_distant_sat_launch" ) && !common_scripts\utility::flag( "to_grassy_field" ) )
|
|
var_0 = "mus_jungle_stealth";
|
|
else if ( common_scripts\utility::flag( "second_distant_sat_launch" ) && common_scripts\utility::flag( "to_grassy_field" ) )
|
|
var_0 = "mus_jungle_reveal";
|
|
|
|
if ( !common_scripts\utility::flag( "jungle_entrance" ) )
|
|
{
|
|
common_scripts\utility::flag_wait( "intro_lines" );
|
|
var_0 = "mus_jungle_tension_reveal";
|
|
}
|
|
|
|
music_play_jg( var_0, 4, 0, 1 );
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
music_stealth_broken()
|
|
{
|
|
level endon( "stop_stealth_music_jg" );
|
|
level common_scripts\utility::waittill_any( "_stealth_spotted", "ambush_open_fire" );
|
|
level notify( "stop_tension_music_jg" );
|
|
var_0 = "mus_jungle_stealthbreak1";
|
|
|
|
if ( common_scripts\utility::cointoss() )
|
|
var_0 = "mus_jungle_stealthbreak2";
|
|
|
|
if ( common_scripts\utility::flag( "second_distant_sat_launch" ) && !common_scripts\utility::flag( "to_grassy_field" ) && !common_scripts\utility::flag( "player_in_ambush_position" ) )
|
|
{
|
|
maps\_utility::music_stop( 2 );
|
|
var_0 = "mus_jungle_chopper_crash_battle";
|
|
|
|
if ( common_scripts\utility::flag( "smaw_target_detroyed" ) )
|
|
wait 7;
|
|
}
|
|
|
|
var_1 = 0;
|
|
|
|
if ( common_scripts\utility::flag( "player_in_ambush_position" ) )
|
|
var_1 = 1;
|
|
|
|
music_play_jg( var_0, 0.5, 1, 0, var_1 );
|
|
|
|
if ( common_scripts\utility::flag( "intro_lines" ) )
|
|
{
|
|
while ( common_scripts\utility::flag( "_stealth_spotted" ) || common_scripts\utility::flag( "ambush_open_fire" ) && !common_scripts\utility::flag( "field_halfway" ) )
|
|
wait 1;
|
|
}
|
|
|
|
thread music_stealth_tension_loop();
|
|
}
|
|
|
|
music_tall_grass()
|
|
{
|
|
if ( !common_scripts\utility::flag( "_stealth_spotted" ) )
|
|
stop_music_jg( 0 );
|
|
|
|
var_0 = "mus_jungle_tall_grass_intro";
|
|
common_scripts\utility::flag_waitopen( "_stealth_spotted" );
|
|
thread music_play_jg( var_0, 1 );
|
|
thread music_stealth_broken();
|
|
}
|
|
|
|
music_escape_hot()
|
|
{
|
|
stop_music_jg( 0 );
|
|
var_0 = "mus_jungle_escape";
|
|
maps\_utility::music_play( var_0, 1 );
|
|
}
|
|
|
|
music_end_jump_stinger()
|
|
{
|
|
if ( !common_scripts\utility::flag( "choppers_saw_player" ) )
|
|
maps\_utility::music_stop( 4 );
|
|
else
|
|
{
|
|
if ( level.start_point != "escape_river" && level.start_point != "underwater" )
|
|
{
|
|
maps\_utility::music_crossfade( "mus_jungle_end_stinger", 0.5 );
|
|
return;
|
|
}
|
|
|
|
maps\_utility::music_play( "mus_jungle_end_stinger", 0.5 );
|
|
}
|
|
}
|
|
|
|
music_play_jg( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
level endon( "stop_music_jg" );
|
|
var_5 = maps\_utility::musiclength( var_0 );
|
|
var_6 = 15;
|
|
var_7 = 35;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 0.5;
|
|
|
|
if ( !isdefined( var_4 ) )
|
|
var_4 = 0;
|
|
|
|
if ( isdefined( var_3 ) && var_3 && common_scripts\utility::flag( "_stealth_spotted" ) )
|
|
return;
|
|
|
|
maps\_utility::music_play( var_0, var_1 );
|
|
|
|
if ( !isdefined( var_2 ) || !var_2 || var_4 )
|
|
wait( randomfloatrange( var_5 + var_6, var_5 + var_7 ) );
|
|
else
|
|
{
|
|
while ( common_scripts\utility::flag( "_stealth_spotted" ) || var_0 == "mus_jungle_chopper_crash_battle" && !common_scripts\utility::flag( "stream_clear" ) )
|
|
wait 1;
|
|
|
|
maps\_utility::music_stop( 4 );
|
|
wait 8;
|
|
}
|
|
}
|
|
|
|
stop_music_jg( var_0 )
|
|
{
|
|
level notify( "stop_music_jg" );
|
|
level notify( "stop_tension_music_jg" );
|
|
level notify( "stop_stealth_music_jg" );
|
|
|
|
if ( var_0 )
|
|
maps\_utility::music_stop( 4 );
|
|
}
|
|
|
|
set_death_quote( var_0 )
|
|
{
|
|
setdvar( "ui_deadquote", var_0 );
|
|
}
|
|
|
|
give_jg_achievement()
|
|
{
|
|
if ( !level.was_spotted )
|
|
level.player maps\_utility::player_giveachievement_wrapper( "LEVEL_9A" );
|
|
}
|
|
|
|
dialogue_stop()
|
|
{
|
|
level.hesh stopsounds();
|
|
level.merrick stopsounds();
|
|
level.alpha1 stopsounds();
|
|
level.alpha2 stopsounds();
|
|
common_scripts\utility::waitframe();
|
|
}
|