mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
126 lines
4.2 KiB
Plaintext
126 lines
4.2 KiB
Plaintext
#include animscripts\traverse\zombie_shared;
|
||
#include maps\_utility;
|
||
#include animscripts\zombie_Utility;
|
||
#using_animtree( "generic_human" );
|
||
main()
|
||
{
|
||
zombie_wall_crawl();
|
||
}
|
||
debug_draw_orient()
|
||
{
|
||
}
|
||
zombie_wall_crawl()
|
||
{
|
||
self endon("killanimscript");
|
||
self thread debug_draw_orient();
|
||
if( isDefined( self.zombie_move_speed ) && self.zombie_move_speed == "walk" )
|
||
{
|
||
traverseAnim = %ai_zombie_quad_crawl_sprint_wall_intro;
|
||
}
|
||
else
|
||
{
|
||
traverseAnim = %ai_zombie_quad_crawl_sprint_wall_intro_2;
|
||
}
|
||
self.desired_anim_pose = "stand";
|
||
animscripts\zombie_utility::UpdateAnimPose();
|
||
self.vertical_fall = false;
|
||
startnode = self getNegotiationStartNode();
|
||
endNode = self getNegotiationEndNode();
|
||
assert( isDefined( startnode ) );
|
||
assert( isDefined( endNode ) );
|
||
self OrientMode( "face angle", startnode.angles[1] );
|
||
self thread wait_on_vertical_death();
|
||
self.traverseStartNode = startnode;
|
||
self traverseMode( "nogravity" );
|
||
self traverseMode( "noclip" );
|
||
self.traverseStartZ = self.origin[2];
|
||
if ( !animHasNotetrack( traverseAnim, "traverse_align" ) )
|
||
{
|
||
self handleTraverseAlignment();
|
||
}
|
||
self ZombieTraverseStartRagdollDeath();
|
||
self.traverseAnim = traverseAnim;
|
||
self setFlaggedAnimKnoballRestart( "traverseAnim", traverseAnim, %body, 1, .2, 1 );
|
||
self.traverseDeathIndex = 0;
|
||
self animscripts\zombie_shared::DoNoteTracks( "traverseAnim", ::handleTraverseNotetracks );
|
||
self.vertical_fall = true;
|
||
fallAnim = %ai_zombie_quad_crawl_sprint_wall;
|
||
fallBlend = 0.05;
|
||
animDist = abs(GetMoveDelta( fallAnim, 0, 1 )[2]);
|
||
physDist = abs(self.origin[2] - groundpos( self.origin )[2] - 55);
|
||
cycles = physDist/animDist;
|
||
time = (cycles * GetAnimLength( fallAnim ));
|
||
self setFlaggedAnimKnobRestart( "traverseAnim", fallAnim, 1, 0.00, 1.0 );
|
||
self.traverseDeathIndex = 0;
|
||
self thread animscripts\zombie_shared::DoNoteTracks( "traverseAnim", ::handleTraverseNotetracks );
|
||
wait( time );
|
||
self setFlaggedAnimKnobRestart( "dismountAnim", %ai_zombie_quad_wall_jump_off, 1, 0.00, 1.0 );
|
||
self thread animscripts\zombie_shared::DoNoteTracks( "dismountAnim", ::handleTraverseNotetracks );
|
||
wait( GetAnimLength( %ai_zombie_quad_wall_jump_off ) );
|
||
self ZombieTraverseStopRagdollDeath();
|
||
if( !isAlive( self ) )
|
||
{
|
||
return;
|
||
}
|
||
self.a.nodeath = false;
|
||
self traverseMode("gravity");
|
||
self.a.movement = "run";
|
||
self.a.pose = "crouch";
|
||
self.a.alertness = "alert";
|
||
self setAnimKnobAllRestart( animscripts\zombie_run::GetCrouchRunAnim(), %body, 1, 0.1, 1 );
|
||
self.can_explode = true;
|
||
self notify("quad_end_traverse_anim");
|
||
}
|
||
ZombieTraverseStartRagdollDeath()
|
||
{
|
||
self.prevDelayedDeath = self.delayedDeath;
|
||
self.prevAllowDeath = self.allowDeath;
|
||
self.prevDeathFunction = self.deathFunction;
|
||
self.delayedDeath = false;
|
||
self.allowDeath = true;
|
||
self.deathFunction = animscripts\traverse\zombie_wall_crawl_drop::ZombieRagdollSimple;
|
||
}
|
||
ZombieTraverseStopRagdollDeath()
|
||
{
|
||
if( !isDefined( self ) || !isAlive( self ) )
|
||
{
|
||
return;
|
||
}
|
||
self.delayedDeath = self.prevDelayedDeath;
|
||
self.allowDeath = self.prevAllowDeath;
|
||
self.deathFunction = self.prevDeathFunction;
|
||
self.prevDelayedDeath = undefined;
|
||
self.prevAllowDeath = undefined;
|
||
self.prevDeathFunction = undefined;
|
||
}
|
||
ZombieRagdollSimple()
|
||
{
|
||
self animscripts\traverse\zombie_shared::TraverseRagdollDeathSimple();
|
||
level maps\_zombiemode_spawner::zombie_death_points( self.origin, self.damagemod, self.damagelocation, self.attacker,self );
|
||
}
|
||
play_blended_death( vertAnim, horzAnim )
|
||
{
|
||
level maps\_zombiemode_spawner::zombie_death_points( self.origin, self.damagemod, self.damagelocation, self.attacker,self );
|
||
pitch = self GetTagAngles( "tag_sync" )[0];
|
||
vertWeight = sin( pitch );
|
||
if( vertWeight < 0 )
|
||
{
|
||
vertWeight = 0;
|
||
}
|
||
if( vertWeight > 1 )
|
||
{
|
||
vertWeight = 1;
|
||
}
|
||
horzWeight = 1 - vertWeight;
|
||
self setAnimLimited( vertAnim, vertWeight, 0 );
|
||
self setAnimLimited( horzAnim, horzWeight, 0 );
|
||
self setFlaggedAnimKnob( "falling_death", %wall_death, 1 );
|
||
self animscripts\zombie_shared::DoNotetracks( "falling_death" );
|
||
}
|
||
wait_on_vertical_death()
|
||
{
|
||
self endon( "death" );
|
||
self endon( "traverse_death" );
|
||
self waittill( "zombie_vertical" );
|
||
self.vertical_fall = true;
|
||
} |