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

2337 lines
59 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
guy_enter( var_0, var_1 )
{
if ( !isdefined( self ) )
return;
if ( !isdefined( self.vehicletype ) )
return;
var_2 = self.classname;
var_3 = level.vehicle_aianims[var_2];
var_4 = level.vehicle_aianims[var_2].size;
self.attachedguys[self.attachedguys.size] = var_0;
var_5 = set_pos( var_0, var_4 );
if ( !isdefined( var_5 ) )
return;
if ( var_5 == 0 )
var_0.drivingvehicle = 1;
var_6 = anim_pos( self, var_5 );
self.usedpositions[var_5] = 1;
var_0.vehicle_position = var_5;
var_0.vehicle_idling = 0;
if ( isdefined( var_6.delay ) )
{
var_0.delay = var_6.delay;
if ( isdefined( var_6.delayinc ) )
self.delayer = var_0.delay;
}
if ( isdefined( var_6.delayinc ) )
{
self.delayer = self.delayer + var_6.delayinc;
var_0.delay = self.delayer;
}
var_0.ridingvehicle = self;
var_0.orghealth = var_0.health;
var_0.vehicle_idle = var_6.idle;
var_0.vehicle_standattack = var_6.standattack;
var_0.deathanim = var_6.death;
var_0.deathanimscript = var_6.deathscript;
var_0.standing = 0;
var_0.allowdeath = 0;
if ( isdefined( var_0.deathanim ) && !isdefined( var_0.magic_bullet_shield ) && vehicle_allows_rider_death() )
{
if ( var_0.vehicle_position != 0 || vehicle_allows_driver_death() )
{
var_0.allowdeath = !isdefined( var_0.script_allowdeath ) || var_0.script_allowdeath;
if ( isdefined( var_6.death_no_ragdoll ) )
var_0.noragdoll = var_6.death_no_ragdoll;
}
}
if ( var_0.classname == "script_model" )
{
if ( isdefined( var_6.death ) && var_0.allowdeath && ( !isdefined( var_0.script_allowdeath ) || var_0.script_allowdeath ) )
thread guy_death( var_0, var_6 );
}
if ( !isdefined( var_0.vehicle_idle ) )
var_0.allowdeath = 1;
self.riders[self.riders.size] = var_0;
if ( var_0.classname != "script_model" && maps\_utility::spawn_failed( var_0 ) )
return;
var_7 = self gettagorigin( var_6.sittag );
var_8 = self gettagangles( var_6.sittag );
link_to_sittag( var_0, var_6.sittag, var_6.sittag_offset, var_6.linktoblend );
if ( isai( var_0 ) )
{
var_0 teleport( var_7, var_8 );
var_0.a.disablelongdeath = 1;
if ( isdefined( var_6.bhasgunwhileriding ) && !var_6.bhasgunwhileriding )
var_0 maps\_utility::gun_remove();
if ( guy_should_man_turret( var_6 ) )
thread guy_man_turret( var_0, var_5, var_1 );
}
else
{
if ( isdefined( var_6.bhasgunwhileriding ) && !var_6.bhasgunwhileriding )
detach_models_with_substr( var_0, "weapon_" );
var_0.origin = var_7;
var_0.angles = var_8;
}
if ( var_5 == 0 && isdefined( var_3[0].death ) )
thread driverdead( var_0 );
self notify( "guy_entered", var_0, var_5 );
thread guy_handle( var_0, var_5 );
if ( isdefined( var_6.rider_func ) )
var_0 [[ var_6.rider_func ]]();
else
{
if ( isdefined( self.parachute_unload ) )
var_0.parachute_unload = 1;
if ( isdefined( var_6.getin_idle_func ) )
{
thread [[ var_6.getin_idle_func ]]( var_0, var_5 );
return;
}
thread guy_idle( var_0, var_5 );
}
}
vehicle_allows_driver_death()
{
if ( !isdefined( self.script_allow_driver_death ) )
return 0;
return self.script_allow_driver_death;
}
vehicle_allows_rider_death()
{
if ( !isdefined( self.script_allow_rider_deaths ) )
return 1;
return self.script_allow_rider_deaths;
}
guy_should_man_turret( var_0 )
{
if ( !isdefined( var_0.mgturret ) )
return 0;
if ( !isdefined( self.script_nomg ) )
return 1;
return !self.script_nomg;
}
handle_attached_guys()
{
var_0 = self.classname;
self.attachedguys = [];
if ( !( isdefined( level.vehicle_aianims ) && isdefined( level.vehicle_aianims[var_0] ) ) )
return;
var_1 = level.vehicle_aianims[var_0].size;
if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "ai_wait_go" )
thread ai_wait_go();
self.runningtovehicle = [];
self.usedpositions = [];
self.getinorgs = [];
self.delayer = 0;
var_2 = level.vehicle_aianims[var_0];
for ( var_3 = 0; var_3 < var_1; var_3++ )
{
self.usedpositions[var_3] = 0;
if ( isdefined( self.script_nomg ) && self.script_nomg && isdefined( var_2[var_3].bisgunner ) && var_2[var_3].bisgunner )
self.usedpositions[1] = 1;
}
}
load_ai_goddriver( var_0 )
{
load_ai( var_0, 1 );
}
guy_death( var_0, var_1 )
{
waittillframeend;
var_0 setcandamage( 1 );
var_0 endon( "death" );
var_0.allowdeath = 0;
var_0.health = 10150;
if ( isdefined( var_0.script_startinghealth ) )
var_0.health = var_0.health + var_0.script_startinghealth;
var_0 endon( "jumping_out" );
if ( isdefined( var_0.magic_bullet_shield ) && var_0.magic_bullet_shield )
{
while ( isdefined( var_0.magic_bullet_shield ) && var_0.magic_bullet_shield )
wait 0.05;
}
while ( var_0.health > 10000 )
var_0 waittill( "damage" );
thread guy_deathimate_me( var_0, var_1 );
}
guy_deathimate_me( var_0, var_1 )
{
var_2 = gettime() + getanimlength( var_1.death ) * 1000;
var_3 = var_0.angles;
var_4 = var_0.origin;
var_0 = convert_guy_to_drone( var_0 );
[[ level.global_kill_func ]]( "MOD_RIFLE_BULLET", "torso_upper", var_4 );
detach_models_with_substr( var_0, "weapon_" );
var_0 linkto( self );
var_0 notsolid();
var_0 setanim( var_1.death );
if ( isai( var_0 ) )
var_0 animscripts\shared::dropallaiweapons();
else
detach_models_with_substr( var_0, "weapon_" );
if ( isdefined( var_1.death_delayed_ragdoll ) )
{
var_0 unlink();
var_0 startragdoll();
wait( var_1.death_delayed_ragdoll );
var_0 delete();
return;
}
}
load_ai( var_0, var_1, var_2 )
{
if ( !isdefined( var_1 ) )
var_1 = 0;
if ( !isdefined( var_0 ) )
var_0 = vehicle_get_riders();
maps\_utility::ent_flag_clear( "unloaded" );
maps\_utility::ent_flag_clear( "loaded" );
common_scripts\utility::array_levelthread( var_0, ::get_in_vehicle, var_1, var_2 );
}
is_rider( var_0 )
{
for ( var_1 = 0; var_1 < self.riders.size; var_1++ )
{
if ( self.riders[var_1] == var_0 )
return 1;
}
return 0;
}
vehicle_get_riders()
{
var_0 = [];
var_1 = getaiarray( self.script_team );
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
{
var_3 = var_1[var_2];
if ( !isdefined( var_3.script_vehicleride ) )
continue;
if ( var_3.script_vehicleride != self.script_vehicleride )
continue;
var_0[var_0.size] = var_3;
}
return var_0;
}
get_my_vehicleride()
{
var_0 = [];
var_1 = getentarray( "script_vehicle", "code_classname" );
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
{
var_3 = var_1[var_2];
if ( !isdefined( var_3.script_vehicleride ) )
continue;
if ( var_3.script_vehicleride != self.script_vehicleride )
continue;
var_0[var_0.size] = var_3;
}
return var_0[0];
}
get_in_vehicle( var_0, var_1, var_2 )
{
if ( is_rider( var_0 ) )
return;
if ( !handle_detached_guys_check() )
return;
guy_runtovehicle( var_0, self, var_1, var_2 );
}
handle_detached_guys_check()
{
if ( vehicle_hasavailablespots() )
return 1;
}
vehicle_hasavailablespots()
{
if ( level.vehicle_aianims[self.classname].size - self.runningtovehicle.size )
return 1;
else
return 0;
}
guy_runtovehicle_loaded( var_0, var_1 )
{
var_1 endon( "death" );
var_1 endon( "stop_loading" );
var_2 = var_0 common_scripts\utility::waittill_any_return( "long_death", "death", "enteredvehicle" );
if ( var_2 != "enteredvehicle" && isdefined( var_0.forced_startingposition ) )
var_1.usedpositions[var_0.forced_startingposition] = 0;
var_1.runningtovehicle = common_scripts\utility::array_remove( var_1.runningtovehicle, var_0 );
vehicle_loaded_if_full( var_1 );
}
vehicle_loaded_if_full( var_0 )
{
if ( isdefined( var_0.vehicletype ) && isdefined( var_0.vehicle_loaded_notify_size ) )
{
if ( var_0.riders.size == var_0.vehicle_loaded_notify_size )
var_0 maps\_utility::ent_flag_set( "loaded" );
}
else if ( !var_0.runningtovehicle.size && var_0.riders.size )
{
if ( var_0.usedpositions[0] )
var_0 maps\_utility::ent_flag_set( "loaded" );
else
var_0 thread vehicle_reload();
}
}
vehicle_reload()
{
var_0 = self.riders;
maps\_vehicle::vehicle_unload();
maps\_utility::ent_flag_wait( "unloaded" );
var_0 = maps\_utility::array_removedead( var_0 );
thread maps\_vehicle::vehicle_load_ai( var_0 );
}
remove_magic_bullet_shield_from_guy_on_unload_or_death( var_0 )
{
common_scripts\utility::waittill_any( "unload", "death" );
var_0 maps\_utility::stop_magic_bullet_shield();
}
guy_runtovehicle( 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];
if ( isdefined( var_1.runtovehicleoverride ) )
{
var_1 thread [[ var_1.runtovehicleoverride ]]( var_0 );
return;
}
var_1 endon( "death" );
var_0 endon( "death" );
var_1.runningtovehicle[var_1.runningtovehicle.size] = var_0;
thread guy_runtovehicle_loaded( 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 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 get_availablepositions( var_3 );
if ( isdefined( var_0.script_startingposition ) )
var_7 = var_1 vehicle_getinstart( var_0.script_startingposition );
else if ( !var_1.usedpositions[0] )
{
var_7 = var_1 vehicle_getinstart( 0 );
if ( var_2 )
{
var_0 thread maps\_utility::magic_bullet_shield();
thread 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 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_13 = 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 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 getanimatemodel();
var_1 thread 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] = ::entered_vehicle_notify;
var_1 link_to_sittag( var_0, var_13.sittag, var_13.sittag_offset, var_13.linktoblend );
}
var_1 animontag( var_0, var_13.sittag, var_13.getin, var_15, var_16 );
}
var_0 notify( "enteredvehicle" );
var_1 guy_enter( var_0, var_4 );
}
entered_vehicle_notify()
{
self notify( "enteredvehicle" );
}
driverdead( var_0 )
{
if ( maps\_vehicle::ishelicopter() )
return;
self.driver = var_0;
self endon( "death" );
var_0 endon( "jumping_out" );
var_0 waittill( "death" );
if ( isdefined( self.vehicle_keeps_going_after_driver_dies ) )
return;
self notify( "driver dead" );
self.deaddriver = 1;
if ( isdefined( self.hasstarted ) && self.hasstarted )
{
self setwaitspeed( 0 );
self vehicle_setspeed( 0, 10 );
self waittill( "reached_wait_speed" );
}
maps\_vehicle::vehicle_unload();
}
copy_cat()
{
var_0 = spawn( "script_model", self.origin );
var_0 setmodel( self.model );
var_1 = self getattachsize();
for ( var_2 = 0; var_2 < var_1; var_2++ )
var_0 attach( self getattachmodelname( var_2 ) );
return var_0;
}
guy_becomes_real_ai( var_0, var_1 )
{
if ( isai( var_0 ) )
return var_0;
if ( var_0.drone_delete_on_unload == 1 )
var_0 delete();
else
{
var_0 = maps\_utility::makerealai( var_0 );
var_2 = self.classname;
var_3 = level.vehicle_aianims[var_2].size;
var_4 = anim_pos( self, var_1 );
link_to_sittag( var_0, var_4.sittag, var_4.sittag_offset, var_4.linktoblend );
var_0.vehicle_idle = var_4.idle;
thread guy_idle( var_0, var_1 );
}
}
link_to_sittag( var_0, var_1, var_2, var_3 )
{
if ( !isdefined( var_2 ) )
var_2 = ( 0, 0, 0 );
if ( !isdefined( var_3 ) )
var_3 = 0;
if ( var_3 && !isdefined( var_0.script_drone ) )
var_0 linktoblendtotag( self, var_1, 0 );
else
var_0 linkto( self, var_1, var_2, ( 0, 0, 0 ) );
}
anim_pos( var_0, var_1 )
{
return level.vehicle_aianims[var_0.classname][var_1];
}
guy_deathhandle( var_0, var_1 )
{
var_0 waittill( "death" );
if ( !isdefined( self ) )
return;
self.riders = common_scripts\utility::array_remove( self.riders, var_0 );
self.usedpositions[var_1] = 0;
}
setup_aianimthreads()
{
if ( !isdefined( level.vehicle_aianimthread ) )
level.vehicle_aianimthread = [];
if ( !isdefined( level.vehicle_aianimcheck ) )
level.vehicle_aianimcheck = [];
level.vehicle_aianimthread["idle"] = ::guy_idle;
level.vehicle_aianimthread["duck"] = ::guy_duck;
level.vehicle_aianimthread["duck_once"] = ::guy_duck_once;
level.vehicle_aianimcheck["duck_once"] = ::guy_duck_once_check;
level.vehicle_aianimthread["weave"] = ::guy_weave;
level.vehicle_aianimcheck["weave"] = ::guy_weave_check;
level.vehicle_aianimthread["turn_right"] = ::guy_turn_right;
level.vehicle_aianimcheck["turn_right"] = ::guy_turn_right_check;
level.vehicle_aianimthread["turn_left"] = ::guy_turn_left;
level.vehicle_aianimcheck["turn_left"] = ::guy_turn_right_check;
level.vehicle_aianimthread["turn_hardright"] = ::guy_turn_hardright;
level.vehicle_aianimthread["turn_hardleft"] = ::guy_turn_hardleft;
level.vehicle_aianimthread["turret_fire"] = ::guy_turret_fire;
level.vehicle_aianimthread["turret_turnleft"] = ::guy_turret_turnleft;
level.vehicle_aianimthread["turret_turnright"] = ::guy_turret_turnright;
level.vehicle_aianimthread["unload"] = ::guy_unload;
level.vehicle_aianimthread["pre_unload"] = ::guy_pre_unload;
level.vehicle_aianimcheck["pre_unload"] = ::guy_pre_unload_check;
level.vehicle_aianimthread["idle_alert"] = ::guy_idle_alert;
level.vehicle_aianimcheck["idle_alert"] = ::guy_idle_alert_check;
level.vehicle_aianimthread["idle_alert_to_casual"] = ::guy_idle_alert_to_casual;
level.vehicle_aianimcheck["idle_alert_to_casual"] = ::guy_idle_alert_to_casual_check;
level.vehicle_aianimthread["reaction"] = ::guy_turret_turnright;
}
guy_handle( var_0, var_1 )
{
var_0.vehicle_idling = 1;
thread guy_deathhandle( var_0, var_1 );
}
guy_stand_attack( var_0, var_1 )
{
var_2 = anim_pos( self, var_1 );
var_0 endon( "newanim" );
self endon( "death" );
var_0 endon( "death" );
var_0.standing = 1;
var_3 = 0;
for (;;)
{
var_4 = gettime() + 2000;
while ( gettime() < var_4 && isdefined( var_0.enemy ) )
animontag( var_0, var_2.sittag, var_0.vehicle_standattack, undefined, undefined, "firing" );
var_5 = randomint( 5 ) + 10;
for ( var_6 = 0; var_6 < var_5; var_6++ )
animontag( var_0, var_2.sittag, var_2.standidle );
}
}
guy_stand_down( var_0, var_1 )
{
var_2 = anim_pos( self, var_1 );
if ( !isdefined( var_2.standdown ) )
{
thread guy_stand_attack( var_0, var_1 );
return;
}
animontag( var_0, var_2.sittag, var_2.standdown );
var_0.standing = 0;
thread guy_idle( var_0, var_1 );
}
driver_idle_speed( var_0, var_1 )
{
var_0 endon( "newanim" );
self endon( "death" );
var_0 endon( "death" );
var_2 = anim_pos( self, var_1 );
for (;;)
{
if ( self vehicle_getspeed() == 0 )
var_0.vehicle_idle = var_2.idle_animstop;
else
var_0.vehicle_idle = var_2.idle_anim;
wait 0.25;
}
}
guy_reaction( var_0, var_1 )
{
var_2 = anim_pos( self, var_1 );
var_0 endon( "newanim" );
self endon( "death" );
var_0 endon( "death" );
if ( isdefined( var_2.reaction ) )
animontag( var_0, var_2.sittag, var_2.reaction );
thread guy_idle( var_0, var_1 );
}
guy_turret_turnleft( var_0, var_1 )
{
var_2 = anim_pos( self, var_1 );
var_0 endon( "newanim" );
self endon( "death" );
var_0 endon( "death" );
for (;;)
animontag( var_0, var_2.sittag, var_0.turret_turnleft );
}
guy_turret_turnright( var_0, var_1 )
{
var_0 endon( "newanim" );
self endon( "death" );
var_0 endon( "death" );
var_2 = anim_pos( self, var_1 );
for (;;)
animontag( var_0, var_2.sittag, var_0.turret_turnleft );
}
guy_turret_fire( var_0, var_1 )
{
var_0 endon( "newanim" );
self endon( "death" );
var_0 endon( "death" );
var_2 = anim_pos( self, var_1 );
if ( isdefined( var_2.vehicle_turret_fire ) )
maps\_vehicle_code::_get_dummy() setanimrestart( var_2.vehicle_turret_fire );
if ( isdefined( var_2.turret_fire ) )
{
if ( isdefined( var_2.turret_fire_tag ) )
animontag( var_0, var_2.turret_fire_tag, var_2.turret_fire );
else
animontag( var_0, var_2.sittag, var_2.turret_fire );
}
thread guy_idle( var_0, var_1 );
}
guy_idle( var_0, var_1, var_2 )
{
var_0 endon( "newanim" );
if ( !isdefined( var_2 ) )
self endon( "death" );
var_0 endon( "death" );
var_0.vehicle_idling = 1;
var_0 notify( "gotime" );
if ( !isdefined( var_0.vehicle_idle ) )
return;
var_3 = anim_pos( self, var_1 );
if ( isdefined( var_3.mgturret ) )
return;
if ( isdefined( var_3.hideidle ) && var_3.hideidle )
var_0 hide();
if ( isdefined( var_3.idle_animstop ) && isdefined( var_3.idle_anim ) )
thread driver_idle_speed( var_0, var_1 );
for (;;)
{
var_0 notify( "idle" );
play_new_idle( var_0, var_3 );
}
}
play_new_idle( var_0, var_1 )
{
if ( isdefined( var_0.vehicle_idle_override ) )
{
animontag( var_0, var_1.sittag, var_0.vehicle_idle_override );
return;
}
if ( isdefined( var_1.idleoccurrence ) )
{
var_2 = randomoccurrance( var_0, var_1.idleoccurrence );
animontag( var_0, var_1.sittag, var_0.vehicle_idle[var_2] );
return;
}
if ( isdefined( var_0.playerpiggyback ) && isdefined( var_1.player_idle ) )
{
animontag( var_0, var_1.sittag, var_1.player_idle );
return;
}
if ( isdefined( var_1.vehicle_idle ) )
thread setanimrestart_once( var_1.vehicle_idle );
animontag( var_0, var_1.sittag, var_0.vehicle_idle );
}
randomoccurrance( var_0, var_1 )
{
var_2 = [];
var_3 = 0;
for ( var_4 = 0; var_4 < var_1.size; var_4++ )
{
var_3 = var_3 + var_1[var_4];
var_2[var_4] = var_3;
}
var_5 = randomint( var_3 );
for ( var_4 = 0; var_4 < var_1.size; var_4++ )
{
if ( var_5 < var_2[var_4] )
return var_4;
}
}
guy_duck_once_check( var_0, var_1 )
{
return isdefined( anim_pos( self, var_1 ).duck_once );
}
guy_duck_once( var_0, var_1 )
{
var_0 endon( "newanim" );
self endon( "death" );
var_0 endon( "death" );
var_2 = anim_pos( self, var_1 );
if ( isdefined( var_2.duck_once ) )
{
if ( isdefined( var_2.vehicle_duck_once ) )
thread setanimrestart_once( var_2.vehicle_duck_once );
animontag( var_0, var_2.sittag, var_2.duck_once );
}
thread guy_idle( var_0, var_1 );
}
guy_weave_check( var_0, var_1 )
{
return isdefined( anim_pos( self, var_1 ).weave );
}
guy_weave( var_0, var_1 )
{
var_0 endon( "newanim" );
self endon( "death" );
var_0 endon( "death" );
var_2 = anim_pos( self, var_1 );
if ( isdefined( var_2.weave ) )
{
if ( isdefined( var_2.vehicle_weave ) )
thread setanimrestart_once( var_2.vehicle_weave );
animontag( var_0, var_2.sittag, var_2.weave );
}
thread guy_idle( var_0, var_1 );
}
guy_duck( var_0, var_1 )
{
var_0 endon( "newanim" );
self endon( "death" );
var_0 endon( "death" );
var_2 = anim_pos( self, var_1 );
if ( isdefined( var_2.duckin ) )
animontag( var_0, var_2.sittag, var_2.duckin );
thread guy_duck_idle( var_0, var_1 );
}
guy_duck_idle( var_0, var_1 )
{
var_0 endon( "newanim" );
self endon( "death" );
var_0 endon( "death" );
var_2 = anim_pos( self, var_1 );
var_3 = randomoccurrance( var_0, var_2.duckidleoccurrence );
for (;;)
animontag( var_0, var_2.sittag, var_2.duckidle[var_3] );
}
guy_duck_out( var_0, var_1 )
{
var_2 = anim_pos( self, var_1 );
if ( isdefined( var_2.ducking ) && var_0.ducking )
{
animontag( var_0, var_2.sittag, var_2.duckout );
var_0.ducking = 0;
}
thread guy_idle( var_0, var_1 );
}
guy_unload_que( var_0 )
{
self endon( "death" );
self.unloadque = common_scripts\utility::array_add( self.unloadque, var_0 );
var_0 common_scripts\utility::waittill_any( "death", "jumpedout" );
self.unloadque = common_scripts\utility::array_remove( self.unloadque, var_0 );
if ( !self.unloadque.size )
{
maps\_utility::ent_flag_set( "unloaded" );
self.unload_group = "default";
}
}
riders_unloadable( var_0 )
{
if ( !self.riders.size )
return 0;
for ( var_1 = 0; var_1 < self.riders.size; var_1++ )
{
if ( !isalive( self.riders[var_1] ) )
continue;
if ( check_unloadgroup( self.riders[var_1].vehicle_position, var_0 ) )
return 1;
}
return 0;
}
get_unload_group()
{
var_0 = [];
var_1 = [];
var_2 = "default";
if ( isdefined( self.unload_group ) )
var_2 = self.unload_group;
var_1 = level.vehicle_unloadgroups[self.classname][var_2];
if ( !isdefined( var_1 ) )
var_1 = level.vehicle_unloadgroups[self.classname]["default"];
foreach ( var_4 in var_1 )
var_0[var_4] = var_4;
return var_0;
}
check_unloadgroup( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = self.unload_group;
var_2 = self.classname;
if ( !isdefined( level.vehicle_unloadgroups[var_2] ) )
return 1;
if ( !isdefined( level.vehicle_unloadgroups[var_2][var_1] ) )
return 1;
var_3 = level.vehicle_unloadgroups[var_2][var_1];
for ( var_4 = 0; var_4 < var_3.size; var_4++ )
{
if ( var_0 == var_3[var_4] )
return 1;
}
return 0;
}
getoutrig_model_idle( var_0, var_1, var_2 )
{
self endon( "unloading" );
for (;;)
animontag( var_0, var_1, var_2 );
}
getoutrig_model( var_0, var_1, var_2, var_3, var_4 )
{
var_5 = self.classname;
if ( var_4 )
{
thread getoutrig_model_idle( var_1, var_2, level.vehicle_attachedmodels[var_5][var_0.fastroperig].idleanim );
self waittill( "unloading" );
}
self.unloadque = common_scripts\utility::array_add( self.unloadque, var_1 );
thread getoutrig_abort( var_1, var_2, var_3 );
if ( !isdefined( self.crashing ) )
animontag( var_1, var_2, var_3 );
var_1 unlink();
if ( !isdefined( self ) )
{
var_1 delete();
return;
}
self.unloadque = common_scripts\utility::array_remove( self.unloadque, var_1 );
if ( !self.unloadque.size )
self notify( "unloaded" );
self.fastroperig[var_0.fastroperig] = undefined;
wait 10;
var_1 delete();
}
getoutrig_disable_abort_notify_after_riders_out()
{
wait 0.05;
while ( isalive( self ) && self.unloadque.size > 2 )
wait 0.05;
if ( !isalive( self ) || isdefined( self.crashing ) && self.crashing )
return;
self notify( "getoutrig_disable_abort" );
}
getoutrig_abort_while_deploying()
{
self endon( "end_getoutrig_abort_while_deploying" );
while ( !isdefined( self.crashing ) )
wait 0.05;
var_0 = [];
foreach ( var_2 in self.riders )
{
if ( isalive( var_2 ) )
common_scripts\utility::add_to_array( var_0, var_2 );
}
common_scripts\utility::array_levelthread( var_0, maps\_utility::deleteent );
self notify( "crashed_while_deploying" );
var_0 = undefined;
}
getoutrig_abort( var_0, var_1, var_2 )
{
var_3 = getanimlength( var_2 );
var_4 = var_3 - 1.0;
if ( self.vehicletype == "mi17" )
var_4 = var_3 - 0.5;
var_5 = 2.5;
self endon( "getoutrig_disable_abort" );
thread getoutrig_disable_abort_notify_after_riders_out();
thread getoutrig_abort_while_deploying();
common_scripts\utility::waittill_notify_or_timeout( "crashed_while_deploying", var_5 );
self notify( "end_getoutrig_abort_while_deploying" );
while ( !isdefined( self.crashing ) )
wait 0.05;
thread animontag( var_0, var_1, var_2 );
waittillframeend;
var_0 setanimtime( var_2, var_4 / var_3 );
var_6 = self;
if ( isdefined( self.achievement_attacker ) )
var_6 = self.achievement_attacker;
for ( var_7 = 0; var_7 < self.riders.size; var_7++ )
{
if ( !isdefined( self.riders[var_7] ) )
continue;
if ( !isdefined( self.riders[var_7].ragdoll_getout_death ) )
continue;
if ( self.riders[var_7].ragdoll_getout_death != 1 )
continue;
if ( !isdefined( self.riders[var_7].ridingvehicle ) )
continue;
self.riders[var_7].forcefallthroughonropes = 1;
if ( isalive( self.riders[var_7] ) )
thread animontag_ragdoll_death_fall( self.riders[var_7], self, var_6 );
}
}
setanimrestart_once( var_0, var_1 )
{
self endon( "death" );
self endon( "dont_clear_anim" );
if ( !isdefined( var_1 ) )
var_1 = 1;
var_2 = getanimlength( var_0 );
var_3 = maps\_vehicle_code::_get_dummy();
var_3 endon( "death" );
var_3 setflaggedanimrestart( "vehicle_anim_flag", var_0 );
wait( var_2 );
if ( var_1 )
var_3 clearanim( var_0, 0 );
}
#using_animtree("generic_human");
getout_rigspawn( var_0, var_1, var_2 )
{
if ( !isdefined( var_2 ) )
var_2 = 1;
var_3 = self.classname;
var_4 = anim_pos( self, var_1 );
if ( isdefined( self.attach_model_override ) && isdefined( self.attach_model_override[var_4.fastroperig] ) )
var_5 = 1;
else
var_5 = 0;
if ( !isdefined( var_4.fastroperig ) || isdefined( self.fastroperig[var_4.fastroperig] ) || var_5 )
return;
var_6 = var_0 gettagorigin( level.vehicle_attachedmodels[var_3][var_4.fastroperig].tag );
var_7 = var_0 gettagangles( level.vehicle_attachedmodels[var_3][var_4.fastroperig].tag );
self.fastroperiganimating[var_4.fastroperig] = 1;
var_8 = spawn( "script_model", var_6 );
var_8.angles = var_7;
var_8.origin = var_6;
var_8 setmodel( level.vehicle_attachedmodels[var_3][var_4.fastroperig].model );
self.fastroperig[var_4.fastroperig] = var_8;
var_8 useanimtree( #animtree );
var_8 linkto( var_0, level.vehicle_attachedmodels[var_3][var_4.fastroperig].tag, ( 0, 0, 0 ), ( 0, 0, 0 ) );
thread getoutrig_model( var_4, var_8, level.vehicle_attachedmodels[var_3][var_4.fastroperig].tag, level.vehicle_attachedmodels[var_3][var_4.fastroperig].dropanim, var_2 );
return var_8;
}
check_sound_tag_dupe( var_0 )
{
if ( !isdefined( self.sound_tag_dupe ) )
self.sound_tag_dupe = [];
var_1 = 0;
if ( !isdefined( self.sound_tag_dupe[var_0] ) )
self.sound_tag_dupe[var_0] = 1;
else
var_1 = 1;
thread check_sound_tag_dupe_reset( var_0 );
return var_1;
}
check_sound_tag_dupe_reset( var_0 )
{
wait 0.05;
if ( !isdefined( self ) )
return;
self.sound_tag_dupe[var_0] = 0;
var_1 = getarraykeys( self.sound_tag_dupe );
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
{
if ( self.sound_tag_dupe[var_1[var_2]] )
return;
}
self.sound_tag_dupe = undefined;
}
guy_unload( var_0, var_1 )
{
var_2 = anim_pos( self, var_1 );
var_3 = self.vehicletype;
if ( !check_unloadgroup( var_1 ) )
{
thread guy_idle( var_0, var_1 );
return;
}
if ( !isdefined( var_2.getout ) )
{
thread guy_idle( var_0, var_1 );
return;
}
if ( isdefined( var_2.hideidle ) && var_2.hideidle )
var_0 show();
thread guy_unload_que( var_0 );
self endon( "death" );
if ( isai( var_0 ) && isalive( var_0 ) )
var_0 endon( "death" );
if ( isdefined( var_0.getoffvehiclefunc ) )
var_0 [[ var_0.getoffvehiclefunc ]]();
if ( isdefined( var_0.onrotatingvehicleturret ) )
{
var_0.onrotatingvehicleturret = undefined;
if ( isdefined( var_0.getoffvehiclefunc ) )
var_0 [[ var_0.getoffvehiclefunc ]]();
}
var_4 = getanimatemodel();
if ( isdefined( var_2.vehicle_getoutanim ) )
{
var_4 thread setanimrestart_once( var_2.vehicle_getoutanim, var_2.vehicle_getoutanim_clear );
var_5 = 0;
if ( isdefined( var_2.vehicle_getoutsoundtag ) )
{
var_5 = check_sound_tag_dupe( var_2.vehicle_getoutsoundtag );
var_6 = var_4 gettagorigin( var_2.vehicle_getoutsoundtag );
}
else
var_6 = var_4.origin;
if ( isdefined( var_2.vehicle_getoutsound ) && !var_5 )
thread common_scripts\utility::play_sound_in_space( var_2.vehicle_getoutsound, var_6 );
var_5 = undefined;
}
var_7 = 0;
if ( isdefined( var_2.getout_timed_anim ) )
var_7 = var_7 + getanimlength( var_2.getout_timed_anim );
if ( isdefined( var_2.delay ) )
var_7 = var_7 + var_2.delay;
if ( isdefined( var_0.delay ) )
var_7 = var_7 + var_0.delay;
if ( var_7 > 0 )
{
thread guy_idle( var_0, var_1 );
wait( var_7 );
}
var_8 = isdefined( var_2.getout_combat );
if ( !var_8 && var_0.standing )
guy_stand_down( var_0, var_1 );
else if ( !var_8 && !var_0.vehicle_idling && isdefined( var_0.vehicle_idle ) )
var_0 waittill( "idle" );
var_0.deathanim = undefined;
var_0.deathanimscript = undefined;
var_0 notify( "newanim" );
if ( isdefined( var_2.bhasgunwhileriding ) && !var_2.bhasgunwhileriding )
{
if ( !isdefined( var_0.disable_gun_recall ) )
var_0 maps\_utility::gun_recall();
}
if ( isai( var_0 ) )
var_0 pushplayer( 1 );
var_9 = 0;
if ( isdefined( var_2.bnoanimunload ) )
var_9 = 1;
else if ( !isdefined( var_2.getout ) || !isdefined( self.script_unloadmgguy ) && ( isdefined( var_2.bisgunner ) && var_2.bisgunner ) || isdefined( self.script_keepdriver ) && var_1 == 0 )
{
thread guy_idle( var_0, var_1 );
return;
}
if ( var_0 should_give_orghealth() )
var_0.health = var_0.orghealth;
var_0.orghealth = undefined;
if ( isai( var_0 ) && isalive( var_0 ) )
var_0 endon( "death" );
var_0.allowdeath = 0;
if ( isdefined( var_2.exittag ) )
var_10 = var_2.exittag;
else
var_10 = var_2.sittag;
if ( var_8 && var_0.standing )
var_11 = var_2.getout_combat;
else if ( isdefined( var_0.get_out_override ) )
var_11 = var_0.get_out_override;
else if ( isdefined( var_0.playerpiggyback ) && isdefined( var_2.player_getout ) )
var_11 = var_2.player_getout;
else
var_11 = var_2.getout;
if ( !var_9 )
{
if ( !isdefined( var_0.parachute_unload ) )
thread guy_unlink_on_death( var_0 );
if ( isdefined( var_2.fastroperig ) )
{
if ( !isdefined( self.fastroperig[var_2.fastroperig] ) )
{
thread guy_idle( var_0, var_1 );
var_12 = getout_rigspawn( var_4, var_0.vehicle_position, 0 );
}
}
if ( isdefined( var_2.getoutsnd ) )
var_0 thread maps\_utility::play_sound_on_tag( var_2.getoutsnd, "J_Wrist_RI", 1 );
if ( isdefined( var_0.playerpiggyback ) && isdefined( var_2.player_getout_sound ) )
var_0 thread maps\_utility::play_sound_on_entity( var_2.player_getout_sound );
if ( isdefined( var_2.getoutloopsnd ) )
var_0 thread maps\_utility::play_loop_sound_on_tag( var_2.getoutloopsnd );
if ( isdefined( var_0.playerpiggyback ) && isdefined( var_2.player_getout_sound_loop ) )
level.player thread common_scripts\utility::play_loop_sound_on_entity( var_2.player_getout_sound_loop );
var_0 notify( "newanim" );
var_0 notify( "jumping_out" );
var_13 = 0;
if ( !isai( var_0 ) )
var_13 = 1;
if ( !isdefined( var_0.script_stay_drone ) )
var_0 = guy_becomes_real_ai( var_0, var_1 );
if ( !isalive( var_0 ) )
return;
var_0.ragdoll_getout_death = 1;
if ( isdefined( var_2.rappel_kill_achievement ) )
var_0 maps\_utility::enable_achievement_harder_they_fall();
if ( isdefined( var_2.ragdoll_getout_death ) )
{
var_0.ragdoll_getout_death = 1;
if ( isdefined( var_2.ragdoll_fall_anim ) )
var_0.ragdoll_fall_anim = var_2.ragdoll_fall_anim;
}
if ( var_13 )
{
self.riders = common_scripts\utility::array_add( self.riders, var_0 );
thread guy_deathhandle( var_0, var_1 );
thread guy_unload_que( var_0 );
var_0.ridingvehicle = self;
}
if ( isai( var_0 ) )
var_0 endon( "death" );
var_0 notify( "newanim" );
var_0 notify( "jumping_out" );
if ( isdefined( var_2.littlebirde_getout_unlinks ) && var_2.littlebirde_getout_unlinks )
thread stable_unlink( var_0 );
if ( isdefined( var_2.getout_secondary ) )
{
animontag( var_0, var_10, var_11 );
var_14 = var_10;
if ( isdefined( var_2.getout_secondary_tag ) )
var_14 = var_2.getout_secondary_tag;
animontag( var_0, var_14, var_2.getout_secondary );
}
else if ( isdefined( var_2.parachute_unload ) )
{
if ( !isdefined( self.angle_offset ) )
{
self.angle_offset = 0;
self.origin_offset = ( 0, 0, 0 );
self.unload_delay = 0.5;
}
else
{
self.unload_delay = self.unload_delay + randomfloatrange( 0.5, 1 );
wait( self.unload_delay );
}
if ( !isdefined( self ) )
return;
var_15 = spawn( "script_model", self gettagorigin( var_10 ) );
var_15.angles = ( 0, self.angles[1] + self.angle_offset, 0 );
self.angle_offset = self.angle_offset + 5;
var_15 setmodel( "tag_origin" );
var_16 = maps\_utility::groundpos( self.origin ) + ( 0, 0, self.unload_anim_height );
var_15.origin = var_16 + ( randomintrange( 10, 20 ), randomintrange( 10, 20 ), 0 );
var_17 = spawn( "script_model", var_15.origin );
var_17.angles = var_15.angles;
var_17 setmodel( self.unload_model );
var_17.animname = "parachute";
var_17 useanimtree( level.scr_animtree["parachute"] );
var_17 hide();
var_17 maps\_utility::ent_flag_init( "parachute_open" );
if ( isdefined( var_2.parachute_function ) )
var_15 parachute_unload( var_0, var_17, self.unload_model_unload_anim, var_11, var_2.parachute_function );
else
var_15 parachute_unload( var_0, var_17, self.unload_model_unload_anim, var_11 );
var_15 delete();
}
else
{
var_0.anim_end_early = 1;
animontag( var_0, var_10, var_11 );
}
if ( isdefined( var_0.playerpiggyback ) && isdefined( var_2.player_getout_sound_loop ) )
level.player thread common_scripts\utility::stop_loop_sound_on_entity( var_2.player_getout_sound_loop );
if ( isdefined( var_2.getoutloopsnd ) )
var_0 thread common_scripts\utility::stop_loop_sound_on_entity( var_2.getoutloopsnd );
if ( isdefined( var_0.playerpiggyback ) && isdefined( var_2.player_getout_sound_end ) )
level.player thread maps\_utility::play_sound_on_entity( var_2.player_getout_sound_end );
}
else if ( !isai( var_0 ) )
{
if ( var_0.drone_delete_on_unload == 1 )
{
var_0 delete();
return;
}
var_0 = maps\_utility::makerealai( var_0 );
}
self.riders = common_scripts\utility::array_remove( self.riders, var_0 );
self.usedpositions[var_1] = 0;
var_0.ridingvehicle = undefined;
var_0.drivingvehicle = undefined;
if ( !isalive( self ) && !isdefined( var_2.unload_ondeath ) )
{
var_0 delete();
return;
}
var_0 unlink();
if ( !isdefined( var_0.magic_bullet_shield ) )
var_0.allowdeath = 1;
if ( isalive( var_0 ) )
{
if ( isai( var_0 ) )
var_0.a.disablelongdeath = !var_0 isbadguy();
var_0.forced_startingposition = undefined;
var_0 notify( "jumpedout" );
var_0 maps\_utility::disable_achievement_harder_they_fall();
if ( isai( var_0 ) )
{
if ( isdefined( var_2.getoutstance ) )
{
var_0.desired_anim_pose = var_2.getoutstance;
var_0 allowedstances( "crouch" );
var_0 thread animscripts\utility::updateanimpose();
var_0 allowedstances( "stand", "crouch", "prone" );
}
var_0 pushplayer( 0 );
if ( guy_resets_goalpos( var_0 ) )
{
var_0.goalradius = 600;
var_0 setgoalpos( var_0.origin );
}
}
}
if ( isdefined( var_2.getout_delete ) && var_2.getout_delete )
{
var_0 delete();
return;
}
var_0 guy_cleanup_vehiclevars();
}
parachute_unload( var_0, var_1, var_2, var_3, var_4 )
{
var_0 unlink();
var_5 = var_1 gettagorigin( "tag_driver" );
var_6 = var_1 gettagangles( "tag_driver" );
var_0 forceteleport( var_5, var_6 );
var_0 linkto( var_1, "tag_driver" );
var_1 animscripted( "parachute_unload", self.origin, self.angles, var_2 );
if ( isdefined( var_4 ) )
var_1 thread parachute_notetrack_logic( "parachute_unload", "show_parachute", var_4 );
else
var_1 thread parachute_notetrack_logic( "parachute_unload", "show_parachute" );
var_0 animscripted( "parachute_unload", var_0.origin, var_0.angles, var_3 );
level thread parachute_death_monitor( var_0, var_1 );
var_1 waittillmatch( "parachute_unload", "end" );
var_1 notify( "parachute_landed" );
if ( isalive( var_0 ) )
var_0 unlink();
}
parachute_movement( var_0 )
{
var_1 = anglestoforward( var_0.angles );
var_2 = vectornormalize( common_scripts\utility::flat_angle( var_1 ) );
var_3 = self.origin + var_2 * 10000;
thread maps\_utility::draw_line_from_ent_for_time( self, var_3, 1, 0, 0, 10 );
self moveto( var_3, 1 );
}
parachute_death_monitor( var_0, var_1 )
{
var_1 endon( "parachute_landed" );
if ( isdefined( var_0.magic_bullet_shield ) && var_0.magic_bullet_shield )
return;
if ( !isai( var_0 ) )
var_0 setcandamage( 1 );
var_2 = undefined;
var_3 = undefined;
for (;;)
{
var_0 waittill( "damage", var_2, var_3 );
if ( !isdefined( var_2 ) )
continue;
if ( var_2 < 1 )
continue;
if ( !isdefined( var_3 ) )
continue;
if ( isplayer( var_3 ) )
break;
}
if ( !var_1 maps\_utility::ent_flag( "parachute_open" ) )
{
var_1 notify( "rider_dead" );
thread animontag_ragdoll_death_fall( var_0, undefined, var_3 );
wait 2;
var_1 delete();
}
else
iprintln( "parachute death anim here!" );
}
parachute_notetrack_logic( var_0, var_1, var_2 )
{
self endon( "rider_dead" );
self waittillmatch( var_0, var_1 );
if ( isdefined( var_2 ) )
self thread [[ var_2 ]]();
maps\_utility::ent_flag_set( "parachute_open" );
}
guy_resets_goalpos( var_0 )
{
if ( isdefined( var_0.script_delayed_playerseek ) )
return 0;
if ( var_0 maps\_utility::has_color() )
return 0;
if ( isdefined( var_0.qsetgoalpos ) )
return 0;
if ( !isdefined( var_0.target ) )
return 1;
var_1 = getnodearray( var_0.target, "targetname" );
if ( var_1.size > 1 )
return 0;
var_2 = getent( var_0.target, "targetname" );
if ( isdefined( var_2 ) && var_2.classname == "info_volume" )
{
var_0 setgoalvolumeauto( var_2 );
return 0;
}
return 1;
}
animontag( var_0, var_1, var_2, var_3, var_4, var_5 )
{
var_0 notify( "animontag_thread" );
var_0 endon( "animontag_thread" );
if ( !isdefined( var_5 ) )
var_5 = "animontagdone";
if ( isdefined( self.modeldummy ) )
var_6 = self.modeldummy;
else
var_6 = self;
if ( !isdefined( var_1 ) )
{
var_7 = var_0.origin;
var_8 = var_0.angles;
}
else
{
var_7 = var_6 gettagorigin( var_1 );
var_8 = var_6 gettagangles( var_1 );
}
if ( isdefined( var_0.ragdoll_getout_death ) && !isdefined( var_0.no_vehicle_ragdoll ) )
level thread animontag_ragdoll_death( var_0, self );
var_0 animscripted( var_5, var_7, var_8, var_2 );
if ( isai( var_0 ) )
thread donotetracks( var_0, var_6, var_5 );
if ( isdefined( var_0.anim_end_early ) )
{
var_0.anim_end_early = undefined;
var_9 = getanimlength( var_2 ) - 0.25;
if ( var_9 > 0 )
wait( var_9 );
var_0 stopanimscripted();
var_0.interval = 0;
var_0 thread recover_interval();
}
else
{
if ( isdefined( var_3 ) )
{
for ( var_10 = 0; var_10 < var_3.size; var_10++ )
{
var_0 waittillmatch( var_5, var_3[var_10] );
var_0 thread [[ var_4[var_10] ]]();
}
}
var_0 waittillmatch( var_5, "end" );
}
var_0 notify( "anim_on_tag_done" );
var_0.ragdoll_getout_death = undefined;
}
recover_interval()
{
self endon( "death" );
wait 2;
if ( self.interval == 0 )
self.interval = 80;
}
animontag_ragdoll_death( var_0, var_1 )
{
if ( isdefined( var_0.magic_bullet_shield ) && var_0.magic_bullet_shield )
return;
if ( !isai( var_0 ) )
var_0 setcandamage( 1 );
var_0 endon( "anim_on_tag_done" );
var_2 = undefined;
var_3 = undefined;
var_4 = var_1.health <= 0;
for (;;)
{
if ( !var_4 && !( isdefined( var_1 ) && var_1.health > 0 ) )
break;
var_0 waittill( "damage", var_2, var_3 );
if ( isdefined( var_0.forcefallthroughonropes ) )
break;
if ( !isdefined( var_2 ) )
continue;
if ( var_2 < 1 )
continue;
if ( !isdefined( var_3 ) )
continue;
if ( isplayer( var_3 ) )
break;
}
if ( !isalive( var_0 ) )
return;
thread animontag_ragdoll_death_fall( var_0, var_1, var_3 );
}
animontag_ragdoll_death_fall( var_0, var_1, var_2 )
{
var_0.deathanim = undefined;
var_0.deathfunction = undefined;
var_0.anim_disablepain = 1;
if ( isdefined( var_0.ragdoll_fall_anim ) )
{
var_3 = getmovedelta( var_0.ragdoll_fall_anim, 0, 1 );
var_4 = physicstrace( var_0.origin + ( 0, 0, 16 ), var_0.origin - ( 0, 0, 10000 ) );
var_5 = distance( var_0.origin + ( 0, 0, 16 ), var_4 );
if ( abs( var_3[2] + 16 ) <= abs( var_5 ) )
{
var_0 thread maps\_utility::play_sound_on_entity( "generic_death_falling" );
var_0 animscripted( "fastrope_fall", var_0.origin, var_0.angles, var_0.ragdoll_fall_anim );
var_0 waittillmatch( "fastrope_fall", "start_ragdoll" );
}
}
if ( !isdefined( var_0 ) )
return;
var_0.deathanim = undefined;
var_0.deathfunction = undefined;
var_0.anim_disablepain = 1;
var_0 notify( "rope_death", var_2 );
maps\_spawner::death_achievements_rappel( var_2 );
var_0 kill( var_2.origin, var_2 );
if ( isdefined( var_0.script_stay_drone ) )
{
var_0 notsolid();
var_6 = getweaponmodel( var_0.weapon );
var_7 = var_0.weapon;
if ( isdefined( var_6 ) )
{
var_0 detach( var_6, "tag_weapon_right" );
var_8 = var_0 gettagorigin( "tag_weapon_right" );
var_9 = var_0 gettagangles( "tag_weapon_right" );
level.gun = spawn( "weapon_" + var_7, ( 0, 0, 0 ) );
level.gun.angles = var_9;
level.gun.origin = var_8;
}
}
else
var_0 animscripts\shared::dropallaiweapons();
var_0 startragdoll();
}
donotetracks( var_0, var_1, var_2 )
{
var_0 endon( "newanim" );
var_1 endon( "death" );
var_0 endon( "death" );
var_0 animscripts\shared::donotetracks( var_2 );
}
animatemoveintoplace( var_0, var_1, var_2, var_3 )
{
var_0 animscripted( "movetospot", var_1, var_2, var_3 );
var_0 waittillmatch( "movetospot", "end" );
}
guy_vehicle_death( var_0, var_1, var_2 )
{
if ( !isalive( var_0 ) )
return;
if ( isdefined( self.no_rider_death ) )
return;
var_3 = anim_pos( self, var_0.vehicle_position );
var_0.vehicle_attacker = var_1;
if ( isdefined( var_3.explosion_death ) )
return guy_blowup( var_0 );
if ( isdefined( level.vehicle_rider_death_func ) && isdefined( level.vehicle_rider_death_func[self.classname] ) )
{
self [[ level.vehicle_rider_death_func[self.classname] ]]();
return;
}
if ( isdefined( var_3.unload_ondeath ) && isdefined( self ) )
{
if ( isdefined( self.dontunloadondeath ) && self.dontunloadondeath )
return;
thread guy_idle( var_0, var_0.vehicle_position, 1 );
wait( var_3.unload_ondeath );
if ( isdefined( var_0 ) && isdefined( self ) )
{
self.groupedanim_pos = var_0.vehicle_position;
maps\_vehicle::vehicle_ai_event( "unload" );
}
return;
}
if ( isdefined( var_0 ) )
{
if ( isdefined( var_0.ragdoll_getout_death ) && var_2 != "bm21_troops" )
return;
[[ level.global_kill_func ]]( "MOD_RIFLE_BULLET", "torso_upper", var_0.origin );
if ( var_2 == "bm21_troops" )
{
var_0.allowdeath = 1;
var_0 kill();
return;
}
var_0 delete();
}
}
guy_turn_right_check( var_0, var_1 )
{
return isdefined( anim_pos( self, var_1 ).turn_right );
}
guy_turn_right( var_0, var_1 )
{
var_0 endon( "newanim" );
self endon( "death" );
var_0 endon( "death" );
var_2 = anim_pos( self, var_1 );
if ( isdefined( var_2.vehicle_turn_right ) )
thread setanimrestart_once( var_2.vehicle_turn_right );
animontag( var_0, var_2.sittag, var_2.turn_right );
thread guy_idle( var_0, var_1 );
}
guy_turn_left( var_0, var_1 )
{
var_0 endon( "newanim" );
self endon( "death" );
var_0 endon( "death" );
var_2 = anim_pos( self, var_1 );
if ( isdefined( var_2.vehicle_turn_left ) )
thread setanimrestart_once( var_2.vehicle_turn_left );
animontag( var_0, var_2.sittag, var_2.turn_left );
thread guy_idle( var_0, var_1 );
}
guy_turn_left_check( var_0, var_1 )
{
return isdefined( anim_pos( self, var_1 ).turn_left );
}
guy_turn_hardright( var_0, var_1 )
{
var_2 = level.vehicle_aianims[self.classname][var_1];
if ( isdefined( var_2.idle_hardright ) )
var_0.vehicle_idle_override = var_2.idle_hardright;
}
guy_turn_hardleft( var_0, var_1 )
{
var_2 = level.vehicle_aianims[self.classname][var_1];
if ( isdefined( var_2.idle_hardleft ) )
var_0.vehicle_idle_override = var_2.idle_hardleft;
}
ai_wait_go()
{
self endon( "death" );
self waittill( "loaded" );
maps\_vehicle::gopath( self );
}
set_pos( var_0, var_1 )
{
var_2 = var_0.script_startingposition;
if ( isdefined( var_0.forced_startingposition ) )
var_2 = var_0.forced_startingposition;
if ( isdefined( var_2 ) )
return var_2;
for ( var_3 = 0; var_3 < self.usedpositions.size; var_3++ )
{
if ( self.usedpositions[var_3] )
continue;
return var_3;
}
if ( isdefined( var_0.script_vehicleride ) )
{
}
}
guy_man_turret( var_0, var_1, var_2 )
{
var_3 = anim_pos( self, var_1 );
var_4 = self.mgturret[var_3.mgturret];
if ( !isalive( var_0 ) )
return;
var_4 endon( "death" );
var_0 endon( "death" );
if ( isdefined( var_2 ) && var_2 && isdefined( var_3.passenger_2_turret_func ) )
[[ var_3.passenger_2_turret_func ]]( self, var_0, var_1, var_4 );
maps\_vehicle_code::set_turret_team( var_4 );
var_4 setdefaultdroppitch( 0 );
wait 0.1;
var_0 endon( "guy_man_turret_stop" );
level thread maps\_mgturret::mg42_setdifficulty( var_4, maps\_utility::getdifficulty() );
var_4 setturretignoregoals( 1 );
for (;;)
{
if ( !isdefined( var_0 getturret() ) )
var_0 useturret( var_4 );
wait 1;
}
}
guy_unlink_on_death( var_0 )
{
var_0 endon( "jumpedout" );
var_0 waittill( "death" );
if ( isdefined( var_0 ) )
var_0 unlink();
}
guy_blowup( var_0 )
{
if ( !isdefined( var_0.vehicle_position ) )
return;
var_1 = var_0.vehicle_position;
var_2 = anim_pos( self, var_1 );
if ( !isdefined( var_2.explosion_death ) )
return;
[[ level.global_kill_func ]]( "MOD_RIFLE_BULLET", "torso_upper", var_0.origin );
var_0.deathanim = var_2.explosion_death;
var_3 = self.angles;
var_4 = var_0.origin;
if ( isdefined( var_2.explosion_death_offset ) )
{
var_4 = var_4 + anglestoforward( var_3 ) * var_2.explosion_death_offset[0];
var_4 = var_4 + anglestoright( var_3 ) * var_2.explosion_death_offset[1];
var_4 = var_4 + anglestoup( var_3 ) * var_2.explosion_death_offset[2];
}
var_0 = convert_guy_to_drone( var_0 );
detach_models_with_substr( var_0, "weapon_" );
var_0 notsolid();
var_0.origin = var_4;
var_0.angles = var_3;
var_0 animscripted( "deathanim", var_4, var_3, var_2.explosion_death );
var_5 = 0.3;
if ( isdefined( var_2.explosion_death_ragdollfraction ) )
var_5 = var_2.explosion_death_ragdollfraction;
var_6 = getanimlength( var_2.explosion_death );
var_7 = gettime() + var_6 * 1000;
wait( var_6 * var_5 );
var_8 = ( 0, 0, 1 );
var_9 = var_0.origin;
if ( getdvar( "ragdoll_enable" ) == "0" )
{
var_0 delete();
return;
}
if ( isai( var_0 ) )
var_0 animscripts\shared::dropallaiweapons();
else
detach_models_with_substr( var_0, "weapon_" );
while ( !var_0 isragdoll() && gettime() < var_7 )
{
var_9 = var_0.origin;
wait 0.05;
var_8 = var_0.origin - var_9;
var_0 startragdoll();
}
wait 0.05;
var_8 = var_8 * 20000;
for ( var_10 = 0; var_10 < 3; var_10++ )
{
if ( isdefined( var_0 ) )
var_9 = var_0.origin;
wait 0.05;
}
if ( !var_0 isragdoll() )
var_0 delete();
}
convert_guy_to_drone( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = 0;
var_2 = spawn( "script_model", var_0.origin );
var_2.angles = var_0.angles;
var_2 setmodel( var_0.model );
var_3 = var_0 getattachsize();
for ( var_4 = 0; var_4 < var_3; var_4++ )
var_2 attach( var_0 getattachmodelname( var_4 ), var_0 getattachtagname( var_4 ) );
var_2 useanimtree( #animtree );
if ( isdefined( var_0.team ) )
var_2.team = var_0.team;
if ( !var_1 )
var_0 delete();
var_2 makefakeai();
return var_2;
}
vehicle_animate( var_0, var_1 )
{
self useanimtree( var_1 );
self setanim( var_0 );
}
vehicle_getinstart( var_0 )
{
var_1 = anim_pos( self, var_0 );
return vehicle_getanimstart( var_1.getin, var_1.sittag, var_0 );
}
vehicle_getanimstart( var_0, var_1, var_2 )
{
var_3 = spawnstruct();
var_4 = undefined;
var_5 = undefined;
var_6 = self gettagorigin( var_1 );
var_7 = self gettagangles( var_1 );
var_4 = getstartorigin( var_6, var_7, var_0 );
var_5 = getstartangles( var_6, var_7, var_0 );
var_3.origin = var_4;
var_3.angles = var_5;
var_3.vehicle_position = var_2;
return var_3;
}
is_position_in_group( var_0, var_1, var_2 )
{
if ( !isdefined( var_2 ) )
return 1;
var_3 = var_0.classname;
var_4 = level.vehicle_unloadgroups[var_3][var_2];
foreach ( var_6 in var_4 )
{
if ( var_6 == var_1 )
return 1;
}
return 0;
}
get_availablepositions( var_0 )
{
var_1 = level.vehicle_aianims[self.classname];
var_2 = [];
var_3 = [];
for ( var_4 = 0; var_4 < self.usedpositions.size; var_4++ )
{
if ( self.usedpositions[var_4] )
continue;
if ( isdefined( var_1[var_4].getin ) && is_position_in_group( self, var_4, var_0 ) )
{
var_2[var_2.size] = vehicle_getinstart( var_4 );
continue;
}
var_3[var_3.size] = var_4;
}
var_5 = spawnstruct();
var_5.availablepositions = var_2;
var_5.nonanimatedpositions = var_3;
return var_5;
}
getanimatemodel()
{
if ( isdefined( self.modeldummy ) )
return self.modeldummy;
else
return self;
}
detach_models_with_substr( var_0, var_1 )
{
var_2 = var_0 getattachsize();
var_3 = [];
var_4 = [];
var_5 = 0;
for ( var_6 = 0; var_6 < var_2; var_6++ )
{
var_7 = var_0 getattachmodelname( var_6 );
var_8 = var_0 getattachtagname( var_6 );
if ( issubstr( var_7, var_1 ) )
{
var_3[var_5] = var_7;
var_4[var_5] = var_8;
}
}
for ( var_6 = 0; var_6 < var_3.size; var_6++ )
var_0 detach( var_3[var_6], var_4[var_6] );
}
should_give_orghealth()
{
if ( !isai( self ) )
return 0;
if ( !isdefined( self.orghealth ) )
return 0;
return !isdefined( self.magic_bullet_shield );
}
guy_pre_unload_check( var_0, var_1 )
{
return isdefined( anim_pos( self, var_1 ).pre_unload );
}
guy_pre_unload( var_0, var_1 )
{
var_2 = anim_pos( self, var_1 );
if ( !isdefined( var_2.pre_unload ) )
return;
var_0 endon( "newanim" );
self endon( "death" );
var_0 endon( "death" );
animontag( var_0, var_2.sittag, var_2.pre_unload );
for (;;)
animontag( var_0, var_2.sittag, var_2.pre_unload_idle );
}
guy_idle_alert( var_0, var_1 )
{
var_2 = anim_pos( self, var_1 );
if ( !isdefined( var_2.idle_alert ) )
return;
var_0 endon( "newanim" );
self endon( "death" );
var_0 endon( "death" );
for (;;)
animontag( var_0, var_2.sittag, var_2.idle_alert );
}
guy_idle_alert_check( var_0, var_1 )
{
return isdefined( anim_pos( self, var_1 ).idle_alert );
}
guy_idle_alert_to_casual( var_0, var_1 )
{
var_2 = anim_pos( self, var_1 );
if ( !isdefined( var_2.idle_alert ) )
return;
var_0 endon( "newanim" );
self endon( "death" );
var_0 endon( "death" );
animontag( var_0, var_2.sittag, var_2.idle_alert_to_casual );
thread guy_idle( var_0, var_1 );
}
guy_idle_alert_to_casual_check( var_0, var_1 )
{
return isdefined( anim_pos( self, var_1 ).idle_alert_to_casual );
}
stable_unlink( var_0 )
{
self waittill( "stable_for_unlink" );
if ( isalive( var_0 ) )
var_0 unlink();
}
track_entered_vehicle()
{
}
animate_guys( var_0 )
{
var_1 = [];
foreach ( var_3 in self.riders )
{
if ( !isalive( var_3 ) )
continue;
if ( isdefined( level.vehicle_aianimcheck[var_0] ) && ![[ level.vehicle_aianimcheck[var_0] ]]( var_3, var_3.vehicle_position ) )
continue;
if ( isdefined( level.vehicle_aianimthread[var_0] ) )
{
var_3 notify( "newanim" );
var_3.queued_anim_threads = [];
thread [[ level.vehicle_aianimthread[var_0] ]]( var_3, var_3.vehicle_position );
var_1[var_1.size] = var_3;
continue;
}
}
return var_1;
}
guy_cleanup_vehiclevars()
{
self.vehicle_idling = undefined;
self.standing = undefined;
self.vehicle_position = undefined;
self.delay = undefined;
}
delete_corpses_around_vehicle()
{
var_0 = self getcentroid();
var_1 = self getpointinbounds( 1, 0, 0 );
var_2 = distance( var_1, var_0 );
var_3 = getcorpsearray();
foreach ( var_5 in var_3 )
{
if ( distance( var_5.origin, var_0 ) < var_2 )
var_5 delete();
}
}