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

4188 lines
101 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
spawn_heroes()
{
if ( is_start_point_before( "atrium" ) )
return;
var_0 = getentarray( "heroes", "targetname" );
foreach ( var_2 in var_0 )
{
if ( issubstr( var_2.script_noteworthy, "_intro" ) )
continue;
spawn_hero( var_2.script_noteworthy );
}
}
spawn_hero( var_0, var_1 )
{
if ( !isdefined( level.heroes ) )
level.heroes = [];
if ( var_0 == "merrick" && isdefined( level.merrick ) )
return;
if ( var_0 == "keegan" && isdefined( level.keegan ) )
return;
if ( var_0 == "hesh" && isdefined( level.hesh ) )
return;
if ( var_0 == "elias" && isdefined( level.elias ) )
return;
var_2 = getentarray( "heroes", "targetname" );
var_3 = array_get_noteworthy( var_2, var_0 );
if ( !isdefined( var_3 ) )
var_3 = getent( var_0, "script_noteworthy" );
if ( isdefined( var_1 ) )
{
var_3.origin = var_1.origin;
var_3.angles = var_1.angles;
}
if ( issubstr( var_0, "_intro" ) )
{
var_4 = strtok( var_0, "_" );
var_0 = var_4[0];
}
var_3.count = 1;
var_5 = var_3 maps\_utility::spawn_ai( 1, 1 );
level.heroes[level.heroes.size] = var_5;
if ( var_0 == "merrick" )
{
level.merrick = var_5;
var_5 merrick_scripted_movement();
}
else if ( var_0 == "keegan" )
{
level.keegan = var_5;
var_5.disable_sniper_glint = 1;
var_5 keegan_scripted_movement();
var_5 maps\_utility::ent_flag_init( "doing_kitchen_ambush" );
}
else if ( var_0 == "hesh" )
{
level.hesh = var_5;
var_5 hesh_scripted_movement();
}
else if ( var_0 == "riley" )
{
level.dog = var_5;
var_5.animname = "dog";
var_5.name = "Riley";
var_5 dog_scripted_movement();
var_5 setthreatbiasgroup( "heroes" );
return var_5;
}
else if ( var_0 == "elias" )
{
level.elias = var_5;
var_5 maps\_utility::stop_magic_bullet_shield();
var_5 elias_scripted_movement();
}
var_5 thread maps\_utility::set_ai_bcvoice( "taskforce" );
var_5.script_noteworthy = var_0;
var_5.animname = var_0;
var_5.suppressionwait = 0;
var_5 maps\_utility::disable_surprise();
var_5.ignorerandombulletdamage = 1;
var_5.grenadeawareness = 0;
var_5.script_grenades = 0;
var_5.originalbasaccuracy = var_5.baseaccuracy;
var_5.neverenablecqb = 1;
var_5.goalradius = 128;
return var_5;
}
spawn_rorke()
{
if ( isdefined( level.rorke ) )
return;
var_0 = getent( "rorke_spawner", "targetname" );
var_0.count = 3;
level.rorke = var_0 maps\_utility::spawn_ai( 1 );
level.rorke.animname = "rorke";
level.rorke maps\_utility::place_weapon_on( "m9a1", "right" );
}
reset_if_new_goal( var_0 )
{
self endon( "goal" );
self waittill( "ai_new_goal" );
if ( isdefined( var_0 ) )
self.goalradius = var_0;
disable_arrivals_and_exits( 0 );
}
set_goal_any( var_0, var_1, var_2, var_3 )
{
self endon( "death" );
if ( isstring( var_0 ) )
var_0 = maps\_utility::getent_or_struct_or_node( var_0, "targetname" );
if ( isdefined( var_2 ) )
{
if ( isdefined( var_3 ) )
{
self.oldgoalradius = self.goalradius;
self.goalradius = 15;
}
self.ignoreall = 1;
}
if ( isdefined( var_0.type ) )
thread maps\_utility::set_goal_node( var_0 );
else if ( !isdefined( var_0.classname ) )
thread maps\_utility::set_goal_pos( var_0.origin );
else if ( var_0.classname == "info_volume" )
thread old_set_goal_volume( undefined, var_0 );
else if ( var_0.classname == "script_origin" )
self setgoalentity( var_0 );
else
{
}
if ( isdefined( var_1 ) && var_1 != 0 )
{
thread waittill_goal( 1 );
return;
}
else if ( isdefined( var_2 ) )
{
waittill_goal();
if ( isdefined( var_3 ) )
self.goalradius = self.oldgoalradius;
self.ignoreall = 0;
}
}
old_set_goal_volume( var_0, var_1, var_2 )
{
if ( !isdefined( var_1 ) )
var_1 = getent( var_2, "targetname" );
if ( !isdefined( var_0 ) )
var_0 = self;
if ( isarray( var_0 ) )
{
var_0 = maps\_utility::array_removedead_or_dying( var_0 );
foreach ( var_4 in var_0 )
var_4 setgoalvolumeauto( var_1 );
}
else if ( isdefined( var_0 ) && isalive( var_0 ) )
var_0 setgoalvolumeauto( var_1 );
}
guys_waittill_goals( var_0 )
{
foreach ( var_2 in var_0 )
var_2 thread waittill_goal();
for (;;)
{
var_4 = 0;
foreach ( var_2 in var_0 )
{
if ( isdefined( var_2.atgoal ) && var_2.atgoal == 1 )
var_4++;
}
if ( var_4 == var_0.size )
break;
wait 0.05;
}
}
waittill_goal( var_0 )
{
self endon( "death" );
self.atgoal = 0;
self.oldgoalradius = self.goalradius;
self.goalradius = 25;
self waittill( "goal" );
self.atgoal = 1;
if ( isdefined( var_0 ) )
{
self delete();
return;
}
self.goalradius = self.oldgoalradius;
}
waittill_death_and_respawn( var_0, var_1, var_2, var_3, var_4 )
{
var_0 endon( "stop_respawning" );
if ( isdefined( var_2 ) )
level endon( var_2 );
if ( !isdefined( var_3 ) )
var_3 = 3;
if ( !isdefined( var_4 ) )
var_4 = 5;
var_5 = undefined;
if ( isai( self ) )
var_5 = self;
else
var_0 waittill( "spawned", var_5 );
while ( isdefined( var_5 ) )
{
if ( isdefined( var_1 ) )
var_5 thread set_goal_any( var_1 );
var_5 waittill( "death" );
if ( !isdefined( var_0 ) )
break;
if ( var_0.count == 0 )
break;
wait( randomfloatrange( var_3, var_4 ) );
if ( !isdefined( var_0 ) )
break;
var_5 = var_0 maps\_utility::spawn_ai();
}
}
waittill_trigger_and_kill( var_0, var_1, var_2, var_3 )
{
self endon( "death" );
if ( isstring( var_0 ) )
var_0 = getent( var_0, "targetname" );
var_0 waittill( "trigger" );
wait( randomfloatrange( var_1, var_2 ) );
if ( isdefined( var_3 ) )
self delete();
else
self kill();
}
trigger_waittill_trigger( var_0, var_1, var_2, var_3 )
{
if ( isstring( var_0 ) )
var_0 = getent_targetname_or_noteworthy( var_0 );
if ( isdefined( var_1 ) )
{
var_4 = var_0 common_scripts\utility::waittill_any_timeout( var_1, "trigger" );
if ( var_4 == "timeout" )
var_0 notify( "trigger" );
}
else if ( isdefined( var_3 ) )
{
for (;;)
{
var_0 waittill( "trigger", var_5 );
if ( var_5 == var_3 )
break;
wait 0.05;
}
}
else
var_0 waittill( "trigger" );
if ( isdefined( var_2 ) )
level notify( var_2 );
}
getent_targetname_or_noteworthy( var_0 )
{
var_1 = getent( var_0, "targetname" );
if ( !isdefined( var_1 ) )
var_1 = getent( var_0, "script_noteworthy" );
return var_1;
}
get_closest_in_array( var_0, var_1 )
{
var_2 = get_closest_index_in_array( var_0, var_1 );
return var_0[var_2];
}
get_closest_index_in_array( var_0, var_1 )
{
var_2 = distancesquared( var_0[0], var_1 );
var_3 = 0;
for ( var_4 = 1; var_4 < var_0.size; var_4++ )
{
var_5 = distancesquared( var_0[var_4], var_1 );
if ( var_5 < var_2 )
{
var_2 = var_5;
var_6 = var_0[var_4];
var_3 = var_4;
}
}
return var_3;
}
get_chained_vehiclenodes( var_0 )
{
var_1 = [];
var_1[0] = var_0;
for (;;)
{
if ( !isdefined( var_0.target ) )
break;
var_0 = getvehiclenode( var_0.target, "targetname" );
var_1[var_1.size] = var_0;
}
return var_1;
}
get_targeted_ents()
{
var_0 = [];
var_0[0] = self;
for ( var_1 = self; isdefined( var_1.target ); var_1 = var_2 )
{
var_2 = var_1 common_scripts\utility::get_target_ent();
if ( !isdefined( var_2 ) )
break;
var_0[var_0.size] = var_2;
}
return var_0;
}
get_target_chain_array( var_0 )
{
var_1 = [];
var_1[var_1.size] = var_0;
while ( isdefined( var_0 ) )
{
if ( !isdefined( var_0.target ) )
break;
var_0 = maps\_utility::getent_or_struct_or_node( var_0.target, "targetname" );
if ( !isdefined( var_0 ) )
break;
var_1[var_1.size] = var_0;
if ( !isdefined( var_0.target ) )
break;
wait 0.05;
}
return var_1;
}
ignore_everything()
{
self.ignoreall = 1;
self.grenadeawareness = 0;
self.ignoreexplosionevents = 1;
self.ignorerandombulletdamage = 1;
self.ignoresuppression = 1;
self.disablebulletwhizbyreaction = 1;
maps\_utility::disable_pain();
self.og_newenemyreactiondistsq = self.newenemyreactiondistsq;
self.newenemyreactiondistsq = 0;
}
clear_ignore_everything()
{
self.ignoreall = 0;
self.grenadeawareness = 1;
self.ignoreexplosionevents = 0;
self.ignorerandombulletdamage = 0;
self.ignoresuppression = 0;
self.fixednode = 1;
self.disablebulletwhizbyreaction = 0;
maps\_utility::enable_pain();
if ( isdefined( self.og_newenemyreactiondistsq ) )
self.newenemyreactiondistsq = self.og_newenemyreactiondistsq;
}
set_all_ai_targetnames( var_0 )
{
if ( !isdefined( var_0.targetname ) )
return;
self.targetname = var_0.targetname;
}
kill_over_time( var_0, var_1, var_2, var_3, var_4 )
{
if ( !isarray( var_0 ) )
{
var_5 = [];
var_5[0] = var_0;
var_0 = var_5;
}
var_0 = maps\_utility::remove_dead_from_array( var_0 );
foreach ( var_7 in var_0 )
thread kill_over_time_single( var_7, var_1, var_2, var_3, var_4 );
}
kill_over_time_single( var_0, var_1, var_2, var_3, var_4 )
{
var_0 endon( "death" );
var_5 = 3;
if ( !isdefined( var_2 ) )
var_5 = randomfloat( var_5 );
else if ( isdefined( var_3 ) )
var_5 = randomfloatrange( var_2, var_3 );
else
var_5 = randomfloatrange( var_2 );
while ( isdefined( var_4 ) )
{
wait( var_5 );
if ( maps\_utility::player_can_see_ai( var_0 ) )
continue;
else
var_4 = undefined;
}
if ( isdefined( var_1 ) )
var_1 thread aim_and_kill( var_0 );
else
var_0 kill();
}
aim_and_kill( var_0 )
{
if ( !isdefined( var_0 ) || !isalive( var_0 ) )
return;
thread maps\_utility::cqb_aim( var_0 );
var_1 = self gettagorigin( "tag_flash" );
var_2 = var_0 gettagorigin( "j_head" );
var_0.health = 1;
if ( !isdefined( var_0 ) || !isalive( var_0 ) )
{
thread maps\_utility::cqb_aim( undefined );
return;
}
var_3 = undefined;
var_4 = undefined;
if ( isdefined( self.a.array ) )
{
var_5 = randomint( self.a.array["single"].size );
var_3 = self.a.array["single"][var_5];
var_4 = weaponfiretime( self.weapon );
}
if ( !isdefined( var_0 ) || !isalive( var_0 ) )
{
thread maps\_utility::cqb_aim( undefined );
return;
}
if ( isdefined( var_3 ) )
{
self setflaggedanimknobrestart( "fire_notify", var_3, 1, 0.2, var_4 );
common_scripts\utility::waittill_any_timeout( 0.2, "fire_notify", "fire" );
}
magicbullet( self.weapon, var_1, var_2 );
if ( !isdefined( var_0 ) || !isalive( var_0 ) )
var_0 kill();
thread maps\_utility::cqb_aim( undefined );
}
stealth_shot_accuracy( var_0 )
{
var_1 = self.baseaccuracy;
self.baseaccuracy = 9999;
var_0 waittill( "death" );
self.baseaccuracy = var_1;
}
idle_and_react( var_0, var_1, var_2, var_3 )
{
self endon( "death" );
self endon( "dying" );
if ( !isdefined( var_1 ) )
var_1 = self.script_animation + "_idle";
var_4 = 0;
if ( !isdefined( var_2 ) )
var_2 = self.script_animation + "_react";
else if ( var_2 == "none" )
var_4 = 1;
if ( !isdefined( self.animname ) )
var_0 thread maps\_anim::anim_generic_loop( self, var_1, "stop_anim" );
else
var_0 thread maps\_anim::anim_loop_solo( self, var_1, "stop_anim" );
thread waittill_dead_and_stop_anim( var_0, var_2 );
self.stealth_radius_multiplier = 0;
var_5 = waittill_stealth_notify();
var_0 notify( "stop_anim" );
self stopanimscripted();
maps\_utility::set_ignoreme( 0 );
maps\_utility::set_ignoreall( 0 );
if ( var_4 == 0 )
{
if ( !isdefined( self.animname ) )
var_0 maps\_anim::anim_generic( self, var_2 );
else
var_0 maps\_anim::anim_single_solo( self, var_2 );
}
if ( isdefined( var_3 ) )
thread set_goal_any( var_3 );
}
waittill_dead_and_stop_anim( var_0, var_1 )
{
var_0 endon( var_1 );
self.allowpain = 1;
self.allowdeath = 1;
self.health = 10;
common_scripts\utility::waittill_any( "death", "damage", "dying" );
if ( !isdefined( self ) )
return;
var_0 notify( "stop_anim" );
self stopanimscripted();
if ( isalive( self ) )
self kill();
}
get_living_ai_waittill_dead_or_dying( var_0, var_1, var_2, var_3 )
{
var_4 = undefined;
if ( isdefined( var_3 ) )
var_4 = get_living_ai_array_safe( var_0, var_1 );
else
var_4 = maps\_utility::get_living_ai_array( var_0, var_1 );
if ( !isdefined( var_4 ) )
{
var_5 = maps\_utility::get_living_ai( var_0, var_1 );
var_4 = var_5[0];
}
if ( !isdefined( var_2 ) )
var_2 = var_4.size;
maps\_utility::waittill_dead_or_dying( var_4, var_2 );
}
get_living_ai_array_safe( var_0, var_1 )
{
var_2 = getspawner_array( var_0, var_1 );
var_3 = undefined;
var_4 = 0;
foreach ( var_6 in var_2 )
{
if ( isdefined( var_6.script_delay ) )
{
if ( var_6.script_delay > var_4 )
var_3 = var_6.script_delay;
}
}
if ( isdefined( var_3 ) )
wait( var_3 );
return maps\_utility::get_living_ai_array( var_0, var_1 );
}
getspawner_array( var_0, var_1 )
{
var_2 = getentarray( var_0, var_1 );
var_3 = [];
foreach ( var_5 in var_2 )
{
if ( isspawner( var_5 ) )
var_3[var_3.size] = var_5;
}
return var_3;
}
waittill_stealth_notify( var_0, var_1 )
{
self endon( "death" );
level endon( "stealth_event_notify" );
self endon( "stop_stealth_notify" );
if ( !isdefined( var_1 ) )
var_1 = 1;
if ( var_1 )
thread waittill_stealth_notify_goloud( var_0 );
thread waittill_stealth_radius();
if ( isdefined( var_0 ) && common_scripts\utility::flag( var_0 ) )
return;
self addaieventlistener( "grenade danger" );
self addaieventlistener( "projectile_impact" );
self addaieventlistener( "silenced_shot" );
self addaieventlistener( "bulletwhizby" );
self addaieventlistener( "gunshot" );
self addaieventlistener( "gunshot_teammate" );
self addaieventlistener( "explode" );
thread custom_ai_eventlistener( "flashbang", var_0 );
level thread flash_bang_explode( self, var_0 );
self waittill( "ai_event", var_2, var_3, var_4 );
if ( isdefined( var_0 ) )
common_scripts\utility::flag_set( var_0 );
level notify( "stealth_event_notify", self );
}
sight_stealth_notify( var_0, var_1 )
{
self endon( "death" );
self endon( "stop_sight_stealth_notify" );
level endon( var_0 );
for (;;)
{
wait 0.1;
if ( !common_scripts\utility::flag( var_1 ) )
{
if ( level.player sightconetrace( self geteye() ) )
break;
}
}
common_scripts\utility::flag_set( var_0 );
}
flash_bang_explode( var_0, var_1 )
{
level notify( "stop_flash_bang_explode" );
level endon( "stop_flash_bang_explode" );
if ( isdefined( var_1 ) )
level endon( var_1 );
level endon( "stealth_event_notify" );
level.player endon( "death" );
if ( !isdefined( level.stealth_notify_ents ) )
level.stealth_notify_ents = [];
level.stealth_notify_ents[level.stealth_notify_ents.size] = var_0;
for (;;)
{
level.player waittill( "grenade_fire", var_2, var_3 );
if ( !isdefined( var_2 ) )
return;
if ( isdefined( var_3 ) )
{
if ( var_3 == "flash_grenade" )
{
var_2 waittill( "explode", var_4 );
level.stealth_notify_ents = common_scripts\utility::array_removeundefined( level.stealth_notify_ents );
foreach ( var_0 in level.stealth_notify_ents )
{
if ( !isalive( var_0 ) || var_0 maps\_utility::doinglongdeath() )
continue;
if ( distancesquared( var_0.origin, var_4 ) < squared( 1200 ) )
var_0 notify( "ai_event", "flash_grenade_exploded" );
}
}
}
}
}
custom_ai_eventlistener( var_0, var_1 )
{
if ( isdefined( var_1 ) )
level endon( var_1 );
level endon( "stop_stealth_notify" );
self endon( "death" );
self waittill( var_0 );
self notify( "ai_event", var_0 );
}
waittill_stealth_radius()
{
self endon( "death" );
self endon( "stop_stealth_notify" );
level endon( "stealth_event_notify" );
var_0["prone"] = 80;
var_0["crouch"] = 100;
var_0["stand"] = 140;
for (;;)
{
var_1 = 1;
var_1 = get_stealth_scale();
var_2 = distancesquared( self.origin, level.player.origin );
var_3 = level.player getstance();
if ( var_2 < squared( var_0[var_3] * var_1 ) )
break;
wait 0.05;
}
self notify( "ai_event", "player_in_radius" );
}
get_stealth_scale()
{
var_0 = 1;
if ( isdefined( self.stealth_radius_multiplier ) )
var_0 = self.stealth_radius_multiplier;
else
{
var_1 = getentarray( "hiding_volume", "targetname" );
foreach ( var_3 in var_1 )
{
if ( level.player istouching( var_3 ) )
{
var_0 = var_3.script_multiplier;
break;
}
}
}
return var_0;
}
waittill_stealth_notify_goloud( var_0 )
{
self endon( "death" );
self endon( "stop_stealth_notify" );
if ( !isdefined( var_0 ) || !common_scripts\utility::flag( var_0 ) )
level waittill( "stealth_event_notify" );
wait( randomfloatrange( 0.1, 0.5 ) );
self notify( "stealth_event_notify" );
self notify( "stop_going_to_node" );
maps\_utility::enable_arrivals();
maps\_utility::enable_exits();
self.ignoreme = 0;
self.ignoreall = 0;
self.favoriteenemy = level.player;
maps\_utility::set_baseaccuracy( 2 );
if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "kitchen_flashlight_enemy" )
{
self stopanimscripted();
if ( isdefined( self.flashlight ) )
{
self.flashlight unlink();
var_1 = 0.5;
self.flashlight moveto( self.origin + ( 0, 0, 1 ), var_1, var_1, 0 );
self.flashlight rotateto( ( 90, 63, 0 ), var_1, var_1, 0 );
level maps\_utility::notify_delay( "unlink_flashlight", var_1 );
}
maps\_utility::gun_recall();
self animcustom( ::do_reaction );
}
if ( isdefined( self.cqbenabled ) )
maps\_utility::disable_cqbwalk();
else if ( !isdefined( self.animname ) )
maps\_utility::clear_generic_run_anim();
else
maps\_utility::clear_run_anim();
}
do_reaction()
{
self endon( "killanimscript" );
animscripts\utility::initialize( "reactions" );
animscripts\reactions::newenemyreactionanim();
}
set_start_locations( var_0, var_1 )
{
var_2 = common_scripts\utility::getstructarray( var_0, "targetname" );
foreach ( var_4 in var_2 )
{
if ( var_4.script_noteworthy == "player" )
var_4 set_player_location();
}
if ( !isdefined( var_1 ) )
var_1 = common_scripts\utility::array_removeundefined( level.heroes );
foreach ( var_7 in var_1 )
{
var_4 = array_get_noteworthy( var_2, var_7.script_noteworthy );
var_7 forceteleport( var_4.origin, var_4.angles );
var_7.teleport_node = var_4;
}
}
set_player_location( var_0 )
{
if ( isdefined( var_0 ) )
var_1 = common_scripts\utility::getstruct( var_0, "targetname" );
else
var_1 = self;
var_2 = common_scripts\utility::drop_to_ground( var_1.origin, 10, -100 );
level.player setorigin( var_2 );
level.player setplayerangles( var_1.angles );
}
array_get_noteworthy( var_0, var_1 )
{
foreach ( var_3 in var_0 )
{
if ( isdefined( var_3.script_noteworthy ) && var_3.script_noteworthy == var_1 )
return var_3;
}
return undefined;
}
disable_arrivals_and_exits( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = 1;
self.disablearrivals = var_0;
self.disableexits = var_0;
}
anim_reach_and_anim( var_0, var_1 )
{
var_0 endon( "death" );
var_0 endon( "cancel_anim" );
if ( isdefined( var_0.animname ) )
{
maps\_anim::anim_reach_solo( var_0, var_1 );
maps\_anim::anim_single_solo( var_0, var_1 );
}
else
{
maps\_anim::anim_generic_reach( var_0, var_1 );
maps\_anim::anim_generic( var_0, var_1 );
}
var_0 notify( var_1 );
}
waittill_flag_set( var_0, var_1 )
{
self endon( "death" );
self waittill( var_0 );
common_scripts\utility::flag_set( var_1 );
}
too_close_to_allies( var_0, var_1, var_2 )
{
level endon( var_2 );
self endon( "death" );
var_1 = squared( var_1 );
var_3 = common_scripts\utility::array_add( level.heroes, level.player );
for (;;)
{
foreach ( var_5 in var_3 )
{
if ( distancesquared( var_5.origin, self.origin ) < var_1 )
{
self notify( var_0 );
return;
}
}
wait 0.1;
}
}
doors_open( var_0, var_1, var_2, var_3, var_4, var_5 )
{
var_6 = undefined;
if ( isstring( var_0 ) )
var_6 = getentarray( var_0, "targetname" );
else
var_6 = var_0;
if ( !isarray( var_6 ) )
{
var_6 door_open( var_1, var_2, var_3, var_4, var_5 );
return;
}
if ( !isdefined( var_1 ) )
var_1 = 0.5;
if ( !isdefined( var_2 ) )
var_2 = "double_door_wood_kick";
if ( !isdefined( var_4 ) )
var_4 = 0;
if ( !isdefined( var_5 ) )
var_5 = 0;
if ( !isdefined( var_3 ) )
var_3 = 90;
foreach ( var_11, var_8 in var_6 )
{
if ( isarray( var_3 ) )
var_9 = randomfloatrange( var_3[0], var_3[1] );
else
var_9 = var_3;
if ( isarray( var_1 ) )
var_10 = randomfloatrange( var_1[0], var_1[1] );
else
var_10 = var_1;
if ( var_8.script_noteworthy == "right" )
var_9 = var_9 * -1;
if ( isdefined( var_8.script_sound ) )
var_8 playsound( var_8.script_sound );
else if ( var_11 == 0 )
var_8 playsound( var_2 );
var_8 rotateto( var_8.angles + ( 0, var_9, 0 ), var_10, var_4, var_5 );
var_8 connectpaths();
var_8 thread door_waittill_rotatedone();
}
for (;;)
{
var_12 = 0;
foreach ( var_8 in var_6 )
{
if ( isdefined( var_8.rotatedone ) )
var_12++;
}
if ( var_12 == 2 )
break;
wait 0.05;
}
level notify( "double_doors_opened" );
}
door_open( var_0, var_1, var_2, var_3, var_4 )
{
if ( !isdefined( var_0 ) )
var_0 = 0.5;
if ( !isdefined( var_1 ) )
var_1 = "double_door_wood_kick";
if ( !isdefined( var_2 ) )
var_2 = 90;
if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "right" )
var_2 = var_2 * -1;
if ( !isdefined( var_3 ) )
var_3 = 0;
if ( !isdefined( var_4 ) )
var_4 = 0;
self rotateto( self.angles + ( 0, var_2, 0 ), var_0, var_3, var_4 );
self connectpaths();
if ( isdefined( self.script_sound ) )
self playsound( self.script_sound );
else if ( isdefined( var_1 ) )
self playsound( var_1 );
}
door_waittill_rotatedone()
{
self waittill( "rotatedone" );
self.rotatedone = 1;
}
func_waittill_msg( var_0, var_1, var_2, var_3, var_4 )
{
var_0 endon( "death" );
var_0 waittill( var_1 );
if ( isdefined( var_3 ) )
var_0 thread [[ var_2 ]]( var_3 );
else if ( isdefined( var_4 ) )
var_4 thread [[ var_2 ]]( var_3 );
else
var_0 thread [[ var_2 ]]();
}
link_two_entites( var_0, var_1, var_2, var_3, var_4 )
{
if ( isdefined( var_2 ) )
var_0 linkto( var_1, var_2, var_3, var_4 );
else
var_0 linkto( var_1 );
}
r_unlink( var_0 )
{
var_0 unlink();
}
set_ai_name( var_0 )
{
self.orginalname = self.name;
self.name = var_0;
}
reset_ai_name()
{
self.name = self.orginalname;
self.orginalname = undefined;
}
print3d_on_me( var_0 )
{
}
set_goal_volume( var_0, var_1 )
{
self endon( "death" );
if ( isdefined( var_1 ) )
wait( var_1 );
self setgoalvolumeauto( var_0 );
}
enemy_volume_trigger_thread( var_0, var_1 )
{
self endon( "death" );
var_2 = getentarray( self.target, "targetname" );
var_3 = undefined;
foreach ( var_5 in var_2 )
{
if ( var_5.classname == "info_volume" )
var_3 = var_5;
}
while ( !common_scripts\utility::flag( var_1 ) )
{
self waittill( "trigger" );
if ( var_0.enemy_volume == var_3 )
{
wait 0.5;
continue;
}
var_0.enemy_volume = var_3;
if ( isdefined( self.script_wait ) )
{
if ( self.script_wait < 0 )
return;
}
}
}
update_enemy_volume( var_0 )
{
var_0.enemies = maps\_utility::array_removedead_or_dying( var_0.enemies );
var_0.enemies = common_scripts\utility::array_removeundefined( var_0.enemies );
foreach ( var_2 in var_0.enemies )
{
var_3 = var_2 getgoalvolume();
if ( !isdefined( var_3 ) || var_3 != var_0.enemy_volume )
var_2 thread set_goal_volume( var_0.enemy_volume, randomfloatrange( 0, 2 ) );
}
}
force_shot_track( var_0, var_1 )
{
var_2 = 0;
if ( self.ignoreall )
var_2 = 1;
thread maps\_utility::cqb_aim( var_0 );
if ( isdefined( var_1 ) )
wait( var_1 );
var_3 = randomint( self.a.array["single"].size );
var_4 = self.a.array["single"][var_3];
self setflaggedanimknobrestart( "fire_notify", var_4, 1, 0.2, 1 );
self waittillmatch( "fire_notify", "fire" );
var_5 = var_0 gettagorigin( "j_head" );
self shoot( 1, var_5, 1 );
if ( var_2 )
self.ignoreall = 1;
}
remove_name()
{
self.og_name = self.name;
self.name = "";
}
restore_name()
{
if ( !isdefined( self.og_name ) )
return;
self.name = self.og_name;
}
enable_creepwalk()
{
}
get_hero_noteworthy( var_0 )
{
foreach ( var_2 in level.heroes )
{
if ( var_2.script_noteworthy == var_0 )
return var_2;
}
return undefined;
}
anim_reach_startorigin_solo( var_0, var_1, var_2, var_3, var_4 )
{
}
run_to_goal_delete( var_0 )
{
self endon( "death" );
self setgoalnode( var_0 );
self waittill( "goal" );
self delete();
}
nag_thread( var_0, var_1, var_2, var_3, var_4 )
{
self endon( "death" );
self endon( "stop_nag_thread" );
if ( !isdefined( var_2 ) )
var_2 = 3;
if ( !isdefined( var_3 ) )
var_3 = 5;
if ( !isdefined( var_4 ) )
var_4 = 1;
var_5 = 2;
if ( !isarray( var_1 ) )
var_1 = [ var_1 ];
wait 3;
var_6 = "";
for (;;)
{
if ( any_flag( var_1 ) )
break;
var_0 = common_scripts\utility::array_randomize( var_0 );
while ( var_0[0] == var_6 )
{
var_0 = common_scripts\utility::array_randomize( var_0 );
wait 0.05;
}
foreach ( var_9, var_8 in var_0 )
{
maps\_utility::smart_dialogue( var_8 );
var_6 = var_8;
wait( randomfloatrange( var_2, var_3 ) );
if ( var_4 )
{
var_5 = var_5 + 3;
var_2 = min( var_2 + var_5, 20 );
var_3 = min( var_3 + var_5, 30 );
}
else
{
var_2 = min( var_2, 20 );
var_3 = min( var_3, 30 );
}
if ( any_flag( var_1 ) )
break;
}
}
}
any_flag( var_0 )
{
foreach ( var_2 in var_0 )
{
if ( common_scripts\utility::flag( var_2 ) )
return 1;
}
return 0;
}
death_wait()
{
self endon( "death" );
self waittillmatch( "single anim", "end" );
}
sniper_ragdoll_death()
{
var_0 = vectornormalize( self.damagedir );
var_0 = var_0 * randomfloatrange( 2000, 3000 );
var_1 = "torso_upper";
if ( self.damagelocation != "none" )
var_1 = self.damagelocation;
self startragdollfromimpact( var_1, var_0 );
wait 1;
return 1;
}
set_wounded()
{
self.dontmelee = 1;
self.noturnanims = 1;
self.norunngun = 1;
self.norunreload = 1;
self.nogrenadereturnthrow = 1;
maps\_utility::set_archetype( "wounded" );
}
set_not_wounded()
{
self.dontmelee = 0;
self.noturnanims = 0;
self.norunngun = 0;
self.norunreload = undefined;
self.nogrenadereturnthrow = 0;
maps\_utility::clear_archetype();
}
stop_animscripted( var_0, var_1 )
{
var_2 = getanimlength( var_0 ) - var_1;
wait( var_2 );
}
death_ragdoll()
{
animscripts\shared::dropallaiweapons();
var_0 = self.damagetaken * 100;
var_1 = max( 0.3, self.damagedir[2] );
var_2 = ( self.damagedir[0], self.damagedir[1], var_1 );
self startragdollfromimpact( self.damagelocation, var_2 );
wait 0.05;
}
intro_time( var_0, var_1, var_2, var_3 )
{
level.player freezecontrols( 1 );
if ( isdefined( var_3 ) )
maps\_hud_util::fade_out( 0, "black" );
thread intro_time_hud( var_0, var_1 );
wait( var_1 - var_2 * 0.5 );
if ( isdefined( var_3 ) )
thread maps\_hud_util::fade_in( var_2, "black" );
level.player freezecontrols( 0 );
}
intro_time_hud( var_0, var_1 )
{
var_2 = 320;
var_3 = 300;
var_4 = maps\_introscreen::stylized_line( var_0, var_1, var_2, var_3, "center" );
wait( var_1 );
maps\_introscreen::stylized_fadeout( var_4, var_2, var_3, 1 );
}
cinematicmode_on()
{
level.player disableweapons();
level.player allowcrouch( 0 );
level.player allowprone( 0 );
level.player allowjump( 0 );
level.player allowsprint( 0 );
}
cinematicmode_off()
{
level.player enableweapons();
level.player allowcrouch( 1 );
level.player allowprone( 1 );
level.player allowjump( 1 );
level.player allowsprint( 1 );
}
set_player_speed( var_0, var_1 )
{
if ( !isdefined( var_0 ) )
var_0 = level.start_point;
if ( !isdefined( var_1 ) )
var_1 = 10;
switch ( var_0 )
{
case "ambush":
maps\_utility::player_speed_set( 72, var_1 );
break;
case "atrium":
case "kitchen":
case "bar":
maps\_utility::player_speed_set( 110, var_1 );
break;
case "chase":
case "hotel":
case "floor":
maps\_utility::player_speed_set( 152, var_1 );
break;
case "entrance":
maps\_utility::player_speed_percent( 10, var_1 );
break;
case "exfil":
case "entrance_combat":
maps\_utility::player_speed_percent( 100, var_1 );
break;
default:
break;
}
}
merrick_scripted_movement()
{
self.movement_funcs["kitchen_enter"] = maps\las_vegas_casino::kitchen_enter_merrick;
self.movement_funcs["kitchen_hide"] = maps\las_vegas_casino::kitchen_hide_merrick;
self.movement_funcs["door_react"] = maps\las_vegas_casino::door_react_merrick;
self.movement_funcs["to_casino_floor"] = maps\las_vegas_casino::to_casino_floor;
}
hesh_scripted_movement()
{
self.movement_funcs["human_shield"] = maps\las_vegas_casino::human_shield_hesh;
self.movement_funcs["hesh_pickup_radio"] = maps\las_vegas_casino::hesh_pickup_radio;
self.movement_funcs["door_react"] = maps\las_vegas_casino::door_react_hesh;
self.movement_funcs["to_casino_floor"] = maps\las_vegas_casino::to_casino_floor;
}
keegan_scripted_movement()
{
self.movement_funcs["open_casino_door"] = maps\las_vegas_casino::open_casino_door_anim;
self.movement_funcs["casino_ambush"] = maps\las_vegas_casino::casino_ambush_keegan;
self.movement_funcs["open_gate"] = maps\las_vegas_casino::open_gate_keegan;
self.movement_funcs["door_react"] = maps\las_vegas_casino::door_react_keegan;
self.movement_funcs["to_casino_floor"] = maps\las_vegas_casino::to_casino_floor;
}
dog_scripted_movement()
{
}
elias_scripted_movement()
{
}
start_scripted_movement()
{
if ( isdefined( self.teleport_node ) && isdefined( self.teleport_node.target ) )
var_0 = self.teleport_node;
else
var_0 = get_movement_node( self.script_noteworthy + "_scripted_movement" );
thread scripted_movement( var_0 );
}
scripted_movement( var_0, var_1 )
{
self endon( "death" );
self notify( "stop_scripted_movement" );
self endon( "stop_scripted_movement" );
if ( !maps\_utility::ent_flag_exist( "scripted_movement_pause" ) )
maps\_utility::ent_flag_init( "scripted_movement_pause" );
if ( !maps\_utility::ent_flag_exist( "scripted_movement" ) )
maps\_utility::ent_flag_init( "scripted_movement" );
maps\_utility::ent_flag_set( "scripted_movement" );
if ( isdefined( var_1 ) )
var_2 = var_0;
else
var_2 = var_0 get_movement_node();
for (;;)
{
self notify( "scripted_movement_next_goal" );
if ( maps\_utility::ent_flag( "scripted_movement_pause" ) )
maps\_utility::ent_flag_waitopen( "scripted_movement_pause" );
if ( is_stop_goal( var_2 ) )
{
maps\_utility::enable_arrivals();
maps\_utility::enable_exits();
}
else
{
maps\_utility::disable_arrivals();
thread delay_disable_exits();
}
scripted_goto_goal( var_2 );
maps\_utility::enable_arrivals();
maps\_utility::enable_exits();
movement_func( var_2 );
scripted_movement_parameters( var_2 );
var_3 = get_movement_trigger( var_2 );
if ( isdefined( var_3 ) )
movement_trigger_wait( var_3 );
if ( isdefined( var_2.script_flag_wait ) )
common_scripts\utility::flag_wait( var_2.script_flag_wait );
if ( isdefined( var_2.script_wait ) || isdefined( var_2.script_wait_min ) )
var_2 maps\_utility::script_wait();
if ( !isdefined( var_2.target ) )
break;
var_2 = var_2 get_movement_node();
}
maps\_utility::ent_flag_clear( "scripted_movement" );
self notify( "scripted_movement_done" );
}
scripted_movement_parameters( var_0 )
{
if ( isdefined( var_0.script_avoidplayer ) )
self.dontavoidplayer = !var_0.script_avoidplayer;
if ( isdefined( var_0.script_parameters ) )
{
switch ( var_0.script_parameters )
{
case "run":
maps\_utility::disable_cqbwalk();
maps\_utility::clear_archetype();
break;
case "enable_reach":
self.disableplayeradsloscheck = 1;
self.nododgemove = 1;
self pushplayer( 1 );
break;
case "disable_reach":
self.disableplayeradsloscheck = 0;
self.nododgemove = 0;
self pushplayer( 0 );
break;
}
}
}
movement_func( var_0 )
{
if ( !isdefined( var_0.script_noteworthy ) )
return;
if ( !isdefined( self.movement_funcs ) )
return;
if ( !isdefined( self.movement_funcs[var_0.script_noteworthy] ) )
return;
[[ self.movement_funcs[var_0.script_noteworthy] ]]( var_0 );
}
movement_trigger_wait( var_0 )
{
if ( isdefined( var_0.targetname ) )
{
if ( var_0.targetname == "friendly_wait" )
{
var_1 = get_hero_noteworthy( var_0.script_friendname );
for (;;)
{
var_0 waittill( "trigger", var_2 );
if ( var_2 == var_1 )
break;
}
}
}
else
common_scripts\utility::flag_wait( var_0.script_flag );
}
get_movement_trigger( var_0 )
{
var_1 = getentarray( var_0.targetname, "target" );
if ( isdefined( var_1 ) && var_1.size > 0 )
{
foreach ( var_3 in var_1 )
{
if ( var_3.code_classname == "trigger_multiple" )
return var_3;
}
}
else
{
var_5 = var_0 common_scripts\utility::get_linked_ents();
foreach ( var_7 in var_5 )
{
if ( var_7.code_classname == "trigger_multiple" )
return var_7;
}
}
return undefined;
}
get_movement_node( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = self.target;
var_1 = undefined;
if ( isdefined( var_0 ) )
{
var_1 = getnode( var_0, "targetname" );
if ( !isdefined( var_1 ) )
var_1 = common_scripts\utility::getstruct( var_0, "targetname" );
}
return var_1;
}
delay_disable_exits()
{
self endon( "death" );
self endon( "scripted_movement_next_goal" );
self endon( "scripted_movement_done" );
wait 2;
maps\_utility::disable_exits();
}
scripted_goto_goal( var_0 )
{
self endon( "stop_scripted_movement" );
var_1 = 0;
var_2 = get_movement_trigger( var_0 );
if ( isdefined( var_2 ) )
{
var_2 endon( "trigger" );
if ( isdefined( var_2.script_flag ) )
{
if ( common_scripts\utility::flag( var_2.script_flag ) )
return;
else
level endon( var_2.script_flag );
}
}
if ( isdefined( var_0.radius ) && var_0.radius != 0 )
self.goalradius = var_0.radius;
if ( isdefined( var_0.script_flag_wait ) )
{
if ( !common_scripts\utility::flag( var_0.script_flag_wait ) )
level endon( var_0.script_flag_wait );
else
return;
}
var_3 = 0;
if ( isdefined( var_0.script_animation ) )
{
var_3 = 1;
var_0 maps\_anim::anim_reach_solo( self, var_0.script_animation );
if ( isdefined( var_0.script_timeout ) )
maps\_utility::delaythread( var_0.script_timeout, maps\_utility::anim_stopanimscripted );
var_0 maps\_anim::anim_single_solo( self, var_0.script_animation );
}
else if ( isdefined( var_0.animation ) )
{
if ( isdefined( level.scr_anim["generic"][var_0.animation] ) )
{
var_4 = maps\_utility::getanim_generic( var_0.animation );
if ( isdefined( var_4 ) )
{
var_3 = 1;
var_0 maps\_anim::anim_generic_reach( self, var_0.animation );
var_0 maps\_anim::anim_generic( self, var_0.animation );
}
}
}
if ( !var_3 )
{
if ( isdefined( var_0.type ) )
self setgoalnode( var_0 );
else
self setgoalpos( var_0.origin );
self waittill( "goal" );
}
if ( isdefined( var_0.script_sound ) )
thread maps\_utility::smart_dialogue( var_0.script_sound );
if ( isdefined( var_0.script_flag_set ) )
common_scripts\utility::flag_set( var_0.script_flag_set );
var_0 maps\_utility::script_delay();
if ( var_1 )
{
self.type = undefined;
self.scriptedarrivalent = undefined;
}
}
is_stop_goal( var_0 )
{
if ( isdefined( var_0.script_flag_wait ) )
{
if ( !common_scripts\utility::flag( var_0.script_flag_wait ) )
return 1;
}
if ( isdefined( var_0.script_noteworthy ) )
return 1;
if ( isdefined( var_0.script_stopnode ) && var_0.script_stopnode )
return 1;
if ( !isdefined( var_0.target ) )
return 1;
return 0;
}
vehicle_path_notifies()
{
self endon( "death" );
var_0["reset_pitchroll"] = ::chopper_reset_pitchroll;
var_0["chopper_holding"] = ::chopper_holding;
var_0["spawn_target"] = ::spawn_node_target;
var_0["end_chopper_crash"] = ::end_chopper_crash;
var_0["explode"] = ::explode;
for (;;)
{
self waittill( "noteworthy", var_1 );
if ( isdefined( var_0[var_1] ) )
self [[ var_0[var_1] ]]();
}
}
chopper_reset_pitchroll()
{
self setmaxpitchroll( 25, 25 );
}
chopper_holding()
{
if ( !isdefined( self.holding ) )
return;
self notify( "newpath" );
self notify( "reached_dynamic_path_end" );
}
shooter_range()
{
if ( !isdefined( self.shooters ) )
return;
self endon( "unloading" );
maps\_utility::ent_flag_init( "shooter_range_stop" );
thread shooter_range_flag();
var_0 = squared( 1500 );
var_1 = 0;
var_2 = var_1;
while ( isdefined( self.shooters ) && self.shooters.size > 0 )
{
var_1 = 0;
if ( distance2dsquared( self.origin, level.player.origin ) < var_0 )
var_1 = 1;
if ( var_2 != var_1 )
{
var_2 = var_1;
enable_shooters( var_1 );
}
wait 0.5;
}
}
enable_shooters( var_0 )
{
if ( !isdefined( self.shooters ) )
return;
foreach ( var_2 in self.shooters )
{
if ( isdefined( var_2 ) )
var_2.ignoreall = !var_0;
}
}
shooter_range_flag()
{
self waittill( "unloading" );
maps\_utility::ent_flag_set( "shooter_range_stop" );
}
end_chopper_crash()
{
self.scripted_crash = "end";
}
spawn_node_target()
{
var_0 = getentarray( self.currentnode.target, "targetname" );
foreach ( var_2 in var_0 )
{
if ( isspawner( var_2 ) )
{
if ( issubstr( var_2.classname, "actor" ) )
{
var_2 maps\_utility::spawn_ai();
continue;
}
if ( isdefined( var_2.script_noteworthy ) )
{
if ( isdefined( level.bus_chase.count[var_2.script_noteworthy] ) )
{
if ( level.bus_chase.count[var_2.script_noteworthy] > 0 )
continue;
}
}
var_3 = 0;
if ( isdefined( var_2.target ) )
{
var_4 = getvehiclenode( var_2.target, "targetname" );
if ( isdefined( var_4 ) )
var_3 = 1;
}
if ( var_3 )
var_2 maps\_vehicle::spawn_vehicle_and_gopath();
else
var_2 maps\_utility::spawn_vehicle();
}
}
}
explode()
{
var_0 = self.health - self.healthbuffer + 1000;
radiusdamage( self.origin, 300, var_0, var_0 * 0.75, level.player );
}
chopper_shooter_init( var_0 )
{
self.state = "shooter";
self endon( self.state );
self.goal_pos = ( 0, 0, 0 );
self.goal_dist = 0;
self.on_path = 0;
self.do_pain = 0;
self setneargoalnotifydist( 100 );
self setyawspeed( 120, 60 );
self sethoverparams( 60, 20, 50 );
var_1 = common_scripts\utility::getstruct( var_0, "targetname" );
var_1 init_follow_path();
if ( !isdefined( self.shooter_side ) )
{
self.shooter_side = "right";
if ( common_scripts\utility::cointoss() )
self.shooter_side = "left";
}
self.lookat_ent = spawn( "script_origin", ( 0, 0, 0 ) );
set_lookat_origin();
childthread chopper_shooter_pathing( var_1 );
childthread chopper_shooter_think();
childthread chopper_shooter_death();
childthread clear_chopper_shooter_flag();
}
chopper_shooter_death()
{
self waittill( "death" );
if ( isdefined( self.angle_origin ) )
self.angle_origin delete();
}
clear_chopper_shooter_flag()
{
common_scripts\utility::waittill_any( "death", "exiting" );
level.courtyard.chopper_shooter_count--;
if ( level.courtyard.chopper_shooter_count == 0 )
common_scripts\utility::flag_set( "chopper_shooter_is_needed" );
}
chopper_shooter_think()
{
self endon( "death" );
self endon( self.state );
var_0 = ( self.health - self.healthbuffer ) * 0.75 + self.healthbuffer;
var_1 = 0;
chopper_dialogue( "spotted" );
for (;;)
{
wait 0.05;
self.shooters = maps\_utility::array_removedead_or_dying( self.shooters );
self.shooters = common_scripts\utility::array_removeundefined( self.shooters );
if ( !var_1 && self.health < var_0 )
{
var_1 = 1;
self.do_pain = 1;
self setyawspeed( 80, 30 );
self sethoverparams( 200, 50, 100 );
chopper_dialogue( "damage" );
thread chopper_pain_fx();
}
if ( self.shooters.size == 0 )
{
wait 1;
self notify( "stop_pathing" );
self clearlookatent();
chopper_exit();
break;
}
else if ( self.shooters.size < 4 )
try_chopper_switch_sides();
}
}
chopper_pain_fx()
{
self endon( "death" );
var_0 = "tag_engine_left";
var_1 = anglestoforward( self gettagangles( var_0 ) );
playfx( common_scripts\utility::getfx( "aas_72x_damage_explosion" ), self gettagorigin( var_0 ), var_1 );
self playsound( "aascout72x_helicopter_secondary_exp" );
for (;;)
{
var_2 = self gettagangles( var_0 );
var_1 = anglestoforward( var_2 );
playfx( common_scripts\utility::getfx( "aas_72x_damage_trail" ), self gettagorigin( var_0 ), var_1 );
wait( randomfloatrange( 0.05, 0.2 ) );
}
}
try_chopper_switch_sides()
{
foreach ( var_1 in self.shooters )
{
if ( !isdefined( var_1 ) || !isalive( var_1 ) )
continue;
if ( self.shooter_side == "right" )
{
if ( var_1.vehicle_position < 4 )
return;
}
else if ( var_1.vehicle_position > 3 )
return;
}
chopper_dialogue( "rotate" );
set_opposite_shooter_side();
}
chopper_dialogue( var_0 )
{
var_1 = undefined;
switch ( var_0 )
{
case "damage":
var_1 = [ "vegas_sp3_takingtoomuchdamage", "vegas_sp3_werehit" ];
break;
case "moving_away":
var_1 = [ "vegas_sp3_movingaway", "vegas_sp3_gettingoutofhere" ];
break;
case "spotted":
var_1 = [ "vegas_sp3_theretheyare" ];
break;
case "rotate":
var_1 = [ "vegas_sp3_switchingsides", "vegas_sp3_rotating" ];
break;
}
var_2 = var_1[randomint( var_1.size )];
thread play_enemy_radio( var_2 );
}
set_opposite_shooter_side()
{
if ( self.shooter_side == "left" )
self.shooter_side = "right";
else
self.shooter_side = "left";
}
chopper_shooter_lookat_think()
{
self endon( "stop_pathing" );
self endon( "death" );
self setlookatent( self.lookat_ent );
for (;;)
{
wait 0.2;
set_lookat_origin();
}
}
set_lookat_origin()
{
var_0 = vectortoangles( level.player.origin - self.origin );
var_1 = anglestoforward( var_0 );
var_2 = anglestoright( var_0 );
if ( self.on_path && self.do_pain )
{
var_3 = 120;
if ( common_scripts\utility::cointoss() )
var_3 = -120;
var_2 = anglestoright( var_0 + ( 0, var_3, 0 ) );
}
var_4 = var_2;
if ( self.shooter_side == "right" )
var_4 = var_2 * -1;
self.lookat_ent.origin = self.origin + var_4 * 100;
}
chopper_shooter_pathing( var_0 )
{
thread chopper_shooter_movement( var_0 );
self endon( "death" );
self endon( "stop_pathing" );
for (;;)
{
wait 0.1;
var_4 = get_pos_data_on_path( var_0, level.player.origin );
var_5 = var_4["pos"];
var_6 = var_4["index"];
var_7 = var_0.path[var_6];
var_8 = distance( var_5, var_7.origin );
var_9 = var_7.dist + var_8;
var_10 = 0;
if ( var_9 > 0 )
{
var_10 = var_9 / var_0.total_dist;
var_10 = round_to( var_10, 100 );
}
var_11 = 800;
if ( var_9 == 0 )
{
var_12 = distance2d( level.player.origin, var_0.origin );
var_11 = var_11 - var_12;
}
self.goal_dist = max( var_9 + var_11, 0 );
}
}
get_pos_data_on_path( var_0, var_1 )
{
var_2 = [];
var_3 = 0;
for ( var_4 = 0; var_4 < var_0.path.size - 1; var_4++ )
{
if ( isdefined( var_0.path[var_4].skip ) )
{
var_3++;
continue;
}
if ( isdefined( var_0.path[var_4].locked ) )
break;
var_5 = pointonsegmentnearesttopoint( var_0.path[var_4].origin, var_0.path[var_4 + 1].origin, var_1 );
var_2[var_2.size] = var_5;
}
var_6 = get_closest_index_in_array( var_2, var_1 );
var_7 = var_2[var_6];
var_8["pos"] = var_7;
var_8["index"] = var_6 + var_3;
var_8["node"] = var_0.path[var_8["index"]];
return var_8;
}
path_unlocks()
{
self endon( "death" );
var_0 = get_chained_vehiclenodes( self.attachedpath );
foreach ( var_5, var_2 in var_0 )
{
if ( !isdefined( var_2.script_linkto ) )
continue;
var_2 waittill( "trigger" );
var_3 = common_scripts\utility::getstruct( var_2.script_linkto, "script_linkname" );
for ( var_4 = 0; var_4 < var_5; var_4++ )
var_0[var_4].skip = 1;
var_3.locked = undefined;
}
}
get_path_pos_from_dist( var_0, var_1, var_2 )
{
if ( !isdefined( var_2 ) )
var_2 = 50;
var_3 = undefined;
if ( self.on_path )
var_3 = onpath_get_path_pos_from_dist( var_0, var_1, var_2 );
else
{
self.goal_pos_stop = 1;
for ( var_4 = 0; var_4 < var_0.path.size - 1; var_4++ )
{
if ( var_1 > var_0.path[var_4 + 1].dist )
continue;
var_5 = vectornormalize( var_0.path[var_4 + 1].origin - var_0.path[var_4].origin );
var_6 = var_1 - var_0.path[var_4].dist;
var_3 = var_0.path[var_4].origin + var_5 * var_6;
break;
}
}
return var_3;
}
onpath_get_path_pos_from_dist( var_0, var_1, var_2, var_3 )
{
return get_path_pos_from_dist_and_origin( self.origin, var_0, var_1, var_2, var_3 );
}
get_path_pos_from_dist_and_origin( var_0, var_1, var_2, var_3, var_4 )
{
if ( isdefined( var_4 ) )
var_0 = var_0 + anglestoforward( self.angles ) * var_4;
var_5 = get_pos_data_on_path( var_1, var_0 );
path_reached_node( var_5["node"], var_5["index"] );
var_6 = var_5["index"];
if ( var_2 > var_1.path[var_6 + 1].dist + var_3 )
{
self.goal_pos_stop = 0;
return var_1.path[var_6 + 1].origin;
}
else if ( var_6 > 0 && var_2 < var_1.path[var_6 - 1].dist - var_3 )
{
self.goal_pos_stop = 0;
return var_1.path[var_6 - 1].origin;
}
self.goal_pos_stop = 1;
var_7 = vectornormalize( var_1.path[var_6 + 1].origin - var_1.path[var_6].origin );
var_8 = var_2 - var_1.path[var_6].dist;
return var_1.path[var_6].origin + var_7 * var_8;
}
get_path_pos_from_dist_ignore_segments( var_0, var_1, var_2 )
{
var_3 = -1;
foreach ( var_6, var_5 in var_1.path )
{
if ( var_5.dist > var_2 )
{
var_3 = var_6 - 1;
break;
}
}
if ( var_3 == -1 )
return var_1.path[var_1.path.size - 1].origin;
var_7 = vectornormalize( var_1.path[var_3 + 1].origin - var_1.path[var_3].origin );
var_8 = var_2 - var_1.path[var_3].dist;
return var_1.path[var_3].origin + var_7 * var_8;
}
path_reached_node( var_0, var_1 )
{
if ( !isdefined( self.segment_index ) )
self.segment_index = -1;
if ( self.segment_index < var_1 )
{
self.segment_index = var_1;
if ( isdefined( var_0.script_fightdist ) )
self.fightdist = var_0.script_fightdist;
if ( isdefined( var_0.script_multiplier ) )
self.speed_mult = var_0.script_multiplier;
if ( isdefined( var_0.script_noteworthy ) )
self notify( "noteworthy", var_0.script_noteworthy );
if ( isdefined( var_0.speed ) )
{
if ( var_0.speed <= 0 )
self.speed = undefined;
else
self.speed = var_0.speed;
}
if ( isdefined( var_0.script_flag_wait ) )
self.flag_wait = var_0.script_flag_wait;
}
}
path_process_ent()
{
}
get_path_dist( var_0, var_1 )
{
var_2 = get_pos_data_on_path( var_0, var_1 );
var_3 = var_2["pos"];
var_4 = var_2["index"];
var_5 = var_0.path[var_4];
var_6 = distance( var_3, var_5.origin );
var_7 = var_5.dist + var_6;
return var_7;
}
chopper_shooter_movement( var_0 )
{
self endon( "death" );
self endon( "stop_pathing" );
var_1 = squared( 20 );
var_2 = ( 0, 0, 100 );
var_3 = 0;
for (;;)
{
wait 0.05;
if ( self.on_path && self.do_pain )
{
self setneargoalnotifydist( 20 );
wait 0.05;
self vehicle_setspeed( 60, 15, 50 );
var_3 = 1;
var_4 = randomint( 360 );
var_5 = anglestoforward( ( 0, var_4, 0 ) ) * 100;
if ( chance( 90 ) )
var_2 = var_5 + ( 0, 0, -100 );
else
var_2 = var_5 + ( 0, 0, 150 );
}
var_6 = get_path_pos_from_dist( var_0, self.goal_dist );
var_6 = var_6 + var_2;
if ( !self.on_path )
self.starting_pos = var_6;
if ( distancesquared( self.origin, var_6 ) < var_1 )
continue;
thread chopper_debug_goal_pos( var_6, self.goal_dist );
self setvehgoalpos( var_6, self.goal_pos_stop );
var_7 = chopper_shooter_waittill_goal( var_6 );
if ( self.on_path && var_3 )
{
wait 3;
self setneargoalnotifydist( 100 );
self vehicle_setspeed( 30, 15, 50 );
var_3 = 0;
self.do_pain = 0;
var_2 = ( 0, 0, 0 );
}
if ( !self.on_path && var_7 )
{
self vehicle_setspeed( 30, 15, 50 );
self.on_path = 1;
thread chopper_shooter_lookat_think();
var_2 = ( 0, 0, 0 );
}
}
}
chopper_shooter_waittill_goal( var_0 )
{
self endon( "death" );
if ( self.on_path )
var_1 = common_scripts\utility::waittill_any( "near_goal", "goal" );
else
{
var_2 = self.goal_dist;
for (;;)
{
wait 0.05;
if ( distancesquared( var_0, self.origin ) < squared( 100 ) )
return 1;
if ( abs( var_2 - self.goal_dist ) > 10 )
return 0;
}
}
return 1;
}
chopper_debug_node_dist()
{
}
chopper_debug_goal_pos( var_0, var_1 )
{
}
init_follow_path()
{
if ( isdefined( self.path ) )
return;
var_0 = 0;
var_1 = get_targeted_ents();
for ( var_2 = 0; var_2 < var_1.size - 1; var_2++ )
{
var_3 = var_1[var_2];
var_3.segment_index = var_2;
if ( isdefined( var_3.script_linkname ) )
var_3.locked = 1;
var_4 = distance( var_1[var_2].origin, var_1[var_2 + 1].origin );
var_3.dist = var_0;
var_0 = var_0 + var_4;
var_3.segment_dist = var_4;
}
var_1[var_1.size - 1].dist = var_0;
self.total_dist = var_0;
self.path = var_1;
}
chopper_unload( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = "chopper_landing";
var_1 = get_sorted_structs( var_0, self.origin );
var_2 = get_unused_struct( var_1 );
var_2.inuse = 1;
var_2 thread reset_inuse( self, "reached_dynamic_path_end" );
self.state = "unloading";
self setyawspeed( 90, 45 );
thread maps\_vehicle::vehicle_paths( var_2, 0 );
}
chopper_exit()
{
self endon( "death" );
self notify( "exiting" );
chopper_dialogue( "moving_away" );
var_0 = get_sorted_structs( "chopper_exit", self.origin );
var_1 = get_unused_struct( var_0 );
self.inuse = 1;
var_1 thread reset_inuse( self );
maps\_vehicle::vehicle_paths( var_1, 0 );
}
reset_inuse( var_0, var_1, var_2 )
{
var_0 common_scripts\utility::waittill_any( "death", var_1, var_2 );
self.inuse = 0;
}
get_unused_struct( var_0 )
{
foreach ( var_3, var_2 in var_0 )
{
if ( !isdefined( var_2.inuse ) )
return var_2;
if ( !var_2.inuse )
return var_2;
}
return undefined;
}
get_chopper_spawner( var_0 )
{
var_1 = getentarray( var_0, "targetname" );
var_1 = common_scripts\utility::array_randomize( var_1 );
var_2 = undefined;
foreach ( var_4 in var_1 )
{
if ( !isdefined( var_4.inuse ) || !var_4.inuse )
{
var_2 = var_4;
break;
}
}
return var_2;
}
init_enemy_radio( var_0 )
{
if ( isdefined( level.enemy_radio ) )
return;
level.enemy_radio = spawn( "script_model", ( 0, 0, 0 ) );
level.enemy_radio setmodel( "com_hand_radio" );
if ( isdefined( var_0 ) )
level.enemy_radio linkto( level.hesh, "tag_stowed_hip_rear", ( 6, -8, 10 ), ( 90, 20, -5 ) );
}
play_enemy_radio( var_0, var_1 )
{
init_enemy_radio( 1 );
if ( !isdefined( var_1 ) )
radio_queue( var_0 );
else
level.enemy_radio maps\_utility::play_sound_on_entity( var_0 );
}
radio_queue( var_0 )
{
level.enemy_radio maps\_utility::function_stack( ::player_enemy_radio_internal, var_0 );
}
player_enemy_radio_internal( var_0 )
{
level.enemy_radio playsound( var_0, "sound_done", 1 );
level.enemy_radio waittill( "sound_done" );
wait 0.1;
}
array_play_enemy_radio( var_0 )
{
init_enemy_radio( 1 );
level.enemy_radio notify( "stop_enemy_radio_array" );
level.enemy_radio endon( "stop_enemy_radio_array" );
level.enemy_radio stopsounds();
foreach ( var_3, var_2 in var_0 )
{
if ( isstring( var_2 ) )
{
play_enemy_radio( var_2 );
continue;
}
wait( var_2 );
}
}
radio_volume( var_0, var_1 )
{
init_enemy_radio();
var_0 = var_0 * 0.55;
level.enemy_radio scalevolume( var_0, var_1 );
}
build_aianims_override( var_0, var_1, var_2 )
{
level.vehicle_aianims[var_0] = [[ var_1 ]]();
if ( isdefined( var_2 ) )
level.vehicle_aianims[var_0] = [[ var_2 ]]( level.vehicle_aianims[var_0] );
}
enemy_radio_battle_loop()
{
level endon( "stop_enemy_radio_chatter" );
level notify( "stop_random_radio_chatter" );
var_0 = 1;
var_1 = 0;
var_2 = get_radio_chatter( "battle" );
var_2 = common_scripts\utility::array_randomize( var_2 );
var_3 = 0;
for (;;)
{
wait 0.1;
var_4 = gettime();
if ( var_0 )
{
var_1 = var_4 + randomintrange( 2000, 5000 );
var_0 = 0;
}
var_5 = getaiarray( "axis" );
if ( var_5.size > 1 )
continue;
if ( var_4 > var_1 )
{
var_0 = 1;
play_enemy_radio( var_2[var_3], 1 );
var_3++;
if ( var_3 == var_2.size )
{
var_2 = common_scripts\utility::array_randomize( var_2 );
var_3 = 0;
}
}
}
}
enemy_radio_chatter( var_0 )
{
if ( !isdefined( level.enemy_radio_chatter ) )
{
level.enemy_radio_chatter = spawnstruct();
level.enemy_radio_chatter.list = [];
level.enemy_radio_chatter.is_playing = 0;
}
var_1 = level.enemy_radio_chatter;
var_1.list[var_1.list.size] = var_0;
if ( var_1.is_playing )
return;
for ( var_1.is_playing = 1; var_1.list.size > 0; var_1.list = maps\_utility::array_remove_index( var_1.list, 0 ) )
{
var_2 = get_radio_chatter( var_1.list[0] );
foreach ( var_5, var_4 in var_2 )
play_enemy_radio( var_4, 1 );
}
var_1.is_playing = 0;
}
get_radio_chatter( var_0 )
{
var_1 = [];
switch ( var_0 )
{
case "battle":
var_1 = [ "vegas_sp3_movingintoposition", "vegas_sp3_onmyway", "vegas_sp3_almostthere", "vegas_sp3_gettingintoposition", "vegas_sp3_inposition", "vegas_sp3_repositioning" ];
break;
case "conversation_1":
var_1 = [ "vegas_fs6_wheresthatfire", "vegas_fs5_floors17through23", "vegas_fs4_weheardgunfirecoming", "vegas_fs5_whossweepingthatarea", "vegas_fs6_thatsestebansteambuttheyre", "vegas_fs4_floor16isclear", "vegas_fs5_wereheadinguptothe", "vegas_fs4_soolidcopykeepus" ];
break;
case "conversation_2":
var_1 = [ "vegas_fs4_floor12issecure", "vegas_fs6_negativewerestillsearching", "vegas_fs4_whataboutthecasino", "vegas_fs6_estebansteamisdown", "vegas_fs4_keeplookingtheyvegot" ];
break;
case "conversation_3":
var_1 = [ "vegas_fs5_comeonguyssomeonetalk", "vegas__threeteamsaredown", "vegas_fs5_theresfourofthem", "vegas_fs4_notheresatleasta", "vegas__didtheygetreinforcements", "vegas_fs4_theresonlyfourof" ];
break;
case "sitrep":
var_1 = [ "vegas_fs5_allteamssitrep", "vegas_fs6_teamsixcheckingin", "vegas_fs4_teamsevenareasecure", "vegas__teameightareasecure" ];
break;
case "reinforcements":
var_1 = [ "vegas_fs4_wardenwhatsthestatus", "vegas_fs5_negativeonthatrequest", "vegas_fs4_thisplaceisgigantic", "vegas_fs5_justgetitdone" ];
break;
case "convoy":
var_1 = [ "vegas_fs5_teamsevearethe", "vegas_fs6_rogerwerereadyto", "vegas_fs5_goodworktheboss", "vegas_fs6_copythatwereon" ];
break;
}
return var_1;
}
random_radio_chatter()
{
level endon( "stop_random_radio_chatter" );
var_0 = [ "sitrep", "reinforcements", "convoy" ];
foreach ( var_3, var_2 in var_0 )
{
enemy_radio_chatter( var_2 );
wait( randomfloatrange( 3, 8 ) );
}
}
is_start_point_before( var_0 )
{
var_1 = get_index_of_start( var_0 );
var_2 = get_index_of_start( level.start_point );
if ( isdefined( var_1 ) && isdefined( var_2 ) )
return var_2 < var_1;
return undefined;
}
is_start_point_after( var_0 )
{
var_1 = get_index_of_start( var_0 );
var_2 = get_index_of_start( level.start_point );
if ( isdefined( var_1 ) && isdefined( var_2 ) )
return var_2 > var_1;
return undefined;
}
get_index_of_start( var_0 )
{
foreach ( var_3, var_2 in level.start_functions )
{
if ( var_2["name"] == var_0 )
return var_3;
}
return undefined;
}
enable_outline( var_0 )
{
if ( isstring( var_0 ) )
{
var_1["white"] = 0;
var_1["red"] = 1;
var_1["green"] = 2;
var_1["blue"] = 3;
var_1["orange"] = 4;
var_1["yellow"] = 5;
var_0 = var_1[var_0];
}
self.outline_color = var_0;
if ( !isdefined( level.outline_ents ) )
level.outline_ents = [];
if ( level.outline_ents.size == 0 )
setsaveddvar( "r_hudoutlineenable", "1" );
self hudoutlineenable( var_0, 0 );
level.outline_ents = common_scripts\utility::array_removeundefined( level.outline_ents );
if ( !common_scripts\utility::array_contains( level.outline_ents, self ) )
level.outline_ents[level.outline_ents.size] = self;
}
disable_outline()
{
self.outline_color = undefined;
if ( !isdefined( level.outline_ents ) )
level.outline_ents = [];
level.outline_ents common_scripts\utility::array_removeundefined( level.outline_ents );
level.outline_ents = common_scripts\utility::array_remove( level.outline_ents, self );
self hudoutlinedisable();
if ( level.outline_ents.size == 0 )
setsaveddvar( "r_hudoutlineenable", "0" );
}
anim_viewhands( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = "tag_player";
level.player setstance( "stand" );
level.player allowcrouch( 1 );
level.player allowstand( 1 );
level.player disableweapons();
var_2 = maps\_utility::spawn_anim_model( "player_rig" );
var_2 hide();
maps\_anim::anim_first_frame_solo( var_2, var_0 );
var_2 common_scripts\utility::delaycall( 0.4, ::show );
level.player playerlinktoblend( var_2, "tag_origin", 0.4, 0.2, 0.2 );
maps\_anim::anim_single_solo( var_2, var_0 );
level.player allowcrouch( 1 );
level.player allowstand( 1 );
level.player enableweapons();
var_2 delete();
level.player unlink();
level.player notify( var_0 );
}
init_player_body( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = 0;
level.player takeallweapons();
level.player allowcrouch( 0 );
level.player allowprone( 0 );
if ( !isdefined( level.player.body ) )
level.player.body = maps\_utility::spawn_anim_model( "player_body" );
if ( var_0 && !isdefined( level.player.link ) )
level.player.link = common_scripts\utility::spawn_tag_origin();
if ( !isdefined( level.player.rig ) )
{
level.player.rig = maps\_utility::spawn_anim_model( "player_rig" );
level.player.rig hide();
}
}
setup_player_body( var_0, var_1 )
{
wait 0.05;
level.player.link.origin = level.player.body gettagorigin( "tag_sync" );
level.player.link.angles = level.player.body gettagangles( "j_head" );
level.player.link linkto( level.player.body, "j_head" );
level.player.rig.origin = level.player.body gettagorigin( "tag_sync" );
level.player.rig.angles = level.player.body gettagangles( "tag_sync" );
level.player.rig linkto( level.player.body, "tag_sync", ( 0, 0, 2 ), ( 0, 0, 0 ) );
}
do_player_drag( var_0 )
{
level.player enableslowaim( 0.5, 0.5 );
cleanup_player_drag();
level notify( "stop_player_drag" );
level endon( "stop_player_drag" );
init_player_body( 1 );
level.player.body.origin = common_scripts\utility::drop_to_ground( var_0.origin, 10, -100 );
level.player.body maps\_anim::anim_first_frame_solo( level.player.body, "drag_single" );
var_1 = getent( "drag_enemy_spawner", "targetname" );
var_2 = var_1 spawndrone();
var_2.animname = "enemy";
var_2 maps\_anim::setanimtree();
level.drag_mover = var_2;
var_2.origin = common_scripts\utility::drop_to_ground( var_0.origin, 10, -100 );
var_2.angles = var_0.angles;
level.player.body linkto( var_2, "tag_origin" );
setup_player_body();
level.player playerlinktodelta( level.player.rig, "tag_origin", 0.5, 0, 0, 0, 40, 0 );
level.player lerpviewangleclamp( 10, 0, 0, 45, 45, 60, 35 );
level.player setplayerangles( ( randomfloatrange( 20, 35 ), level.player.angles[1], 0 ) );
var_2 thread drone_anim_loop( [ var_2 ], "drag" );
var_2 thread maps\_anim::anim_loop_solo( level.player.body, "drag_loop" );
var_2 drag_path( var_0 );
if ( isdefined( level.drag_enemies ) )
common_scripts\utility::array_call( level.drag_enemies, ::delete );
level.drag_enemies = undefined;
level.player disableslowaim();
cleanup_player_drag();
}
do_hesh_drag( var_0 )
{
var_1 = getent( "drag_enemy_spawner", "targetname" );
var_2 = var_1 spawndrone();
var_2.animname = "enemy";
var_2 maps\_anim::setanimtree();
var_1 = getent( "drag_hesh_spawner", "targetname" );
var_3 = var_1 spawndrone();
var_3.animname = "hesh";
var_3 maps\_anim::setanimtree();
var_3 linkto( var_2, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) );
var_4 = [ var_3, var_2 ];
var_2 thread drone_anim_loop( var_4, "drag" );
var_2 maps\_utility::delaythread( 3.0, maps\_utility::play_sound_on_entity, "scn_vegas_dragged1_npc" );
var_2.origin = common_scripts\utility::drop_to_ground( var_0.origin, 10, -100 );
var_2.angles = var_0.angles;
var_2 drag_path( var_0 );
common_scripts\utility::array_call( var_4, ::delete );
}
drone_anim_loop( var_0, var_1 )
{
self endon( "death" );
for (;;)
{
foreach ( var_3 in var_0 )
var_3 thread drone_anim( var_1 );
self waittillmatch( "drone_loop", "end" );
}
}
drone_anim( var_0 )
{
self endon( "death" );
var_1 = maps\_utility::getanim( var_0 );
self setflaggedanimrestart( "drone_loop", var_1[0], 1, 0.2, 1 );
}
drag_path( var_0 )
{
self endon( "death" );
var_1 = 100;
var_2 = var_0.angles;
var_3 = 40;
var_4 = 10;
var_5 = var_4 / var_3;
var_0 init_follow_path();
self.on_path = 1;
var_6 = var_0.origin;
var_7 = 0;
for (;;)
{
var_8 = get_pos_data_on_path( var_0, var_6 );
if ( isdefined( var_8["node"].speed ) )
{
var_3 = var_8["node"].speed;
var_5 = var_4 / var_3;
var_8["node"].speed = undefined;
}
if ( isdefined( var_8["node"].script_flag_set ) )
{
common_scripts\utility::flag_set( var_8["node"].script_flag_set );
var_8["node"].script_flag_set = undefined;
}
var_9 = var_8["node"].dist + distance( var_8["node"].origin, var_6 );
if ( var_0.total_dist - var_9 < var_1 )
{
var_10 = var_0.path[var_0.path.size - 1].origin;
var_7 = 1;
}
else
{
var_10 = get_path_pos_from_dist_ignore_segments( var_6, var_0, var_1 + var_9 );
var_11 = vectornormalize( var_10 - var_6 );
var_10 = var_6 + var_11 * var_4;
}
var_6 = var_10;
var_10 = common_scripts\utility::drop_to_ground( var_10, 10, -100 );
self moveto( var_10, var_5 );
var_2 = vectortoangles( var_10 - self.origin );
self rotateto( var_2, var_5 );
wait( var_5 - 0.05 );
if ( var_7 )
break;
}
}
cleanup_player_drag()
{
if ( isdefined( level.drag_mover ) )
{
level.drag_mover maps\_utility::anim_stopanimscripted();
level.drag_mover delete();
level notify( "stop_debug_drag_lines" );
level.player.body unlink();
}
}
debug_drag_lines( var_0, var_1, var_2, var_3 )
{
level notify( "stop_debug_drag_lines" );
level endon( "stop_debug_drag_lines" );
while ( isdefined( var_0 ) )
wait 0.05;
}
spawn_drone_dog()
{
var_0 = getent( "riley_drone_spawner", "targetname" );
var_0.count = 1;
var_1 = var_0 spawndrone();
var_1 maps\_utility_dogs::set_dog_model( "fullbody_dog_b_hurt" );
var_1.animname = "dog";
var_1 maps\_anim::setanimtree();
return var_1;
}
dog_init_pickup()
{
level.dog.obj_model = "fullbody_dog_b_cam_obj_hurt";
level.dog.reg_model = "fullbody_dog_b_hurt";
level.dog maps\_utility_dogs::set_dog_model( level.dog.obj_model );
level.dog notsolid();
level.dog.use_trigger = getent( "dog_trigger", "targetname" );
level.dog.use_trigger.og_origin = level.dog.use_trigger.origin;
if ( !level.dog maps\_utility::ent_flag_exist( "picked_up" ) )
level.dog maps\_utility::ent_flag_init( "picked_up" );
if ( !level.dog maps\_utility::ent_flag_exist( "disable_put_down" ) )
level.dog maps\_utility::ent_flag_init( "disable_put_down" );
}
dog_enable_trigger()
{
self.use_trigger.origin = self.origin;
}
dog_disable_trigger()
{
self.use_trigger.origin = self.use_trigger.og_origin;
}
dog_thread()
{
common_scripts\utility::flag_set( "dog_pickup_ready" );
level thread dog_nag();
thread dog_loop_audio();
dog_init_pickup();
dog_enable_trigger();
level thread dog_too_far_fail();
dog_blood_pool();
if ( level.console || level.player usinggamepad() )
{
self sethintstring( &"LAS_VEGAS_PICKUP_RILEY" );
self.use_trigger sethintstring( &"LAS_VEGAS_PUTDOWN_RILEY" );
}
else
{
self sethintstring( &"LAS_VEGAS_PICKUP_RILEY_PC" );
self.use_trigger sethintstring( &"LAS_VEGAS_PUTDOWN_RILEY_PC" );
}
dog_disable_trigger();
var_0 = 0;
var_1 = 2;
if ( var_0 )
var_1 = 0.5;
for (;;)
{
for (;;)
{
thread dog_pickup_thread();
self waittill( "trigger" );
if ( dog_pickup_final_check() )
break;
}
self makeunusable();
dog_disable_trigger();
dog_pickup();
wait( var_1 );
thread dog_put_down_trigger_thread();
self.use_trigger waittill( "trigger" );
dog_put_down();
dog_disable_trigger();
wait( var_1 );
}
}
dog_blood_pool()
{
var_0 = level.dog.origin;
var_1 = anglestoforward( ( 270, randomint( 360 ), 0 ) );
playfx( common_scripts\utility::getfx( "crawling_death_blood_smear" ), var_0, var_1 );
}
dog_pickup_thread()
{
self endon( "trigger" );
var_0 = 1;
for (;;)
{
if ( dog_pickup_check() )
self makeusable();
else
self makeunusable();
wait 0.05;
}
}
dog_pickup_final_check()
{
if ( level.player ismeleeing() )
return 0;
if ( level.player ismantling() )
return 0;
var_0 = level.player.origin + ( 0, 0, 1 );
var_1 = playerphysicstrace( level.player.origin, var_0 );
if ( var_1 != var_0 )
return 0;
return 1;
}
dog_pickup_check()
{
if ( level.player ismeleeing() )
return 0;
if ( level.player ismantling() )
return 0;
if ( !maps\_utility::player_looking_at( self.origin, 0.8 ) )
return 0;
var_0 = level.player.origin + ( 0, 0, 1 );
var_1 = playerphysicstrace( level.player.origin, var_0 );
if ( var_1 != var_0 )
return 0;
return 1;
}
dog_put_down_trigger_thread()
{
var_0 = self.use_trigger;
self endon( "disable_put_down" );
var_0 endon( "trigger" );
for (;;)
{
wait 0.05;
var_0.origin = var_0.origin + ( 0, 0, -1500 );
if ( maps\_utility::ent_flag( "disable_put_down" ) )
continue;
if ( !level.player isonground() )
continue;
var_2 = level.player geteye();
var_3 = level.player getplayerangles();
var_4 = var_3[0] + 15;
var_4 = clamp( var_4, 70, 80 );
var_5 = anglestoforward( ( var_4, var_3[1], 0 ) );
var_6 = var_2 + var_5 * 500;
var_7 = bullettrace( var_2, var_6, 1, level.player );
var_8 = physicstrace( var_2, var_6 );
if ( var_8 != var_7["position"] )
continue;
if ( var_7["position"][2] > level.player.origin[2] + 26 )
continue;
if ( distance( level.player.origin, var_8 ) > 100 )
continue;
if ( !up_normal( var_7["normal"] ) )
continue;
if ( !dog_place_clear( var_8 ) )
continue;
level.dog.place_pos = var_8;
var_0.origin = level.player.origin;
}
}
up_normal( var_0 )
{
var_1 = 0.25;
if ( abs( var_0[0] ) > var_1 )
return 0;
if ( abs( var_0[1] ) > var_1 )
return 0;
return var_0[2] >= 1 - var_1;
}
dog_place_clear( var_0 )
{
var_1 = getdvarint( "debug_dog_place" );
var_2 = 6;
var_3 = 360 / var_2;
var_4 = squared( 0.01 );
for ( var_5 = 0; var_5 < var_2; var_5++ )
{
var_6 = ( -50, var_5 * var_3, 0 );
var_7 = anglestoforward( var_6 );
var_8 = var_0 + var_7 * 48;
var_9 = physicstrace( var_0, var_8 );
var_10 = distancesquared( var_9, var_8 );
if ( var_10 > var_4 )
return 0;
var_9 = physicstrace( var_8 + ( 0, 0, 42 ), var_8 );
if ( var_10 > var_4 )
return 0;
}
return 1;
}
#using_animtree("dog");
dog_carry_thread()
{
self endon( "stop_carry_thread" );
self useanimtree( #animtree );
var_0 = %vegas_dog_carry_dog_1;
var_1 = %vegas_dog_carry_dog_move;
var_2 = 152;
var_3 = 20;
var_4 = var_2 - var_3;
var_5 = -1;
for (;;)
{
var_6 = level.player getvelocity();
var_7 = length( var_6 );
if ( var_5 != var_7 )
{
var_8 = var_7 / var_2;
var_5 = var_7;
var_8 = clamp( var_8, 0, 1 );
self setanim( var_0, 1 - var_8, 0.2 );
self setanim( var_1, var_8, 0.2 );
}
wait 0.05;
}
}
dog_pickup()
{
maps\_utility_dogs::set_dog_model( self.reg_model );
common_scripts\utility::flag_set( "dog_first_pickup" );
var_0 = maps\_utility::spawn_anim_model( "player_rig", level.player.origin, level.player.angles );
var_0 hide();
var_0.angles = ( 0, level.player.angles[1], 0 );
var_0 maps\_anim::anim_first_frame_solo( var_0, "dog_pickup" );
var_1 = ( -12, 20, -57 );
var_2 = ( 5, -10, 20 );
level.player playerlinktoblend( var_0, "tag_player", 0.4 );
level.player common_scripts\utility::delaycall( 0.4, ::playrumbleonentity, "damage_light" );
dog_player_pickup_start();
var_3 = [ var_0, self ];
level.player playsound( "scn_vegas_dog_pick_up" );
var_0 thread maps\_anim::anim_single_solo( var_0, "dog_pickup" );
var_4 = makestruct();
var_4 thread maps\_anim::anim_single_solo( self, "dog_pickup" );
wait 0.45;
level.player playerlinktodelta( var_0, "tag_player", 1, 30, 30, 30, 30, 1 );
self linktoplayerviewignoreparentrot( level.player, "tag_origin", var_1, var_2, 1, 0, 1, 0 );
self notsolid();
self dontcastshadows();
badplace_delete( "dog_place" );
var_0 waittillmatch( "single anim", "end" );
dog_player_pickup_end();
maps\_utility::anim_stopanimscripted();
thread dog_carry_thread();
level.player unlink();
var_0 delete();
maps\_utility::ent_flag_set( "picked_up" );
objective_position( 1, ( 0, 0, 0 ) );
}
dog_player_pickup_start()
{
level.player allowmelee( 0 );
level.player allowprone( 0 );
level.player allowcrouch( 0 );
level.player allowstand( 1 );
level.player allowjump( 0 );
level.player setstance( "crouch" );
setsaveddvar( "mantle_enable", 0 );
level.player.last_weapon = level.player getcurrentweapon();
level.player disableweaponpickup();
level.player disableweaponswitch();
level.player giveweapon( "noweapon_deer_hunt" );
level.player switchtoweapon( "noweapon_deer_hunt" );
level.player disableoffhandweapons();
setsaveddvar( "slide_enable", 0 );
level.player enableweapons();
level.player enableslowaim( 0.5, 0.5 );
level.player maps\_utility::player_speed_percent( 80 );
level.dvar_view_pitch_down = getdvarint( "player_view_pitch_down" );
}
dog_player_pickup_end()
{
level.player allowprone( 0 );
level.player allowcrouch( 1 );
level.player allowstand( 1 );
level.player allowsprint( 1 );
level.player setstance( "stand" );
level.player allowmelee( 0 );
setsaveddvar( "player_view_pitch_down", 35 );
}
dog_put_down()
{
self notify( "stop_carry_thread" );
var_0 = maps\_utility::spawn_anim_model( "player_rig", level.player.origin + ( 0, 0, 0 ), level.player.angles );
var_0 hide();
var_0.angles = level.player.angles;
level.player playerlinktoblend( var_0, "tag_origin", 0.4 );
level.player common_scripts\utility::delaycall( 0.4, ::playrumbleonentity, "damage_light" );
level.player playsound( "scn_vegas_dog_put_down" );
dog_player_put_down_start();
self setanim( maps\_utility::getanim( "hurt_idle_single" ), 1, 1 );
wait 0.4;
level.player playerlinktodelta( var_0, "tag_origin", 1, 30, 30, 30, 30 );
wait 0.1;
self unlinkfromplayerview( level.player );
self.origin = self.place_pos;
dog_plant();
badplace_cylinder( "dog_place", 0, self.origin, 64, 60 );
maps\_anim::anim_first_frame_solo( self, "hurt_idle_single" );
thread maps\_anim::anim_loop_solo( self, "hurt_idle" );
self castshadows();
dog_blood_pool();
dog_player_put_down_end();
level.player unlink();
var_0 delete();
maps\_utility_dogs::set_dog_model( self.obj_model );
reset_dog_nag();
maps\_utility::ent_flag_clear( "picked_up" );
objective_onentity( 1, level.dog, ( 0, 0, 20 ) );
thread dog_objective_thread();
}
dog_plant()
{
var_0 = 25;
var_1 = [ 25, 15 ];
var_2 = ( 0, 0, 0 );
var_3 = level.player.angles;
var_4 = [];
foreach ( var_10, var_0 in var_1 )
{
var_6 = var_3;
if ( var_10 == 0 )
var_7 = anglestoright( var_3 );
else
var_7 = anglestoforward( var_3 );
var_8 = self.origin + var_7 * var_0;
var_9 = self.origin + var_7 * var_0 * -1;
var_8 = dog_plant_trace( var_8, 30, -30 );
var_9 = dog_plant_trace( var_9, 30, -30 );
var_4[var_10] = var_8 - var_9;
}
var_11 = vectorcross( var_4[0], var_4[1] );
self.angles = axistoangles( var_4[1], var_4[0], var_11 );
}
dog_plant_trace( var_0, var_1, var_2 )
{
var_3 = bullettrace( var_0 + ( 0, 0, var_1 ), var_0 + ( 0, 0, var_2 ), 0, self );
if ( !isdefined( var_3 ) )
return common_scripts\utility::drop_to_ground( var_0, var_1, var_2 );
return var_3["position"];
}
dog_loop_audio()
{
self notify( "stop_loop_audio" );
self endon( "stop_loop_audio" );
level.next_dog_whine = gettime() + randomfloatrange( 5000, 20000 );
var_0 = -1;
var_1 = "scn_dog_vegas_hurt_down";
var_2 = 0;
var_3 = gettime();
for (;;)
{
wait 0.1;
var_4 = gettime();
if ( var_0 != maps\_utility::ent_flag( "picked_up" ) || var_2 )
{
if ( maps\_utility::ent_flag( "picked_up" ) )
{
var_1 = "scn_dog_vegas_hurt";
level.next_dog_whine = var_4 + randomfloatrange( 3000, 7000 );
}
else
{
var_1 = "scn_dog_vegas_hurt_down";
level.next_dog_whine = var_4 + randomfloatrange( 2000, 7000 );
}
var_0 = maps\_utility::ent_flag( "picked_up" );
}
if ( var_4 < level.next_dog_whine && var_4 - var_3 < 10000 )
continue;
self playsound( var_1, "dog_sound_done" );
self waittill( "dog_sound_done" );
var_2 = 1;
var_3 = var_4;
}
}
dog_objective_thread()
{
var_0 = squared( 100 );
setsaveddvar( "objectivehide", "1" );
var_1 = 1;
while ( !maps\_utility::ent_flag( "picked_up" ) )
{
var_2 = 0;
if ( distance2dsquared( level.player.origin, self.origin ) < var_0 )
var_2 = 1;
if ( var_2 != var_1 )
{
var_1 = var_2;
setsaveddvar( "objectivehide", var_2 );
}
wait 0.05;
}
}
dog_player_put_down_start()
{
level.player allowjump( 0 );
level.player allowprone( 0 );
level.player allowstand( 0 );
level.player allowcrouch( 1 );
level.player setstance( "crouch" );
level.player disableweapons();
level.player takeweapon( "noweapon_deer_hunt" );
}
dog_player_put_down_end()
{
level.player allowsprint( 1 );
level.player allowjump( 1 );
level.player allowprone( 1 );
level.player allowcrouch( 1 );
level.player allowstand( 1 );
level.player setstance( "stand" );
level.player allowmelee( 1 );
level.player enableoffhandweapons();
setsaveddvar( "mantle_enable", 1 );
setsaveddvar( "slide_enable", 1 );
level.player enableweaponpickup();
level.player enableweaponswitch();
level.player enableweapons();
level.player switchtoweapon( level.player.last_weapon );
level.player disableslowaim();
level.player maps\_utility::player_speed_percent( 100 );
setsaveddvar( "player_view_pitch_down", level.dvar_view_pitch_down );
}
dog_too_far_fail()
{
var_0 = common_scripts\utility::getstruct( "ground_progression", "targetname" );
var_0 init_follow_path();
var_1 = 1200;
var_2 = 800;
var_3 = 0;
var_4 = squared( 1000 );
for (;;)
{
if ( !level.dog maps\_utility::ent_flag( "picked_up" ) )
{
var_5 = get_path_dist( var_0, level.player.origin );
var_6 = get_path_dist( var_0, level.dog.origin );
var_7 = var_5 - var_6;
if ( var_7 > var_2 && gettime() > var_3 )
{
var_3 = gettime() + 3000;
dog_nag_now();
}
if ( distance2dsquared( level.player.origin, level.dog.origin ) > var_4 )
{
if ( var_7 > var_1 )
break;
}
}
wait 0.05;
}
dog_mission_fail();
}
dog_mission_fail()
{
maps\_player_death::set_deadquote( &"LAS_VEGAS_NO_DOGS_LEFT_BEHIND" );
maps\_utility::missionfailedwrapper();
}
dog_nag()
{
var_0 = 0;
var_1 = [ "vegas_hsh_loganpickupriley", "vegas_hsh_dontforgetriley", "vegas_hsh_getrileyuplets", "vegas_hsh_grabriley" ];
var_1 = common_scripts\utility::array_randomize( var_1 );
level.dog_nag_time = gettime() + randomintrange( 5000, 10000 );
for (;;)
{
wait 0.05;
if ( gettime() > level.dog_nag_time )
{
reset_dog_nag();
if ( !level.dog maps\_utility::ent_flag( "picked_up" ) )
{
level.hesh maps\_utility::smart_dialogue( var_1[var_0] );
var_0++;
var_0 = var_0 % var_1.size;
}
}
}
}
reset_dog_nag()
{
level.dog_nag_time = gettime() + randomintrange( 15000, 25000 );
}
dog_nag_now()
{
if ( level.dog_nag_time - gettime() < 3000 )
return;
level.dog_nag_time = 0;
}
ending_fadeout( var_0 )
{
maps\_utility::set_vision_set( "lv_tunnel_overbloom", 2 );
maps\_hud_util::fade_out( var_0 * 0.8, "white" );
}
ending_fadein( var_0, var_1 )
{
maps\_hud_util::fade_in( var_0 * 0.2, "white" );
if ( isdefined( var_1 ) )
maps\_utility::set_vision_set( var_1, var_0 );
else
maps\_utility::set_vision_set( "", var_0 );
}
progressional_visionset( var_0, var_1, var_2, var_3, var_4 )
{
var_5 = distance( var_0.origin, var_1.origin );
var_6 = spawnstruct();
var_6.script_visionset_start = var_2;
var_6.script_visionset_end = var_3;
var_7 = 0;
while ( var_7 < var_4 )
{
var_7 = maps\_utility::get_progress( var_0.origin, var_1.origin, level.player.origin, var_5 );
maps\_trigger::vision_set_fog_progress( var_6, var_7 );
wait 0.05;
}
}
pa_queue( var_0, var_1 )
{
maps\_utility::function_stack( ::pa_playsound, var_0, var_1 );
}
pa_playsound( var_0, var_1 )
{
if ( common_scripts\utility::flag( var_1 ) )
return;
if ( !isdefined( level.pa ) )
{
level.pa = spawnstruct();
level.pa.is_playing = 0;
level.pa.speakers = [];
level.pa.speakers[0] = spawn( "script_origin", ( 0, 0, 0 ) );
level.pa.speakers[1] = spawn( "script_origin", ( 0, 0, 0 ) );
level.pa.speakers[1].distant = 1;
}
while ( level.pa.is_playing > 0 )
wait 0.05;
foreach ( var_3 in level.pa.speakers )
var_3 thread pa_playsound_internal( var_0 );
var_5 = common_scripts\utility::getstructarray( "pa_speaker", "targetname" );
while ( level.pa.is_playing )
{
var_5 = sortbydistance( var_5, level.player.origin );
foreach ( var_7, var_3 in level.pa.speakers )
var_3.origin = var_5[var_7].origin;
wait 0.1;
}
}
pa_playsound_internal( var_0 )
{
if ( isdefined( self.distant ) )
var_0 = var_0 + "_d";
level.pa.is_playing++;
self playsound( var_0, "sound_done" );
self waittill( "sound_done" );
wait 0.1;
level.pa.is_playing--;
}
pa_cleanup()
{
common_scripts\utility::array_call( level.pa_ents, ::delete );
level.pa_ents = undefined;
}
launch_gas_by_targetname( var_0, var_1, var_2 )
{
if ( !isdefined( var_1 ) )
var_1 = 0.3;
if ( !isdefined( var_2 ) )
var_2 = 0.6;
var_3 = common_scripts\utility::getstructarray( var_0, "targetname" );
var_3 = common_scripts\utility::array_randomize( var_3 );
foreach ( var_6, var_5 in var_3 )
{
thread launch_gas_grenade( var_5, var_6 );
wait( randomfloatrange( var_1, var_2 ) );
}
}
launch_gas_grenade( var_0, var_1 )
{
if ( !isdefined( level.gas_grenades ) )
level.gas_grenades = [];
var_2 = var_0.origin;
if ( var_1 < 7 )
thread common_scripts\utility::play_sound_in_space( "gas_grenade_launch", var_2 );
var_0 = common_scripts\utility::getstruct( var_0.target, "targetname" );
var_3 = var_0.origin;
var_3 = common_scripts\utility::drop_to_ground( var_3, 10, -100 );
var_3 = var_3 + ( 0, 0, 0 );
var_4 = spawn( "script_model", var_2 );
var_4 setmodel( "projectile_us_smoke_grenade" );
var_4 playloopsound( "gas_loop" );
var_4 endon( "death" );
level.gas_grenades[level.gas_grenades.size] = var_4;
playfxontag( common_scripts\utility::getfx( "gas_grenade_trail" ), var_4, "polysurface22" );
var_4 movegravity_scripted( var_2, var_3, randomfloatrange( 540, 600 ) );
if ( !isdefined( var_4 ) )
return;
var_5 = common_scripts\utility::drop_to_ground( var_4.origin, 10, -100 );
var_4 moveto( var_5 + ( 0, 0, 1 ), 0.2 );
var_4 rotateto( ( -90, 0, 0 ), 0.1 );
wait 0.2;
var_4 playsound( "gas_grenade_land_roll" );
var_6 = 50;
var_0 = common_scripts\utility::getstruct( var_0.target, "targetname" );
var_4 endon( "death" );
var_4.fx = playfx( common_scripts\utility::getfx( "gas_grenade" ), var_4.origin );
var_4 thread ambush_nade_rotate();
while ( isdefined( var_4 ) )
{
var_5 = common_scripts\utility::drop_to_ground( var_0.origin, 10, -100 ) + ( 0, 0, 1 );
var_7 = distance( var_4.origin, var_5 );
var_8 = var_7 / var_6;
var_4 moveto( var_5, var_8 );
wait( var_8 - 0.05 );
if ( !isdefined( var_0.target ) )
break;
var_0 = common_scripts\utility::getstruct( var_0.target, "targetname" );
}
wait( randomfloatrange( 1, 3 ) );
stopfxontag( common_scripts\utility::getfx( "gas_grenade_trail" ), var_4, "polysurface22" );
var_4 notify( "stop_rotate" );
var_4 rotateyaw( 900, 3, 0, 3 );
}
ambush_nade_rotate()
{
self endon( "death" );
self endon( "stop_rotate" );
while ( isdefined( self ) )
{
var_0 = randomfloatrange( 0.05, 0.1 );
self rotateyaw( 90, var_0 );
wait( var_0 );
}
}
movegravity_scripted( var_0, var_1, var_2 )
{
var_3 = getdvarint( "g_gravity" ) * -1;
var_4 = distance( var_0, var_1 );
var_5 = var_1 - var_0;
var_6 = var_4 / var_2;
var_7 = 0.5 * var_3 * ( var_6 * var_6 );
var_8 = ( var_5[0], var_5[1], var_5[2] - var_7 ) / var_6;
self rotatevelocity( ( 500, 5, 5 ), var_6 );
self movegravity( var_8, var_6 );
wait( var_6 );
}
struct_stopanimscripted()
{
self notify( "stop_loop" );
self notify( "single anim", "end" );
self notify( "looping anim", "end" );
}
round_to( var_0, var_1 )
{
var_0 = int( var_0 * var_1 ) / var_1;
return var_0;
}
get_sorted_structs( var_0, var_1 )
{
var_2 = common_scripts\utility::getstructarray( var_0, "targetname" );
var_2 = sortbydistance( var_2, var_1 );
return var_2;
}
chance( var_0 )
{
var_1 = randomint( 100 );
if ( var_1 < var_0 )
return 1;
return 0;
}
temp_dialogue_queue( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = 2;
var_2 = undefined;
if ( self.team == "allies" )
var_2 = "g";
var_3 = level.scr_text[self.animname][var_0];
thread maps\_utility::add_dialogue_line( self.name, var_3, var_2 );
wait( var_1 );
}
vector2d( var_0 )
{
return ( var_0[0], var_0[1], 0 );
}
makestruct()
{
var_0 = spawnstruct();
var_0.origin = self.origin;
var_0.angles = self.angles;
return var_0;
}
ground_ref_rotate( var_0, var_1, var_2, var_3 )
{
var_4 = level.player.angles;
var_5 = anglestoaxis( var_4 );
var_6 = matrix_inverse( var_5 );
var_7 = axistoangles( var_6["forward"], var_6["right"], var_6["up"] );
var_8 = level.ground_ref_ent.angles;
var_9 = combineangles( var_8, var_4 );
var_9 = var_9 + var_0;
var_9 = combineangles( var_9, var_7 );
level.ground_ref_ent rotateto( var_9, var_1, var_1 * 0.5, var_1 * 0.25 );
wait( var_1 );
}
matrix_inverse( var_0 )
{
var_0["right"] = var_0["right"] * -1;
var_1["forward"] = ( var_0["forward"][0], var_0["right"][0], var_0["up"][0] );
var_1["right"] = ( var_0["forward"][1], var_0["right"][1], var_0["up"][1] );
var_1["up"] = ( var_0["forward"][2], var_0["right"][2], var_0["up"][2] );
var_1["right"] = var_1["right"] * -1;
return var_1;
}
draw_ent_axis()
{
self endon( "death" );
var_0 = 25;
for (;;)
{
var_1 = self.origin;
var_2 = self.angles;
var_3 = anglestoforward( var_2 ) * var_0;
var_4 = anglestoright( var_2 ) * var_0;
var_5 = anglestoup( var_2 ) * var_0;
wait 0.05;
}
}
draw_axis( var_0, var_1 )
{
var_2 = 25;
var_3 = anglestoforward( var_1 ) * var_2;
var_4 = anglestoright( var_1 ) * var_2;
var_5 = anglestoup( var_1 ) * var_2;
for (;;)
wait 0.05;
}
flag_smart_dialogue( var_0, var_1, var_2 )
{
common_scripts\utility::flag_wait( var_0 );
if ( isdefined( var_2 ) )
{
if ( common_scripts\utility::flag( var_2 ) )
return;
}
maps\_utility::smart_dialogue( var_1 );
}
add_delaythread( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
{
level.additive_delay = level.additive_delay + var_0;
maps\_utility::delaythread( level.additive_delay, var_1, var_2, var_3, var_4, var_5, var_6, var_7 );
}
clear_add_delaythread()
{
level.additive_delay = 0;
}
disable_all_triggers()
{
if ( isdefined( level.all_triggers_off ) )
return;
level.all_triggers_off = 1;
var_0 = getentarray( "trigger_multiple", "code_classname" );
common_scripts\utility::array_thread( var_0, common_scripts\utility::trigger_off );
}
enable_all_triggers()
{
if ( isdefined( level.all_triggers_off ) && level.all_triggers_off )
{
level.all_triggers_off = undefined;
var_0 = getentarray( "trigger_multiple", "code_classname" );
common_scripts\utility::array_thread( var_0, common_scripts\utility::trigger_on );
}
}
spawn_model_at_tag( var_0, var_1, var_2 )
{
var_3 = spawn( "script_model", ( 0, 0, 0 ) );
var_3 setmodel( var_0 );
var_3.origin = var_1 gettagorigin( var_2 );
var_3.angles = var_1 gettagorigin( var_2 );
return var_3;
}
spawn_linked_model( var_0, var_1, var_2 )
{
var_3 = spawn( "script_model", var_1.origin );
var_3 setmodel( var_0 );
var_3 linkto( var_1, var_2, ( 0, 0, 0 ), ( 0, 0, 0 ) );
return var_3;
}
print_timer()
{
}
print_fov()
{
}
custom_playsound_on_ent( var_0, var_1, var_2 )
{
if ( maps\_utility::is_dead_sentient() )
return;
var_3 = spawn( "script_origin", ( 0, 0, 0 ) );
var_3 endon( "death" );
if ( !isdefined( self.playsound_ents ) )
self.playsound_ents = [];
self.playsound_ents[self.playsound_ents.size] = var_3;
thread maps\_utility::delete_on_death_wait_sound( var_3, "sounddone" );
if ( isdefined( var_1 ) )
var_3 linkto( self, var_1, ( 0, 0, 0 ), ( 0, 0, 0 ) );
else
{
var_3.origin = self.origin;
var_3.angles = self.angles;
var_3 linkto( self );
}
var_3.soundalias = var_0;
var_3 playsound( var_0, "sounddone" );
if ( isdefined( var_2 ) )
{
if ( !isdefined( maps\_utility_code::wait_for_sounddone_or_death( var_3 ) ) )
var_3 stopsounds();
wait 0.05;
}
else
var_3 waittill( "sounddone" );
var_3 delete();
self.playsound_ents = common_scripts\utility::array_removeundefined( self.playsound_ents );
}
new_hand_hud()
{
var_0 = newhudelem();
var_0.x = 35;
var_0.y = 90;
var_0.alignx = "center";
var_0.aligny = "middle";
var_0.horzalign = "center";
var_0.vertalign = "middle";
var_0.hidewhendead = 1;
var_0.hidewheninmenu = 1;
var_0.sort = 10;
var_0.foreground = 1;
var_0.alpha = 1;
return var_0;
}
grab_gun_smash_count()
{
var_0["easy"] = 20;
var_0["medium"] = 25;
var_0["hard"] = 32;
var_0["fu"] = 40;
return var_0[maps\_utility::getdifficulty()];
}
struggle_smash_count()
{
var_0["easy"] = 30;
var_0["medium"] = 50;
var_0["hard"] = 55;
var_0["fu"] = 60;
return var_0[maps\_utility::getdifficulty()];
}
create_hand_hud()
{
var_0 = new_hand_hud();
var_0 setshader( "hint_usable", 32, 32 );
var_1 = new_hand_hud();
var_1.x = var_1.x * -1;
var_1.font = "default";
var_1.fontscale = 2;
var_1.width = 0;
if ( level.console || level.player usinggamepad() )
var_1 settext( &"LAS_VEGAS_PRESS_USE" );
else
var_1 settext( &"LAS_VEGAS_PRESS_USE_PC" );
var_2["icon"] = var_0;
var_2["text"] = var_1;
return var_2;
}
hand_hint_thread( var_0, var_1 )
{
level endon( "stop_hand_hint_thread" );
level.hand_hint = spawnstruct();
level.hand_hint.huds = create_hand_hud();
if ( !isdefined( var_1 ) )
var_1 = 0;
foreach ( var_3 in level.hand_hint.huds )
var_3.alpha = 0;
level.hand_hint.meter = 100;
level.hand_hint.check = 90;
level thread player_smash_use();
level thread print_hand_meter( var_0 );
if ( var_1 )
return;
hand_hint_fade( 0.95, 0.1 );
var_5 = level.hand_hint.huds["text"];
for (;;)
{
var_5 fadeovertime( 0.01 );
var_5.alpha = 0.95;
var_5 changefontscaleovertime( 0.01 );
var_5.fontscale = 2;
wait 0.1;
var_5 fadeovertime( 0.1 );
var_5.alpha = 0.2;
var_5 changefontscaleovertime( 0.1 );
var_5.fontscale = 0.75;
wait 0.2;
}
}
hand_hint_fade( var_0, var_1 )
{
level notify( "stop_hand_hint_fade" );
level endon( "stop_hand_hint_fade" );
foreach ( var_3 in level.hand_hint.huds )
{
var_3 fadeovertime( var_1 );
var_3.alpha = var_0;
}
wait( var_1 );
}
player_smash_use()
{
level endon( "stop_player_smash_use" );
var_0 = level.player usebuttonpressed();
var_1 = 0;
level.player.smash_use_count = 0;
var_2 = 100;
var_3 = 1;
var_4 = 2.5;
var_5 = gettime();
thread player_smash_use_audio();
for (;;)
{
if ( isdefined( level.player.smash_use_pause ) )
{
wait 0.05;
continue;
}
var_6 = level.player usebuttonpressed();
var_7 = gettime();
if ( var_6 && !var_0 )
{
level.player.smash_use_count++;
var_1 = gettime();
level.hand_hint.meter = level.hand_hint.meter + var_4;
if ( isdefined( level.player.sound_ent ) )
level.player.sound_ent scalevolume( 1, 0.2 );
level.player playrumbleonentity( "vegas_struggle" );
cam_shake();
}
else if ( var_7 > var_1 + 50 )
{
level.hand_hint.meter = level.hand_hint.meter - var_3;
if ( isdefined( level.player.sound_ent ) )
level.player.sound_ent scalevolume( 0, 0.5 );
}
var_0 = var_6;
wait 0.05;
}
}
player_smash_use_audio()
{
if ( common_scripts\utility::flag( "player_grabbed_gun" ) )
return;
var_0 = spawn( "script_origin", level.player.origin );
var_0 playloopsound( "scn_vegas_torture_plr_rope_cut_loop" );
var_0 scalevolume( 0, 0 );
level.player.sound_ent = var_0;
common_scripts\utility::flag_wait( "player_grabbed_gun" );
var_0 stoploopsound();
wait 0.1;
var_0 delete();
}
cam_shake()
{
var_0 = 0.15;
earthquake( var_0, 1, level.player.origin, 5000 );
}
player_smash_check( var_0 )
{
return level.player.smash_use_count >= var_0;
}
cleanup_hand_hint()
{
hand_hint_fade( 0, 1 );
level notify( "stop_hand_hint_thread" );
if ( isdefined( level.print_hand_meter ) )
level.print_hand_meter destroy();
common_scripts\utility::array_call( level.hand_hint.huds, ::destroy );
level.hand_hint = undefined;
}
print_hand_meter( var_0 )
{
}
objectives()
{
switch ( level.start_point )
{
case "rescue":
case "elias_death":
case "drag2":
case "drag1":
case "ambush":
common_scripts\utility::flag_wait( "rescue_unlink_player" );
case "entrance":
case "slide":
case "chase":
case "atrium":
case "hotel":
case "kitchen":
case "bar":
case "floor":
objective_add( 1, "current", &"LAS_VEGAS_OBJECTIVE_ESCAPE" );
case "exfil":
case "entrance_combat":
common_scripts\utility::flag_wait( "dog_pickup_ready" );
objective_add( 1, "current", &"LAS_VEGAS_OBJECTIVE_CARRY_RILEY" );
objective_onentity( 1, level.dog, ( 0, 0, 20 ) );
common_scripts\utility::flag_wait( "exfil_reached" );
wait 2;
objective_state( 1, "done" );
break;
default:
}
}
sun_direction( var_0 )
{
if ( var_0 == "hand" )
setsunflareposition( ( -60.82, -82.44, 0 ) );
else if ( var_0 == "courtyard" )
setsunflareposition( ( -12.1948, -87.2369, 0 ) );
else if ( var_0 == "elias_death" )
setsunflareposition( ( -10.5, -83.9, 0 ) );
else if ( var_0 == "og" )
setsunflareposition( ( -170, -28, 0 ) );
}
ui_show_stance( var_0 )
{
setsaveddvar( "hud_showstance", var_0 );
}