2862 lines
76 KiB
Plaintext
2862 lines
76 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
clockwork_init()
|
|
{
|
|
precachemodel( "viewhands_fed_army_arctic" );
|
|
precachemodel( "clk_watch_viewhands" );
|
|
precachemodel( "clk_watch_viewhands_off" );
|
|
precachemodel( "weapon_proximity_mine_small" );
|
|
precachemodel( "weapon_proximity_mine_small_obj" );
|
|
precachemodel( "weapon_electric_claymore_small" );
|
|
precachemodel( "weapon_electric_claymore_small_obj" );
|
|
precachemodel( "weapon_sentry_smg_collapsed_small" );
|
|
precachemodel( "weapon_sentry_smg_collapsed_small_obj" );
|
|
precacheitem( "thermobaric_mine" );
|
|
precacheitem( "teargas_grenade" );
|
|
precacheitem( "shockwave" );
|
|
precacheminimapsentrycodeassets();
|
|
common_scripts\_sentry::setup_sentry_globals();
|
|
setnorthyaw( 255 );
|
|
level.dog_alt_melee_func = ::dog_alt_combat_check_clockwork;
|
|
}
|
|
|
|
setup_common()
|
|
{
|
|
level.player setviewmodel( "viewhands_fed_army_arctic" );
|
|
level.player takeallweapons();
|
|
level.player giveweapon( "gm6+scopegm6_sp+silencer03_sp" );
|
|
level.player giveweapon( "cz805bren+reflex_sp+silencer_sp" );
|
|
level.player switchtoweaponimmediate( "cz805bren+reflex_sp+silencer_sp" );
|
|
level.player setoffhandprimaryclass( "frag" );
|
|
level.player setoffhandsecondaryclass( "flash" );
|
|
level.player giveweapon( "fraggrenade" );
|
|
level.player giveweapon( "flash_grenade" );
|
|
}
|
|
|
|
setup_player()
|
|
{
|
|
var_0 = level.start_point + "_start";
|
|
var_1 = common_scripts\utility::getstruct( var_0, "targetname" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
level.player setorigin( var_1.origin );
|
|
|
|
if ( isdefined( var_1.angles ) )
|
|
level.player setplayerangles( var_1.angles );
|
|
else
|
|
iprintlnbold( "Your script_struct " + level.start_point + "_start has no angles! Set some." );
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
|
|
setup_common();
|
|
}
|
|
|
|
spawn_allies()
|
|
{
|
|
maps\_utility::add_global_spawn_function( "allies", ::disable_sniper_glint );
|
|
level.allies = [];
|
|
level.allies[0] = spawn_ally( "baker" );
|
|
level.allies[0].animname = "baker";
|
|
level.allies[0].name = "Merrick";
|
|
level.allies[1] = spawn_ally( "keegan" );
|
|
level.allies[1].animname = "keegan";
|
|
level.allies[1].name = "Keegan";
|
|
level.allies[2] = spawn_ally( "cipher" );
|
|
level.allies[2].animname = "cypher";
|
|
level.allies[2].name = "Hesh";
|
|
level.allies[0].npcid = "mrk";
|
|
level.allies[1].npcid = "kgn";
|
|
level.allies[2].npcid = "hsh";
|
|
spawn_dog();
|
|
setup_dufflebag_anims();
|
|
}
|
|
|
|
spawn_ally( var_0, var_1 )
|
|
{
|
|
var_2 = undefined;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_2 = level.start_point + "_" + var_0;
|
|
else
|
|
var_2 = var_1 + "_" + var_0;
|
|
|
|
var_3 = spawn_targetname_at_struct_targetname( var_0, var_2 );
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
return undefined;
|
|
|
|
var_3 maps\_utility::make_hero();
|
|
|
|
if ( !isdefined( var_3.magic_bullet_shield ) )
|
|
var_3 maps\_utility::magic_bullet_shield();
|
|
|
|
var_3.countryid = "US";
|
|
return var_3;
|
|
}
|
|
|
|
spawn_dog()
|
|
{
|
|
if ( !level.woof )
|
|
return;
|
|
|
|
level.player takeweapon( "flash_grenade" );
|
|
var_0 = spawn_ally( "dog" );
|
|
var_0.meleealwayswin = 1;
|
|
level.dog = var_0;
|
|
level.dog.animname = "dog";
|
|
level.dog.name = "Riley";
|
|
var_0.goalradius = 64;
|
|
var_0.goalheight = 128;
|
|
var_0.pathenemyfightdist = 0;
|
|
var_0 setdogattackradius( 64 );
|
|
maps\ally_attack_dog::init_ally_dog( level.player, var_0, 1 );
|
|
level.player_dog = var_0;
|
|
}
|
|
|
|
disable_sniper_glint()
|
|
{
|
|
self.disable_sniper_glint = 1;
|
|
}
|
|
|
|
clockwork_timer( var_0, var_1, var_2 )
|
|
{
|
|
level endon( "kill_timer" );
|
|
|
|
if ( getdvar( "notimer" ) == "1" )
|
|
return;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 0;
|
|
|
|
level.hudtimerindex = 20;
|
|
level.timer = maps\_hud_util::get_countdown_hud( -250 );
|
|
level.timer setpulsefx( 30, 900000, 700 );
|
|
level.timer.label = var_1;
|
|
level.timer settenthstimer( var_0 );
|
|
level.start_time = gettime();
|
|
|
|
while ( isdefined( level.timer ) )
|
|
{
|
|
if ( level.start_time + var_0 > gettime() )
|
|
killtimer();
|
|
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
#using_animtree("generic_human");
|
|
|
|
setup_dufflebag_anims()
|
|
{
|
|
var_0 = [];
|
|
var_0["cqb"]["straight"] = %dufflebag_cqb_run;
|
|
var_0["cqb"]["straight_twitch"] = [ %dufflebag_cqb_run_alt ];
|
|
var_0["cqb"]["move_f"] = %dufflebag_cqb_walk;
|
|
var_0["run"]["straight"] = %dufflebag_lowready_run;
|
|
var_0["run"]["straight_twitch"] = [];
|
|
maps\_utility::register_archetype( "dufflebag", var_0 );
|
|
var_1 = [];
|
|
var_1["stand"] = [];
|
|
var_1["stand"][0] = %dufflebag_casual_idle;
|
|
var_1["stand"][1] = %dufflebag_casual_idle_fidget_01;
|
|
var_1["stand"][2] = %dufflebag_casual_idle_fidget_02;
|
|
var_1["stand"][3] = %dufflebag_casual_idle_fidget_03;
|
|
var_2 = [];
|
|
var_2["stand"] = [];
|
|
var_2["stand"][0] = 2;
|
|
var_2["stand"][1] = 1;
|
|
var_2["stand"][2] = 1;
|
|
var_2["stand"][3] = 1;
|
|
level.allies[0].customidleanimset = var_1;
|
|
level.allies[0].customidleanimweights = var_2;
|
|
level.allies[0].animarchetype = "dufflebag";
|
|
var_3 = [];
|
|
var_3["stand"] = [];
|
|
var_3["stand"][0] = %dufflebag_casual_keegan_idle;
|
|
var_3["stand"][1] = %dufflebag_casual_keegan_idle_fidget_01;
|
|
var_3["stand"][2] = %dufflebag_casual_keegan_idle_fidget_02;
|
|
var_3["stand"][3] = %dufflebag_casual_keegan_idle_fidget_03;
|
|
var_4 = [];
|
|
var_4["stand"] = [];
|
|
var_4["stand"][0] = 2;
|
|
var_4["stand"][1] = 1;
|
|
var_4["stand"][2] = 1;
|
|
var_4["stand"][3] = 1;
|
|
level.allies[1].customidleanimset = var_1;
|
|
level.allies[1].customidleanimweights = var_2;
|
|
level.allies[1].animarchetype = "dufflebag";
|
|
var_5 = [];
|
|
var_5["stand"] = [];
|
|
var_5["stand"][0] = %dufflebag_casual_cypher_idle;
|
|
var_5["stand"][1] = %dufflebag_casual_cypher_idle_fidget_01;
|
|
var_5["stand"][2] = %dufflebag_casual_cypher_idle_fidget_02;
|
|
var_5["stand"][3] = %dufflebag_casual_cypher_idle_fidget_03;
|
|
var_6 = [];
|
|
var_6["stand"] = [];
|
|
var_6["stand"][0] = 2;
|
|
var_6["stand"][1] = 1;
|
|
var_6["stand"][2] = 1;
|
|
var_6["stand"][3] = 1;
|
|
level.allies[2].customidleanimset = var_1;
|
|
level.allies[2].customidleanimweights = var_2;
|
|
level.allies[2].animarchetype = "dufflebag";
|
|
}
|
|
|
|
init_animated_dufflebags()
|
|
{
|
|
if ( !isdefined( level.bags ) || !isdefined( level.bags[0] ) )
|
|
{
|
|
level.bags = [];
|
|
level.bags[0] = maps\_utility::spawn_anim_model( "baker_bag" );
|
|
level.bags[0].animname = "baker_bag";
|
|
level.allies[0].animatedduffle = level.bags[0];
|
|
level.bags[1] = maps\_utility::spawn_anim_model( "keegan_bag" );
|
|
level.bags[1].animname = "keegan_bag";
|
|
level.allies[1].animatedduffle = level.bags[1];
|
|
level.bags[2] = maps\_utility::spawn_anim_model( "cipher_bag" );
|
|
level.bags[2].animname = "cipher_bag";
|
|
level.allies[2].animatedduffle = level.bags[2];
|
|
}
|
|
|
|
if ( !isdefined( level.player_bag ) )
|
|
level.player_bag = maps\_utility::spawn_anim_model( "player_bag" );
|
|
}
|
|
|
|
init_animated_dufflebags_candk()
|
|
{
|
|
level.bags[1] = maps\_utility::spawn_anim_model( "keegan_bag" );
|
|
level.bags[1].animname = "keegan_bag";
|
|
level.allies[1].animatedduffle = level.bags[1];
|
|
level.bags[2] = maps\_utility::spawn_anim_model( "cipher_bag" );
|
|
level.bags[2].animname = "cipher_bag";
|
|
level.allies[2].animatedduffle = level.bags[2];
|
|
}
|
|
|
|
init_animated_dufflebags_baker()
|
|
{
|
|
if ( !isdefined( level.bags ) || !isdefined( level.bags[0] ) )
|
|
{
|
|
level.bags = [];
|
|
level.bags[0] = maps\_utility::spawn_anim_model( "baker_bag" );
|
|
level.bags[0].animname = "baker_bag";
|
|
level.allies[0].animatedduffle = level.bags[0];
|
|
}
|
|
|
|
if ( !isdefined( level.player_bag ) )
|
|
level.player_bag = maps\_utility::spawn_anim_model( "player_bag" );
|
|
}
|
|
|
|
get_bag_parts()
|
|
{
|
|
var_0 = [];
|
|
var_0[var_0.size] = "J_Cog";
|
|
return var_0;
|
|
}
|
|
|
|
show_dufflebags( var_0 )
|
|
{
|
|
foreach ( var_2 in level.allies )
|
|
{
|
|
var_3 = get_bag_parts();
|
|
|
|
foreach ( var_5 in var_3 )
|
|
var_2 showpart( var_5 );
|
|
}
|
|
|
|
if ( isdefined( var_0 ) && var_0 == 1 )
|
|
{
|
|
foreach ( var_9 in level.bags )
|
|
var_9 hide();
|
|
}
|
|
}
|
|
|
|
hide_dufflebags( var_0 )
|
|
{
|
|
foreach ( var_2 in level.allies )
|
|
{
|
|
var_3 = get_bag_parts();
|
|
|
|
foreach ( var_5 in var_3 )
|
|
var_2 hidepart( var_5 );
|
|
}
|
|
|
|
if ( isdefined( var_0 ) && var_0 == 1 )
|
|
{
|
|
foreach ( var_9 in level.bags )
|
|
var_9 show();
|
|
}
|
|
}
|
|
|
|
hide_dufflebag( var_0 )
|
|
{
|
|
var_1 = get_bag_parts();
|
|
|
|
foreach ( var_3 in var_1 )
|
|
self hidepart( var_3 );
|
|
|
|
if ( isdefined( var_0 ) && var_0 && isdefined( self.animatedduffle ) )
|
|
self.animatedduffle show();
|
|
}
|
|
|
|
show_dufflebag( var_0 )
|
|
{
|
|
var_1 = get_bag_parts();
|
|
|
|
foreach ( var_3 in var_1 )
|
|
self showpart( var_3 );
|
|
|
|
if ( isdefined( var_0 ) && var_0 && isdefined( self.animatedduffle ) )
|
|
self.animatedduffle hide();
|
|
}
|
|
|
|
spawn_targetname_at_struct_targetname( var_0, var_1 )
|
|
{
|
|
var_2 = getent( var_0, "targetname" );
|
|
var_3 = common_scripts\utility::getstruct( var_1, "targetname" );
|
|
|
|
if ( isdefined( var_2 ) && isdefined( var_3 ) )
|
|
{
|
|
var_2.origin = var_3.origin;
|
|
|
|
if ( isdefined( var_3.angles ) )
|
|
var_2.angles = var_3.angles;
|
|
|
|
var_4 = var_2 maps\_utility::spawn_ai();
|
|
return var_4;
|
|
}
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
var_4 = var_2 maps\_utility::spawn_ai();
|
|
iprintlnbold( "Add a script struct called: " + var_1 + " to spawn him in the correct location." );
|
|
var_4 teleport( level.player.origin, level.player.angles );
|
|
return var_4;
|
|
}
|
|
|
|
iprintlnbold( "failed to spawn " + var_0 + " at " + var_1 );
|
|
return undefined;
|
|
}
|
|
|
|
ai_array_killcount_flag_set( var_0, var_1, var_2, var_3 )
|
|
{
|
|
maps\_utility::waittill_dead_or_dying( var_0, var_1, var_3 );
|
|
common_scripts\utility::flag_set( var_2 );
|
|
}
|
|
|
|
array_spawn_targetname_allow_fail( var_0, var_1 )
|
|
{
|
|
var_2 = getentarray( var_0, "targetname" );
|
|
var_3 = array_spawn_allow_fail( var_2 );
|
|
return var_3;
|
|
}
|
|
|
|
array_spawn_allow_fail( var_0, var_1 )
|
|
{
|
|
var_2 = [];
|
|
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
var_4.count = 1;
|
|
var_5 = var_4 maps\_utility::spawn_ai( var_1 );
|
|
|
|
if ( isdefined( var_5 ) )
|
|
var_2[var_2.size] = var_5;
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
reassign_goal_volume( var_0, var_1 )
|
|
{
|
|
if ( !isarray( var_0 ) )
|
|
var_0 = maps\_utility::make_array( var_0 );
|
|
|
|
var_0 = maps\_utility::array_removedead_or_dying( var_0 );
|
|
var_2 = getent( var_1, "targetname" );
|
|
|
|
foreach ( var_4 in var_0 )
|
|
var_4 setgoalvolumeauto( var_2 );
|
|
}
|
|
|
|
safe_activate_trigger_with_targetname( var_0 )
|
|
{
|
|
var_1 = getent( var_0, "targetname" );
|
|
|
|
if ( isdefined( var_1 ) && !isdefined( var_1.trigger_off ) )
|
|
var_1 maps\_utility::activate_trigger();
|
|
}
|
|
|
|
safe_disable_trigger_with_targetname( var_0 )
|
|
{
|
|
var_1 = getent( var_0, "targetname" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_1 common_scripts\utility::trigger_off();
|
|
}
|
|
|
|
safe_delete_trigger_with_targetname( var_0 )
|
|
{
|
|
var_1 = getent( var_0, "targetname" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_1 delete();
|
|
}
|
|
|
|
hold_fire_unless_ads( var_0 )
|
|
{
|
|
level notify( "ads_done" );
|
|
level endon( "ads_done" );
|
|
level.player notifyonplayercommand( "playerisfiring", "+attack" );
|
|
level.player notifyonplayercommand( "playerisfiring", "+attack_akimbo_accessible" );
|
|
var_1 = "cz805bren+reflex_sp+silencer_sp";
|
|
var_2 = "cz805bren_disguise+reflex_sp+silencer_sp";
|
|
level.player disableweaponswitch();
|
|
level.player disableweaponpickup();
|
|
level.player giveweapon( var_2, 0, 0, 0, 1 );
|
|
level.player switchtoweapon( var_2 );
|
|
|
|
if ( !level.player hasweapon( var_1 ) )
|
|
level.player giveweapon( var_1, 0, 0, 0, 1 );
|
|
|
|
while ( !common_scripts\utility::flag( var_0 ) & !common_scripts\utility::flag( "exfil_fire_fail" ) )
|
|
{
|
|
level.player allowfire( 0 );
|
|
level.player common_scripts\utility::waittill_any( "playerisfiring", "player_cancel_hold_fire", "grenade_fire" );
|
|
common_scripts\utility::waitframe();
|
|
|
|
if ( isdefined( level.player.isanimating ) )
|
|
continue;
|
|
|
|
if ( common_scripts\utility::flag( var_0 ) )
|
|
continue;
|
|
|
|
if ( level.player playerads() > 0 )
|
|
{
|
|
level.player allowfire( 1 );
|
|
|
|
while ( level.player playerads() > 0 )
|
|
{
|
|
if ( level.player isfiring() )
|
|
{
|
|
while ( level.player playerads() == 1 )
|
|
wait 0.05;
|
|
|
|
level.player switchtoweapon( var_1 );
|
|
wait 0.6;
|
|
level.player allowfire( 1 );
|
|
wait 0.2;
|
|
level.player takeweapon( var_2 );
|
|
level.player enableweaponswitch();
|
|
level.player enableweaponpickup();
|
|
return;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
level.player switchtoweapon( var_1 );
|
|
wait 0.6;
|
|
level.player allowfire( 1 );
|
|
wait 0.2;
|
|
level.player takeweapon( var_2 );
|
|
level.player enableweaponswitch();
|
|
level.player enableweaponpickup();
|
|
return;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
level.player enableweaponswitch();
|
|
level.player enableweaponpickup();
|
|
level.player switchtoweapon( var_1 );
|
|
level.player allowfire( 1 );
|
|
|
|
if ( var_0 == "nvgs_on" )
|
|
wait 3;
|
|
else
|
|
wait 0.8;
|
|
|
|
level.player takeweapon( var_2 );
|
|
}
|
|
|
|
blend_movespeedscale_custom( var_0, var_1 )
|
|
{
|
|
var_2 = self;
|
|
|
|
if ( !isplayer( var_2 ) )
|
|
var_2 = level.player;
|
|
|
|
var_2 notify( "blend_movespeedscale_custom" );
|
|
var_2 endon( "blend_movespeedscale_custom" );
|
|
|
|
if ( !isdefined( var_2.baseline_speed ) )
|
|
var_2.baseline_speed = 1.0;
|
|
|
|
var_3 = var_0 * 0.01;
|
|
var_4 = var_2.baseline_speed;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
var_5 = var_3 - var_4;
|
|
var_6 = 0.05;
|
|
var_7 = var_1 / var_6;
|
|
var_8 = var_5 / var_7;
|
|
|
|
while ( abs( var_3 - var_4 ) > abs( var_8 * 1.1 ) )
|
|
{
|
|
var_4 = var_4 + var_8;
|
|
var_2.baseline_speed = var_4;
|
|
|
|
if ( !common_scripts\utility::flag( "player_dynamic_move_speed" ) )
|
|
level.player setmovespeedscale( var_2.baseline_speed );
|
|
|
|
wait( var_6 );
|
|
}
|
|
}
|
|
|
|
var_2.baseline_speed = var_3;
|
|
|
|
if ( !common_scripts\utility::flag( "player_dynamic_move_speed" ) )
|
|
level.player setmovespeedscale( var_2.baseline_speed );
|
|
}
|
|
|
|
dog_run()
|
|
{
|
|
level.dog maps\_utility_dogs::disable_dog_walk();
|
|
level notify( "dog_set_running" );
|
|
}
|
|
|
|
dog_walk( var_0 )
|
|
{
|
|
level.dog maps\_utility_dogs::enable_dog_walk( var_0 );
|
|
}
|
|
|
|
dog_walk_until_flag( var_0, var_1 )
|
|
{
|
|
level notify( "new_dog_walkwait" );
|
|
level endon( "new_dog_walkwait" );
|
|
level endon( "dog_set_running" );
|
|
dog_walk( var_1 );
|
|
common_scripts\utility::flag_wait( var_0 );
|
|
dog_run();
|
|
}
|
|
|
|
dog_walk_for_time( var_0, var_1 )
|
|
{
|
|
level notify( "new_dog_walkwait" );
|
|
level endon( "new_dog_walkwait" );
|
|
level endon( "dog_set_running" );
|
|
dog_walk( var_1 );
|
|
wait( var_0 );
|
|
dog_run();
|
|
}
|
|
|
|
player_dms_get_plane()
|
|
{
|
|
var_0 = level.player.origin;
|
|
var_1 = self.origin + anglestoright( self.angles ) * -5000;
|
|
var_2 = self.origin + anglestoright( self.angles ) * 5000;
|
|
return pointonsegmentnearesttopoint( var_1, var_2, var_0 );
|
|
}
|
|
|
|
player_dms_ahead_test()
|
|
{
|
|
var_0 = 0;
|
|
|
|
if ( isdefined( self.last_set_goalent ) )
|
|
var_0 = self [[ level.drs_ahead_test ]]( self.last_set_goalent, 50 );
|
|
else if ( isdefined( self.last_set_goalnode ) )
|
|
var_0 = self [[ level.drs_ahead_test ]]( self.last_set_goalnode, 50 );
|
|
|
|
return var_0;
|
|
}
|
|
|
|
switch_active()
|
|
{
|
|
self notifyonplayercommand( "switchturret", "weapnext" );
|
|
wait 0.05;
|
|
self endon( "switchtoturret" );
|
|
|
|
for (;;)
|
|
{
|
|
foreach ( var_1 in level.playerjeep.mgturret )
|
|
{
|
|
var_1 turretfiredisable();
|
|
var_1 turretsetbarrelspinenabled( 0 );
|
|
}
|
|
|
|
level.switchactive = 1;
|
|
level.player notify( "grenade_turret_active" );
|
|
self waittill( "switchturret" );
|
|
|
|
foreach ( var_1 in level.playerjeep.mgturret )
|
|
{
|
|
var_1 turretfireenable();
|
|
var_1 turretsetbarrelspinenabled( 1 );
|
|
}
|
|
|
|
level.switchactive = 0;
|
|
self waittill( "switchturret" );
|
|
wait 0.25;
|
|
}
|
|
}
|
|
|
|
fire_grenade()
|
|
{
|
|
level.player endon( "missionend" );
|
|
level.player endon( "playercrash" );
|
|
level.player thread switch_active();
|
|
var_0 = 2;
|
|
var_1 = 1;
|
|
var_2 = gettime();
|
|
var_3 = gettime();
|
|
var_4 = 0;
|
|
var_5 = 0;
|
|
level.player notifyonplayercommand( "fire_grenade", "+attack" );
|
|
level.player notifyonplayercommand( "fire_grenade", "+attack_akimbo_accessible" );
|
|
|
|
while ( !isdefined( level.missionend ) )
|
|
{
|
|
var_6 = level.player common_scripts\utility::waittill_any_return( "fire_grenade", "grenade_turret_active" );
|
|
|
|
if ( !level.switchactive )
|
|
continue;
|
|
|
|
if ( isdefined( var_6 ) && var_6 == "fire_grenade" )
|
|
var_7 = 1;
|
|
else
|
|
var_7 = level.player attackbuttonpressed();
|
|
|
|
while ( var_7 && level.switchactive )
|
|
{
|
|
if ( var_3 < gettime() )
|
|
{
|
|
var_4 = 0;
|
|
var_8 = level.player geteye();
|
|
var_9 = level.player getplayerangles();
|
|
var_10 = anglestoforward( var_9 );
|
|
var_11 = anglestoright( var_9 );
|
|
var_12 = var_8 + var_10 * 12 * 2000;
|
|
var_13 = self.mgturret[0] gettagorigin( "TAG_LAUNCHER" );
|
|
var_14 = var_13 + var_10 * 32 + ( 0, 0, 5 );
|
|
|
|
if ( common_scripts\utility::flag( "en_headon_road" ) && !common_scripts\utility::flag( "enemy_cave_spawn" ) )
|
|
var_14 = var_13 + var_10 * 32;
|
|
|
|
var_15 = magicbullet( "xm25_fast", var_13 + var_10 * 32 + ( 0, 0, 5 ), var_12, level.player );
|
|
playfxontag( common_scripts\utility::getfx( "grenade_muzzleflash" ), self.mgturret[0], "TAG_LAUNCHER" );
|
|
level.player playrumbleonentity( "damage_light" );
|
|
thread screenshakefade( 0.03, 0.5, 0.01, 0.2 );
|
|
thread maps\clockwork_audio::chase_concussion();
|
|
var_2 = gettime() + var_0 * 1000;
|
|
var_3 = gettime() + var_1 * 1000;
|
|
}
|
|
else
|
|
{
|
|
common_scripts\utility::waitframe();
|
|
var_4++;
|
|
|
|
if ( !common_scripts\utility::flag( "rpg_spawn" ) )
|
|
var_4 = 0;
|
|
else if ( var_4 > 200 && !common_scripts\utility::flag( "enemy_cave_spawn" ) )
|
|
{
|
|
var_4 = 0;
|
|
|
|
if ( var_5 )
|
|
{
|
|
level.allies[0] thread char_dialog_add_and_go( "clockwork_bkr_shoottheice" );
|
|
var_5 = 0;
|
|
}
|
|
else
|
|
{
|
|
level.allies[0] thread char_dialog_add_and_go( "clockwork_bkr_usegrenades" );
|
|
var_5 = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
wait 0.1;
|
|
var_7 = level.player attackbuttonpressed();
|
|
}
|
|
}
|
|
}
|
|
|
|
vehicle_hit_drift()
|
|
{
|
|
var_0 = getentarray( "exfil_drift_trigger", "targetname" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 thread drift_hit();
|
|
}
|
|
|
|
drift_hit()
|
|
{
|
|
for (;;)
|
|
{
|
|
self waittill( "trigger", var_0 );
|
|
|
|
if ( var_0 maps\_vehicle::isvehicle() && isdefined( var_0 ) && isalive( var_0 ) )
|
|
{
|
|
if ( var_0 == level.playerjeep )
|
|
playfx( loadfx( "fx/treadfx/bigjump_land_snow_night" ), var_0.origin );
|
|
else
|
|
{
|
|
var_1 = anglestoforward( var_0.angles );
|
|
var_2 = var_1 * 20;
|
|
playfx( loadfx( "fx/treadfx/bigjump_land_snow_night" ), var_0.origin + var_2 );
|
|
}
|
|
}
|
|
|
|
wait 0.75;
|
|
}
|
|
}
|
|
|
|
handle_grenade_launcher()
|
|
{
|
|
level endon( "death" );
|
|
common_scripts\utility::flag_wait( "start_icehole_shooting" );
|
|
level.playerjeephitcount = 0;
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "missile_fire", var_0, var_1 );
|
|
thread handle_grenade_explode( var_0 );
|
|
wait 0.01;
|
|
}
|
|
}
|
|
|
|
handle_grenade_explode( var_0 )
|
|
{
|
|
level notify( "cancel_my_grenade" );
|
|
level endon( "cancel_my_grenade" );
|
|
var_0 waittill( "explode", var_1 );
|
|
thread add_ice_radius( 50, var_1 );
|
|
thread maps\clockwork_audio::chase_crack_icehole( var_1 );
|
|
}
|
|
|
|
add_ice_radius( var_0, var_1 )
|
|
{
|
|
level endon( "death" );
|
|
var_2 = common_scripts\utility::drop_to_ground( var_1, var_1[2] );
|
|
var_3 = var_2[2];
|
|
|
|
if ( var_3 < 224 && var_1[2] < 300 )
|
|
{
|
|
var_4 = maps\_utility::getvehiclearray();
|
|
var_5 = var_0 * var_0;
|
|
|
|
if ( level.icehole_to_move < 4 )
|
|
level.icehole_to_move++;
|
|
else
|
|
level.icehole_to_move = 1;
|
|
|
|
var_6 = "icehole_" + level.icehole_to_move;
|
|
var_7 = getent( var_6, "targetname" );
|
|
var_7 moveto( var_2, 0.01 );
|
|
|
|
if ( level.icehole_to_move == 1 )
|
|
{
|
|
var_8 = maps\_utility::spawn_anim_model( "cw_icehole", var_2 );
|
|
var_8 thread maps\_anim::anim_single_solo( var_8, "ice_a" );
|
|
}
|
|
else if ( level.icehole_to_move == 2 )
|
|
{
|
|
var_8 = maps\_utility::spawn_anim_model( "cw_icehole", var_2 );
|
|
var_8 thread maps\_anim::anim_single_solo( var_8, "ice_b" );
|
|
}
|
|
else if ( level.icehole_to_move == 3 )
|
|
{
|
|
var_8 = maps\_utility::spawn_anim_model( "cw_icehole", var_2 );
|
|
var_8 thread maps\_anim::anim_single_solo( var_8, "ice_c" );
|
|
}
|
|
else
|
|
{
|
|
var_8 = maps\_utility::spawn_anim_model( "cw_icehole", var_2 );
|
|
var_8 thread maps\_anim::anim_single_solo( var_8, "ice_b" );
|
|
}
|
|
|
|
playfx( level._effect["mortar"]["water"], var_2 );
|
|
|
|
foreach ( var_10 in var_4 )
|
|
{
|
|
var_11 = distancesquared( var_10.origin, var_2 );
|
|
|
|
if ( var_5 > var_11 )
|
|
{
|
|
if ( isdefined( var_10 ) && isalive( var_10 ) && var_10 == level.playerjeep )
|
|
{
|
|
if ( !common_scripts\utility::flag( "enemy_cave_spawn" ) )
|
|
dynamic_player_crash( var_10, 1, var_2 );
|
|
|
|
continue;
|
|
}
|
|
|
|
if ( isdefined( var_10 ) && isalive( var_10 ) )
|
|
{
|
|
if ( isdefined( level.endingjeep ) && var_10 == level.endingjeep && !common_scripts\utility::flag( "kill_endingjeep" ) )
|
|
continue;
|
|
|
|
var_10 notify( "icehole_occured" );
|
|
var_10 thread play_crash_anim( var_2 );
|
|
thread common_scripts\utility::play_sound_in_space( "clkw_scn_ice_chase_hole", var_2 );
|
|
thread maps\clockwork_audio::chase_pileup_counter();
|
|
}
|
|
}
|
|
}
|
|
|
|
var_13 = spawn( "trigger_radius", var_2, 16, var_0, 50 );
|
|
var_13.angles = level.playerjeep.angles;
|
|
var_13 thread handle_vehicles_near_iceholes();
|
|
wait 10;
|
|
var_13 delete();
|
|
|
|
if ( isdefined( var_8 ) )
|
|
{
|
|
var_8 delete();
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var_4 = maps\_utility::getvehiclearray();
|
|
var_5 = ( var_0 + var_0 ) * ( var_0 + var_0 );
|
|
|
|
foreach ( var_10 in var_4 )
|
|
{
|
|
var_11 = distancesquared( var_10.origin, var_2 );
|
|
|
|
if ( var_5 > var_11 )
|
|
{
|
|
var_15 = var_10.origin[2];
|
|
|
|
if ( isdefined( var_10 ) && isalive( var_10 ) && var_10 == level.playerjeep )
|
|
{
|
|
if ( var_15 < 224 )
|
|
{
|
|
if ( !common_scripts\utility::flag( "enemy_cave_spawn" ) )
|
|
dynamic_player_crash( var_10, 1, var_2 );
|
|
}
|
|
}
|
|
else if ( isdefined( var_10 ) && isalive( var_10 ) )
|
|
{
|
|
if ( var_15 < 224 )
|
|
{
|
|
if ( isdefined( level.endingjeep ) && var_10 == level.endingjeep && !common_scripts\utility::flag( "kill_endingjeep" ) )
|
|
{
|
|
|
|
}
|
|
else
|
|
{
|
|
var_10 notify( "icehole_occured" );
|
|
var_10 thread play_crash_anim( var_2 );
|
|
thread common_scripts\utility::play_sound_in_space( "clkw_scn_ice_chase_hole", var_2 );
|
|
thread maps\clockwork_audio::chase_pileup_counter();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
handle_vehicles_near_iceholes()
|
|
{
|
|
level endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "trigger", var_0 );
|
|
var_1 = 1;
|
|
|
|
foreach ( var_3 in level.allcrashes )
|
|
{
|
|
if ( var_3 == var_0 )
|
|
var_1 = 0;
|
|
}
|
|
|
|
if ( var_0 maps\_vehicle::isvehicle() && var_1 && isdefined( var_0 ) && isalive( var_0 ) && var_0 == level.playerjeep )
|
|
{
|
|
if ( !common_scripts\utility::flag( "enemy_cave_spawn" ) )
|
|
{
|
|
level.allcrashes[level.allcrashes.size] = var_0;
|
|
dynamic_player_crash( var_0, 1, var_0.origin );
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
if ( var_0 maps\_vehicle::isvehicle() && var_1 )
|
|
{
|
|
if ( isdefined( level.endingjeep ) && var_0 == level.endingjeep && !common_scripts\utility::flag( "kill_endingjeep" ) )
|
|
continue;
|
|
|
|
level.allcrashes[level.allcrashes.size] = var_0;
|
|
var_0 thread play_icehole_anim( self );
|
|
thread common_scripts\utility::play_sound_in_space( "clkw_scn_ice_chase_hole", var_0.origin );
|
|
thread maps\clockwork_audio::chase_pileup_counter();
|
|
}
|
|
}
|
|
}
|
|
|
|
play_crash_anim( var_0 )
|
|
{
|
|
if ( isdefined( self ) && self.model == "vehicle_snowmobile" )
|
|
{
|
|
common_scripts\utility::array_thread( self.riders, ::vehicle_crash_guy, self );
|
|
var_1 = self gettagorigin( "tag_passenger" );
|
|
physicsexplosioncylinder( var_1, 300, 300, 0.25 );
|
|
|
|
if ( isdefined( self.attachedguys[0] ) )
|
|
self.attachedguys[0] kill();
|
|
}
|
|
|
|
if ( self.model == "vehicle_chinese_brave_warrior_anim" || self.model == "vehicle_gaz_tigr_base" )
|
|
{
|
|
if ( isdefined( self ) )
|
|
{
|
|
common_scripts\utility::array_thread( self.riders, ::vehicle_crash_guy, self );
|
|
var_1 = self gettagorigin( "tag_guy1" );
|
|
physicsexplosioncylinder( var_1, 300, 300, 0.25 );
|
|
}
|
|
|
|
thread icehole_achievement();
|
|
var_2 = self vehicle_getvelocity();
|
|
var_3 = vectornormalize( var_2 );
|
|
var_4 = anglestoforward( self.angles );
|
|
var_5 = vectornormalize( var_4 );
|
|
var_6 = vectordot( var_5, var_3 );
|
|
|
|
if ( var_6 > 0.9 )
|
|
{
|
|
var_7 = randomintrange( 1, 4 );
|
|
|
|
if ( var_7 == 1 && !level.justplayed )
|
|
{
|
|
play_long_crash();
|
|
level.justplayed = 1;
|
|
return;
|
|
}
|
|
|
|
dynamic_icehole_crash( self, 2 );
|
|
level.justplayed = 0;
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
var_8 = vectortoangles( var_0 - self.origin );
|
|
var_9 = anglestoright( var_8 );
|
|
var_10 = vectornormalize( var_9 );
|
|
var_11 = vectordot( var_10, var_3 );
|
|
|
|
if ( var_11 > 0 )
|
|
dynamic_icehole_crash( self, 0 );
|
|
else
|
|
dynamic_icehole_crash( self, 1 );
|
|
}
|
|
}
|
|
}
|
|
|
|
play_icehole_anim( var_0 )
|
|
{
|
|
self notify( "icehole_occured" );
|
|
|
|
if ( isdefined( self ) && self.model == "vehicle_snowmobile" )
|
|
{
|
|
common_scripts\utility::array_thread( self.riders, ::vehicle_crash_guy, self );
|
|
var_1 = self gettagorigin( "tag_passenger" );
|
|
physicsexplosioncylinder( var_1, 300, 300, 0.25 );
|
|
|
|
if ( isdefined( self.attachedguys[0] ) )
|
|
self.attachedguys[0] kill();
|
|
}
|
|
|
|
if ( self.model == "vehicle_chinese_brave_warrior_anim" || self.model == "vehicle_gaz_tigr_base" )
|
|
{
|
|
if ( isdefined( self ) )
|
|
{
|
|
common_scripts\utility::array_thread( self.riders, ::vehicle_crash_guy, self );
|
|
var_1 = self gettagorigin( "tag_guy1" );
|
|
physicsexplosioncylinder( var_1, 300, 300, 0.25 );
|
|
}
|
|
|
|
wait 0.01;
|
|
thread icehole_achievement();
|
|
var_2 = self vehicle_getvelocity();
|
|
var_3 = vectornormalize( var_2 );
|
|
var_4 = anglestoforward( self.angles );
|
|
var_5 = vectornormalize( var_4 );
|
|
var_6 = vectordot( var_5, var_3 );
|
|
var_7 = vectornormalize( var_0.origin - self.origin );
|
|
var_8 = vectordot( var_3, var_7 );
|
|
var_9 = randomint( 2 );
|
|
|
|
if ( var_8 >= 0.9 )
|
|
{
|
|
var_10 = randomintrange( 1, 4 );
|
|
|
|
if ( var_10 == 1 && !level.justplayed )
|
|
{
|
|
play_long_crash();
|
|
level.justplayed = 1;
|
|
return;
|
|
}
|
|
|
|
dynamic_icehole_crash( self, 2 );
|
|
level.justplayed = 0;
|
|
return;
|
|
}
|
|
else if ( var_8 < 0.9 )
|
|
{
|
|
var_11 = vectortoangles( var_0.origin - self.origin );
|
|
var_12 = anglestoright( var_11 );
|
|
var_13 = vectornormalize( var_12 );
|
|
var_14 = vectordot( var_13, var_3 );
|
|
|
|
if ( var_14 > 0 )
|
|
{
|
|
if ( var_6 < 0.95 )
|
|
{
|
|
if ( var_14 > 0 )
|
|
dynamic_icehole_crash( self, 0 );
|
|
else if ( var_8 > 0.965 )
|
|
dynamic_icehole_crash( self, 2 );
|
|
else
|
|
dynamic_icehole_crash( self, 1 );
|
|
}
|
|
else
|
|
dynamic_icehole_crash( self, 1 );
|
|
}
|
|
else if ( var_6 < 0.95 )
|
|
{
|
|
if ( var_14 > 0 )
|
|
dynamic_icehole_crash( self, 1 );
|
|
else if ( var_8 > 0.965 )
|
|
dynamic_icehole_crash( self, 2 );
|
|
else
|
|
dynamic_icehole_crash( self, 0 );
|
|
}
|
|
else
|
|
dynamic_icehole_crash( self, 0 );
|
|
}
|
|
}
|
|
}
|
|
|
|
play_long_crash()
|
|
{
|
|
var_0 = anglestoforward( self.angles );
|
|
var_1 = self.origin;
|
|
var_2 = self.origin + var_0 * 100000;
|
|
var_3 = bullettrace( var_1, var_2, 1, self );
|
|
var_4 = distancesquared( self.origin, var_3["position"] );
|
|
|
|
if ( var_4 > 20000 )
|
|
{
|
|
thread maps\clockwork_audio::chase_sink( self.origin );
|
|
anim_spawn_replace_with_model( self.model, "icehole_crashes", "icehole_crash_longa" );
|
|
var_5 = ( self.origin[0], self.origin[1], 200 );
|
|
var_6 = maps\_utility::spawn_anim_model( "cw_ice_shards_longa", var_5 );
|
|
var_6.angles = ( 0, self.angles[1], 0 );
|
|
var_6 thread maps\_anim::anim_single_solo( var_6, "ice_crash" );
|
|
self delete();
|
|
}
|
|
else
|
|
dynamic_icehole_crash( self, 1 );
|
|
}
|
|
|
|
dynamic_icehole_crash( var_0, var_1 )
|
|
{
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
var_0 notify( "dying" );
|
|
var_0.dontunloadonend = 1;
|
|
common_scripts\utility::array_thread( var_0.riders, ::vehicle_crash_guy, var_0 );
|
|
var_0 thread vehicle_crash_launch_guys();
|
|
|
|
if ( var_1 == 0 )
|
|
var_2 = randomint( 45 ) + 45;
|
|
else if ( var_1 == 1 )
|
|
var_2 = 45 - randomint( 90 );
|
|
else if ( randomint( 1 ) )
|
|
var_2 = randomint( 90 );
|
|
else
|
|
var_2 = randomint( 90 ) + 270;
|
|
|
|
var_0 vehphys_enablecrashing();
|
|
var_3 = rotate_vector( ( 0, var_2, 0 ), var_0.angles );
|
|
var_0 vehphys_launch( var_3, 1.0 );
|
|
var_0.spline = 0;
|
|
|
|
foreach ( var_5 in level.enemy_jeep_s )
|
|
{
|
|
if ( var_5 == var_0 )
|
|
{
|
|
var_0.spline = 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( var_0.spline == 1 )
|
|
{
|
|
if ( isdefined( var_0 ) )
|
|
var_0 maps\_vehicle::godoff();
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 maps\_vehicle::force_kill();
|
|
}
|
|
else
|
|
{
|
|
if ( isdefined( var_0 ) )
|
|
var_0 waittill_still( randomint( 3 ) + 1, 200 );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 maps\_vehicle::godoff();
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
if ( randomint( 4 ) > 3 )
|
|
var_0 maps\_vehicle::force_kill();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
dynamic_player_crash( var_0, var_1, var_2 )
|
|
{
|
|
if ( isdefined( level.player.jeep_is_crashing ) && level.player.jeep_is_crashing )
|
|
return;
|
|
|
|
level.missionend = 1;
|
|
level.player.jeep_is_crashing = 1;
|
|
level.player disableinvulnerability();
|
|
common_scripts\utility::waitframe();
|
|
level notify( "player_jeep_crashing" );
|
|
level.player kill();
|
|
thread common_scripts\utility::play_sound_in_space( "clkw_scn_ice_chase_hole", var_2 );
|
|
thread maps\clockwork_audio::chase_pileup_counter();
|
|
|
|
if ( var_1 == 0 )
|
|
var_3 = randomint( 180 ) - 180;
|
|
else if ( var_1 == 1 )
|
|
var_3 = 0 - randomint( 180 );
|
|
else if ( randomint( 1 ) )
|
|
var_3 = randomint( 90 );
|
|
else
|
|
var_3 = randomint( 90 ) + 270;
|
|
|
|
var_0 vehphys_enablecrashing();
|
|
var_4 = rotate_vector( ( 0, var_3, 0 ), var_0.angles );
|
|
var_0 vehphys_launch( var_4, 1.0 );
|
|
|
|
while ( isalive( level.playerjeep ) && abs( angleclamp180( level.playerjeep.angles[2] ) ) < 80 )
|
|
common_scripts\utility::waitframe();
|
|
|
|
if ( level.player islinked() )
|
|
{
|
|
level.player unlink();
|
|
level.player setorigin( level.player.origin + ( 0, 0, 60 ) );
|
|
}
|
|
|
|
foreach ( var_6 in level.allies )
|
|
{
|
|
if ( isdefined( var_6.magic_bullet_shield ) )
|
|
var_6 maps\_utility::stop_magic_bullet_shield();
|
|
|
|
var_6 stopanimscripted();
|
|
var_6.ragdoll_immediate = 1;
|
|
var_6 kill();
|
|
}
|
|
|
|
if ( level.woof )
|
|
level.dog hide();
|
|
}
|
|
|
|
#using_animtree("vehicles");
|
|
|
|
anim_spawn_replace_with_model( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = self.origin;
|
|
var_4 = angles_clamp( self.angles );
|
|
var_5 = spawn( "script_model", var_3 );
|
|
var_5 setmodel( var_0 );
|
|
var_5.angles = var_4;
|
|
var_5 useanimtree( #animtree );
|
|
var_5.animname = var_1;
|
|
var_5 thread maps\_anim::anim_single_solo( var_5, var_2 );
|
|
return var_5;
|
|
}
|
|
|
|
angles_clamp( var_0 )
|
|
{
|
|
return ( 0, var_0[1], 0 );
|
|
}
|
|
|
|
spawn_enemy_bike_at_spawer( var_0 )
|
|
{
|
|
var_1 = maps\_vehicle_spline_zodiac::get_player_targ();
|
|
var_2 = maps\_vehicle_spline_zodiac::get_player_progress();
|
|
var_3 = maps\_vehicle_spline_zodiac::get_spawn_position( var_1, var_2 - 1000 - level.pos_lookahead_dist );
|
|
var_4 = var_3["targ"];
|
|
var_5 = getent( var_0, "targetname" );
|
|
var_6 = maps\_vehicle::vehicle_spawn( var_5 );
|
|
var_6.offset_percent = var_3["offset"];
|
|
var_6 vehphys_setspeed( 90 );
|
|
var_6 thread maps\_vehicle_spline_zodiac::crash_detection();
|
|
var_6.left_spline_path_time = gettime() - 3000;
|
|
var_4 thread maps\_vehicle_spline_zodiac::bike_drives_path( var_6 );
|
|
return var_6;
|
|
}
|
|
|
|
driver_dies( var_0 )
|
|
{
|
|
if ( isdefined( var_0 ) && isdefined( var_0.driver ) )
|
|
{
|
|
var_0.driver waittill( "death" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
var_0 notify( "dying" );
|
|
var_0.dontunloadonend = 1;
|
|
common_scripts\utility::array_thread( var_0.riders, ::vehicle_crash_guy, var_0 );
|
|
var_0 thread vehicle_crash_launch_guys();
|
|
var_0 vehphys_enablecrashing();
|
|
var_1 = rotate_vector( ( 64, randomint( 512 ) - 256, 0 ), var_0.angles );
|
|
var_0 vehphys_launch( var_1 * 2, 1.0 );
|
|
|
|
if ( var_0.spline == 1 )
|
|
{
|
|
wait 1;
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 maps\_vehicle::godoff();
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 maps\_vehicle::force_kill();
|
|
}
|
|
else
|
|
{
|
|
if ( isdefined( var_0 ) )
|
|
var_0 waittill_still( randomint( 3 ) + 1, 200 );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 maps\_vehicle::godoff();
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
if ( randomint( 4 ) >= 3 )
|
|
var_0 maps\_vehicle::force_kill();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
vehicle_crash_guy( var_0 )
|
|
{
|
|
if ( !isdefined( self ) || self.vehicle_position == 0 )
|
|
return;
|
|
else
|
|
{
|
|
self.deathanim = undefined;
|
|
self.noragdoll = undefined;
|
|
var_0.riders = common_scripts\utility::array_remove( var_0.riders, self );
|
|
self.ragdoll_immediate = 1;
|
|
|
|
if ( isdefined( self ) )
|
|
{
|
|
if ( !isdefined( self.magic_bullet_shield ) )
|
|
self kill();
|
|
}
|
|
}
|
|
}
|
|
|
|
vehicle_crash_launch_guys()
|
|
{
|
|
wait 0.1;
|
|
|
|
if ( isdefined( self ) )
|
|
{
|
|
var_0 = self gettagorigin( "tag_guy1" );
|
|
physicsexplosioncylinder( var_0, 300, 300, 0.25 );
|
|
}
|
|
}
|
|
|
|
waittill_still( var_0, var_1 )
|
|
{
|
|
mytimeoutent( var_0 ) endon( "timeout" );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 50;
|
|
|
|
var_2 = self vehicle_getvelocity();
|
|
var_2 = abs( var_2[0] ) + abs( var_2[1] ) + abs( var_2[2] );
|
|
|
|
while ( var_2 > var_1 )
|
|
{
|
|
if ( isdefined( self ) )
|
|
var_2 = self vehicle_getvelocity();
|
|
else
|
|
break;
|
|
|
|
var_2 = abs( var_2[0] ) + abs( var_2[1] ) + abs( var_2[2] );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
rotate_vector( var_0, var_1 )
|
|
{
|
|
var_2 = anglestoright( var_1 ) * -1;
|
|
var_3 = anglestoforward( var_1 );
|
|
var_4 = anglestoup( var_1 );
|
|
var_5 = var_3 * var_0[0] + var_2 * var_0[1] + var_4 * var_0[2];
|
|
return var_5;
|
|
}
|
|
|
|
mytimeoutent( var_0 )
|
|
{
|
|
var_1 = spawnstruct();
|
|
var_1 maps\_utility::delaythread( var_0, maps\_utility::send_notify, "timeout" );
|
|
return var_1;
|
|
}
|
|
|
|
player_viewhands_minigun( var_0, var_1 )
|
|
{
|
|
level.player endon( "missionend" );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = "viewhands_player_us_army";
|
|
|
|
var_0 useanimtree( #animtree );
|
|
var_0.animname = "suburban_hands";
|
|
var_0.has_hands = 0;
|
|
var_0 show_hands( var_1 );
|
|
var_0 set_idle();
|
|
var_0 thread player_viewhands_minigun_hand( "LEFT" );
|
|
var_0 thread player_viewhands_minigun_hand( "RIGHT" );
|
|
var_0 thread handle_mounting( var_1 );
|
|
}
|
|
|
|
set_idle()
|
|
{
|
|
self setanim( %player_suburban_minigun_idle_l, 1, 0, 1 );
|
|
self setanim( %player_suburban_minigun_idle_r, 1, 0, 1 );
|
|
}
|
|
|
|
handle_mounting( var_0 )
|
|
{
|
|
var_1 = self;
|
|
var_1 endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
var_1 waittill( "turretownerchange" );
|
|
var_2 = var_1 getturretowner();
|
|
|
|
if ( !isalive( var_2 ) )
|
|
{
|
|
hide_hands( var_0 );
|
|
continue;
|
|
}
|
|
|
|
show_hands( var_0 );
|
|
}
|
|
}
|
|
|
|
show_hands( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = "viewhands_player_us_army";
|
|
|
|
var_1 = self;
|
|
|
|
if ( var_1.has_hands )
|
|
return;
|
|
|
|
var_1 dontcastshadows();
|
|
var_1.has_hands = 1;
|
|
var_1 attach( var_0, "tag_player" );
|
|
}
|
|
|
|
hide_hands( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = "viewhands_player_us_army";
|
|
|
|
var_1 = self;
|
|
|
|
if ( !var_1.has_hands )
|
|
return;
|
|
|
|
var_1 castshadows();
|
|
var_1.has_hands = 0;
|
|
var_1 detach( var_0, "tag_player" );
|
|
}
|
|
|
|
player_viewhands_minigun_hand( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
level.player endon( "missionend" );
|
|
var_1 = undefined;
|
|
|
|
if ( var_0 == "LEFT" )
|
|
var_1 = ::spinbuttonpressed;
|
|
else if ( var_0 == "RIGHT" )
|
|
var_1 = ::firebuttonpressed;
|
|
|
|
var_2 = undefined;
|
|
|
|
if ( var_0 == "LEFT" )
|
|
var_2 = "L";
|
|
else if ( var_0 == "RIGHT" )
|
|
var_2 = "R";
|
|
|
|
for (;;)
|
|
{
|
|
if ( common_scripts\utility::flag( "hand_wait" ) )
|
|
{
|
|
self clearanim( maps\_utility::getanim( "fire2idle_" + var_2 ), 0.2 );
|
|
common_scripts\utility::flag_clear( "hand_wait" );
|
|
common_scripts\utility::flag_wait( "hand_wait" );
|
|
common_scripts\utility::flag_clear( "hand_wait" );
|
|
}
|
|
|
|
if ( level.player [[ var_1 ]]() )
|
|
{
|
|
thread player_viewhands_minigun_presed( var_0 );
|
|
|
|
while ( level.player [[ var_1 ]]() )
|
|
wait 0.05;
|
|
|
|
continue;
|
|
}
|
|
|
|
thread player_viewhands_minigun_idle( var_0 );
|
|
|
|
while ( !level.player [[ var_1 ]]() )
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
spinbuttonpressed()
|
|
{
|
|
if ( level.player adsbuttonpressed() )
|
|
return 1;
|
|
|
|
if ( level.player attackbuttonpressed() )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
firebuttonpressed()
|
|
{
|
|
return level.player attackbuttonpressed();
|
|
}
|
|
|
|
player_viewhands_minigun_idle( var_0 )
|
|
{
|
|
level.player endon( "missionend" );
|
|
var_1 = undefined;
|
|
|
|
if ( var_0 == "LEFT" )
|
|
var_1 = "L";
|
|
else if ( var_0 == "RIGHT" )
|
|
var_1 = "R";
|
|
|
|
self clearanim( maps\_utility::getanim( "idle2fire_" + var_1 ), 0.2 );
|
|
self setflaggedanimrestart( "anim", maps\_utility::getanim( "fire2idle_" + var_1 ) );
|
|
self waittillmatch( "anim", "end" );
|
|
self clearanim( maps\_utility::getanim( "fire2idle_" + var_1 ), 0.2 );
|
|
self setanim( maps\_utility::getanim( "idle_" + var_1 ) );
|
|
}
|
|
|
|
player_viewhands_minigun_presed( var_0 )
|
|
{
|
|
level.player endon( "missionend" );
|
|
var_1 = undefined;
|
|
|
|
if ( var_0 == "LEFT" )
|
|
var_1 = "L";
|
|
else if ( var_0 == "RIGHT" )
|
|
var_1 = "R";
|
|
|
|
self clearanim( maps\_utility::getanim( "idle_" + var_1 ), 0.2 );
|
|
self setanim( maps\_utility::getanim( "idle2fire_" + var_1 ) );
|
|
}
|
|
|
|
ice_effects_init()
|
|
{
|
|
if ( !isdefined( anim._effect ) )
|
|
anim._effect = [];
|
|
|
|
anim._effect["snowmobile_leftground"] = loadfx( "fx/treadfx/bigair_snow_night_emitter" );
|
|
anim._effect["snowmobile_bumpbig"] = loadfx( "fx/treadfx/bigjump_land_snow_night" );
|
|
anim._effect["snowmobile_bump"] = loadfx( "fx/treadfx/smalljump_land_snow_night" );
|
|
anim._effect["snowmobile_sway_left"] = loadfx( "fx/treadfx/leftturn_snow_night" );
|
|
anim._effect["snowmobile_sway_right"] = loadfx( "fx/treadfx/rightturn_snow_night" );
|
|
anim._effect["snowmobile_collision"] = loadfx( "fx/treadfx/bigjump_land_snow_night" );
|
|
}
|
|
|
|
snowmobile_sounds()
|
|
{
|
|
thread sm_listen_leftground();
|
|
thread sm_listen_landed();
|
|
thread sm_listen_jolt();
|
|
thread sm_listen_collision();
|
|
}
|
|
|
|
sm_listen_leftground()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "veh_leftground" );
|
|
thread maps\clockwork_audio::chase_sm_leftground( self.origin );
|
|
|
|
if ( self.kill_my_fx == 0 )
|
|
{
|
|
self.event_time = gettime();
|
|
wait 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
sm_listen_landed()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "veh_landed" );
|
|
|
|
if ( self.kill_my_fx == 0 )
|
|
{
|
|
if ( self.event_time + self.bigjump_timedelta < gettime() )
|
|
{
|
|
thread maps\clockwork_audio::chase_sm_collision( self.origin );
|
|
continue;
|
|
}
|
|
|
|
thread maps\clockwork_audio::chase_sm_collision( self.origin );
|
|
}
|
|
}
|
|
}
|
|
|
|
sm_listen_jolt()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "veh_jolt", var_0 );
|
|
|
|
if ( self.kill_my_fx == 0 )
|
|
{
|
|
if ( var_0[1] >= 0 )
|
|
{
|
|
thread maps\clockwork_audio::chase_sm_collision( self.origin );
|
|
continue;
|
|
}
|
|
|
|
thread maps\clockwork_audio::chase_sm_collision( self.origin );
|
|
}
|
|
}
|
|
}
|
|
|
|
sm_listen_collision()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "veh_collision", var_0, var_1 );
|
|
|
|
if ( self.kill_my_fx == 0 )
|
|
thread maps\clockwork_audio::chase_sm_collision( self.origin );
|
|
}
|
|
}
|
|
|
|
start_ice_effects()
|
|
{
|
|
self.bigjump_timedelta = 500;
|
|
self.event_time = -1;
|
|
thread listen_leftground();
|
|
thread listen_landed();
|
|
thread listen_jolt();
|
|
thread listen_collision();
|
|
thread listen_vehicle_roof();
|
|
thread listen_vehicle_death();
|
|
}
|
|
|
|
listen_vehicle_roof()
|
|
{
|
|
var_0 = common_scripts\utility::spawn_tag_origin();
|
|
var_0.angles = self gettagangles( "tag_turret" );
|
|
var_0.origin = self gettagorigin( "tag_turret" );
|
|
var_0.origin = var_0.origin + ( 32, 32, 0 );
|
|
var_0 linkto( self, "tag_turret" );
|
|
var_1 = common_scripts\utility::spawn_tag_origin();
|
|
var_1.angles = self gettagangles( "tag_turret" );
|
|
var_1.origin = self gettagorigin( "tag_turret" );
|
|
var_1.origin = var_1.origin + ( -32, 32, 0 );
|
|
var_1 linkto( self, "tag_turret" );
|
|
var_2 = common_scripts\utility::spawn_tag_origin();
|
|
var_2.angles = self gettagangles( "tag_turret" );
|
|
var_2.origin = self gettagorigin( "tag_turret" );
|
|
var_2.origin = var_2.origin + ( 32, -32, 0 );
|
|
var_2 linkto( self, "tag_turret" );
|
|
var_3 = common_scripts\utility::spawn_tag_origin();
|
|
var_3.angles = self gettagangles( "tag_turret" );
|
|
var_3.origin = self gettagorigin( "tag_turret" );
|
|
var_3.origin = var_3.origin + ( -32, -32, 0 );
|
|
var_3 linkto( self, "tag_turret" );
|
|
wait 5;
|
|
|
|
while ( isalive( self ) && isdefined( self ) && self.veh_speed > 5 )
|
|
{
|
|
if ( var_0.origin[2] < 224 )
|
|
{
|
|
thread maps\clockwork_audio::chase_land_roof( var_0.origin );
|
|
var_4 = common_scripts\utility::drop_to_ground( var_0.origin, 224, 0 );
|
|
playfx( loadfx( "fx/treadfx/smalljump_land_snow_night" ), var_4 );
|
|
}
|
|
else if ( var_1.origin[2] < 224 )
|
|
{
|
|
thread maps\clockwork_audio::chase_land_roof( var_1.origin );
|
|
var_4 = common_scripts\utility::drop_to_ground( var_1.origin, 224, 0 );
|
|
playfx( loadfx( "fx/treadfx/smalljump_land_snow_night" ), var_4 );
|
|
}
|
|
else if ( var_2.origin[2] < 224 )
|
|
{
|
|
thread maps\clockwork_audio::chase_land_roof( var_2.origin );
|
|
var_4 = common_scripts\utility::drop_to_ground( var_2.origin, 224, 0 );
|
|
playfx( loadfx( "fx/treadfx/smalljump_land_snow_night" ), var_4 );
|
|
}
|
|
else if ( var_3.origin[2] < 224 )
|
|
{
|
|
thread maps\clockwork_audio::chase_land_roof( var_3.origin );
|
|
var_4 = common_scripts\utility::drop_to_ground( var_3.origin, 224, 0 );
|
|
playfx( loadfx( "fx/treadfx/smalljump_land_snow_night" ), var_4 );
|
|
}
|
|
|
|
wait 0.5;
|
|
}
|
|
|
|
self notify( "kill_tread" );
|
|
var_0 delete();
|
|
var_1 delete();
|
|
var_2 delete();
|
|
var_3 delete();
|
|
wait 10;
|
|
|
|
if ( isdefined( self ) )
|
|
self delete();
|
|
}
|
|
|
|
snowmobile_fx( var_0 )
|
|
{
|
|
if ( self.model == "vehicle_chinese_brave_warrior_anim" )
|
|
{
|
|
if ( isdefined( anim._effect[var_0] ) )
|
|
playfxontag( anim._effect[var_0], self, "tag_deathfx" );
|
|
}
|
|
|
|
if ( self.model == "vehicle_gaz_tigr_base" )
|
|
{
|
|
if ( isdefined( anim._effect[var_0] ) )
|
|
playfxontag( anim._effect[var_0], self, "tag_guy0" );
|
|
}
|
|
}
|
|
|
|
listen_leftground()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "veh_leftground" );
|
|
thread maps\clockwork_audio::chase_leftground( self.origin );
|
|
|
|
if ( !isdefined( self.kill_my_fx ) )
|
|
{
|
|
self.event_time = gettime();
|
|
snowmobile_fx( "snowmobile_leftground" );
|
|
}
|
|
}
|
|
}
|
|
|
|
listen_vehicle_death()
|
|
{
|
|
var_0 = 2000;
|
|
self waittill( "death" );
|
|
|
|
if ( isdefined( self ) )
|
|
{
|
|
var_1 = distance( level.player.origin, self.origin );
|
|
|
|
if ( var_1 < var_0 )
|
|
{
|
|
thread maps\clockwork_audio::chase_crashmix( self.origin );
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
listen_landed()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "veh_landed" );
|
|
|
|
if ( !isdefined( self.kill_my_fx ) )
|
|
{
|
|
if ( self.event_time + self.bigjump_timedelta < gettime() )
|
|
{
|
|
thread maps\clockwork_audio::chase_land_tires_big( self.origin );
|
|
snowmobile_fx( "snowmobile_bumpbig" );
|
|
continue;
|
|
}
|
|
|
|
thread maps\clockwork_audio::chase_land_tires_small( self.origin );
|
|
snowmobile_fx( "snowmobile_bump" );
|
|
}
|
|
}
|
|
}
|
|
|
|
listen_jolt()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "veh_jolt", var_0 );
|
|
|
|
if ( !isdefined( self.kill_my_fx ) )
|
|
{
|
|
if ( var_0[1] >= 0 )
|
|
{
|
|
snowmobile_fx( "snowmobile_sway_left" );
|
|
thread maps\clockwork_audio::chase_collision( self.origin );
|
|
continue;
|
|
}
|
|
|
|
snowmobile_fx( "snowmobile_sway_right" );
|
|
thread maps\clockwork_audio::chase_collision( self.origin );
|
|
}
|
|
}
|
|
}
|
|
|
|
listen_collision()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "veh_collision", var_0, var_1 );
|
|
thread maps\clockwork_audio::chase_collision( self.origin );
|
|
|
|
if ( !isdefined( self.kill_my_fx ) )
|
|
snowmobile_fx( "snowmobile_collision" );
|
|
}
|
|
}
|
|
|
|
listen_player_collision()
|
|
{
|
|
for (;;)
|
|
{
|
|
self waittill( "veh_collision", var_0, var_1 );
|
|
thread maps\clockwork_audio::chase_player_collision();
|
|
|
|
if ( !isdefined( self.kill_my_fx ) )
|
|
{
|
|
snowmobile_fx( "snowmobile_collision" );
|
|
screenshakefade( 0.35, 1 );
|
|
}
|
|
}
|
|
}
|
|
|
|
listen_player_jolt()
|
|
{
|
|
for (;;)
|
|
{
|
|
self waittill( "veh_jolt", var_0 );
|
|
|
|
if ( !isdefined( self.kill_my_fx ) )
|
|
{
|
|
if ( var_0[1] >= 0 )
|
|
{
|
|
thread maps\clockwork_audio::chase_player_jolt();
|
|
snowmobile_fx( "snowmobile_sway_left" );
|
|
snowmobile_fx( "sparks" );
|
|
thread screen_shake_exfil();
|
|
continue;
|
|
}
|
|
|
|
thread maps\clockwork_audio::chase_player_jolt();
|
|
snowmobile_fx( "snowmobile_sway_right" );
|
|
snowmobile_fx( "sparks" );
|
|
thread screen_shake_exfil();
|
|
}
|
|
}
|
|
}
|
|
|
|
screen_shake_exfil()
|
|
{
|
|
thread play_rumble_seconds( "damage_heavy", 1 );
|
|
screenshakefade( 0.08, 0.75, 0.01, 0.25 );
|
|
screenshakefade( 0.05, 0.25 );
|
|
screenshakefade( 0.08, 0.5, 0.25, 0.01 );
|
|
}
|
|
|
|
play_rumble_seconds( var_0, var_1 )
|
|
{
|
|
for ( var_2 = 0; var_2 < var_1 * 20; var_2++ )
|
|
{
|
|
level.player playrumbleonentity( var_0 );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
watch_tick( var_0 )
|
|
{
|
|
level endon( "stop_watch_tick" );
|
|
var_1 = "J_Watch_Face_Time_2";
|
|
|
|
for ( var_2 = 2; var_2 < 10; var_2++ )
|
|
{
|
|
var_3 = var_1 + var_2;
|
|
var_0 hidepart( var_3 );
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "intro_watch_on" );
|
|
|
|
for ( var_2 = 2; var_2 < 10; var_2++ )
|
|
{
|
|
var_3 = var_1 + var_2;
|
|
var_0 showpart( var_3 );
|
|
}
|
|
|
|
var_4 = 2;
|
|
|
|
for (;;)
|
|
{
|
|
wait 1;
|
|
var_3 = var_1 + var_4;
|
|
var_4++;
|
|
var_0 hidepart( var_3 );
|
|
}
|
|
}
|
|
|
|
watch_light_fx( var_0, var_1 )
|
|
{
|
|
common_scripts\utility::flag_wait( "intro_watch_on" );
|
|
playfxontag( common_scripts\utility::getfx( "vfx/moments/clockwork/vfx_intro_watch_glow" ), var_0, "tag_gasmask2" );
|
|
common_scripts\utility::flag_wait( "intro_watch_off" );
|
|
level notify( "stop_watch_tick" );
|
|
var_2 = "J_Watch_Face_Time_2";
|
|
|
|
for ( var_3 = 2; var_3 < 10; var_3++ )
|
|
{
|
|
var_4 = var_2 + var_3;
|
|
var_1 hidepart( var_4 );
|
|
}
|
|
|
|
stopfxontag( common_scripts\utility::getfx( "vfx/moments/clockwork/vfx_intro_watch_glow" ), var_0, "tag_gasmask2" );
|
|
}
|
|
|
|
waittill_movement( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
var_1 = 0;
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_2 = var_0 * var_0;
|
|
|
|
var_3 = self.origin;
|
|
var_4 = -1;
|
|
|
|
while ( var_4 < var_1 )
|
|
{
|
|
common_scripts\utility::waitframe();
|
|
|
|
if ( self.origin != var_3 )
|
|
var_4 = distancesquared( self.origin, var_3 );
|
|
}
|
|
}
|
|
|
|
delete_on_path_end( var_0, var_1 )
|
|
{
|
|
if ( isdefined( var_0 ) )
|
|
level endon( var_0 );
|
|
|
|
self waittill( "reached_path_end" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
self thread [[ var_1 ]]();
|
|
|
|
if ( !raven_player_can_see_ai( self ) )
|
|
self delete();
|
|
}
|
|
|
|
killtimer()
|
|
{
|
|
level notify( "kill_timer" );
|
|
|
|
if ( isdefined( level.timer ) )
|
|
level.timer destroy();
|
|
}
|
|
|
|
cool_walk( var_0 )
|
|
{
|
|
self.ignoreall = var_0;
|
|
self.disablearrivals = var_0;
|
|
self.disableexits = var_0;
|
|
|
|
if ( var_0 == 1 )
|
|
{
|
|
self.animname = "generic";
|
|
maps\_utility::set_run_anim( "walk_gun_unwary" );
|
|
}
|
|
else
|
|
maps\_utility::clear_run_anim();
|
|
}
|
|
|
|
fast_walk( var_0 )
|
|
{
|
|
if ( var_0 == 1 )
|
|
{
|
|
self.animname = "generic";
|
|
maps\_utility::set_run_anim( "clock_walk", 1 );
|
|
self.moveplaybackrate = 1;
|
|
}
|
|
else
|
|
{
|
|
maps\_utility::clear_run_anim();
|
|
self.moveplaybackrate = 1;
|
|
}
|
|
}
|
|
|
|
fast_jog( var_0 )
|
|
{
|
|
if ( var_0 == 1 )
|
|
{
|
|
self.animname = "generic";
|
|
maps\_utility::set_run_anim( "clock_jog" );
|
|
self.moveplaybackrate = 1;
|
|
}
|
|
else
|
|
{
|
|
maps\_utility::clear_run_anim();
|
|
self.moveplaybackrate = 1;
|
|
}
|
|
}
|
|
|
|
walkout_idle( var_0 )
|
|
{
|
|
level endon( "exfil_fire_fail" );
|
|
|
|
while ( !common_scripts\utility::flag( "exfil_fire_fail" ) )
|
|
{
|
|
self waittill( "idle" );
|
|
|
|
if ( !common_scripts\utility::flag( "exfil_fire_fail" ) )
|
|
{
|
|
maps\_utility::clear_generic_idle_anim();
|
|
self.animname = "generic";
|
|
maps\_utility::set_generic_idle_anim( var_0 );
|
|
}
|
|
else
|
|
maps\_utility::clear_generic_idle_anim();
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
die_quietly()
|
|
{
|
|
if ( isdefined( self.magic_bullet_shield ) && self.magic_bullet_shield == 1 )
|
|
maps\_utility::stop_magic_bullet_shield();
|
|
|
|
self.no_pain_sound = 1;
|
|
self.diequietly = 1;
|
|
maps\_utility::die();
|
|
}
|
|
|
|
fight_back( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 3;
|
|
|
|
self endon( "death" );
|
|
wait( var_0 );
|
|
self.ignoreall = 0;
|
|
}
|
|
|
|
attack_targets( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
if ( !isdefined( var_5 ) )
|
|
var_5 = 0;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 0;
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = 0;
|
|
|
|
if ( !isdefined( var_4 ) )
|
|
var_4 = 0;
|
|
|
|
var_6 = 0;
|
|
|
|
for ( var_7 = 0; var_6 < var_1.size; var_6++ )
|
|
{
|
|
if ( isdefined( var_1[var_6] ) && isalive( var_1[var_6] ) && !isdefined( var_1[var_6].fake_dead ) && !isdefined( var_1[var_6].leave_for_dog ) )
|
|
{
|
|
if ( var_4 == 1 )
|
|
{
|
|
var_1[var_6].ignoreme = 0;
|
|
thread snipe_till_dead( var_0[var_7], var_1[var_6], var_5 );
|
|
}
|
|
else
|
|
{
|
|
var_1[var_6].ignoreme = 0;
|
|
var_0[var_7] getenemyinfo( var_1[var_6] );
|
|
var_1[var_6] thread fight_back();
|
|
}
|
|
|
|
if ( var_3 > 0 )
|
|
{
|
|
var_8 = var_3;
|
|
|
|
if ( var_2 < var_3 )
|
|
var_8 = randomfloatrange( var_2, var_3 );
|
|
|
|
wait( var_8 );
|
|
}
|
|
|
|
var_7++;
|
|
|
|
if ( var_7 >= var_0.size )
|
|
var_7 = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
snipe_till_dead( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = 0.3;
|
|
var_0 maps\_utility::cqb_aim( var_1 );
|
|
wait( var_3 );
|
|
|
|
while ( isalive( var_1 ) && !isdefined( var_1.fake_dead ) )
|
|
{
|
|
var_4 = var_0 gettagorigin( "tag_flash" );
|
|
var_5 = var_1 gettagorigin( "j_head" );
|
|
var_6 = 1;
|
|
|
|
if ( !var_2 )
|
|
var_6 = sighttracepassed( var_4, var_5, 1, var_0, var_1 );
|
|
|
|
if ( var_6 )
|
|
{
|
|
var_0 maps\_utility::cqb_aim( var_1 );
|
|
magicbullet( var_0.weapon, var_4, var_5 );
|
|
var_0 shootblank();
|
|
|
|
if ( randomint( 100 ) > 50 )
|
|
{
|
|
wait 0.1;
|
|
magicbullet( var_0.weapon, var_4, var_5 );
|
|
var_0 shootblank();
|
|
}
|
|
}
|
|
|
|
wait 0.25;
|
|
var_0 maps\_utility::cqb_aim( undefined );
|
|
}
|
|
}
|
|
|
|
fail_on_player_kill()
|
|
{
|
|
if ( self.team == "none" || self.team == "neutral" )
|
|
{
|
|
self.maxhealth = 250;
|
|
self.health = 250;
|
|
self waittill( "death", var_0 );
|
|
|
|
if ( isdefined( var_0 ) && isplayer( var_0 ) )
|
|
{
|
|
setdvar( "ui_deadquote", &"CLOCKWORK_YOU_KILLED_A_CIVILIAN" );
|
|
maps\_utility::missionfailedwrapper();
|
|
wait 20;
|
|
}
|
|
}
|
|
}
|
|
|
|
scientist_set_cowered_anim()
|
|
{
|
|
self endon( "death" );
|
|
level waittill( "defend_shoot_air" );
|
|
wait 1;
|
|
maps\_utility::set_generic_idle_anim( "scientist_idle" );
|
|
}
|
|
|
|
ambient_animate( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = undefined;
|
|
var_5 = undefined;
|
|
var_6 = self.target;
|
|
var_7 = self.animation;
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = 1;
|
|
|
|
if ( isdefined( var_2 ) && var_2 == 1 )
|
|
var_8 = maps\_utility::dronespawn_bodyonly( self );
|
|
else
|
|
{
|
|
var_2 = 0;
|
|
var_8 = maps\_utility::spawn_ai();
|
|
}
|
|
|
|
if ( isdefined( var_8 ) )
|
|
{
|
|
var_8 endon( "death" );
|
|
|
|
if ( var_2 == 0 )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
var_8 thread prepare_to_be_shot( var_1, var_3 );
|
|
|
|
var_8 maps\_utility::set_allowdeath( 1 );
|
|
}
|
|
|
|
if ( isdefined( var_7 ) )
|
|
{
|
|
var_8.animname = "generic";
|
|
|
|
if ( var_2 == 0 && var_3 == 1 )
|
|
{
|
|
var_8 thread scientist_set_cowered_anim();
|
|
var_8 thread fail_on_player_kill();
|
|
}
|
|
|
|
if ( isdefined( var_6 ) )
|
|
{
|
|
var_4 = common_scripts\utility::getstruct( var_6, "targetname" );
|
|
|
|
if ( !isdefined( var_4 ) )
|
|
var_5 = getnode( var_6, "targetname" );
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_4 thread maps\_anim::anim_generic_loop( var_8, var_7 );
|
|
|
|
if ( isdefined( var_5 ) )
|
|
{
|
|
var_8 maps\_utility::disable_arrivals();
|
|
var_8 maps\_utility::disable_turnanims();
|
|
var_8 maps\_utility::disable_exits();
|
|
var_8 maps\_utility::set_run_anim( var_7 );
|
|
|
|
if ( isdefined( var_0 ) && var_0 == 1 )
|
|
var_8 thread delete_on_complete( 1 );
|
|
}
|
|
}
|
|
else if ( isarray( level.scr_anim["generic"][var_7] ) )
|
|
var_8 thread maps\_anim::anim_generic_loop( var_8, var_7 );
|
|
else
|
|
{
|
|
var_8 maps\_utility::disable_turnanims();
|
|
var_8.ignoreall = 1;
|
|
|
|
if ( var_2 == 0 )
|
|
var_8.allowdeath = 1;
|
|
|
|
var_8 thread maps\_anim::anim_single_solo( var_8, var_7 );
|
|
|
|
if ( isdefined( var_0 ) && var_0 == 1 )
|
|
var_8 thread delete_on_complete( 0 );
|
|
}
|
|
}
|
|
}
|
|
|
|
return var_8;
|
|
}
|
|
|
|
delete_on_complete( var_0 )
|
|
{
|
|
if ( !var_0 )
|
|
{
|
|
self waittillmatch( "single anim", "end" );
|
|
self notify( "killanimscript" );
|
|
}
|
|
else
|
|
self waittill( "reached_path_end" );
|
|
|
|
if ( !raven_player_can_see_ai( self ) )
|
|
self delete();
|
|
}
|
|
|
|
prepare_to_be_shot( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
level waittill( var_0 );
|
|
self.ignoreme = 0;
|
|
self.ignoreall = 0;
|
|
maps\_utility::anim_stopanimscripted();
|
|
|
|
if ( var_1 == 1 )
|
|
maps\_utility::set_generic_idle_anim( "scientist_idle" );
|
|
|
|
maps\_utility::enable_arrivals();
|
|
maps\_utility::enable_exits();
|
|
maps\_utility::enable_turnanims();
|
|
}
|
|
|
|
waittill_no_radio_dialog()
|
|
{
|
|
while ( radio_dialog_playing() )
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
radio_dialog_playing()
|
|
{
|
|
return isdefined( level.player_radio_emitter ) && isdefined( level.player_radio_emitter.function_stack ) && level.player_radio_emitter.function_stack.size > 0;
|
|
}
|
|
|
|
waittill_no_char_dialog()
|
|
{
|
|
while ( allies_dialog_playing() )
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
allies_dialog_playing()
|
|
{
|
|
var_0 = isdefined( level.allies[0].function_stack ) && level.allies[0].function_stack.size > 0;
|
|
var_1 = isdefined( level.allies[1].function_stack ) && level.allies[1].function_stack.size > 0;
|
|
var_2 = isdefined( level.allies[2].function_stack ) && level.allies[2].function_stack.size > 0;
|
|
return var_0 || var_1 || var_2;
|
|
}
|
|
|
|
radio_dialog_add_and_go( var_0, var_1 )
|
|
{
|
|
waittill_no_char_dialog();
|
|
maps\_utility::radio_add( var_0 );
|
|
maps\_utility::radio_dialogue( var_0, var_1 );
|
|
}
|
|
|
|
char_dialog_add_and_go( var_0 )
|
|
{
|
|
waittill_no_radio_dialog();
|
|
|
|
if ( !isdefined( self ) || !isalive( self ) )
|
|
return;
|
|
|
|
level.scr_sound[self.animname][var_0] = var_0;
|
|
maps\_utility::dialogue_queue( var_0 );
|
|
}
|
|
|
|
screenshakefade( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 0;
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = 0;
|
|
|
|
var_4 = var_1 * 10;
|
|
var_5 = var_2 * 10;
|
|
|
|
if ( var_5 > 0 )
|
|
var_6 = var_0 / var_5;
|
|
else
|
|
var_6 = var_0;
|
|
|
|
var_7 = var_3 * 10;
|
|
var_8 = var_4 - var_7;
|
|
|
|
if ( var_7 > 0 )
|
|
var_9 = var_0 / var_7;
|
|
else
|
|
var_9 = var_0;
|
|
|
|
var_10 = 0.1;
|
|
var_0 = 0;
|
|
|
|
for ( var_11 = 0; var_11 < var_4; var_11++ )
|
|
{
|
|
if ( var_11 <= var_5 )
|
|
var_0 = var_0 + var_6;
|
|
|
|
if ( var_11 > var_8 )
|
|
var_0 = var_0 - var_9;
|
|
|
|
earthquake( var_0, var_10, level.player.origin, 500 );
|
|
wait( var_10 );
|
|
}
|
|
}
|
|
|
|
introscreen_generic_black_fade_in_on_flag( var_0, var_1, var_2 )
|
|
{
|
|
introscreen_generic_fade_in_on_flag( "black", var_0, var_1, var_2 );
|
|
}
|
|
|
|
introscreen_generic_fade_in_on_flag( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 1.5;
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
maps\_hud_util::start_overlay();
|
|
else
|
|
maps\_hud_util::fade_out( var_3 );
|
|
|
|
common_scripts\utility::flag_wait( var_1 );
|
|
maps\_hud_util::fade_in( var_2 );
|
|
wait( var_2 );
|
|
setsaveddvar( "com_cinematicEndInWhite", 0 );
|
|
}
|
|
|
|
glass_destroy_targetname( var_0 )
|
|
{
|
|
var_1 = getglassarray( var_0 );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
destroyglass( var_3 );
|
|
}
|
|
|
|
nvg_goggles_off()
|
|
{
|
|
if ( maps\_nightvision::nightvision_check( level.player ) )
|
|
{
|
|
waittill_forceviewmodel_weapon_ready();
|
|
level.player playsound( "item_nightvision_off" );
|
|
var_0 = level.player getcurrentweapon();
|
|
level.player forceviewmodelanimation( var_0, "nvg_up" );
|
|
level.player nightvisiongogglesforceoff();
|
|
level.player notify( "night_vision_off" );
|
|
waittill_forceviewmodel_done();
|
|
}
|
|
}
|
|
|
|
nvg_goggles_on()
|
|
{
|
|
if ( !maps\_nightvision::nightvision_check( level.player ) )
|
|
{
|
|
waittill_forceviewmodel_weapon_ready();
|
|
level.player playsound( "item_nightvision_on" );
|
|
var_0 = level.player getcurrentweapon();
|
|
level.player forceviewmodelanimation( var_0, "nvg_down" );
|
|
level.player nightvisiongogglesforceon();
|
|
level.player notify( "night_vision_on" );
|
|
waittill_forceviewmodel_done();
|
|
}
|
|
}
|
|
|
|
waittill_forceviewmodel_done()
|
|
{
|
|
wait 2;
|
|
level.player enableweaponpickup();
|
|
level.player enableweaponswitch();
|
|
}
|
|
|
|
waittill_forceviewmodel_weapon_ready()
|
|
{
|
|
level.player disableweaponpickup();
|
|
level.player disableweaponswitch();
|
|
|
|
while ( level.player isswitchingweapon() || level.player getcurrentweapon() == "none" )
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
overheard_radio_chatter( var_0, var_1, var_2 )
|
|
{
|
|
if ( 1 )
|
|
return;
|
|
|
|
common_scripts\utility::flag_wait_or_timeout( var_2, var_1 );
|
|
|
|
if ( common_scripts\utility::flag( var_2 ) )
|
|
return;
|
|
|
|
if ( !isdefined( level.background_radio_emitter ) )
|
|
{
|
|
var_3 = spawn( "script_origin", ( 0, 0, 0 ) );
|
|
var_3 linkto( level.player, "", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
level.background_radio_emitter = var_3;
|
|
}
|
|
|
|
maps\_utility::bcs_scripted_dialogue_start();
|
|
var_4 = level.background_radio_emitter maps\_utility::function_stack( maps\_utility::play_sound_on_tag, var_0, undefined, 1 );
|
|
return var_4;
|
|
}
|
|
|
|
glowstick_hacking_on( var_0 )
|
|
{
|
|
playfxontag( level._effect["glowstick"], var_0, "J_prop_1" );
|
|
common_scripts\utility::flag_wait( "thermite_start" );
|
|
glowstick_off( var_0 );
|
|
}
|
|
|
|
glowstick1_on( var_0 )
|
|
{
|
|
playfxontag( level._effect["vfx/moments/clockwork/vfx_vault_glowstick1"], var_0, "J_prop_1" );
|
|
common_scripts\utility::flag_wait( "thermite_start" );
|
|
stopfxontag( level._effect["vfx/moments/clockwork/vfx_vault_glowstick1"], var_0, "J_prop_1" );
|
|
playfxontag( level._effect["vfx/moments/clockwork/vfx_vault_glowstick1_fade"], var_0, "J_prop_1" );
|
|
}
|
|
|
|
glowstick2_on( var_0 )
|
|
{
|
|
playfxontag( level._effect["vfx/moments/clockwork/vfx_vault_glowstick2"], var_0, "J_prop_1" );
|
|
common_scripts\utility::flag_wait( "thermite_start" );
|
|
stopfxontag( level._effect["vfx/moments/clockwork/vfx_vault_glowstick2"], var_0, "J_prop_1" );
|
|
playfxontag( level._effect["vfx/moments/clockwork/vfx_vault_glowstick2_fade"], var_0, "J_prop_1" );
|
|
}
|
|
|
|
glowstick_off( var_0 )
|
|
{
|
|
stopfxontag( level._effect["glowstick"], var_0, "J_prop_1" );
|
|
}
|
|
|
|
unhide_prop( var_0 )
|
|
{
|
|
var_1 = 0;
|
|
|
|
switch ( var_0.animname )
|
|
{
|
|
case "vault_spool_prop":
|
|
level.spool show();
|
|
var_1 = 1;
|
|
break;
|
|
case "vault_glowstick1_prop":
|
|
level.glowstick1 show();
|
|
var_1 = 1;
|
|
break;
|
|
case "vault_glowstick2_prop":
|
|
level.glowstick2 show();
|
|
var_1 = 1;
|
|
break;
|
|
case "vault_tablet_prop":
|
|
level.tablet show();
|
|
var_1 = 1;
|
|
break;
|
|
case "vault_drill_prop":
|
|
common_scripts\utility::array_thread( level.drill_pickup, maps\_utility::show_entity );
|
|
var_1 = 1;
|
|
wait 2;
|
|
common_scripts\utility::flag_set( "drill_pickup_ready" );
|
|
}
|
|
|
|
if ( !var_1 )
|
|
var_0 show();
|
|
}
|
|
|
|
raven_player_can_see_ai( var_0, var_1 )
|
|
{
|
|
var_2 = gettime();
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 0;
|
|
|
|
if ( isdefined( var_0.playerseesmetime ) && var_0.playerseesmetime + var_1 >= var_2 )
|
|
return var_0.playerseesme;
|
|
|
|
var_0.playerseesmetime = var_2;
|
|
|
|
if ( !common_scripts\utility::within_fov( level.player.origin, level.player.angles, var_0.origin, 0.766 ) )
|
|
{
|
|
var_0.playerseesme = 0;
|
|
return 0;
|
|
}
|
|
|
|
var_3 = level.player geteye();
|
|
var_4 = var_0.origin;
|
|
|
|
if ( sighttracepassed( var_3, var_4, 0, level.player ) )
|
|
{
|
|
var_0.playerseesme = 1;
|
|
return 1;
|
|
}
|
|
|
|
var_5 = var_0 geteye();
|
|
|
|
if ( sighttracepassed( var_3, var_5, 0, level.player ) )
|
|
{
|
|
var_0.playerseesme = 1;
|
|
return 1;
|
|
}
|
|
|
|
var_6 = ( var_5 + var_4 ) * 0.5;
|
|
|
|
if ( sighttracepassed( var_3, var_6, 0, level.player ) )
|
|
{
|
|
var_0.playerseesme = 1;
|
|
return 1;
|
|
}
|
|
|
|
var_0.playerseesme = 0;
|
|
return 0;
|
|
}
|
|
|
|
toggle_visibility( var_0, var_1 )
|
|
{
|
|
var_2 = getentarray( var_0, "targetname" );
|
|
|
|
foreach ( var_4 in var_2 )
|
|
{
|
|
if ( var_1 )
|
|
{
|
|
var_4 show();
|
|
continue;
|
|
}
|
|
|
|
var_4 hide();
|
|
}
|
|
}
|
|
|
|
waittill_player_close_to_or_aiming_at( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = var_1 * var_1;
|
|
|
|
while ( isdefined( var_0 ) && isalive( var_0 ) )
|
|
{
|
|
var_4 = distance2dsquared( level.player.origin, var_0.origin );
|
|
|
|
if ( var_4 < var_3 )
|
|
break;
|
|
|
|
var_5 = level.player geteye();
|
|
var_6 = var_0 geteye();
|
|
var_7 = bullettrace( var_5, var_6, 1, level.player, 0, 0 );
|
|
|
|
if ( isdefined( var_7["entity"] ) && var_7["entity"] == var_0 )
|
|
break;
|
|
|
|
if ( level.player worldpointinreticle_circle( var_6, 65, var_2 ) )
|
|
break;
|
|
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
safe_hide()
|
|
{
|
|
if ( isdefined( self ) )
|
|
self hide();
|
|
}
|
|
|
|
setup_drill( var_0 )
|
|
{
|
|
if ( isdefined( level.drill_pickup ) )
|
|
return;
|
|
|
|
level.drill_pickup = getentarray( "pickup_drill", "targetname" );
|
|
|
|
foreach ( var_2 in level.drill_pickup )
|
|
{
|
|
|
|
}
|
|
|
|
level.drill_pickup = common_scripts\utility::array_removeundefined( level.drill_pickup );
|
|
|
|
if ( isdefined( var_0 ) && var_0 )
|
|
common_scripts\utility::array_thread( level.drill_pickup, ::safe_hide );
|
|
}
|
|
|
|
dog_setup()
|
|
{
|
|
if ( getdvarint( "dog_enabled", 0 ) )
|
|
{
|
|
level.woof = 1;
|
|
maps\hud_outline_objective::outline_enable();
|
|
}
|
|
}
|
|
|
|
link_dog_to_jeep( var_0 )
|
|
{
|
|
level.dog linkto( var_0, "tag_body" );
|
|
var_0 thread maps\_anim::anim_loop_solo( level.dog, "veh_idle", "stop_dog_loop", "tag_body", ( -55, -10, -10 ) );
|
|
}
|
|
|
|
dog_alt_combat_check_clockwork( var_0 )
|
|
{
|
|
if ( isdefined( self.enemy ) && isdefined( self.enemy.type ) && self.enemy.type == "dog" )
|
|
return 1;
|
|
|
|
if ( isdefined( self.enemy ) && self.enemy.team == "allies" )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
transient_switch_to_end()
|
|
{
|
|
maps\_utility::transient_unload( "clockwork_start_tr" );
|
|
maps\_utility::transient_load( "clockwork_end_tr" );
|
|
}
|
|
|
|
walkout_do_stop_transition_anim( var_0 )
|
|
{
|
|
if ( !common_scripts\utility::flag( "exfil_fire_fail" ) )
|
|
{
|
|
self.go_to_waiting = isdefined( var_0.script_delay ) && var_0.script_delay > 0.5 || isdefined( var_0.script_delay_post ) && var_0.script_delay_post > 0.5 || isdefined( var_0.script_flag_wait ) && !common_scripts\utility::flag( var_0.script_flag_wait ) || ( isdefined( var_0.script_wait ) || isdefined( self.script_wait_min ) && isdefined( self.script_wait_max ) ) || isdefined( var_0.script_requires_player );
|
|
|
|
if ( !self.go_to_waiting || self isinscriptedstate() )
|
|
return;
|
|
|
|
var_1 = "enter_idle_l";
|
|
var_2 = "idle_l";
|
|
|
|
if ( self.idle_right )
|
|
{
|
|
var_1 = "enter_idle_r";
|
|
var_2 = "idle_r";
|
|
}
|
|
|
|
maps\_utility::set_generic_idle_anim( var_2 );
|
|
maps\_anim::anim_single_solo( self, var_1 );
|
|
self setgoalpos( self.origin );
|
|
}
|
|
}
|
|
|
|
walkout_do_start_transition_anim( var_0 )
|
|
{
|
|
if ( !common_scripts\utility::flag( "exfil_fire_fail" ) )
|
|
{
|
|
while ( self.go_to_waiting && self isinscriptedstate() )
|
|
common_scripts\utility::waitframe();
|
|
|
|
if ( !self.go_to_waiting || self isinscriptedstate() )
|
|
return;
|
|
|
|
merrick_script_delay_post( var_0 );
|
|
var_1 = "exit_idle_l";
|
|
|
|
if ( self.idle_right )
|
|
var_1 = "exit_idle_r";
|
|
|
|
thread maps\_anim::anim_single_solo( self, var_1 );
|
|
thread transition_start_anim( var_1 );
|
|
self.go_to_waiting = undefined;
|
|
}
|
|
}
|
|
|
|
transition_start_anim( var_0 )
|
|
{
|
|
var_1 = getanimlength( level.scr_anim[self.animname][var_0] );
|
|
thread maps\_anim::anim_single_solo( self, var_0 );
|
|
wait( var_1 - 0.05 );
|
|
maps\_utility::clear_generic_idle_anim();
|
|
self stopanimscripted();
|
|
}
|
|
|
|
merrick_script_delay_post( var_0 )
|
|
{
|
|
if ( var_0.script_flag_wait != "chaos_footstairs_anims" || self.animname != "baker" )
|
|
return;
|
|
|
|
wait 2;
|
|
}
|
|
|
|
enemy_stop_stealth()
|
|
{
|
|
self stopanimscripted();
|
|
|
|
if ( self.type != "dog" )
|
|
maps\_utility::gun_recall();
|
|
|
|
self.ignoreall = 0;
|
|
self.ignoreme = 0;
|
|
}
|
|
|
|
guy_runtovehicle_loaded_custom( var_0, var_1 )
|
|
{
|
|
var_0 endon( "stop_loading" );
|
|
maps\_vehicle_aianim::guy_runtovehicle_loaded( var_0, var_1 );
|
|
}
|
|
|
|
vehicle_runtooverride( var_0 )
|
|
{
|
|
level thread guy_runtovehicle_custom( var_0, self );
|
|
}
|
|
|
|
guy_runtovehicle_custom( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_1 endon( "stop_loading" );
|
|
var_4 = 1;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 0;
|
|
|
|
var_5 = level.vehicle_aianims[var_1.classname];
|
|
var_1 endon( "death" );
|
|
var_0 endon( "death" );
|
|
var_0 endon( "stop_loading" );
|
|
var_1.runningtovehicle[var_1.runningtovehicle.size] = var_0;
|
|
thread guy_runtovehicle_loaded_custom( var_0, var_1 );
|
|
var_6 = [];
|
|
var_7 = undefined;
|
|
var_8 = 0;
|
|
var_9 = 0;
|
|
|
|
for ( var_10 = 0; var_10 < var_5.size; var_10++ )
|
|
{
|
|
if ( isdefined( var_5[var_10].getin ) )
|
|
var_9 = 1;
|
|
}
|
|
|
|
if ( !var_9 )
|
|
{
|
|
var_0 notify( "enteredvehicle" );
|
|
var_1 maps\_vehicle_aianim::guy_enter( var_0, var_4 );
|
|
return;
|
|
}
|
|
|
|
if ( !isdefined( var_0.get_in_moving_vehicle ) )
|
|
{
|
|
while ( var_1 vehicle_getspeed() > 1 )
|
|
wait 0.05;
|
|
}
|
|
|
|
var_11 = var_1 maps\_vehicle_aianim::get_availablepositions( var_3 );
|
|
|
|
if ( isdefined( var_0.script_startingposition ) )
|
|
var_7 = var_1 maps\_vehicle_aianim::vehicle_getinstart( var_0.script_startingposition );
|
|
else if ( !var_1.usedpositions[0] )
|
|
{
|
|
var_7 = var_1 maps\_vehicle_aianim::vehicle_getinstart( 0 );
|
|
|
|
if ( var_2 )
|
|
{
|
|
var_0 thread maps\_utility::magic_bullet_shield();
|
|
thread maps\_vehicle_aianim::remove_magic_bullet_shield_from_guy_on_unload_or_death( var_0 );
|
|
}
|
|
}
|
|
else if ( var_11.availablepositions.size )
|
|
var_7 = common_scripts\utility::getclosest( var_0.origin, var_11.availablepositions );
|
|
else
|
|
var_7 = undefined;
|
|
|
|
if ( !var_11.availablepositions.size && var_11.nonanimatedpositions.size )
|
|
{
|
|
var_0 notify( "enteredvehicle" );
|
|
var_1 maps\_vehicle_aianim::guy_enter( var_0, var_4 );
|
|
return;
|
|
}
|
|
else if ( !isdefined( var_7 ) )
|
|
return;
|
|
|
|
var_8 = var_7.origin;
|
|
var_12 = var_7.angles;
|
|
var_0.forced_startingposition = var_7.vehicle_position;
|
|
var_1.usedpositions[var_7.vehicle_position] = 1;
|
|
var_0.script_moveoverride = 1;
|
|
var_0 notify( "stop_going_to_node" );
|
|
var_0 maps\_utility::set_forcegoal();
|
|
var_0 maps\_utility::disable_arrivals();
|
|
var_0.goalradius = 16;
|
|
var_0 setgoalpos( var_8 );
|
|
var_0 waittill( "goal" );
|
|
var_0 maps\_utility::enable_arrivals();
|
|
var_0 maps\_utility::unset_forcegoal();
|
|
var_0 notify( "boarding_vehicle" );
|
|
var_0.boarding_vehicle = 1;
|
|
var_13 = maps\_vehicle_aianim::anim_pos( var_1, var_7.vehicle_position );
|
|
|
|
if ( isdefined( var_13.delay ) )
|
|
{
|
|
var_0.delay = var_13.delay;
|
|
|
|
if ( isdefined( var_13.delayinc ) )
|
|
self.delayer = var_0.delay;
|
|
}
|
|
|
|
if ( isdefined( var_13.delayinc ) )
|
|
{
|
|
self.delayer = self.delayer + var_13.delayinc;
|
|
var_0.delay = self.delayer;
|
|
}
|
|
|
|
var_1 maps\_vehicle_aianim::link_to_sittag( var_0, var_13.sittag, var_13.sittag_offset, var_13.linktoblend );
|
|
var_0.allowdeath = 0;
|
|
var_13 = var_5[var_7.vehicle_position];
|
|
|
|
if ( isdefined( var_7 ) )
|
|
{
|
|
if ( isdefined( var_13.vehicle_getinanim ) )
|
|
{
|
|
if ( isdefined( var_13.vehicle_getoutanim ) )
|
|
{
|
|
var_14 = isdefined( var_0.no_vehicle_getoutanim );
|
|
|
|
if ( !var_14 )
|
|
var_1 clearanim( var_13.vehicle_getoutanim, 0 );
|
|
}
|
|
|
|
var_1 = var_1 maps\_vehicle_aianim::getanimatemodel();
|
|
var_1 thread maps\_vehicle_aianim::setanimrestart_once( var_13.vehicle_getinanim, var_13.vehicle_getinanim_clear );
|
|
level thread maps\_anim::start_notetrack_wait( var_1, "vehicle_anim_flag" );
|
|
}
|
|
|
|
if ( isdefined( var_13.vehicle_getinsoundtag ) )
|
|
var_8 = var_1 gettagorigin( var_13.vehicle_getinsoundtag );
|
|
else
|
|
var_8 = var_1.origin;
|
|
|
|
if ( isdefined( var_13.vehicle_getinsound ) )
|
|
thread common_scripts\utility::play_sound_in_space( var_13.vehicle_getinsound, var_8 );
|
|
|
|
var_15 = undefined;
|
|
var_16 = undefined;
|
|
|
|
if ( isdefined( var_13.getin_enteredvehicletrack ) )
|
|
{
|
|
var_15 = [];
|
|
var_15[0] = var_13.getin_enteredvehicletrack;
|
|
var_16 = [];
|
|
var_16[0] = maps\_vehicle_aianim::entered_vehicle_notify;
|
|
var_1 maps\_vehicle_aianim::link_to_sittag( var_0, var_13.sittag, var_13.sittag_offset, var_13.linktoblend );
|
|
}
|
|
|
|
var_1 maps\_vehicle_aianim::animontag( var_0, var_13.sittag, var_13.getin, var_15, var_16 );
|
|
}
|
|
|
|
var_0 notify( "enteredvehicle" );
|
|
var_1 maps\_vehicle_aianim::guy_enter( var_0, var_4 );
|
|
}
|
|
|
|
set_run_anim_ref( var_0, var_1 )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
self.alwaysrunforward = var_1;
|
|
else
|
|
self.alwaysrunforward = 1;
|
|
|
|
maps\_utility::disable_turnanims();
|
|
self.run_overrideanim = var_0;
|
|
self.walk_overrideanim = self.run_overrideanim;
|
|
}
|
|
|
|
icehole_achievement()
|
|
{
|
|
level.icehole_achievement++;
|
|
|
|
if ( level.icehole_achievement == 8 )
|
|
level.player maps\_utility::player_giveachievement_wrapper( "LEVEL_10A" );
|
|
}
|