+ /* scalar blending information */
+ float speed = v3_length( player.rb.v );
+
+ /* sliding */
+ {
+ float desired = vg_clampf( lslip, 0.0f, 1.0f );
+ player.fslide = vg_lerpf( player.fslide, desired, 0.04f );
+ }
+
+ /* movement information */
+ {
+ float dirz = player.reverse > 0.0f? 0.0f: 1.0f,
+ dirx = player.slip < 0.0f? 0.0f: 1.0f,
+ fly = player.in_air? 1.0f: 0.0f;
+
+ player.fdirz = vg_lerpf( player.fdirz, dirz, 0.04f );
+ player.fdirx = vg_lerpf( player.fdirx, dirx, 0.01f );
+ player.ffly = vg_lerpf( player.ffly, fly, 0.04f );
+ }
+
+ struct skeleton *sk = &player.mdl.sk;
+
+ mdl_keyframe apose[32], bpose[32];
+ mdl_keyframe ground_pose[32];
+ {
+ /* when the player is moving fast he will crouch down a little bit */
+ float stand = 1.0f - vg_clampf( speed * 0.03f, 0.0f, 1.0f );
+ player.fstand = vg_lerpf( player.fstand, stand, 0.1f );
+
+ /* stand/crouch */
+ float dir_frame = player.fdirz * (15.0f/30.0f),
+ stand_blend = offset[1]*-2.0f;
+
+ skeleton_sample_anim( sk, player.mdl.anim_stand, dir_frame, apose );
+ skeleton_sample_anim( sk, player.mdl.anim_highg, dir_frame, bpose );
+ skeleton_lerp_pose( sk, apose, bpose, stand_blend, apose );
+
+ /* sliding */
+ float slide_frame = player.fdirx * (15.0f/30.0f);
+ skeleton_sample_anim( sk, player.mdl.anim_slide, slide_frame, bpose );
+ skeleton_lerp_pose( sk, apose, bpose, player.fslide, apose );
+
+ /* pushing */
+ player.fpush = vg_lerpf( player.fpush, player.pushing, 0.1f );
+
+ float pt = player.push_time;
+ if( player.reverse > 0.0f )
+ skeleton_sample_anim( sk, player.mdl.anim_push, pt, bpose );
+ else
+ skeleton_sample_anim( sk, player.mdl.anim_push_reverse, pt, bpose );
+
+ skeleton_lerp_pose( sk, apose, bpose, player.fpush, apose );
+
+ /* trick setup */
+ float jump_start_frame = 14.0f/30.0f;
+ float setup_frame = player.jump * jump_start_frame,
+ setup_blend = vg_minf( player.jump*5.0f, 1.0f );
+
+ float jump_frame = (vg_time - player.jump_time) + jump_start_frame;
+ if( jump_frame >= jump_start_frame && jump_frame <= (40.0f/30.0f) )
+ setup_frame = jump_frame;