Index: code/hud/hudlock.cpp
===================================================================
--- code/hud/hudlock.cpp	(revision 11242)
+++ code/hud/hudlock.cpp	(working copy)
@@ -1155,8 +1155,10 @@
 	if ( lock_local_pos.xyz.z > 0.0f ) {
 		// Get the location of our target in the "virtual frame" where the locking computation will be done
 		float w = 1.0f / lock_local_pos.xyz.z;
-		float sx = ((gr_screen.clip_center_x*2.0f) + (lock_local_pos.xyz.x*(gr_screen.clip_center_x*2.0f)*w))*0.5f;
-		float sy = ((gr_screen.clip_center_y*2.0f) - (lock_local_pos.xyz.y*(gr_screen.clip_center_y*2.0f)*w))*0.5f;
+		// Let's force our "virtual frame" to be square, to avoid extreme aspect ratios resulting in overcorrection. -MageKing17
+		float scale = MIN(gr_screen.clip_center_x, gr_screen.clip_center_y);
+		float sx = gr_screen.clip_center_x + (lock_local_pos.xyz.x * scale * w);
+		float sy = gr_screen.clip_center_y - (lock_local_pos.xyz.y * scale * w);
 
 		Player->current_target_sx = (int)sx;
 		Player->current_target_sy = (int)sy;
