Incomplete SP dump provided by Louvenarde

This commit is contained in:
reaaLx
2024-09-05 17:14:53 +10:00
parent 1ea2370337
commit e5de1d5d55
784 changed files with 340494 additions and 0 deletions

View File

@ -0,0 +1,27 @@
// crouch_jump_down_40.gsc
// Makes the character roll down off a ledge at no higher than 32 units. Designed for 40 units but should work for 44-70 or so.
#using_animtree( "generic_human" );
main()
{
// do not do code prone in this script
self.desired_anim_pose = "crouch";
animscripts\utility::UpdateAnimPose();
self endon( "killanimscript" );
self.a.movement = "walk";
self traverseMode( "nogravity" );
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
//crouch_jump_down_40
self setFlaggedAnimKnoballRestart( "stepanim", %jump_across_72, %body, 1, .1, 1 );
wait .15;
// self waittillmatch("stepanim", "gravity on");
self traverseMode( "gravity" );
self animscripts\shared::DoNoteTracks( "stepanim" );
}

View File

@ -0,0 +1,25 @@
// Jump_across_72.gsc
// Makes the character do a lateral jump of 72 units.
#using_animtree( "generic_human" );
main()
{
// do not do code prone in this script
self.desired_anim_pose = "stand";
animscripts\utility::UpdateAnimPose();
self endon( "killanimscript" );
self traverseMode( "nogravity" );
self traverseMode( "noclip" );
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
self setFlaggedAnimKnoballRestart( "jumpanim", %gulag_pipe_traverse, %body, 1, .1, 1 );
self waittillmatch( "jumpanim", "finish" );
self traverseMode( "gravity" );
self animscripts\shared::DoNoteTracks( "jumpanim" );
}

View File

@ -0,0 +1,27 @@
// Fence_climb.gsc
// Makes the character climb a 48 unit fence
// TEMP - copied wall dive until we get an animation
// Makes the character dive over a low wall
#using_animtree( "generic_human" );
main()
{
// do not do code prone in this script
self.desired_anim_pose = "crouch";
animscripts\utility::UpdateAnimPose();
self endon( "killanimscript" );
self traverseMode( "nogravity" );
self traverseMode( "noclip" );// So he doesn't get stuck if the wall is a little too high
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
self setFlaggedAnimKnoballRestart( "diveanim", %fenceclimb, %body, 1, .1, 1 );
// self waittillmatch("diveanim", "gravity on");
self animscripts\shared::DoNoteTracks( "diveanim" );
self traverseMode( "gravity" );
}

View File

@ -0,0 +1,30 @@
// Jump_across_100.gsc
// Makes the character do a lateral jump of 100 units.
#using_animtree( "generic_human" );
main()
{
// do not do code prone in this script
self.desired_anim_pose = "stand";
animscripts\utility::UpdateAnimPose();
self endon( "killanimscript" );
self traverseMode( "nogravity" );
self traverseMode( "noclip" );
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
jumpAnims = [];
jumpAnims[0] = %jump_across_100_spring;
jumpAnims[1] = %jump_across_100_lunge;
jumpAnims[2] = %jump_across_100_stumble;
jumpanim = jumpAnims[ randomint( jumpAnims.size ) ];
self setFlaggedAnimKnoballRestart( "jumpanim", jumpanim, %body, 1, .1, 1 );
self animscripts\shared::DoNoteTracks( "jumpanim" );
}

View File

@ -0,0 +1,25 @@
// Jump_across_72.gsc
// Makes the character do a lateral jump of 72 units.
#using_animtree( "generic_human" );
main()
{
// do not do code prone in this script
self.desired_anim_pose = "stand";
animscripts\utility::UpdateAnimPose();
self endon( "killanimscript" );
self traverseMode( "nogravity" );
self traverseMode( "noclip" );
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
self setFlaggedAnimKnoballRestart( "jumpanim", %jump_across_72, %body, 1, .1, 1 );
self waittillmatch( "jumpanim", "gravity on" );
self traverseMode( "gravity" );
self animscripts\shared::DoNoteTracks( "jumpanim" );
}

View File

@ -0,0 +1,32 @@
// Jump_over_high_wall.gsc
// Makes the character dive over a high wall. Designed for getting bad guys into levels - it looks bad from the back.
#using_animtree( "generic_human" );
main()
{
// do not do code prone in this script
self.desired_anim_pose = "crouch";
animscripts\utility::UpdateAnimPose();
self endon( "killanimscript" );
self traverseMode( "nogravity" );
self traverseMode( "noclip" );
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
self clearanim( %stand_and_crouch, 0.1 );
self setFlaggedAnimKnoballRestart( "diveanim", %jump_over_high_wall, %body, 1, .1, 1 );
self playsound( "dive_wall" );
self waittillmatch( "diveanim", "gravity on" );
self traverseMode( "nogravity" );
self waittillmatch( "diveanim", "noclip" );
self traverseMode( "noclip" );
self waittillmatch( "diveanim", "gravity on" );
self traverseMode( "gravity" );
self animscripts\shared::DoNoteTracks( "diveanim" );
}

View File

@ -0,0 +1,25 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "dog" );
main()
{
assertex( self.type == "dog", "Only dogs can do this traverse currently." );
self endon( "killanimscript" );
self traverseMode( "nogravity" );
self traverseMode( "noclip" );
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
realHeight = startnode.traverse_height - startnode.origin[ 2 ];
self thread teleportThread( realHeight - 80 );
self clearanim( %root, 0.2 );
self setflaggedanimrestart( "jump_up_80", anim.dogTraverseAnims[ "jump_up_80" ], 1, 0.2, 1 );
self animscripts\shared::DoNoteTracks( "jump_up_80" );
self.traverseComplete = true;
}

View File

@ -0,0 +1,19 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
if ( self.type == "dog" )
dog_jump_down( 7, 0.7 );
else
jumpdown_130_human();
}
jumpdown_130_human()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %traverse_jumpdown_130;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,19 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
if ( self.type == "dog" )
dog_jump_down( 3, 1.0 );
else
low_wall_human();
}
low_wall_human()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %traverse_jumpdown_40;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,19 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
if ( self.type == "dog" )
dog_jump_down( 5, 1.0 );
else
low_wall_human();
}
low_wall_human()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %traverse_jumpdown_56;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,19 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
if ( self.type == "dog" )
dog_jump_down( 7, 0.8 );
else
low_wall_human();
}
low_wall_human()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %traverse_jumpdown_96;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,44 @@
// ladder_down.gsc
// Climbs down a ladder of any height by using a looping animation.
#using_animtree( "generic_human" );
main()
{
// do not do code prone in this script
self.desired_anim_pose = "crouch";
animscripts\utility::UpdateAnimPose();
self endon( "killanimscript" );
self traverseMode( "nogravity" );
self traverseMode( "noclip" );
// First, get on
endnode = self getnegotiationendnode();
assert( isdefined( endnode ) );
endPos = endnode.origin;
//("ladder_down: about to start climbing. Height to climb: " + (endPos[2] - self.origin[2]) );#/
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
self setFlaggedAnimKnoballRestart( "climbanim", %ladder_climbon, %body, 1, .1, 1 );
self animscripts\shared::DoNoteTracks( "climbanim" );
// Now do the cycle
climbAnim = %ladder_climbdown;
self setFlaggedAnimKnoballRestart( "climbanim", climbAnim, %body, 1, .1, 1 );
cycleDelta = GetMoveDelta( climbAnim, 0, 1 );
climbRate = cycleDelta[ 2 ] / getanimlength( climbAnim );
climbingTime = ( endPos[ 2 ] - self.origin[ 2 ] ) / climbRate;
self animscripts\shared::DoNoteTracksForTime( climbingTime, "climbanim" );
self traverseMode( "gravity" );
self.a.movement = "stop";
self.a.pose = "stand";
//("ladder_down: all done");#/
}

View File

@ -0,0 +1,51 @@
// ladder_up.gsc
// Climbs a ladder of any height by using a looping animation, and gets off at the top.
#using_animtree( "generic_human" );
main()
{
// do not do code prone in this script
self.desired_anim_pose = "crouch";
animscripts\utility::UpdateAnimPose();
self endon( "killanimscript" );
// self traverseMode("nogravity");
self traverseMode( "noclip" );
climbAnim = %ladder_climbup;
endAnim = %ladder_climboff;
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
self setFlaggedAnimKnoballRestart( "climbanim", climbAnim, %body, 1, .1, 1 );
endAnimDelta = GetMoveDelta( endAnim, 0, 1 );
endNode = self getnegotiationendnode();
assert( isdefined( endnode ) );
endPos = endnode.origin - endAnimDelta + ( 0, 0, 1 ); // 1 unit padding
cycleDelta = GetMoveDelta( climbAnim, 0, 1 );
climbRate = cycleDelta[ 2 ] / getanimlength( climbAnim );
//("ladder_up: about to start climbing. Height to climb: " + (endAnimDelta[2] + endPos[2] - self.origin[2]) );#/
climbingTime = ( endPos[ 2 ] - self.origin[ 2 ] ) / climbRate;
if ( climbingTime > 0 )
{
self.allowpain = true;
self animscripts\shared::DoNoteTracksForTime( climbingTime, "climbanim" );
// println ("elapsed ", (gettime() - timer) * 0.001);
self setFlaggedAnimKnoballRestart( "climbanim", endAnim, %body, 1, .1, 1 );
self animscripts\shared::DoNoteTracks( "climbanim" );
}
self traverseMode( "gravity" );
self.a.movement = "run";
self.a.pose = "crouch";
//("ladder_up: all done");#/
}

View File

@ -0,0 +1,12 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %tp_moon_trav_jump_d112_f244;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,12 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %tp_moon_trav_jump_d128_f50;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,12 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %tp_moon_trav_jump_d160_f160;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,12 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %tp_moon_trav_jump_d160_f244;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,12 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %tp_moon_trav_jump_d200_f600;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,12 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %tp_moon_trav_jump_d220_f640;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,12 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %tp_moon_trav_jump_d240_f328;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,12 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %tp_moon_trav_jump_d64_f160;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,14 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %tp_moon_lava_jump_into_train_f104;
traverseData[ "traverseToCoverAnim" ] = %tp_moon_lava_jump_into_train_f104;
traverseData[ "coverType" ] = "Exposed";
DoTraverse( traverseData );
}

View File

@ -0,0 +1,14 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %tp_moon_lava_jump_into_train_f24;
traverseData[ "traverseToCoverAnim" ] = %tp_moon_lava_jump_into_train_f24;
traverseData[ "coverType" ] = "Exposed";
DoTraverse( traverseData );
}

View File

@ -0,0 +1,14 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %tp_moon_lava_jump_into_train_f352;
traverseData[ "traverseToCoverAnim" ] = %tp_moon_lava_jump_into_train_f352;
traverseData[ "coverType" ] = "Cover Crouch";
DoTraverse( traverseData );
}

View File

@ -0,0 +1,15 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %tp_moon_lava_jump_traintop_f104;
traverseData[ "traverseToCoverAnim" ] = %tp_moon_lava_jump_traintop_f104;
traverseData[ "coverType" ] = "Cover Right";
traverseData[ "forceTeleport" ] = true;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,12 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %tp_moon_trav_jump_u36_f_d188;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,12 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %tp_moon_trav_jump_u36_f_d248;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,12 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %tp_moon_trav_jump_u36_f_d284;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,12 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %tp_moon_trav_jump_u48;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,12 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %tp_moon_trav_storage_jump;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,40 @@
// moon_trav_wall_hop_u_40_d_40.gsc
// Makes the character climb a 40 unit fence, lunar
#include animscripts\traverse\shared;
main()
{
wall_hop_human();
}
#using_animtree( "generic_human" );
wall_hop_human()
{
if( !IsDefined( level.moon_trav_wall_hop_toggle ) )
{
level.moon_trav_wall_hop_toggle = 1;
}
if ( level.moon_trav_wall_hop_toggle == 1 )
{
level.moon_trav_wall_hop_toggle = 0;
traverseData = [];
traverseData[ "traverseAnim" ] = %tp_moon_trav_jump_u40_f_d40_a;
DoTraverse( traverseData );
}
else
{
level.moon_trav_wall_hop_toggle = 1;
traverseData = [];
traverseData[ "traverseAnim" ] = %tp_moon_trav_jump_u40_f_d40_b;
DoTraverse( traverseData );
}
}

View File

@ -0,0 +1,19 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
main()
{
if ( self.type == "dog" )
dog_jump_down( 3, 1.0 );
else
retro_jump_down_human();
}
#using_animtree( "generic_human" );
retro_jump_down_human()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %nx_proto_retro_jump_down_run;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,378 @@
#include animscripts\utility;
#include maps\_utility;
#using_animtree( "generic_human" );
// Deprecated. only used for old traverses that will be deleted.
advancedTraverse( traverseAnim, normalHeight )
{
// do not do code prone in this script
self.desired_anim_pose = "crouch";
animscripts\utility::UpdateAnimPose();
self endon( "killanimscript" );
self traverseMode( "nogravity" );
self traverseMode( "noclip" );// So he doesn't get stuck if the wall is a little too high
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
realHeight = startnode.traverse_height - startnode.origin[ 2 ];
self thread teleportThread( realHeight - normalHeight );
blendTime = 0.15;
self clearAnim( %body, blendTime );
self setFlaggedAnimKnoballRestart( "traverse", traverseAnim, %root, 1, blendTime, 1 );
gravityToBlendTime = 0.2;
endBlendTime = 0.2;
self thread animscripts\shared::DoNoteTracksForever( "traverse", "no clear" );
if ( !animHasNotetrack( traverseAnim, "gravity on" ) )
{
magicWhateverTime_WhereTheHeckDidWeGetThisNumberAnyway = 1.23;
wait( magicWhateverTime_WhereTheHeckDidWeGetThisNumberAnyway - gravityToBlendTime );
self traverseMode( "gravity" );
wait( gravityToBlendTime );
}
else
{
self waittillmatch( "traverse", "gravity on" );
self traverseMode( "gravity" );
if ( !animHasNotetrack( traverseAnim, "blend" ) )
wait( gravityToBlendTime );
else
self waittillmatch( "traverse", "blend" );
}
}
teleportThread( verticalOffset )
{
self endon( "killanimscript" );
self notify( "endTeleportThread" );
self endon( "endTeleportThread" );
reps = 5;
offset = ( 0, 0, verticalOffset / reps );
for ( i = 0; i < reps; i++ )
{
self forceTeleport( self.origin + offset );
wait .05;
}
}
teleportThreadEx( verticalOffset, delay, frames, animRate )
{
self endon( "killanimscript" );
self notify( "endTeleportThread" );
self endon( "endTeleportThread" );
if ( (verticalOffset == 0) || (frames <= 0) )
return;
if ( delay > 0 )
wait delay;
offset = ( 0, 0, verticalOffset / frames );
if ( isDefined( animRate ) && (animRate < 1.0) )
self setFlaggedAnimKnoball( "traverseAnim", self.traverseAnim, self.traverseAnimRoot, 1, .2, animRate );
for ( i = 0; i < frames; i++ )
{
self forceTeleport( self.origin + offset );
wait .05;
}
if ( isDefined( animRate ) && (animRate < 1.0) )
self setFlaggedAnimKnoball( "traverseAnim", self.traverseAnim, self.traverseAnimRoot, 1, .2, 1.0 );
}
DoTraverse( traverseData )
{
self endon( "killanimscript" );
self notify( "traverse_started" );
// do not do code prone in this script
self.desired_anim_pose = "stand";
animscripts\utility::UpdateAnimPose();
// orient to the Negotiation start node
startnode = self getNegotiationStartNode();
endNode = self getNegotiationEndNode();
assert( isDefined( startnode ) );
assert( isDefined( endNode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
self.traverseHeight = traverseData[ "traverseHeight" ];
self.traverseStartNode = startnode;
traverseAnim = traverseData[ "traverseAnim" ];
traverseToCoverAnim = traverseData[ "traverseToCoverAnim" ]; // traversals that end up with 180-degree spins into cover at the end
self traverseMode( "nogravity" );
self traverseMode( "noclip" );
self.traverseStartZ = self.origin[ 2 ];
if ( !animHasNotetrack( traverseAnim, "traverse_align" ) )
{
/# println( "^1Warning: animation ", traverseAnim, " has no traverse_align notetrack" ); #/
self handleTraverseAlignment();
}
toCover = false;
if ( isDefined( traverseToCoverAnim ) && isDefined( self.node ) && self.node.type == traverseData[ "coverType" ] && distanceSquared( self.node.origin, endNode.origin ) < 25 * 25 )
{
if ( AbsAngleClamp180( self.node.angles[ 1 ] - endNode.angles[ 1 ] ) > 160 )
{
toCover = true;
traverseAnim = traverseToCoverAnim;
}
}
if ( toCover )
{
if ( isdefined( traverseData[ "traverseToCoverSound" ] ) )
{
self thread play_sound_on_entity( traverseData[ "traverseToCoverSound" ] );
}
}
else
{
if ( isdefined( traverseData[ "traverseSound" ] ) )
{
self thread play_sound_on_entity( traverseData[ "traverseSound" ] );
}
}
self.traverseAnim = traverseAnim;
self.traverseAnimRoot = %body;
// tagJW<NOTE>: Use the blend_finish tag to determine blend time on the traverse animation
blend_time = 0.2;
if( self IsCQBWalking() )
{
blend_finish_time = GetNotetrackTimes( traverseAnim, "cqb_blend_finish" );
}
else
{
blend_finish_time = GetNotetrackTimes( traverseAnim, "blend_finish" );
}
if ( blend_finish_time.size > 0 )
{
blend_time = blend_finish_time[0] * GetAnimLength( traverseAnim );
}
self setFlaggedAnimKnoballRestart( "traverseAnim", traverseAnim, %body, 1, blend_time, 1 );
self.traverseDeathIndex = 0;
self.traverseDeathAnim = traverseData[ "interruptDeathAnim" ];
self animscripts\shared::DoNoteTracks( "traverseAnim", ::handleTraverseNotetracks );
self traverseMode( "gravity" );
if ( self.delayedDeath )
return;
self.a.nodeath = false;
if ( toCover && isDefined( self.node ) && distanceSquared( self.origin, self.node.origin ) < 16 * 16 )
{
self.a.movement = "stop";
if( IsDefined( traverseData[ "forceTeleport" ] ) && traverseData[ "forceTeleport" ] )
{
self ForceTeleport( self.node.origin );
}
else
{
self Teleport( self.node.origin );
}
}
else if( IsDefined( traverseData[ "traverseStopsAtEnd" ] ) )
{
self.a.movement = "stop";
}
else
{
self.a.movement = "run";
//self setAnimKnobAllRestart( animscripts\run::GetRunAnim(), %body, 1, 0.0, 1 );
self clearanim( traverseAnim, 0.2 );
self animscripts\utility::handle_move_transition_notes( traverseAnim );
}
self notify( "traverse_finished" );
self.traverseAnimRoot = undefined;
self.traverseAnim = undefined;
self.deathAnim = undefined;
}
handleTraverseNotetracks( note )
{
if ( note == "traverse_death" )
return handleTraverseDeathNotetrack();
else if ( note == "traverse_align" )
return handleTraverseAlignment();
else if ( note == "traverse_drop" )
return handleTraverseDrop();
}
handleTraverseDeathNotetrack()
{
if ( isdefined( self.traverseDeathAnim ) )
{
deathAnimArray = self.traverseDeathAnim[ self.traverseDeathIndex ];
self.deathAnim = deathAnimArray[ randomint( deathAnimArray.size ) ];
self.traverseDeathIndex++;
}
}
handleTraverseAlignment()
{
self traverseMode( "nogravity" );
self traverseMode( "noclip" );
if ( isDefined( self.traverseHeight ) && isDefined( self.traverseStartNode.traverse_height ) )
{
currentHeight = self.traverseStartNode.traverse_height - self.traverseStartZ;
self thread teleportThread( currentHeight - self.traverseHeight );
}
}
handleTraverseDrop()
{
startpos = self.origin + ( 0, 0, 32 );
trace = bullettrace( startpos, self.origin + ( 0, 0, -512 ), false, undefined );
endpos = trace[ "position" ];
dist = distance( startpos, endpos );
realDropHeight = dist - 32 - 0.5;// 0.5 makes sure we end up above the ground a bit
traverseAnimPos = self getAnimTime( self.traverseAnim );
traverseAnimDelta = getMoveDelta( self.traverseAnim, traverseAnimPos, 1.0 );
traverseAnimLength = getAnimLength( self.traverseAnim );
animDropHeight = 0 - traverseAnimDelta[ 2 ];
assertEx( animDropHeight >= 0, animDropHeight );
dropOffset = animDropHeight - realDropHeight;
/#
if ( getdvarint( "scr_traverse_debug" ) )
{
thread animscripts\utility::debugLine( startpos, endpos, ( 1, 1, 1 ), 2 * 20 );
thread animscripts\utility::drawStringTime( "drop offset: " + dropOffset, endpos, ( 1, 1, 1 ), 2 );
}
#/
if ( animDropHeight < realDropHeight )
animRate = animDropHeight / realDropHeight;
else
animRate = 1;
teleportLength = ( traverseAnimLength - traverseAnimPos ) / 3.0; // let's make the teleport take 1/3 of the animation time roughly
numFrames = ceil( teleportLength * 20 ); // 0.05 per frame. Maximum number of frames we can use
self thread teleportThreadEx( dropOffset, 0, numFrames, animRate );
self thread finishTraverseDrop( endpos[ 2 ] );
}
finishTraverseDrop( finalz )
{
self endon( "killanimscript" );
finalz += 4.0;
while ( 1 )
{
if ( self.origin[ 2 ] < finalz )
{
self traverseMode( "gravity" );
break;
}
wait .05;
}
}
doNothingFunc()
{
self animMode( "zonly_physics" );
self waittill( "killanimscript" );
}
#using_animtree( "dog" );
dog_wall_and_window_hop( traverseName, height )
{
self endon( "killanimscript" );
self traverseMode( "nogravity" );
self traverseMode( "noclip" );
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
realHeight = startnode.traverse_height - startnode.origin[ 2 ];
self thread teleportThread( realHeight - height );
self clearanim( %root, 0.2 );
self setflaggedanimrestart( "dog_traverse", anim.dogTraverseAnims[ traverseName ], 1, 0.2, 1 );
self animscripts\shared::DoNoteTracks( "dog_traverse" );
self.traverseComplete = true;
}
dog_jump_down( frames, rate )
{
self endon( "killanimscript" );
self traverseMode( "noclip" );
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
height = self getNegotiationStartNode().origin[2] - self getNegotiationEndNode().origin[2];
self.traverseAnim = anim.dogTraverseAnims[ "jump_down_40" ];
self.traverseAnimRoot = %root;
self thread teleportThreadEx( 40.0 - height, 0.1, frames, rate );
self clearanim( %root, 0.2 );
self setflaggedanimrestart( "traverseAnim", self.traverseAnim, 1, 0.2, 1 );
self animscripts\shared::DoNoteTracks( "traverseAnim" );
self clearanim( self.traverseAnim, 0 ); // start run immediately
self traverseMode( "gravity" );
self.traverseComplete = true;
self.traverseAnimRoot = undefined;
self.traverseAnim = undefined;
}
dog_jump_up( height, frames )
{
self endon( "killanimscript" );
self traverseMode( "noclip" );
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
self thread teleportThreadEx( height - 40.0, 0.2, frames );
self clearanim( %root, 0.25 );
self setflaggedanimrestart( "traverseAnim", anim.dogTraverseAnims[ "jump_up_40" ], 1, 0.2, 1 );
self animscripts\shared::DoNoteTracks( "traverseAnim" );
self clearanim( anim.dogTraverseAnims[ "jump_up_40" ], 0 ); // start run immediately
self traverseMode( "gravity" );
self.traverseComplete = true;
}

View File

@ -0,0 +1,54 @@
#include animscripts\traverse\shared;
#include animscripts\utility;
#include common_scripts\utility;
#using_animtree( "generic_human" );
main()
{
if ( self.type == "dog" )
slide_across_car_dog();
else
slide_across_car_human();
}
slide_across_car_human()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %slide_across_car;
traverseData[ "traverseToCoverAnim" ] = %slide_across_car_2_cover;
traverseData[ "coverType" ] = "Cover Crouch";
traverseData[ "traverseHeight" ] = 38.0;
traverseData[ "interruptDeathAnim" ][ 0 ] = array( %slide_across_car_death );
traverseData[ "traverseSound" ] = "npc_car_slide_hood";
traverseData[ "traverseToCoverSound" ] = "npc_car_slide_cover";
DoTraverse( traverseData );
}
#using_animtree( "dog" );
slide_across_car_dog()
{
self endon( "killanimscript" );
self traverseMode( "noclip" );
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
self clearanim( %root, 0.1 );
self setflaggedanimrestart( "traverse", anim.dogTraverseAnims[ "jump_up_40" ], 1, 0.1, 1 );
self animscripts\shared::DoNoteTracks( "traverse" );
// TEMP, can't hear jump over sounds
self thread play_sound_in_space( "anml_dog_bark", self gettagorigin( "tag_eye" ) );
self clearanim( %root, 0 );
self setflaggedanimrestart( "traverse", anim.dogTraverseAnims[ "jump_down_40" ], 1, 0, 1 );
self animscripts\shared::DoNoteTracks( "traverse" );
self traverseMode( "gravity" );
self.traverseComplete = true;
}

View File

@ -0,0 +1,49 @@
// stairs_down.gsc
// Climbs down stairs of any height by using a looping animation.
#using_animtree( "generic_human" );
main()
{
// do not do code prone in this script
self.desired_anim_pose = "stand";
animscripts\utility::UpdateAnimPose();
self endon( "killanimscript" );
self traverseMode( "nogravity" );
endnode = self getnegotiationendnode()
assert( isdefined( endnode ) );
endPos = endnode.origin;
horizontalDelta = ( endPos[ 0 ] - self.origin[ 0 ], endPos[ 1 ] - self.origin[ 1 ], 0 );
horizontalDistance = length( horizontalDelta );
// Do the cycle
//if ( self animscripts\utility::weaponAnims() == "none" || self animscripts\utility::weaponAnims() == "pistol" )
// climbAnim = %climbstairs_down;
//else
climbAnim = %climbstairs_down_armed;
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startNode ) );
self OrientMode( "face angle", node.angles[ 1 ] );
self setFlaggedAnimKnoball( "climbanim", climbAnim, %body, 1, .3, 1 );
cycleDelta = GetMoveDelta( climbAnim, 0, 1 );
cycleDelta = ( cycleDelta[ 0 ], cycleDelta[ 1 ], 0 );
cycleHorDist = length( cycleDelta );
cycleTime = getanimlength( climbAnim );
climbingTime = ( horizontalDistance / cycleHorDist ) * cycleTime;
//("stairs_down: about to start climbing. Horizontal dist: " +horizontalDistance+ ", dist/cycle: "+cycleHorDist+", time/cycle: "+cycleTime+", time to play: "+climbingTime);#/
self animscripts\shared::DoNoteTracksForTime( climbingTime, "climbanim" );
// self traverseMode("gravity");
self.a.movement = "walk";
self.a.pose = "stand";
//("stairs_down: all done");#/
}

View File

@ -0,0 +1,47 @@
// stairs_up.gsc
// Climbs stairs of any height by using a looping animation, and gets off at the top.
#using_animtree( "generic_human" );
main()
{
// do not do code prone in this script
self.desired_anim_pose = "crouch";
animscripts\utility::UpdateAnimPose();
self endon( "killanimscript" );
self traverseMode( "nogravity" );
//if ( self animscripts\utility::weaponAnims() == "none" || self animscripts\utility::weaponAnims() == "pistol" )
// climbAnim = %climbstairs_up;
//else
climbAnim = %climbstairs_up_armed;
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startNode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
self setFlaggedAnimKnoballRestart( "climbanim", climbAnim, %body, 1, .1, 1 );
endnode = self getnegotiationendnode();
assert( isdefined( endnode ) );
endPos = endnode.origin + ( 0, 0, 1 ); // 1 unit padding
horizontalDelta = ( endPos[ 0 ] - self.origin[ 0 ], endPos[ 1 ] - self.origin[ 1 ], 0 );
horizontalDistance = length( horizontalDelta );
cycleDelta = GetMoveDelta( climbAnim, 0, 1 );
cycleDelta = ( cycleDelta[ 0 ], cycleDelta[ 1 ], 0 );
cycleHorDist = length( cycleDelta );
cycleTime = getanimlength( climbAnim );
climbingTime = ( horizontalDistance / cycleHorDist ) * cycleTime;
//("stairs_down: about to start climbing. Horizontal dist: " +horizontalDistance+ ", dist/cycle: "+cycleHorDist+", time/cycle: "+cycleTime+", time to play: "+climbingTime);#/
self animscripts\shared::DoNoteTracksForTime( climbingTime, "climbanim" );
// self traverseMode("gravity");
self.a.movement = "walk";
self.a.pose = "stand";
//("stairs_up: all done");#/
}

View File

@ -0,0 +1,39 @@
#include animscripts\traverse\shared;
// step_down.gsc
// Makes the character step down off a ledge. Currently the ledge is assumed to be 36 units.
#using_animtree( "generic_human" );
main()
{
if ( self.type == "dog" )
dog_jump_down( 40, 3 );
else
step_down_human();
}
step_down_human()
{
// do not do code prone in this script
self.desired_anim_pose = "crouch";
animscripts\utility::UpdateAnimPose();
self endon( "killanimscript" );
self.a.movement = "walk";
self traverseMode( "nogravity" );
// self traverseMode("noclip"); // Testing to see if a clip brush will stop regular pathfinding and force the traverse script to be used.
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
self setFlaggedAnimKnoballRestart( "stepanim", %step_down_low_wall, %body, 1, .1, 1 );
self waittillmatch( "stepanim", "gravity on" );
self traverseMode( "gravity" );
self animscripts\shared::DoNoteTracks( "stepanim" );
}

View File

@ -0,0 +1,38 @@
#include animscripts\traverse\shared;
// step_up.gsc
// Makes the character step up onto a ledge. Currently the ledge is assumed to be 36 units.
#using_animtree( "generic_human" );
main()
{
if ( self.type == "dog" )
dog_jump_up( 40, 3 );
else
step_up_human();
}
step_up_human()
{
// do not do code prone in this script
self.desired_anim_pose = "crouch";
animscripts\utility::UpdateAnimPose();
self endon( "killanimscript" );
self.a.movement = "walk";
self traverseMode( "nogravity" );
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
self setFlaggedAnimKnoballRestart( "stepanim", %step_up_low_wall, %body, 1, .1, 1 );
self waittillmatch( "stepanim", "gravity on" );
self traverseMode( "gravity" );
self animscripts\shared::DoNoteTracks( "stepanim" );
self setAnimKnobAllRestart( animscripts\run::GetCrouchRunAnim(), %body, 1, 0.1, 1 );
}

View File

@ -0,0 +1,29 @@
// step_up.gsc
// Makes the character step up onto a ledge. Currently the ledge is assumed to be 36 units.
#using_animtree( "generic_human" );
main()
{
// do not do code prone in this script
self endon( "killanimscript" );
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
realHeight = startnode.traverse_height - startnode.origin[ 2 ];
destination = ( realHeight );
reps = 6;
offset = ( 0, 0, destination / reps );
self traverseMode( "noclip" );// So he doesn't get stuck if the wall is a little too high
for ( i = 0;i < reps;i++ )
{
self teleport( self.origin + offset );
wait( 0.05 );
}
self traverseMode( "gravity" );
}

View File

@ -0,0 +1,20 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
if ( self.type == "dog" )
dog_jump_up( 52.0, 5 );
else
low_wall_human();
}
low_wall_human()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %traverse_stepup_52;
traverseData[ "traverseHeight" ] = 52.0;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,6 @@
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
self advancedTraverse( %trench_jump_out, 47.8 );
}

View File

@ -0,0 +1,22 @@
#using_animtree( "generic_human" );
main()
{
// do not do code prone in this script
self.desired_anim_pose = "crouch";
animscripts\utility::UpdateAnimPose();
self endon( "killanimscript" );
self.a.movement = "walk";
self traverseMode( "nogravity" );
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
self setFlaggedAnimKnoballRestart( "stepanim", %gully_trenchjump, %body, 1, .1, 1 );
self waittillmatch( "stepanim", "gravity on" );
self traverseMode( "gravity" );
self animscripts\shared::DoNoteTracks( "stepanim" );
self setAnimKnobAllRestart( animscripts\run::GetCrouchRunAnim(), %body, 1, 0.1, 1 );
}

View File

@ -0,0 +1,11 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %tp_border_vault_jump_56d;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,27 @@
// Wall_dive.gsc
// Makes the character dive over a low wall
#using_animtree( "generic_human" );
main()
{
// do not do code prone in this script
self.desired_anim_pose = "crouch";
animscripts\utility::UpdateAnimPose();
self endon( "killanimscript" );
self traverseMode( "nogravity" );
self traverseMode( "noclip" );// JBW Was getting caught on wall in test / obstacle
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
self setFlaggedAnimKnoballRestart( "diveanim", %jump_over_low_wall, %body, 1, .1, 1 );
self playsound( "dive_wall" );
self waittillmatch( "diveanim", "gravity on" );
self traverseMode( "gravity" );
self animscripts\shared::DoNoteTracks( "diveanim" );
self.a.movement = "run";
}

View File

@ -0,0 +1,24 @@
// Fence_climb.gsc
// Makes the character climb a 48 unit fence
// TEMP - copied wall dive until we get an animation
// Makes the character dive over a low wall
#include animscripts\traverse\shared;
main()
{
if ( self.type == "dog" )
dog_wall_and_window_hop( "wallhop", 40 );
else
wall_hop_human();
}
#using_animtree( "generic_human" );
wall_hop_human()
{
if ( randomint( 100 ) < 30 )
self advancedTraverse( %traverse_wallhop_3, 39.875 );
else
self advancedTraverse( %traverse_wallhop, 39.875 );
}

View File

@ -0,0 +1,24 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
if ( self.type == "dog" )
dog_wall_and_window_hop( "window_40", 40 );
else
low_wall_human();
}
low_wall_human()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %traverse40;
traverseData[ "traverseToCoverAnim" ] = %traverse40_2_cover;
traverseData[ "coverType" ] = "Cover Crouch";
traverseData[ "traverseHeight" ] = 40.0;
traverseData[ "interruptDeathAnim" ][ 0 ] = array( %traverse40_death_start, %traverse40_death_start_2 );
traverseData[ "interruptDeathAnim" ][ 1 ] = array( %traverse40_death_end, %traverse40_death_end_2 );
DoTraverse( traverseData );
}

View File

@ -0,0 +1,74 @@
#include animscripts\Utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
self.traverseDeath = 1;
self advancedTraverse2( %traverse90, 96 );
}
advancedTraverse2( traverseAnim, normalHeight )
{
// do not do code prone in this script
self.desired_anim_pose = "crouch";
animscripts\utility::UpdateAnimPose();
self endon( "killanimscript" );
self traverseMode( "nogravity" );
self traverseMode( "noclip" );// So he doesn't get stuck if the wall is a little too high
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
realHeight = startnode.traverse_height - startnode.origin[ 2 ];
// self thread teleportThread(realHeight - normalHeight);
self setFlaggedAnimKnoballRestart( "traverse", traverseAnim, %body, 1, 0.15, 1 );
timer = gettime();
self thread animscripts\shared::DoNoteTracksForever( "traverse", "no clear", ::handle_death );
if ( !animhasnotetrack( traverseAnim, "gravity on" ) )
{
timer = 1.23;
timerOffset = 0.2;
// wait (timer - timerOffset);
wait 5.0;
self traverseMode( "gravity" );
wait( timerOffset );
}
else
{
self waittillmatch( "traverse", "gravity on" );
self traverseMode( "gravity" );
if ( !animhasnotetrack( traverseAnim, "blend" ) )
wait( 0.2 );
else
self waittillmatch( "traverse", "blend" );
}
}
handle_death( note )
{
println( note );
if ( note != "traverse_death" )
return;
self endon( "killanimscript" );
if ( self.health == 1 )
{
self.a.nodeath = true;
if ( self.traverseDeath > 1 )
self setFlaggedAnimKnobAll( "deathanim", %traverse90_end_death, %body, 1, .2, 1 );
else
self setFlaggedAnimKnobAll( "deathanim", %traverse90_start_death, %body, 1, .2, 1 );
self animscripts\face::SayGenericDialogue( "death" );
}
self.traverseDeath++ ;
}

View File

@ -0,0 +1,27 @@
// Window.gsc
// Makes the character climb through a window with a 36 unit high lower edge.
// TEMP - copied wall dive until we get an animation
// Makes the character dive over a low wall
#using_animtree( "generic_human" );
main()
{
// do not do code prone in this script
self.desired_anim_pose = "crouch";
animscripts\utility::UpdateAnimPose();
self endon( "killanimscript" );
self traverseMode( "nogravity" );
self traverseMode( "noclip" );// JBW - hitting window
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
self setFlaggedAnimKnoballRestart( "diveanim", %windowclimb, %body, 1, .1, 1 );
self waittillmatch( "diveanim", "gravity on" );
self traverseMode( "gravity" );
self animscripts\shared::DoNoteTracks( "diveanim" );
}

View File

@ -0,0 +1,42 @@
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
if ( self.type == "dog" )
dog_wall_and_window_hop( "wallhop", 40 );
else
self advancedWindowTraverse( %windowclimb, 35 );
}
advancedWindowTraverse( traverseAnim, normalHeight )
{
// do not do code prone in this script
self.desired_anim_pose = "crouch";
animscripts\utility::UpdateAnimPose();
self endon( "killanimscript" );
self traverseMode( "nogravity" );
self traverseMode( "noclip" );// So he doesn't get stuck if the wall is a little too high
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
realHeight = startnode.traverse_height - startnode.origin[ 2 ];
self setFlaggedAnimKnoballRestart( "traverse", traverseAnim, %body, 1, 0.15, 1 );
// self waittillmatch("traverse", "gravity on");
// keeps the actor from sinking in to the ground or from levitating to some extent.
wait 0.7;
self thread teleportThread( realHeight - normalHeight );
wait 0.9;
// wait 1.6;
self traverseMode( "gravity" );
self animscripts\shared::DoNoteTracks( "traverse" );
}

View File

@ -0,0 +1,25 @@
#include animscripts\utility;
#include animscripts\traverse\shared;
#using_animtree( "generic_human" );
main()
{
if ( self.type == "dog" )
{
dog_wall_and_window_hop( "window_40", 40 );
}
else
{
low_wall_human();
}
}
low_wall_human()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %traverse_window_M_2_dive;
traverseData[ "traverseStopsAtEnd" ] = true;
traverseData[ "traverseHeight" ] = 36.0;
DoTraverse( traverseData );
}

View File

@ -0,0 +1,134 @@
#include animscripts\traverse\shared;
#include maps\_utility;
#include common_scripts\utility;
#using_animtree( "generic_human" );
main()
{
traverseAnim = %windowclimb_fall;
landAnim = %windowclimb_land;
normalHeight = 35;
// do not do code prone in this script
self.desired_anim_pose = "crouch";
animscripts\utility::UpdateAnimPose();
self endon( "killanimscript" );
self traverseMode( "noclip" );// So he doesn't get stuck if the wall is a little too high
// orient to the Negotiation start node
startnode = self getnegotiationstartnode();
assert( isdefined( startnode ) );
self OrientMode( "face angle", startnode.angles[ 1 ] );
realHeight = startnode.traverse_height - startnode.origin[ 2 ];
self setFlaggedAnimKnoballRestart( "traverse", traverseAnim, %body, 1, 0.15, 1 );
thread animscripts\shared::DoNoteTracksForever( "traverse", "stop_traverse_notetracks" );
// keeps the actor from sinking in to the ground or from levitating to some extent.
wait 1.5;
angles = ( 0, startnode.angles[ 1 ], 0 );
forward = anglestoforward( angles );
//println(forward);
forward = vector_multiply( forward, 85 );
trace = bullettrace( startnode.origin + forward, startnode.origin + forward + ( 0, 0, -500 ), false, undefined );
// thread showLine(startnode.origin + forward, trace["position"]);
endheight = trace[ "position" ][ 2 ];
finaldif = startnode.origin[ 2 ] - endheight;
heightChange = 0;
for ( i = 0;i < level._window_down_height.size;i++ )
{
if ( finaldif < level._window_down_height[ i ] )
continue;
heightChange = finaldif - level._window_down_height[ i ];
}
assertEx( heightChange > 0, "window_jump at " + startnode.origin + " is too high off the ground" );
// heightChange -= 0;
self thread teleportThread( heightChange * - 1 );
// thread printerdebugger(heightchange, trace["position"]);
oldheight = self.origin[ 2 ];
change = 0;
level.traverseFall = [];
for ( ;; )
{
/*
/#
thread printer(self.origin);
#/
*/
change = oldheight - self.origin[ 2 ];
if ( self.origin[ 2 ] - change < endheight )// predict when he's about to hit the ground
{
break;
}
oldheight = self.origin[ 2 ];
wait( 0.05 );
}
if ( isdefined( self.groundtype ) )
self playsound( "Land_" + self.groundtype );
self notify( "stop_traverse_notetracks" );
self setFlaggedAnimKnoballRestart( "traverse", landAnim, %body, 1, 0.15, 1 );
// self waittillmatch("traverse", "gravity on");
self traverseMode( "gravity" );
self animscripts\shared::DoNoteTracks( "traverse" );
// wait 0.9;
}
printer( org )
{
level notify( "print_this_" + org );
level endon( "print_this_" + org );
for ( ;; )
{
print3d( org, ".", ( 1, 1, 1 ), 5 );
wait( 0.05 );
}
}
showline( start, end )
{
for ( ;; )
{
line( start, end + ( -1, -1, -1 ), ( 1, 0, 0 ) );
wait( 0.05 );
}
}
printerdebugger( msg, org )
{
level notify( "prrint_this_" + org );
level endon( "prrint_this_" + org );
for ( ;; )
{
print3d( org, msg, ( 1, 1, 1 ), 5 );
wait( 0.05 );
}
}
/*
/#
dif = startNode.origin[2] - self.origin[2];
included = false;
for (i=0;i<level.traverseFall.size;i++)
{
if (level.traverseFall[i] != dif)
continue;
included = true;
break;
}
if (!includeD)
level.traverseFall[level.traverseFall.size] = dif;
if (getdebugdvar("debug_traversefall") != "")
{
setdvar("debug_traversefall", "");
for (i=0;i<level.traverseFall.size;i++)
println (" level.window_down_height[", i, "] = ", level.traverseFall[i], ";");
}
#/
*/

View File

@ -0,0 +1,26 @@
#include animscripts\traverse\shared;
#include animscripts\utility;
#include maps\_utility;
#using_animtree( "generic_human" );
main()
{
if ( self.type == "dog" )
dog_wall_and_window_hop( "window_40", 40 );
else
jump_through_window_human();
}
jump_through_window_human()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %traverse_window_M_2_run;
traverseData[ "traverseToCoverAnim" ] = %traverse_window_M_2_stop;
traverseData[ "coverType" ] = "Cover Crouch";
traverseData[ "traverseHeight" ] = 36.0;
traverseData[ "interruptDeathAnim" ][ 0 ] = array( %traverse_window_death_start );
traverseData[ "interruptDeathAnim" ][ 1 ] = array( %traverse_window_death_end );
DoTraverse( traverseData );
}

View File

@ -0,0 +1,25 @@
#include animscripts\traverse\shared;
#include animscripts\utility;
#include maps\_utility;
#using_animtree( "generic_human" );
main()
{
if ( self.type == "dog" )
dog_wall_and_window_hop( "window_40", 40 );
else
jump_through_window_human();
}
jump_through_window_human()
{
traverseData = [];
traverseData[ "traverseAnim" ] = %traverse_window_quick;
traverseData[ "coverType" ] = "Cover Crouch";
traverseData[ "traverseHeight" ] = 36.0;
traverseData[ "interruptDeathAnim" ][ 0 ] = array( %traverse_window_death_start );
traverseData[ "interruptDeathAnim" ][ 1 ] = array( %traverse_window_death_end );
DoTraverse( traverseData );
}