92 lines
2.0 KiB
Plaintext
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;
|
||
|
}
|