IW4-Dump-Files/animscripts/walk.gsc

123 lines
3.0 KiB
Plaintext
Raw Normal View History

2017-07-08 11:47:21 -07:00
#include animscripts\SetPoseMovement;
#include animscripts\Utility;
#include common_scripts\utility;
#using_animtree( "generic_human" );
MoveWalk()
{
// Decide what pose to use
preferredPose = undefined;
if ( isdefined( self.pathGoalPos ) && distanceSquared( self.origin, self.pathGoalPos ) > 64 * 64 )
preferredPose = "stand";
desiredPose = [[ self.choosePoseFunc ]]( preferredPose );
switch( desiredPose )
{
case "stand":
if ( BeginStandWalk() )
return;
if ( isdefined( self.walk_overrideanim ) )
{
animscripts\move::MoveStandMoveOverride( self.walk_overrideanim, self.walk_override_weights );
return;
}
DoWalkAnim( GetWalkAnim( "straight" ) );
break;
case "crouch":
if ( BeginCrouchWalk() )
return;
DoWalkAnim( GetWalkAnim( "crouch" ) );
break;
default:
assert( desiredPose == "prone" );
if ( BeginProneWalk() )
return;
self.a.movement = "walk";
DoWalkAnim( GetWalkAnim( "prone" ) );
break;
}
}
DoWalkAnimOverride( walkAnim )
{
self endon( "movemode" );
self clearanim( %combatrun, 0.6 );
self setanimknoball( %combatrun, %body, 1, 0.5, self.moveplaybackrate );
if ( isarray( self.walk_overrideanim ) )
{
if ( isdefined( self.walk_override_weights ) )
moveAnim = choose_from_weighted_array( self.walk_overrideanim, self.walk_override_weights );
else
moveAnim = self.walk_overrideanim[ randomint( self.walk_overrideanim.size ) ];
}
else
{
moveAnim = self.walk_overrideanim;
}
self setflaggedanimknob( "moveanim", moveAnim, 1, 0.2 );
animscripts\shared::DoNoteTracks( "moveanim" );
}
GetWalkAnim( desiredAnim )
{
if ( self.stairsState == "up" )
return moveAnim( "stairs_up" );
else if ( self.stairsState == "down" )
return moveAnim( "stairs_down" );
walkAnim = moveAnim( desiredAnim );
if ( isarray( walkAnim ) )
walkAnim = walkAnim[ randomint( walkAnim.size ) ];
return walkAnim;
}
DoWalkAnim( walkAnim )
{
self endon( "movemode" );
rate = self.moveplaybackrate;
if ( self.stairsState != "none" )
rate *= 0.6;
if ( self.a.pose == "stand" )
{
if ( isdefined( self.enemy ) )
{
self thread animscripts\cqb::CQBTracking();
// (we don't use %body because that would reset the aiming knobs)
self setFlaggedAnimKnobAll( "walkanim", animscripts\cqb::DetermineCQBAnim(), %walk_and_run_loops, 1, 1, rate, true );
}
else
{
self setFlaggedAnimKnobAll( "walkanim", walkAnim, %body, 1, 1, rate, true );
}
self animscripts\run::SetMoveNonForwardAnims( moveAnim( "move_b" ), moveAnim( "move_l" ), moveAnim( "move_r" ) );
self thread animscripts\run::SetCombatStandMoveAnimWeights( "walk" );
}
else
{
self setFlaggedAnimKnobAll( "walkanim", walkAnim, %body, 1, 1, rate, true );
self animscripts\run::SetMoveNonForwardAnims( moveAnim( "move_b" ), moveAnim( "move_l" ), moveAnim( "move_r" ) );
self thread animscripts\run::SetCombatStandMoveAnimWeights( "walk" );
}
self animscripts\shared::DoNoteTracksForTime( 0.2, "walkanim" );
self thread animscripts\run::stopShootWhileMovingThreads();
}