IW4-Dump-Files/animscripts/grenade_cower.gsc

92 lines
2.0 KiB
Plaintext

#include animscripts\Utility;
#using_animtree( "generic_human" );
main()
{
self endon( "killanimscript" );
animscripts\utility::initialize( "grenadecower" );
if ( isdefined( self.grenadeCowerFunction ) )
{
self [[ self.grenadeCowerFunction ]]();
return;
}
if ( self.a.pose == "prone" )
{
// TODO: use an i-just-dived loop?
animscripts\stop::main();
return; // Should never get to here
}
self AnimMode( "zonly_physics" );
self OrientMode( "face angle", self.angles[ 1 ] );
grenadeAngle = 0;
if ( isdefined( self.grenade ) )// failsafe
grenadeAngle = AngleClamp180( vectorToAngles( self.grenade.origin - self.origin )[ 1 ] - self.angles[ 1 ] );
else
grenadeAngle = self.angles[ 1 ];
if ( self.a.pose == "stand" )
{
if ( isdefined( self.grenade ) && TryDive( grenadeAngle ) )
return;
self setFlaggedAnimKnobAllRestart( "cowerstart", %exposed_squat_down_grenade_F, %body, 1, 0.2 );
self animscripts\shared::DoNoteTracks( "cowerstart" );
}
self.a.pose = "crouch";
self.a.movement = "stop";
self setFlaggedAnimKnobAllRestart( "cower", %exposed_squat_idle_grenade_F, %body, 1, 0.2 );
self animscripts\shared::DoNoteTracks( "cower" );
self waittill( "never" );
}
end_script()
{
self.safeToChangeScript = true;
}
TryDive( grenadeAngle )
{
if ( randomint( 2 ) == 0 )
return false;
if ( self.stairsState != "none" )
return false;
diveAnim = undefined;
if ( abs( grenadeAngle ) > 90 )
{
// grenade behind us
diveAnim = %exposed_dive_grenade_B;
}
else
{
// grenade in front of us
diveAnim = %exposed_dive_grenade_F;
}
// when the dives are split into a dive, idle, and get up,
// maybe we can get a better point to do the moveto check with
moveBy = getMoveDelta( diveAnim, 0, 0.5 );
diveToPos = self localToWorldCoords( moveBy );
if ( !self MayMoveToPoint( diveToPos ) )
return false;
self.safeToChangeScript = false;
self setFlaggedAnimKnobAllRestart( "cowerstart", diveAnim, %body, 1, 0.2 );
self animscripts\shared::DoNoteTracks( "cowerstart" );
self.safeToChangeScript = true;
return true;
}