// 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");#/ }