Index: freespace2/freespace.cpp =================================================================== --- freespace2/freespace.cpp (revision 5828) +++ freespace2/freespace.cpp (working copy) @@ -3730,6 +3730,7 @@ matrix tm, tm2; vm_angles_2_matrix(&tm2, &Viewer_external_info.angles); + compute_slew_matrix(&tm2, &Viewer_slew_angles); vm_matrix_x_matrix(&tm, &Viewer_obj->orient, &tm2); vm_vec_scale_add(&eye_pos, &Viewer_obj->pos, &tm.vec.fvec, 2.0f * Viewer_obj->radius + Viewer_external_info.distance); @@ -3740,7 +3741,7 @@ Viewer_obj = NULL; // Modify the orientation based on head orientation. - compute_slew_matrix(&eye_orient, &Viewer_slew_angles); +// compute_slew_matrix(&eye_orient, &Viewer_slew_angles); } else if ( Viewer_mode & VM_CHASE ) { vec3d move_dir; Index: playerman/playercontrol.cpp =================================================================== --- playerman/playercontrol.cpp (revision 5828) +++ playerman/playercontrol.cpp (working copy) @@ -279,7 +279,7 @@ } t = check_control_timef(VIEW_DIST_INCREASE) - check_control_timef(VIEW_DIST_DECREASE); - Viewer_chase_info.distance += t*4; + Viewer_chase_info.distance += t*4.0f; if (Viewer_chase_info.distance < 0.0f) Viewer_chase_info.distance = 0.0f; } @@ -300,13 +300,17 @@ // Process centering key. if (check_control_timef(VIEW_CENTER)) { + chase_slew_angles.p = Viewer_external_info.angles.p; + chase_slew_angles.h = Viewer_external_info.angles.h; +// slew_active = 1; + view_centering = 1; Viewer_external_info.angles.p = 0.0f; Viewer_external_info.angles.h = 0.0f; Viewer_external_info.distance = 0.0f; } t = check_control_timef(VIEW_DIST_INCREASE) - check_control_timef(VIEW_DIST_DECREASE); - Viewer_external_info.distance += t*4*camera_zoom_scale; + Viewer_external_info.distance += t*4.0f*camera_zoom_scale; if (Viewer_external_info.distance < 0.0f){ Viewer_external_info.distance = 0.0f; } @@ -425,14 +429,16 @@ ok_to_read_ci_pitch_yaw=0; } + player_set_padlock_state(); do_view_external(frame_time); do_thrust_keys(ci); - slew_active=0; +// slew_active=0; } else if ( Viewer_mode & VM_CHASE ) { do_view_chase(frame_time); - slew_active=0; +// slew_active=0; + player_set_padlock_state(); } else { // We're in the cockpit. - if (view_centering) { + if (view_centering) { // If we're centering the view, check to see if we're actually centered and bypass any view modifications // until the view has finally been centered. if ((Viewer_slew_angles.h == 0.0f) && (Viewer_slew_angles.p == 0.0f)) { @@ -444,8 +450,8 @@ } else { // The Center View command check is here because // we don't want the player centering the view in target padlock mode - if (check_control_timef(VIEW_CENTER) && !view_centering) { - view_centering = 1; + if (check_control_timef(VIEW_CENTER) && !view_centering) { + view_centering = 1; slew_active = 0; } do_view_slew(frame_time); @@ -2131,7 +2137,7 @@ vm_vec_sub(&tmp_dir, &viewer_obj->pos, &eye_pos); vm_vec_normalize(&tmp_dir); vm_vector_2_matrix(&eye_orient, &tmp_dir, &viewer_obj->orient.vec.uvec, NULL); - viewer_obj = NULL; + viewer_obj = NULL; // Modify the orientation based on head orientation. compute_slew_matrix(&eye_orient, &Viewer_slew_angles);