2024-02-13 13:20:49 +01:00

217 lines
6.4 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("generic_human");
movecqb()
{
animscripts\run::standrun_checkchangeweapon();
if ( self.a.pose != "stand" )
{
self clearanim( %root, 0.2 );
if ( self.a.pose == "prone" )
animscripts\utility::exitpronewrapper( 1 );
self.a.pose = "stand";
}
self.a.movement = self.movemode;
cqbtracking();
if ( animscripts\run::move_checkstairstransition() )
return;
self clearanim( %stair_transitions, 0.2 );
if ( animscripts\run::standrun_checkreload() )
return;
if ( isdefined( self.timeofmaincqbupdate ) )
var_0 = self.timeofmaincqbupdate;
else
var_0 = 0;
self.timeofmaincqbupdate = gettime();
var_1 = determinecqbanim();
if ( self.stairsstate == "none" )
var_2 = 0.3;
else
var_2 = 0.1;
var_3 = 0.2;
var_4 = %walk_and_run_loops;
if ( self.timeofmaincqbupdate - var_0 > var_3 * 1000 )
var_4 = %stand_and_crouch;
self setflaggedanimknoball( "runanim", var_1, var_4, 1, var_2, self.moveplaybackrate, 1 );
cqb_playfacialanim( var_1 );
animscripts\run::setmovenonforwardanims( animscripts\utility::lookupanim( "cqb", "move_b" ), animscripts\utility::lookupanim( "cqb", "move_l" ), animscripts\utility::lookupanim( "cqb", "move_r" ) );
thread animscripts\run::setcombatstandmoveanimweights( "cqb" );
animscripts\notetracks::donotetracksfortime( var_3, "runanim" );
}
determinecqbanim()
{
if ( isdefined( self.custommoveanimset ) && isdefined( self.custommoveanimset["cqb"] ) )
return animscripts\run::getrunanim();
if ( self.stairsstate == "up" )
return animscripts\utility::lookupanim( "cqb", "stairs_up" );
if ( self.stairsstate == "down" )
return animscripts\utility::lookupanim( "cqb", "stairs_down" );
if ( self.movemode == "walk" )
return animscripts\utility::lookupanim( "cqb", "move_f" );
if ( isdefined( self.a.bdisablemovetwitch ) && self.a.bdisablemovetwitch )
return animscripts\utility::lookupanim( "cqb", "straight" );
var_0 = animscripts\utility::lookupanim( "cqb", "straight_twitch" );
if ( !isdefined( var_0 ) || var_0.size == 0 )
return animscripts\utility::lookupanim( "cqb", "straight" );
var_1 = animscripts\utility::getrandomintfromseed( self.a.runloopcount, 4 );
if ( var_1 == 0 )
{
var_2 = animscripts\utility::getrandomintfromseed( self.a.runloopcount, var_0.size );
return var_0[var_2];
}
return animscripts\utility::lookupanim( "cqb", "straight" );
}
cqb_reloadinternal()
{
self endon( "movemode" );
self orientmode( "face motion" );
var_0 = "reload_" + animscripts\combat_utility::getuniqueflagnameindex();
var_1 = animscripts\utility::lookupanim( "cqb", "reload" );
if ( isarray( var_1 ) )
var_1 = var_1[randomint( var_1.size )];
self setflaggedanimknoballrestart( var_0, var_1, %body, 1, 0.25 );
cqb_playfacialanim( var_1 );
animscripts\run::setmovenonforwardanims( animscripts\utility::lookupanim( "cqb", "move_b" ), animscripts\utility::lookupanim( "cqb", "move_l" ), animscripts\utility::lookupanim( "cqb", "move_r" ) );
thread animscripts\run::setcombatstandmoveanimweights( "cqb" );
animscripts\shared::donotetracks( var_0 );
}
cqbtracking()
{
var_0 = self.stairsstate != "none";
var_1 = !var_0 && animscripts\move::mayshootwhilemoving();
animscripts\run::setshootwhilemoving( var_1 );
if ( var_0 )
animscripts\run::endfaceenemyaimtracking();
else
thread animscripts\run::faceenemyaimtracking();
}
setupcqbpointsofinterest()
{
level.cqbpointsofinterest = [];
var_0 = getentarray( "cqb_point_of_interest", "targetname" );
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
{
level.cqbpointsofinterest[var_1] = var_0[var_1].origin;
var_0[var_1] delete();
}
}
findcqbpointsofinterest()
{
if ( isdefined( anim.findingcqbpointsofinterest ) )
return;
anim.findingcqbpointsofinterest = 1;
if ( !level.cqbpointsofinterest.size )
return;
for (;;)
{
var_0 = getaiarray();
var_1 = 0;
foreach ( var_3 in var_0 )
{
if ( isalive( var_3 ) && var_3 animscripts\utility::iscqbwalking() && !isdefined( var_3.disable_cqb_points_of_interest ) )
{
var_4 = var_3.a.movement != "stop";
var_5 = ( var_3.origin[0], var_3.origin[1], var_3 getshootatpos()[2] );
var_6 = var_5;
var_7 = anglestoforward( var_3.angles );
if ( var_4 )
{
var_8 = bullettrace( var_6, var_6 + var_7 * 128, 0, undefined );
var_6 = var_8["position"];
}
var_9 = -1;
var_10 = 1048576;
for ( var_11 = 0; var_11 < level.cqbpointsofinterest.size; var_11++ )
{
var_12 = level.cqbpointsofinterest[var_11];
var_13 = distancesquared( var_12, var_6 );
if ( var_13 < var_10 )
{
if ( var_4 )
{
if ( distancesquared( var_12, var_5 ) < 4096 )
continue;
var_14 = vectordot( vectornormalize( var_12 - var_5 ), var_7 );
if ( var_14 < 0.643 || var_14 > 0.966 )
continue;
}
else if ( var_13 < 2500 )
continue;
if ( !sighttracepassed( var_6, var_12, 0, undefined ) )
continue;
var_10 = var_13;
var_9 = var_11;
}
}
if ( var_9 < 0 )
var_3.cqb_point_of_interest = undefined;
else
var_3.cqb_point_of_interest = level.cqbpointsofinterest[var_9];
wait 0.05;
var_1 = 1;
}
}
if ( !var_1 )
wait 0.25;
}
}
cqb_playfacialanim( var_0 )
{
self.facialidx = animscripts\face::playfacialanim( var_0, "run", self.facialidx );
}
cqb_clearfacialanim()
{
self.facialidx = undefined;
self clearanim( %head, 0.2 );
}