1470 lines
41 KiB
Plaintext
1470 lines
41 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
ally_rappel_start_aiming( var_0 )
|
|
{
|
|
if ( isdefined( self.is_aiming ) && self.is_aiming )
|
|
return;
|
|
|
|
ally_rappel_stop_aiming();
|
|
self.israppelshooting = 0;
|
|
self.perfectaccuracy = 0;
|
|
self.previousaccuracy = self.baseaccuracy;
|
|
self.is_aiming = 1;
|
|
self.no_ai = 1;
|
|
self.rappel_type_aim = var_0;
|
|
maps\_utility::disable_pain();
|
|
self animcustom( ::custom_aim );
|
|
}
|
|
|
|
#using_animtree("generic_human");
|
|
|
|
ally_rappel_stop_aiming()
|
|
{
|
|
if ( !isdefined( self.is_aiming ) || !self.is_aiming )
|
|
return;
|
|
|
|
self notify( "stop_rappel_aim" );
|
|
self notify( "stop_rappel_aim_track" );
|
|
self notify( "stop_rappel_aim_shoot" );
|
|
self.israppelshooting = undefined;
|
|
self.perfectaccuracy = undefined;
|
|
self.previousaccuracy = undefined;
|
|
self.is_aiming = undefined;
|
|
self.no_ai = undefined;
|
|
self.rappel_type_aim = undefined;
|
|
self.angle_facing_wall = undefined;
|
|
self.rappel_aim_idle_thread = undefined;
|
|
self.rappel_shooting_loop = undefined;
|
|
self.aim2_target = undefined;
|
|
self.aim4_target = undefined;
|
|
self.aim6_target = undefined;
|
|
self.aim8_target = undefined;
|
|
self.pitch_target = undefined;
|
|
self.yaw_target = undefined;
|
|
self.rappel_enemy = undefined;
|
|
self.rappel_last_enemy_timer = undefined;
|
|
self.rappel_reloading = undefined;
|
|
maps\_utility::enable_pain();
|
|
self.lastenemy = undefined;
|
|
self clearanim( %exposed_modern, 0.2 );
|
|
self clearanim( %exposed_aiming, 0.2 );
|
|
self clearanim( %rappel_aim, 0.2 );
|
|
self clearanim( %rappel_fire, 0.2 );
|
|
self clearanim( %rappel_idle, 0.2 );
|
|
self.upaimlimit = 45;
|
|
self.downaimlimit = -45;
|
|
self.rightaimlimit = 45;
|
|
self.leftaimlimit = -45;
|
|
}
|
|
|
|
ally_rappel_start_shooting()
|
|
{
|
|
self.israppelshooting = 1;
|
|
}
|
|
|
|
ally_rappel_stop_shooting()
|
|
{
|
|
self.israppelshooting = 0;
|
|
}
|
|
|
|
ally_rappel_set_perfect_accuracy( var_0 )
|
|
{
|
|
self.perfectaccuracy = var_0;
|
|
|
|
if ( var_0 )
|
|
{
|
|
self.previousaccuracy = self.accuracy;
|
|
maps\_utility::set_baseaccuracy( 9999 );
|
|
self.accuracy = 9999;
|
|
}
|
|
else
|
|
{
|
|
maps\_utility::set_baseaccuracy( self.previousaccuracy );
|
|
self.accuracy = self.previousaccuracy;
|
|
}
|
|
}
|
|
|
|
ally_is_aiming()
|
|
{
|
|
return isdefined( self.is_aiming ) && self.is_aiming;
|
|
}
|
|
|
|
ally_is_calm_idling()
|
|
{
|
|
return isdefined( self.is_calm_idling ) && self.is_calm_idling;
|
|
}
|
|
|
|
ally_rappel_start_rope( var_0 )
|
|
{
|
|
var_1 = ally_rappel_get_rope_start( var_0 );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
return;
|
|
|
|
self.is_on_rope = 1;
|
|
ally_rappel_setup_rope( var_0, var_1 );
|
|
thread ally_rappel_rope( var_0, var_1 );
|
|
thread maps\cornered_code::ally_rappel_footsteps();
|
|
}
|
|
|
|
ally_rappel_stop_rope()
|
|
{
|
|
if ( !isdefined( self.is_on_rope ) || !self.is_on_rope )
|
|
return;
|
|
|
|
self.is_on_rope = undefined;
|
|
self notify( "stop_rope_management" );
|
|
self.cnd_rappel_tele_rope unlink();
|
|
self notify( "stop_rappel_footsteps" );
|
|
}
|
|
|
|
ally_rappel_rope_cleanup()
|
|
{
|
|
maps\cornered_code::delete_if_defined( self.rappel_physical_rope_animation_origin );
|
|
maps\cornered_code::delete_if_defined( self.rappel_physical_rope_origin );
|
|
}
|
|
|
|
ally_rappel_start_movement_horizontal( var_0, var_1, var_2 )
|
|
{
|
|
ally_rappel_movement_setup( var_0, var_2 );
|
|
ally_rappel_start_movement_horizontal_internal( var_0, var_1, var_2 );
|
|
}
|
|
|
|
ally_rappel_pause_movement_horizontal( var_0 )
|
|
{
|
|
self.pause_horz = var_0;
|
|
}
|
|
|
|
ally_start_calm_idle( var_0 )
|
|
{
|
|
if ( isdefined( self.is_calm_idling ) && self.is_calm_idling )
|
|
return;
|
|
|
|
self.is_calm_idling = 1;
|
|
self.no_ai = 1;
|
|
self.rappel_type_aim = var_0;
|
|
maps\_utility::disable_pain();
|
|
self animcustom( ::ally_calm_idle_internal );
|
|
}
|
|
|
|
ally_stop_calm_idle()
|
|
{
|
|
if ( !isdefined( self.is_calm_idling ) || !self.is_calm_idling )
|
|
return;
|
|
|
|
self notify( "stop_calm_idle" );
|
|
self.is_calm_idling = undefined;
|
|
self.no_ai = 0;
|
|
self.angle_facing_wall = undefined;
|
|
self.rappel_type_aim = undefined;
|
|
maps\_utility::enable_pain();
|
|
}
|
|
|
|
ally_calm_idle_internal()
|
|
{
|
|
self endon( "stop_calm_idle" );
|
|
var_0 = ally_rappel_get_aim_anim( 5 );
|
|
self.angle_facing_wall = maps\cornered_code::rappel_get_angle_facing_wall( self.rappel_type_aim );
|
|
self animmode( "nogravity" );
|
|
self orientmode( "face angle", self.angle_facing_wall );
|
|
var_1 = undefined;
|
|
|
|
for (;;)
|
|
{
|
|
self setanimknob( %rappel_aim, 1, 0.2, 1.0 );
|
|
self setanimknob( var_0, 1, 0.2, 1.0 );
|
|
wait 0.1;
|
|
self setanim( %rappel_idle, 1, 0.2, 1.0 );
|
|
var_2 = self.animname + "_idle";
|
|
var_3 = aim_idle_get_random();
|
|
self setflaggedanimknoblimitedrestart( var_2, var_3, 1, 0.2, 1.0 );
|
|
self waittillmatch( var_2, "end" );
|
|
var_1 = calm_idle_get_random( var_1 );
|
|
var_4 = level.scr_anim[self.animname][var_1];
|
|
self setflaggedanimknoblimitedrestart( var_2, var_4, 1.0, 0.2, 1.0 );
|
|
self waittillmatch( var_2, "end" );
|
|
}
|
|
}
|
|
|
|
calm_idle_get_random( var_0 )
|
|
{
|
|
var_1 = 1;
|
|
var_2 = 4;
|
|
var_3 = randomintrange( var_1, var_2 + 1 );
|
|
var_4 = "cnd_rappel_stealth_fidgit_" + var_3;
|
|
|
|
if ( isdefined( var_0 ) && var_0 == var_4 )
|
|
{
|
|
var_3 = var_3 + 1;
|
|
|
|
if ( var_3 == var_2 + 1 )
|
|
var_3 = var_1;
|
|
|
|
var_4 = "cnd_rappel_stealth_fidgit_" + var_3;
|
|
}
|
|
|
|
return var_4;
|
|
}
|
|
|
|
ally_setup_aim( var_0 )
|
|
{
|
|
var_1 = 1;
|
|
|
|
if ( var_1 )
|
|
self setanimknob( %rappel_aim, 1, 0.2 );
|
|
|
|
self setanimknob( ally_rappel_get_aim_anim( 5 ), 1, var_0 );
|
|
self setanimknob( ally_rappel_get_aim_anim( 2 ), 1, var_0 );
|
|
self setanimknob( ally_rappel_get_aim_anim( 8 ), 1, var_0 );
|
|
self setanimknob( ally_rappel_get_aim_anim( 4 ), 1, var_0 );
|
|
self setanimknob( ally_rappel_get_aim_anim( 6 ), 1, var_0 );
|
|
self setanimlimited( rappel_aim_get_parent_node( 2 ), 0, var_0 );
|
|
self setanimlimited( rappel_aim_get_parent_node( 8 ), 0, var_0 );
|
|
self setanimlimited( rappel_aim_get_parent_node( 4 ), 0, var_0 );
|
|
self setanimlimited( rappel_aim_get_parent_node( 6 ), 0, var_0 );
|
|
}
|
|
|
|
aim_idle_thread()
|
|
{
|
|
self endon( "end_aim_idle_thread" );
|
|
|
|
if ( isdefined( self.rappel_aim_idle_thread ) )
|
|
return;
|
|
|
|
self.rappel_aim_idle_thread = 1;
|
|
wait 0.1;
|
|
self setanimlimited( %rappel_idle, 1, 0.2 );
|
|
var_0 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
var_1 = "idle" + var_0;
|
|
var_2 = aim_idle_get_random();
|
|
self setflaggedanimknoblimitedrestart( var_1, var_2, 1, 0.2 );
|
|
self waittillmatch( var_1, "end" );
|
|
var_0++;
|
|
}
|
|
|
|
self clearanim( %rappel_idle, 0.1 );
|
|
}
|
|
|
|
aim_idle_get_random()
|
|
{
|
|
var_0 = isdefined( self.israppelshooting ) && self.israppelshooting;
|
|
var_1 = isdefined( self.rappel_disable_fidgit ) && self.rappel_do_not_fidgit;
|
|
|
|
if ( var_0 || var_1 )
|
|
return %cnd_rappel_idle;
|
|
else
|
|
{
|
|
var_2 = randomintrange( 0, 3 );
|
|
|
|
switch ( var_2 )
|
|
{
|
|
case 0:
|
|
return %cnd_rappel_idle;
|
|
case 1:
|
|
return %cnd_rappel_idle_fidgit_1;
|
|
case 2:
|
|
return %cnd_rappel_idle_fidgit_2;
|
|
}
|
|
}
|
|
}
|
|
|
|
ally_rappel_get_enemy()
|
|
{
|
|
var_0 = gettime();
|
|
var_1 = var_0 + 5000;
|
|
var_2 = isdefined( self.rappel_enemy ) && isalive( self.rappel_enemy );
|
|
var_3 = var_2 && self cansee( self.rappel_enemy );
|
|
var_4 = 0;
|
|
var_5 = undefined;
|
|
|
|
if ( var_2 )
|
|
{
|
|
var_5 = level.player maps\cornered_code::player_get_favorite_enemy( 1500 );
|
|
|
|
if ( isdefined( var_5 ) && self.rappel_enemy == var_5 )
|
|
var_4 = 1;
|
|
}
|
|
|
|
if ( var_3 )
|
|
self.rappel_last_enemy_timer = var_1;
|
|
|
|
var_6 = var_2 && self.rappel_last_enemy_timer < var_0;
|
|
var_7 = !var_2 || var_6 || var_4;
|
|
|
|
if ( var_7 )
|
|
{
|
|
var_8 = getaiarray( "axis" );
|
|
var_9 = -1;
|
|
var_10 = undefined;
|
|
|
|
if ( !isdefined( var_5 ) )
|
|
var_5 = level.player maps\cornered_code::player_get_favorite_enemy( 1500 );
|
|
|
|
foreach ( var_12 in var_8 )
|
|
{
|
|
if ( !isalive( var_12 ) )
|
|
continue;
|
|
|
|
if ( !self cansee( var_12 ) )
|
|
continue;
|
|
|
|
if ( isdefined( var_12.ignoreme ) && var_12.ignoreme )
|
|
continue;
|
|
|
|
if ( isdefined( var_5 ) && var_12 == var_5 )
|
|
continue;
|
|
|
|
var_13 = distancesquared( self.origin, var_12.origin );
|
|
|
|
if ( var_9 == -1 || var_13 < var_9 )
|
|
{
|
|
var_10 = var_12;
|
|
var_9 = var_13;
|
|
}
|
|
}
|
|
|
|
self.rappel_last_enemy_timer = var_1;
|
|
self.rappel_enemy = var_10;
|
|
}
|
|
|
|
return self.rappel_enemy;
|
|
}
|
|
|
|
end_aim_idle_thread()
|
|
{
|
|
self notify( "end_aim_idle_thread" );
|
|
self.rappel_aim_idle_thread = undefined;
|
|
self clearanim( %rappel_idle, 0.1 );
|
|
}
|
|
|
|
custom_aim()
|
|
{
|
|
self endon( "stop_rappel_aim" );
|
|
self endon( "death" );
|
|
self notify( "stop_loop" );
|
|
custom_aim_internal();
|
|
self waittill( "forever" );
|
|
}
|
|
|
|
custom_aim_internal()
|
|
{
|
|
self.angle_facing_wall = maps\cornered_code::rappel_get_angle_facing_wall( self.rappel_type_aim );
|
|
self animmode( "nogravity" );
|
|
self orientmode( "face angle", self.angle_facing_wall );
|
|
ally_setup_aim( 0.2 );
|
|
childthread aim_idle_thread();
|
|
self.upaimlimit = 89.8;
|
|
self.downaimlimit = -19.6;
|
|
self.rightaimlimit = 89.2;
|
|
self.leftaimlimit = -90.2;
|
|
var_0 = rappel_aim_get_parent_node( 2 );
|
|
var_1 = rappel_aim_get_parent_node( 4 );
|
|
var_2 = rappel_aim_get_parent_node( 6 );
|
|
var_3 = rappel_aim_get_parent_node( 8 );
|
|
thread trackloop( var_3, var_1, var_2, var_0 );
|
|
|
|
if ( !isdefined( self.rappel_shooting_loop ) || !self.rappel_shooting_loop )
|
|
thread ally_shooting_loop();
|
|
}
|
|
|
|
trackloop( var_0, var_1, var_2, var_3 )
|
|
{
|
|
self endon( "stop_rappel_aim_track" );
|
|
self endon( "death" );
|
|
var_4 = ( 0, 0, 0 );
|
|
var_5 = 0;
|
|
var_6 = 0;
|
|
var_7 = ( var_5, var_6, 0 );
|
|
var_8 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
var_9 = self geteye();
|
|
var_10 = ally_rappel_get_enemy();
|
|
|
|
if ( isdefined( var_10 ) )
|
|
{
|
|
self.shootent = var_10;
|
|
self.shootpos = self.shootent getshootatpos();
|
|
}
|
|
|
|
var_11 = undefined;
|
|
|
|
if ( isdefined( self.shootpos ) )
|
|
var_11 = self.shootpos;
|
|
|
|
if ( isdefined( self.shootent ) )
|
|
var_11 = self.shootent getshootatpos();
|
|
|
|
var_12 = isdefined( var_11 );
|
|
var_13 = ( 0, 0, 0 );
|
|
|
|
if ( var_12 )
|
|
var_13 = var_11;
|
|
|
|
var_14 = 0;
|
|
var_15 = isdefined( self.stepoutyaw );
|
|
|
|
if ( var_15 )
|
|
var_14 = self.stepoutyaw;
|
|
|
|
var_4 = self getaimangle( var_9, var_13, var_12, var_7, var_14, var_15, var_8 );
|
|
var_16 = var_4[0];
|
|
var_17 = var_4[1];
|
|
var_4 = undefined;
|
|
trackloop_setanimweights( var_0, var_1, var_2, var_3, var_16, var_17 );
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
trackloop_setanimweights( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_6 = self.rappel_enemy;
|
|
var_7 = isdefined( self.rappel_reloading ) && self.rappel_reloading;
|
|
var_8 = !var_7 && isdefined( var_6 ) && ( !isdefined( self.lastenemy ) || var_6 != self.lastenemy );
|
|
var_9 = isdefined( self.pitch_target ) && isdefined( self.yaw_target );
|
|
|
|
if ( var_7 )
|
|
{
|
|
var_4 = 0;
|
|
var_5 = 0;
|
|
|
|
if ( !isdefined( self.reload_aim_active ) )
|
|
{
|
|
self.reload_aim_active = 1;
|
|
var_9 = 1;
|
|
}
|
|
}
|
|
|
|
if ( var_8 || var_9 )
|
|
{
|
|
self.lastenemy = var_6;
|
|
ally_set_initial_weights( var_0, var_1, var_2, var_3, var_4, var_5 );
|
|
ally_transition_to_target_weights( var_0, var_1, var_2, var_3 );
|
|
}
|
|
else if ( var_7 )
|
|
{
|
|
self.reload_aim_active = undefined;
|
|
ally_reset_weights();
|
|
self notify( "aimed_forward" );
|
|
}
|
|
else if ( isdefined( var_6 ) )
|
|
ally_aim_closer_to( var_0, var_1, var_2, var_3, var_4, var_5 );
|
|
}
|
|
|
|
ally_reset_weights()
|
|
{
|
|
self clearanim( %rappel_aim, 0.2 );
|
|
}
|
|
|
|
ally_rappel_get_aim_yaw()
|
|
{
|
|
var_0 = self.angle_facing_wall - angleclamp180( self gettagangles( "tag_flash" )[1] );
|
|
return var_0;
|
|
}
|
|
|
|
ally_rappel_get_aim_pitch()
|
|
{
|
|
var_0 = -1 * angleclamp180( self gettagangles( "tag_flash" )[0] );
|
|
return var_0;
|
|
}
|
|
|
|
get_weight_change( var_0, var_1 )
|
|
{
|
|
if ( var_0 == 2 )
|
|
return var_1 / 8.7 * 0.1;
|
|
else if ( var_0 == 8 )
|
|
return var_1 / 2.2 * 0.1;
|
|
else if ( var_0 == 4 )
|
|
return var_1 / 8.8 * 0.1;
|
|
else if ( var_0 == 6 )
|
|
return var_1 / 9.1 * 0.1;
|
|
}
|
|
|
|
ally_aim_closer_to( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_6 = 0.1;
|
|
var_7 = 0.1;
|
|
var_8 = 1;
|
|
var_9 = ally_rappel_get_aim_yaw();
|
|
var_10 = var_5 - var_9;
|
|
|
|
if ( abs( var_10 ) < 1 )
|
|
var_8 = 0;
|
|
|
|
var_11 = ally_rappel_get_aim_pitch();
|
|
var_12 = var_4 - var_11;
|
|
|
|
if ( abs( var_12 ) < 1 )
|
|
var_8 = 0;
|
|
|
|
var_13 = abs( var_5 ) > 0;
|
|
var_14 = abs( var_10 ) > abs( var_12 );
|
|
var_15 = abs( var_10 ) > var_6;
|
|
var_16 = abs( var_4 ) > 0;
|
|
var_17 = abs( var_12 ) > var_7;
|
|
var_18 = 0;
|
|
|
|
if ( var_13 && var_14 && var_15 )
|
|
{
|
|
if ( var_5 > 0 )
|
|
_ally_aim_closer_set_anim_weight( var_2, 6, var_1, var_10, var_8 );
|
|
else if ( var_5 < 0 )
|
|
_ally_aim_closer_set_anim_weight( var_1, 4, var_2, var_10, var_8 );
|
|
}
|
|
else if ( var_16 && var_17 )
|
|
{
|
|
if ( var_4 > 0 )
|
|
_ally_aim_closer_set_anim_weight( var_3, 2, var_0, var_12, var_8 );
|
|
else if ( var_4 < 0 )
|
|
_ally_aim_closer_set_anim_weight( var_0, 8, var_3, var_12, var_8 );
|
|
}
|
|
}
|
|
|
|
_ally_aim_closer_set_anim_weight( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
var_5 = 0.1;
|
|
var_6 = 2;
|
|
|
|
if ( !var_4 )
|
|
var_6 = 0.5;
|
|
|
|
var_7 = self getanimweight( var_0 );
|
|
var_8 = get_weight_change( var_1, var_6 );
|
|
var_8 = var_8 * common_scripts\utility::sign( var_3 );
|
|
|
|
if ( var_1 == 4 || var_1 == 8 )
|
|
var_8 = var_8 * -1;
|
|
|
|
var_9 = var_7 + var_8;
|
|
var_9 = clamp( var_9, 0, 1 );
|
|
self setanimlimited( var_2, 0, var_5, 1, 1 );
|
|
self setanimlimited( var_0, var_9, var_5, 1, 1 );
|
|
}
|
|
|
|
ally_transition_to_target_weights( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( isdefined( self.aim2_target ) && _ally_transition_to_weight( var_0, 8, var_3, 2, self.aim2_target ) )
|
|
self.aim2_target = undefined;
|
|
|
|
if ( isdefined( self.aim4_target ) && _ally_transition_to_weight( var_1, 4, var_2, 6, self.aim4_target ) )
|
|
self.aim4_target = undefined;
|
|
|
|
if ( isdefined( self.aim6_target ) && _ally_transition_to_weight( var_2, 6, var_1, 4, self.aim6_target ) )
|
|
self.aim6_target = undefined;
|
|
|
|
if ( isdefined( self.aim8_target ) && _ally_transition_to_weight( var_3, 2, var_0, 8, self.aim8_target ) )
|
|
self.aim8_target = undefined;
|
|
|
|
if ( !isdefined( self.aim2_target ) && !isdefined( self.aim4_target ) && !isdefined( self.aim6_target ) && !isdefined( self.aim8_target ) )
|
|
{
|
|
self.pitch_target = undefined;
|
|
self.yaw_target = undefined;
|
|
}
|
|
}
|
|
|
|
_ally_transition_to_weight( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
var_5 = 0.1;
|
|
var_6 = 0.1;
|
|
var_7 = 0.1;
|
|
var_8 = 0;
|
|
var_9 = 0;
|
|
var_10 = 15;
|
|
var_11 = self getanimweight( var_2 );
|
|
|
|
if ( var_11 > 0 )
|
|
{
|
|
var_9 = 0 - var_11;
|
|
var_5 = get_weight_change( var_3, var_10 );
|
|
var_0 = var_2;
|
|
}
|
|
else
|
|
{
|
|
var_11 = self getanimweight( var_0 );
|
|
var_9 = var_4 - var_11;
|
|
|
|
if ( abs( var_9 ) <= var_6 )
|
|
return 1;
|
|
|
|
var_5 = get_weight_change( var_1, var_10 );
|
|
}
|
|
|
|
var_5 = var_5 * common_scripts\utility::sign( var_9 );
|
|
|
|
if ( var_5 > 0 )
|
|
var_5 = min( var_5, var_9 );
|
|
else
|
|
var_5 = max( var_5, var_9 );
|
|
|
|
var_8 = var_11 + var_5;
|
|
self setanimlimited( var_0, var_8, var_7, 1, 1 );
|
|
return 0;
|
|
}
|
|
|
|
ally_set_initial_weights( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
if ( var_5 >= 0 )
|
|
{
|
|
self.aim6_target = _ally_get_yaw_right_aim_weight( var_5 );
|
|
self.aim4_target = undefined;
|
|
}
|
|
else if ( var_5 < 0 )
|
|
{
|
|
self.aim4_target = _ally_get_yaw_left_aim_weight( var_5 );
|
|
self.aim6_target = undefined;
|
|
}
|
|
|
|
if ( var_4 >= 0 )
|
|
{
|
|
self.aim8_target = _ally_get_pitch_up_aim_weight( var_4 );
|
|
self.aim2_target = undefined;
|
|
}
|
|
else if ( var_4 < 0 )
|
|
{
|
|
self.aim2_target = _ally_get_pitch_down_aim_weight( var_4 );
|
|
self.aim8_target = undefined;
|
|
}
|
|
|
|
self.pitch_target = var_4;
|
|
self.yaw_target = var_5;
|
|
}
|
|
|
|
_ally_get_pitch_down_aim_weight( var_0 )
|
|
{
|
|
return clamp( abs( var_0 ) * 0.0517 - 0.0138, 0, 1.0 );
|
|
}
|
|
|
|
_ally_get_pitch_up_aim_weight( var_0 )
|
|
{
|
|
return clamp( abs( var_0 ) * 0.0111 + 0.0032, 0, 1.0 );
|
|
}
|
|
|
|
_ally_get_yaw_right_aim_weight( var_0 )
|
|
{
|
|
return clamp( abs( var_0 ) * 0.0112 - 0.0025, 0, 1.0 );
|
|
}
|
|
|
|
_ally_get_yaw_left_aim_weight( var_0 )
|
|
{
|
|
return clamp( abs( var_0 ) * 0.011 + 0.0031, 0, 1.0 );
|
|
}
|
|
|
|
rappel_aim_get_parent_node( var_0 )
|
|
{
|
|
if ( var_0 == 2 )
|
|
return %rappel_aim_8;
|
|
else if ( var_0 == 4 )
|
|
return %rappel_aim_4;
|
|
else if ( var_0 == 6 )
|
|
return %rappel_aim_6;
|
|
else if ( var_0 == 8 )
|
|
return %rappel_aim_2;
|
|
else
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
ally_rappel_get_aim_anim( var_0 )
|
|
{
|
|
if ( var_0 == 2 )
|
|
return %cnd_rappel_stealth_aim_8_baker_add;
|
|
else if ( var_0 == 4 )
|
|
return %cnd_rappel_stealth_aim_4_baker_add;
|
|
else if ( var_0 == 5 )
|
|
return %cnd_rappel_stealth_aim_5_baker_add;
|
|
else if ( var_0 == 6 )
|
|
return %cnd_rappel_stealth_aim_6_baker_add;
|
|
else if ( var_0 == 8 )
|
|
return %cnd_rappel_stealth_aim_2_baker_add;
|
|
else
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
ally_shooting_loop()
|
|
{
|
|
self endon( "stop_rappel_aim_shoot" );
|
|
self endon( "death" );
|
|
self.rappel_shooting_loop = 1;
|
|
|
|
for (;;)
|
|
{
|
|
common_scripts\utility::waitframe();
|
|
|
|
if ( !isdefined( self.israppelshooting ) || !self.israppelshooting )
|
|
continue;
|
|
|
|
var_3 = isdefined( self.shootent );
|
|
ally_rappel_reload();
|
|
|
|
if ( aimed_at_shoot_ent_or_pos() && var_3 )
|
|
{
|
|
self.shootstyle = "burst";
|
|
self.fastburst = 0;
|
|
ally_shoot_at_enemy();
|
|
hide_fire_show_aim_idle();
|
|
}
|
|
}
|
|
}
|
|
|
|
aimed_at_shoot_ent_or_pos()
|
|
{
|
|
var_0 = 5;
|
|
var_1 = 5;
|
|
|
|
if ( !isdefined( self.shootpos ) )
|
|
return 0;
|
|
|
|
var_2 = self getmuzzleangle();
|
|
var_3 = self getmuzzlepos();
|
|
var_4 = vectortoangles( self.shootpos - var_3 );
|
|
var_5 = animscripts\utility::absangleclamp180( var_2[1] - var_4[1] );
|
|
|
|
if ( var_5 > var_0 )
|
|
return 0;
|
|
|
|
return animscripts\utility::absangleclamp180( var_2[0] - var_4[0] ) <= var_1;
|
|
}
|
|
|
|
ally_shoot_at_enemy()
|
|
{
|
|
self endon( "shoot_behavior_change" );
|
|
self endon( "stopShooting" );
|
|
var_0 = ally_get_fire_animation();
|
|
|
|
if ( animscripts\combat_utility::aimbutdontshoot() )
|
|
return;
|
|
|
|
if ( self.shootstyle == "full" )
|
|
ally_fire_until_out_of_ammo( var_0, 1, animscripts\shared::decidenumshotsforfull() );
|
|
else if ( self.shootstyle == "burst" || self.shootstyle == "semi" )
|
|
{
|
|
var_1 = 4;
|
|
ally_fire_until_out_of_ammo( var_0, 1, var_1 );
|
|
}
|
|
else if ( self.shootstyle == "single" )
|
|
ally_fire_until_out_of_ammo( var_0, 1, 1 );
|
|
else
|
|
self waittill( "hell freezes over" );
|
|
}
|
|
|
|
ally_fire_until_out_of_ammo( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = "fireAnim_" + animscripts\combat_utility::getuniqueflagnameindex();
|
|
maps\_gameskill::resetmisstime();
|
|
show_fire_hide_aim_idle();
|
|
var_4 = 1.0;
|
|
|
|
if ( isdefined( self.shootrateoverride ) )
|
|
var_4 = self.shootrateoverride;
|
|
else if ( self.shootstyle == "full" )
|
|
var_4 = animscripts\weaponlist::autoshootanimrate() * randomfloatrange( 0.5, 1.0 );
|
|
else if ( self.shootstyle == "burst" )
|
|
var_4 = animscripts\weaponlist::burstshootanimrate();
|
|
else if ( animscripts\utility::usingsidearm() )
|
|
var_4 = 3.0;
|
|
else if ( animscripts\utility::usingshotgun() )
|
|
var_4 = animscripts\combat_utility::shotgunfirerate();
|
|
|
|
self setflaggedanimknobrestart( var_3, var_0, 1, 0.2, var_4 );
|
|
ally_fire_until_out_of_ammo_internal( var_3, var_0, var_1, var_2 );
|
|
hide_fire_show_aim_idle();
|
|
}
|
|
|
|
ally_fire_until_out_of_ammo_internal( var_0, var_1, var_2, var_3 )
|
|
{
|
|
self endon( "enemy" );
|
|
|
|
if ( var_2 )
|
|
{
|
|
thread animscripts\combat_utility::notifyonanimend( var_0, "fireAnimEnd" );
|
|
self endon( "fireAnimEnd" );
|
|
}
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = -1;
|
|
|
|
var_4 = 0;
|
|
var_5 = animhasnotetrack( var_1, "fire" );
|
|
thread animscripts\combat_utility::fireuntiloutofammo_waittillended();
|
|
|
|
while ( var_4 < var_3 && var_3 > 0 )
|
|
{
|
|
if ( var_5 )
|
|
self waittillmatch( var_0, "fire" );
|
|
|
|
if ( !self.bulletsinclip )
|
|
{
|
|
if ( !animscripts\combat_utility::cheatammoifnecessary() )
|
|
break;
|
|
}
|
|
|
|
shoot_at_shoot_ent_or_pos();
|
|
self.bulletsinclip--;
|
|
var_4++;
|
|
thread animscripts\combat_utility::shotgunpumpsound( var_0 );
|
|
|
|
if ( self.fastburst && var_4 == var_3 )
|
|
break;
|
|
|
|
if ( !var_5 || var_3 == 1 && self.shootstyle == "single" )
|
|
self waittillmatch( var_0, "end" );
|
|
}
|
|
|
|
self shootstopsound();
|
|
|
|
if ( var_2 )
|
|
self notify( "fireAnimEnd" );
|
|
}
|
|
|
|
shoot_at_shoot_ent_or_pos()
|
|
{
|
|
if ( isdefined( self.shootpos ) )
|
|
{
|
|
var_0 = self getmuzzlepos();
|
|
var_1 = self.shootpos;
|
|
var_2 = 4;
|
|
|
|
if ( !isdefined( self.perfectaccuracy ) || self.perfectaccuracy )
|
|
var_3 = bulletspread( var_0, var_1, var_2 );
|
|
else
|
|
var_3 = var_1;
|
|
|
|
self.a.lastshoottime = gettime();
|
|
self notify( "shooting" );
|
|
self shoot( 1, var_3, 1 );
|
|
}
|
|
}
|
|
|
|
start_fire_and_aim_idle_thread()
|
|
{
|
|
if ( !isdefined( self.rappel_aim_idle_thread ) )
|
|
{
|
|
self.lastenemy = undefined;
|
|
thread custom_aim_internal();
|
|
}
|
|
}
|
|
|
|
end_fire_and_anim_idle_thread()
|
|
{
|
|
end_aim_idle_thread();
|
|
self clearanim( %rappel_fire, 0.1 );
|
|
self notify( "stop_rappel_aim_track" );
|
|
}
|
|
|
|
show_fire_hide_aim_idle()
|
|
{
|
|
if ( isdefined( self.rappel_aim_idle_thread ) )
|
|
self setanim( %rappel_idle, 0, 0.2 );
|
|
|
|
self setanim( %rappel_fire, 1, 0.1 );
|
|
}
|
|
|
|
hide_fire_show_aim_idle()
|
|
{
|
|
if ( isdefined( self.rappel_aim_idle_thread ) )
|
|
self setanim( %rappel_idle, 1, 0.2 );
|
|
|
|
self setanim( %rappel_fire, 0, 0.1 );
|
|
}
|
|
|
|
ally_get_fire_animation()
|
|
{
|
|
return %cnd_rappel_stealth_fire_baker_add;
|
|
}
|
|
|
|
ally_rappel_reload()
|
|
{
|
|
if ( !animscripts\combat_utility::needtoreload( 0.1 ) )
|
|
return 0;
|
|
|
|
self.rappel_reloading = 1;
|
|
common_scripts\utility::waittill_notify_or_timeout_return( "aimed_forward", 5.0 );
|
|
end_fire_and_anim_idle_thread();
|
|
var_0 = %cnd_rappel_fire_reload_1;
|
|
self.finishedreload = 0;
|
|
|
|
if ( weaponclass( self.weapon ) == "pistol" )
|
|
self orientmode( "face default" );
|
|
|
|
ally_do_reload_anim( var_0 );
|
|
self notify( "abort_reload" );
|
|
|
|
if ( self.finishedreload )
|
|
animscripts\weaponlist::refillclip();
|
|
|
|
self clearanim( %cnd_rappel_fire_reload_1, 0.2 );
|
|
self.keepclaimednode = 0;
|
|
self.rappel_reloading = undefined;
|
|
self notify( "rappel_done_reloading" );
|
|
self.finishedreload = undefined;
|
|
start_fire_and_aim_idle_thread();
|
|
common_scripts\utility::waitframe();
|
|
return 1;
|
|
}
|
|
|
|
ally_do_reload_anim( var_0 )
|
|
{
|
|
self endon( "abort_reload" );
|
|
var_1 = 1;
|
|
|
|
if ( !animscripts\utility::usingsidearm() && !animscripts\utility::isshotgun( self.weapon ) && isdefined( self.rappel_enemy ) && self cansee( self.rappel_enemy ) && distancesquared( self.rappel_enemy.origin, self.origin ) < 1048576 )
|
|
var_1 = 1.2;
|
|
|
|
var_2 = "reload_" + animscripts\combat_utility::getuniqueflagnameindex();
|
|
self clearanim( %root, 0.2 );
|
|
self setflaggedanimrestart( var_2, var_0, 1, 0.2, var_1 );
|
|
animscripts\shared::donotetracks( var_2 );
|
|
self.finishedreload = 1;
|
|
}
|
|
|
|
ally_rappel_start_movement_horizontal_internal( var_0, var_1, var_2 )
|
|
{
|
|
level endon( var_2 );
|
|
|
|
if ( var_0 == "stealth" )
|
|
level endon( self.stealth_broken_flag );
|
|
|
|
var_3 = 2;
|
|
var_4 = self.animname + "_is_moving";
|
|
common_scripts\utility::flag_clear( var_4 );
|
|
var_5 = self.animname + "_stop_anim_move";
|
|
common_scripts\utility::flag_clear( var_5 );
|
|
self.movement_back = 0;
|
|
self.move_type = "idle";
|
|
self.last_move_time = 0;
|
|
var_6 = "none";
|
|
thread animate_after_movement( var_4, var_0 );
|
|
|
|
for (;;)
|
|
{
|
|
if ( isdefined( self.pause_horz ) && self.pause_horz )
|
|
{
|
|
common_scripts\utility::waitframe();
|
|
continue;
|
|
}
|
|
|
|
var_7 = isdefined( self.move_to_see_enemies ) && self.move_to_see_enemies;
|
|
|
|
if ( !var_7 )
|
|
var_6 = "none";
|
|
|
|
var_8 = ally_rappel_distance2dsquared_to_player();
|
|
var_9 = !isdefined( self.player_moving_toward_me ) || self.player_moving_toward_me;
|
|
var_10 = var_8 <= 3600;
|
|
var_11 = var_9 || var_10;
|
|
|
|
if ( var_8 < self.close_distance_sq || var_6 == "away" )
|
|
{
|
|
if ( !common_scripts\utility::flag( var_4 ) && var_9 && _ally_is_current_volume( self.in_volume ) )
|
|
thread animate_til_volume( "away", var_4, self.center_volume, self.out_volume, var_2, var_0 );
|
|
else if ( !common_scripts\utility::flag( var_4 ) && var_9 && _ally_is_current_volume( self.center_volume ) )
|
|
thread animate_til_volume( "away", var_4, self.out_volume, undefined, var_2, var_0 );
|
|
else if ( !common_scripts\utility::flag( var_4 ) && var_9 && _ally_is_current_volume( self.out_volume ) )
|
|
{
|
|
|
|
}
|
|
else if ( self.movement_back )
|
|
thread animate_opposite_direction( var_4, var_2, var_0, common_scripts\utility::flag( var_4 ) );
|
|
}
|
|
else if ( var_8 > self.far_distance_sq || var_6 == "back" )
|
|
{
|
|
var_12 = gettime() - self.last_move_time;
|
|
|
|
if ( common_scripts\utility::flag( var_4 ) || var_12 < var_3 * 1000 || var_9 )
|
|
{
|
|
common_scripts\utility::waitframe();
|
|
continue;
|
|
}
|
|
|
|
if ( _ally_is_current_volume( self.out_volume ) )
|
|
{
|
|
var_11 = 0;
|
|
var_13 = self.center_volume;
|
|
|
|
if ( var_0 == "combat" )
|
|
{
|
|
var_14 = common_scripts\utility::getstruct( self.center_volume.targetname + "_struct_" + var_1, "targetname" );
|
|
var_15 = distance2dsquared( level.player.origin, var_14.origin );
|
|
var_11 = var_15 > self.distance_from_next_volume_sq;
|
|
}
|
|
else
|
|
{
|
|
var_15 = distance2dsquared( level.player.origin, var_13 getcentroid() );
|
|
var_11 = var_15 > self.distance_from_next_volume_sq;
|
|
}
|
|
|
|
if ( var_11 )
|
|
thread animate_til_volume( "back", var_4, self.center_volume, self.in_volume, var_2, var_0 );
|
|
}
|
|
else if ( _ally_is_current_volume( self.center_volume ) )
|
|
{
|
|
var_11 = 0;
|
|
var_13 = self.in_volume;
|
|
|
|
if ( var_0 == "combat" )
|
|
{
|
|
var_14 = common_scripts\utility::getstruct( self.in_volume.targetname + "_struct_" + var_1, "targetname" );
|
|
var_15 = distance2dsquared( level.player.origin, var_14.origin );
|
|
var_11 = var_15 > self.distance_from_next_volume_sq;
|
|
}
|
|
else
|
|
{
|
|
var_15 = distance2dsquared( level.player.origin, var_13 getcentroid() );
|
|
var_11 = var_15 > self.distance_from_next_volume_sq;
|
|
}
|
|
|
|
if ( var_11 )
|
|
thread animate_til_volume( "back", var_4, self.in_volume, undefined, var_2, var_0 );
|
|
}
|
|
else if ( _ally_is_current_volume( self.in_volume ) )
|
|
{
|
|
|
|
}
|
|
else
|
|
thread animate_til_volume( "back", var_4, self.center_volume, self.in_volume, var_2, var_0 );
|
|
}
|
|
else if ( !common_scripts\utility::flag( var_4 ) && isdefined( self.move_to_see_enemies ) && self.move_to_see_enemies )
|
|
{
|
|
var_16 = 0;
|
|
var_17 = getaiarray( "axis" );
|
|
|
|
foreach ( var_19 in var_17 )
|
|
{
|
|
if ( self cansee( var_19 ) )
|
|
{
|
|
var_16 = 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( var_6 == "away" || var_6 == "none" )
|
|
var_6 = "back";
|
|
else
|
|
var_6 = "away";
|
|
}
|
|
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
ally_rappel_distance2dsquared_to_player()
|
|
{
|
|
var_0 = self gettagorigin( "J_MainRoot" );
|
|
|
|
if ( isdefined( level.rpl_plyr_anim_origin ) )
|
|
var_1 = level.rpl_plyr_anim_origin.origin;
|
|
else
|
|
var_1 = level.player.origin;
|
|
|
|
var_2 = distance2dsquared( var_0, var_1 );
|
|
return var_2;
|
|
}
|
|
|
|
_ally_is_current_volume( var_0 )
|
|
{
|
|
return isdefined( var_0 ) && ( self istouching( var_0 ) || self.last_volume == var_0 );
|
|
}
|
|
|
|
_ally_set_last_volume()
|
|
{
|
|
var_0 = -1;
|
|
self.last_volume = undefined;
|
|
|
|
if ( isdefined( self.in_volume ) )
|
|
{
|
|
self.last_volume = self.in_volume;
|
|
|
|
if ( self istouching( self.in_volume ) )
|
|
return;
|
|
|
|
var_0 = distance2dsquared( self.origin, self.in_volume getcentroid() );
|
|
}
|
|
|
|
if ( isdefined( self.center_volume ) )
|
|
{
|
|
var_1 = distance2dsquared( self.origin, self.center_volume getcentroid() );
|
|
|
|
if ( var_0 == -1 || var_1 < var_0 || self istouching( self.center_volume ) )
|
|
{
|
|
self.last_volume = self.center_volume;
|
|
var_0 = var_1;
|
|
}
|
|
|
|
if ( self istouching( self.center_volume ) )
|
|
return;
|
|
}
|
|
|
|
if ( isdefined( self.out_volume ) )
|
|
{
|
|
var_1 = distance2dsquared( self.origin, self.out_volume getcentroid() );
|
|
|
|
if ( var_0 == -1 || var_1 < var_0 || self istouching( self.out_volume ) )
|
|
self.last_volume = self.out_volume;
|
|
}
|
|
}
|
|
|
|
ally_rappel_movement_setup( var_0, var_1 )
|
|
{
|
|
if ( var_0 == "stealth" )
|
|
{
|
|
self.center_volume = getent( self.animname + "_stealth_in", "targetname" );
|
|
self.out_volume = getent( self.animname + "_stealth_out", "targetname" );
|
|
self.in_volume = getent( self.animname + "_stealth_center", "targetname" );
|
|
_ally_set_last_volume();
|
|
}
|
|
else
|
|
{
|
|
self.center_volume = getent( self.animname + "_center_combat", "targetname" );
|
|
self.in_volume = getent( self.animname + "_in_combat", "targetname" );
|
|
self.out_volume = getent( self.animname + "_out_combat", "targetname" );
|
|
self.last_volume = getent( self.animname + "_in_combat", "targetname" );
|
|
}
|
|
|
|
if ( self.animname == "rorke" )
|
|
{
|
|
if ( var_0 == "stealth" )
|
|
{
|
|
self.close_distance_sq = 48400;
|
|
self.far_distance_sq = 176400;
|
|
self.distance_from_next_volume_sq = 60025;
|
|
}
|
|
else
|
|
{
|
|
self.close_distance_sq = 50625;
|
|
self.far_distance_sq = 95625;
|
|
self.distance_from_next_volume_sq = 60025;
|
|
}
|
|
}
|
|
else if ( var_0 == "stealth" )
|
|
{
|
|
self.close_distance_sq = 48400;
|
|
self.far_distance_sq = 176400;
|
|
self.distance_from_next_volume_sq = 60025;
|
|
}
|
|
else
|
|
{
|
|
self.close_distance_sq = 28900;
|
|
self.far_distance_sq = 136900;
|
|
self.distance_from_next_volume_sq = 36100;
|
|
}
|
|
}
|
|
|
|
animate_til_volume( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
|
|
{
|
|
level endon( var_4 );
|
|
|
|
if ( var_5 == "stealth" )
|
|
level endon( self.stealth_broken_flag );
|
|
|
|
level endon( self.animname + "_stop_anim_move" );
|
|
|
|
if ( !isdefined( var_6 ) )
|
|
var_6 = 1;
|
|
|
|
self notify( "stop_loop" );
|
|
ally_rappel_stop_shooting();
|
|
ally_rappel_stop_aiming();
|
|
ally_stop_calm_idle();
|
|
common_scripts\utility::flag_set( var_1 );
|
|
|
|
if ( var_0 == "away" )
|
|
{
|
|
self.movement_back = 0;
|
|
self.move_type = "move_away_start";
|
|
|
|
if ( var_6 )
|
|
maps\_anim::anim_single_solo( self, "move_away_start" );
|
|
|
|
thread maps\_anim::anim_loop_solo( self, "move_away", "stop_loop" );
|
|
self.move_type = "move_away";
|
|
}
|
|
else if ( var_0 == "back" )
|
|
{
|
|
self.movement_back = 1;
|
|
self.move_type = "move_back_start";
|
|
|
|
if ( var_6 )
|
|
maps\_anim::anim_single_solo( self, "move_back_start" );
|
|
|
|
thread maps\_anim::anim_loop_solo( self, "move_back", "stop_loop" );
|
|
self.move_type = "move_back";
|
|
}
|
|
|
|
if ( !isdefined( var_2 ) && isdefined( var_3 ) )
|
|
{
|
|
var_2 = var_3;
|
|
var_3 = undefined;
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
if ( self istouching( var_2 ) )
|
|
{
|
|
var_7 = ally_rappel_distance2dsquared_to_player();
|
|
|
|
if ( var_0 == "away" )
|
|
{
|
|
if ( var_7 < self.close_distance_sq )
|
|
{
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
self.last_volume = var_2;
|
|
var_2 = var_3;
|
|
var_3 = undefined;
|
|
}
|
|
else
|
|
{
|
|
self.last_volume = var_2;
|
|
self notify( "stop_loop" );
|
|
waittillframeend;
|
|
self.move_type = "move_away_stop";
|
|
maps\_anim::anim_single_solo( self, "move_away_stop" );
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
self.last_volume = var_2;
|
|
self notify( "stop_loop" );
|
|
waittillframeend;
|
|
self.move_type = "move_away_stop";
|
|
maps\_anim::anim_single_solo( self, "move_away_stop" );
|
|
break;
|
|
}
|
|
}
|
|
else if ( var_7 > self.far_distance_sq )
|
|
{
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
self.last_volume = var_2;
|
|
var_2 = var_3;
|
|
var_3 = undefined;
|
|
}
|
|
else
|
|
{
|
|
self.last_volume = var_2;
|
|
self.movement_back = 0;
|
|
self notify( "stop_loop" );
|
|
waittillframeend;
|
|
self.move_type = "move_back_stop";
|
|
maps\_anim::anim_single_solo( self, "move_back_stop" );
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
self.last_volume = var_2;
|
|
self.movement_back = 0;
|
|
self notify( "stop_loop" );
|
|
waittillframeend;
|
|
self.move_type = "move_back_stop";
|
|
maps\_anim::anim_single_solo( self, "move_back_stop" );
|
|
break;
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
common_scripts\utility::flag_clear( var_1 );
|
|
self.last_move_time = gettime();
|
|
thread animate_after_movement( var_1, var_5 );
|
|
}
|
|
|
|
animate_opposite_direction( var_0, var_1, var_2, var_3 )
|
|
{
|
|
level endon( var_1 );
|
|
|
|
if ( var_2 == "stealth" )
|
|
level endon( self.stealth_broken_flag );
|
|
|
|
common_scripts\utility::flag_set( self.animname + "_stop_anim_move" );
|
|
common_scripts\utility::flag_clear( var_0 );
|
|
common_scripts\utility::flag_set( var_0 );
|
|
self.movement_back = 0;
|
|
|
|
if ( var_3 )
|
|
{
|
|
self.move_type = "turn_away";
|
|
self notify( "stop_loop" );
|
|
maps\_anim::anim_single_solo( self, "turn_away" );
|
|
self.movement_back = 0;
|
|
}
|
|
|
|
common_scripts\utility::flag_clear( self.animname + "_stop_anim_move" );
|
|
self.last_move_time = gettime();
|
|
|
|
if ( isdefined( self.in_volume ) && self.last_volume == self.in_volume )
|
|
thread animate_til_volume( "away", var_0, self.center_volume, self.out_volume, var_1, var_2, !var_3 );
|
|
else if ( isdefined( self.center_volume ) && self.last_volume == self.center_volume )
|
|
thread animate_til_volume( "away", var_0, self.out_volume, undefined, var_1, var_2, !var_3 );
|
|
else if ( isdefined( self.out_volume ) && self.last_volume == self.out_volume )
|
|
thread animate_til_volume( "away", var_0, self.out_volume, undefined, var_1, var_2, !var_3 );
|
|
else
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
animate_after_movement( var_0, var_1 )
|
|
{
|
|
if ( var_1 == "stealth" )
|
|
{
|
|
if ( common_scripts\utility::flag( self.stealth_broken_flag ) )
|
|
{
|
|
ally_stop_calm_idle();
|
|
ally_rappel_start_aiming( var_1 );
|
|
ally_rappel_start_shooting();
|
|
}
|
|
else if ( isdefined( self.start_aiming_after_move ) && self.start_aiming_after_move )
|
|
{
|
|
ally_stop_calm_idle();
|
|
ally_rappel_start_aiming( var_1 );
|
|
self.start_aiming_after_move = 0;
|
|
self notify( "aim_after_move" );
|
|
}
|
|
else
|
|
{
|
|
ally_rappel_stop_aiming();
|
|
ally_start_calm_idle( "stealth" );
|
|
}
|
|
}
|
|
else if ( isdefined( level.flag_to_check ) && !common_scripts\utility::flag( level.flag_to_check ) )
|
|
{
|
|
if ( level.flag_to_check == "all_rappel_one_enemies_in_front_dead" )
|
|
{
|
|
ally_rappel_start_aiming( var_1 );
|
|
ally_rappel_start_shooting();
|
|
}
|
|
else if ( level.flag_to_check == "all_rappel_two_enemies_in_front_dead" )
|
|
{
|
|
ally_rappel_start_aiming( var_1 );
|
|
ally_rappel_start_shooting();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
self notify( "stop_loop" );
|
|
ally_rappel_start_aiming( var_1 );
|
|
}
|
|
|
|
self.move_type = "idle";
|
|
}
|
|
|
|
ally_rappel_get_rope_start( var_0 )
|
|
{
|
|
if ( var_0 == "stealth" )
|
|
{
|
|
if ( self.animname == "rorke" )
|
|
{
|
|
var_1 = common_scripts\utility::getstruct( "rorke_rope_ref_stealth", "targetname" );
|
|
return var_1;
|
|
}
|
|
else
|
|
{
|
|
var_1 = common_scripts\utility::getstruct( "baker_rope_ref_stealth", "targetname" );
|
|
return var_1;
|
|
}
|
|
}
|
|
else if ( var_0 == "inverted" )
|
|
{
|
|
if ( self.animname == "rorke" )
|
|
{
|
|
var_1 = common_scripts\utility::getstruct( "rorke_rope_ref_inverted", "targetname" );
|
|
return var_1;
|
|
}
|
|
else
|
|
{
|
|
var_1 = common_scripts\utility::getstruct( "baker_rope_ref_inverted", "targetname" );
|
|
return var_1;
|
|
}
|
|
}
|
|
else if ( var_0 == "combat" )
|
|
{
|
|
if ( self.animname == "rorke" )
|
|
{
|
|
var_1 = common_scripts\utility::getstruct( "rorke_rope_ref_combat", "targetname" );
|
|
return var_1;
|
|
}
|
|
else
|
|
{
|
|
var_1 = common_scripts\utility::getstruct( "baker_rope_ref_combat", "targetname" );
|
|
return var_1;
|
|
}
|
|
}
|
|
}
|
|
|
|
#using_animtree("animated_props");
|
|
|
|
ally_rappel_setup_rope( var_0, var_1 )
|
|
{
|
|
var_2 = var_1 common_scripts\utility::spawn_tag_origin();
|
|
var_3 = spawn( "script_model", var_2.origin );
|
|
var_3.angles = var_1.angles + ( 0, -90, 0 );
|
|
var_3 setmodel( "generic_prop_raven" );
|
|
var_3 useanimtree( #animtree );
|
|
var_3 linkto( var_2, "tag_origin" );
|
|
self.rappel_physical_rope_animation_origin = var_3;
|
|
self.rappel_physical_rope_origin = var_2;
|
|
self.rope_unwind_anim = %cnd_rappel_inv_top_rope_unwind;
|
|
self.rope_unwind_length = 2254.0;
|
|
var_4 = ( 0, 0, 0 );
|
|
|
|
if ( var_0 == "combat" )
|
|
var_4 = ( 0, 235, 0 );
|
|
|
|
self.cnd_rappel_tele_rope = maps\_utility::spawn_anim_model( "cnd_rappel_tele_rope" );
|
|
self.cnd_rappel_tele_rope.origin = self.rappel_physical_rope_animation_origin.origin;
|
|
self.cnd_rappel_tele_rope.angles = ( 0, 0, 0 );
|
|
self.cnd_rappel_tele_rope linkto( self.rappel_physical_rope_animation_origin, "J_prop_1", ( 0, 0, 0 ), var_4 );
|
|
self.cnd_rappel_tele_rope setanim( self.rope_unwind_anim, 1, 0, 0 );
|
|
}
|
|
|
|
ally_rappel_rope( var_0, var_1 )
|
|
{
|
|
self endon( "stop_rope_management" );
|
|
|
|
if ( isdefined( level.start_point ) && level.start_point == "rappel_stealth" && var_0 == "stealth" )
|
|
wait 0.5;
|
|
|
|
var_2 = 46;
|
|
var_3 = 1.0 / self.rope_unwind_length;
|
|
var_4 = maps\cornered_code::rappel_get_plane_normal_left( var_0 );
|
|
var_5 = maps\cornered_code::rappel_get_plane_normal_out( var_0 );
|
|
var_6 = maps\cornered_code::rappel_get_plane_d( var_4, var_1.origin );
|
|
var_7 = maps\cornered_code::rappel_get_plane_d( var_5, var_1.origin );
|
|
|
|
for (;;)
|
|
{
|
|
var_8 = self gettagorigin( "tag_stowed_back" );
|
|
var_9 = distance( var_8, var_1.origin );
|
|
var_10 = vectordot( var_4, var_8 ) + var_6;
|
|
var_11 = -1 * asin( var_10 / var_9 );
|
|
var_10 = vectordot( var_5, var_8 ) + var_7;
|
|
var_12 = -1 * asin( var_10 / var_9 );
|
|
self.rappel_physical_rope_origin.angles = ( var_12, self.rappel_physical_rope_origin.angles[1], var_11 );
|
|
var_13 = var_9;
|
|
var_14 = var_13 - var_2;
|
|
var_15 = var_14 * var_3;
|
|
var_15 = clamp( var_15, 0, 0.9999 );
|
|
var_16 = self.cnd_rappel_tele_rope getanimtime( self.rope_unwind_anim );
|
|
|
|
if ( var_15 == var_16 )
|
|
{
|
|
common_scripts\utility::waitframe();
|
|
continue;
|
|
}
|
|
|
|
self.cnd_rappel_tele_rope setanimtime( self.rope_unwind_anim, var_15 );
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|