DonkeyKong64 grind crash
[carveJwlIkooP6JGAAIwe30JlM.git] / player_common.c
index 7daa3993d511df73c847e6cb81b9734965fe280f..eeed469d04c52c8b7cdbf36d04709a6eaf967ef3 100644 (file)
@@ -53,7 +53,7 @@ static void player_camera_portal_correction(void){
          m4x3_mulv( inverse, localplayer.cam.pos, localplayer.cam.pos );
 
          struct skeleton *sk = &localplayer.playeravatar->sk;
-         skeleton_apply_transform( sk, inverse );
+         skeleton_apply_transform( sk, inverse, localplayer.final_mtx );
       }
    }
 }
@@ -127,7 +127,7 @@ static void player__cam_iterate(void){
 
    /* position */
    v3f fpv_pos, fpv_offset;
-   m4x3_mulv( av->sk.final_mtx[ av->id_head-1 ], 
+   m4x3_mulv( localplayer.final_mtx[ av->id_head-1 ], 
                cc->fpv_viewpoint_smooth, fpv_pos );
    m3x3_mulv( localplayer.rb.to_world, cc->fpv_offset_smooth, fpv_offset );
    v3_add( fpv_offset, fpv_pos, fpv_pos );
@@ -188,6 +188,8 @@ static void player__cam_iterate(void){
    v3f pco;
    v4f pq;
    rb_extrapolate( &localplayer.rb, pco, pq );
+   v3_muladds( pco, localplayer.holdout_pose.root_co, 
+               localplayer.holdout_time, pco );
    v3_lerp( cc->tpv_lpf, pco, 20.0f*vg.time_frame_delta, cc->tpv_lpf );
 
    /* now move into world */
@@ -203,13 +205,6 @@ static void player__cam_iterate(void){
    v3_muladds( tpv_offset, cc->cam_velocity_smooth, -0.025f, tpv_offset );
 
    v3_add( tpv_origin, tpv_offset, tpv_pos );
-#if 0
-   f32 t; v3f n;
-   if( spherecast_world( world_current_instance(), tpv_origin, tpv_pos, 
-                         0.2f, &t, n ) != -1 ){
-      v3_lerp( tpv_origin, tpv_pos, t, tpv_pos );
-   }
-#endif
 
    /* 
     * Blend cameras