From a955b34f46a3503cd34f1157f6d111d746bf21cb Mon Sep 17 00:00:00 2001
From: "Anton E. Gavrilov" <tonik@vipmail.ru>
Date: Mon, 22 May 2000 03:15:30 +0000
Subject: [PATCH] freelook cvar support

---
 include/client.h          |  1 +
 include/input.h           |  2 ++
 source/cl_input.c         |  4 +---
 source/cl_main.c          |  2 ++
 source/gl_vidlinux.c      |  6 +++---
 source/gl_vidlinux_svga.c |  6 +++---
 source/gl_vidlinux_x11.c  |  6 +++---
 source/in_win.c           | 13 +++++++------
 source/vid_ggi.c          |  6 +++---
 source/vid_glx.c          |  6 +++---
 source/vid_svgalib.c      |  6 +++---
 source/vid_x11.c          |  6 +++---
 12 files changed, 34 insertions(+), 30 deletions(-)

diff --git a/include/client.h b/include/client.h
index b7a2add..654d425 100644
--- a/include/client.h
+++ b/include/client.h
@@ -367,6 +367,7 @@ extern	cvar_t	*lookstrafe;
 /* extern	cvar_t	sensitivity;
  CVAR_FIXME */
 extern	cvar_t	*sensitivity;
+extern	cvar_t	*cl_freelook;
 
 /* extern	cvar_t	m_pitch;
  CVAR_FIXME */
diff --git a/include/input.h b/include/input.h
index bd48119..4027518 100644
--- a/include/input.h
+++ b/include/input.h
@@ -24,6 +24,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 #include "protocol.h"
 
+#define freelook (in_mlook.state&1 || cl_freelook->value)
+
 void IN_Init (void);
 
 void IN_Shutdown (void);
diff --git a/source/cl_input.c b/source/cl_input.c
index 7c6f9b8..c473d9d 100644
--- a/source/cl_input.c
+++ b/source/cl_input.c
@@ -146,9 +146,7 @@ void IN_KLookUp (void) {KeyUp(&in_klook);}
 void IN_MLookDown (void) {KeyDown(&in_mlook);}
 void IN_MLookUp (void) {
 KeyUp(&in_mlook);
-/* if ( !(in_mlook.state&1) &&  lookspring.value)
- CVAR_FIXME */
-if ( !(in_mlook.state&1) &&  lookspring->value)
+if ( !(in_mlook.state&1 || cl_freelook->value) &&  lookspring->value)
 	V_StartPitchDrift();
 }
 void IN_UpDown(void) {KeyDown(&in_up);}
diff --git a/source/cl_main.c b/source/cl_main.c
index 131c153..085f1ae 100644
--- a/source/cl_main.c
+++ b/source/cl_main.c
@@ -110,6 +110,7 @@ cvar_t	*lookstrafe;
 /* cvar_t	sensitivity = {"sensitivity","3", true};
  CVAR_FIXME */
 cvar_t	*sensitivity;
+cvar_t	*cl_freelook;
 
 /* cvar_t	m_pitch = {"m_pitch","0.022", true};
  CVAR_FIXME */
@@ -1338,6 +1339,7 @@ void CL_InitCvars (void)
 /* 	Cvar_RegisterVariable (&sensitivity);
  CVAR_FIXME */
 	sensitivity = Cvar_Get("sensitivity", "3", CVAR_ARCHIVE, "None");
+	cl_freelook = Cvar_Get("freelook", "0", CVAR_ARCHIVE, "None");
 
 /* 	Cvar_RegisterVariable (&m_pitch);
  CVAR_FIXME */
diff --git a/source/gl_vidlinux.c b/source/gl_vidlinux.c
index b5e2583..9bb186a 100644
--- a/source/gl_vidlinux.c
+++ b/source/gl_vidlinux.c
@@ -823,7 +823,7 @@ void IN_MouseMove (usercmd_t *cmd)
 // add mouse X/Y movement to cmd
 /* 	if ( (in_strafe.state & 1) || (lookstrafe.value && (in_mlook.state & 1) ))
  CVAR_FIXME */
-	if ( (in_strafe.state & 1) || (lookstrafe->value && (in_mlook.state & 1) ))
+	if ( (in_strafe.state & 1) || (lookstrafe->value && freelook))
 /* 		cmd->sidemove += m_side.value * mouse_x;
  CVAR_FIXME */
 		cmd->sidemove += m_side->value * mouse_x;
@@ -832,10 +832,10 @@ void IN_MouseMove (usercmd_t *cmd)
  CVAR_FIXME */
 		cl.viewangles[YAW] -= m_yaw->value * mouse_x;
 	
-	if (in_mlook.state & 1)
+	if (in_freelook)
 		V_StopPitchDrift ();
 		
-	if ( (in_mlook.state & 1) && !(in_strafe.state & 1))
+	if ( in_freelook && !(in_strafe.state & 1))
 	{
 /* 		cl.viewangles[PITCH] += m_pitch.value * mouse_y;
  CVAR_FIXME */
diff --git a/source/gl_vidlinux_svga.c b/source/gl_vidlinux_svga.c
index 076e274..ff372e6 100644
--- a/source/gl_vidlinux_svga.c
+++ b/source/gl_vidlinux_svga.c
@@ -861,7 +861,7 @@ void IN_MouseMove (usercmd_t *cmd)
 // add mouse X/Y movement to cmd
 /* 	if ( (in_strafe.state & 1) || (lookstrafe.value && (in_mlook.state & 1) ))
  CVAR_FIXME */
-	if ( (in_strafe.state & 1) || (lookstrafe->value && (in_mlook.state & 1) ))
+	if ( (in_strafe.state & 1) || (lookstrafe->value && freelook ))
 /* 		cmd->sidemove += m_side.value * mouse_x;
  CVAR_FIXME */
 		cmd->sidemove += m_side->value * mouse_x;
@@ -870,10 +870,10 @@ void IN_MouseMove (usercmd_t *cmd)
  CVAR_FIXME */
 		cl.viewangles[YAW] -= m_yaw->value * mouse_x;
 	
-	if (in_mlook.state & 1)
+	if (in_freelook)
 		V_StopPitchDrift ();
 		
-	if ( (in_mlook.state & 1) && !(in_strafe.state & 1))
+	if ( in_freelook && !(in_strafe.state & 1))
 	{
 /* 		cl.viewangles[PITCH] += m_pitch.value * mouse_y;
  CVAR_FIXME */
diff --git a/source/gl_vidlinux_x11.c b/source/gl_vidlinux_x11.c
index ba9b1b2..81d373c 100644
--- a/source/gl_vidlinux_x11.c
+++ b/source/gl_vidlinux_x11.c
@@ -888,7 +888,7 @@ void IN_Move (usercmd_t *cmd)
    
 /* 	if ( (in_strafe.state & 1) || (lookstrafe.value && (in_mlook.state & 1) ))
  CVAR_FIXME */
-	if ( (in_strafe.state & 1) || (lookstrafe->value && (in_mlook.state & 1) ))
+	if ( (in_strafe.state & 1) || (lookstrafe->value && freelook ))
 /* 		cmd->sidemove += m_side.value * mouse_x;
  CVAR_FIXME */
 		cmd->sidemove += m_side->value * mouse_x;
@@ -896,10 +896,10 @@ void IN_Move (usercmd_t *cmd)
 /* 		cl.viewangles[YAW] -= m_yaw.value * mouse_x;
  CVAR_FIXME */
 		cl.viewangles[YAW] -= m_yaw->value * mouse_x;
-	if (in_mlook.state & 1)
+	if (freelook)
 		V_StopPitchDrift ();
    
-	if ( (in_mlook.state & 1) && !(in_strafe.state & 1)) {
+	if ( freelook && !(in_strafe.state & 1)) {
 /* 		cl.viewangles[PITCH] += m_pitch.value * mouse_y;
  CVAR_FIXME */
 		cl.viewangles[PITCH] += m_pitch->value * mouse_y;
diff --git a/source/in_win.c b/source/in_win.c
index 03c7177..38aa994 100644
--- a/source/in_win.c
+++ b/source/in_win.c
@@ -42,6 +42,7 @@
 #include "console.h"
 #include "qargs.h"
 #include "cmd.h"
+#include "input.h"
 //#include "dosisms.h"
 
 #define DINPUT_BUFFERSIZE           16
@@ -804,7 +805,7 @@ void IN_MouseMove (usercmd_t *cmd)
 // add mouse X/Y movement to cmd
 /* 	if ( (in_strafe.state & 1) || (lookstrafe.value && (in_mlook.state & 1) ))
  CVAR_FIXME */
-	if ( (in_strafe.state & 1) || (lookstrafe->value && (in_mlook.state & 1) ))
+	if ( (in_strafe.state & 1) || (lookstrafe->value && freelook ))
 /* 		cmd->sidemove += m_side.value * mouse_x;
  CVAR_FIXME */
 		cmd->sidemove += m_side->value * mouse_x;
@@ -813,10 +814,10 @@ void IN_MouseMove (usercmd_t *cmd)
  CVAR_FIXME */
 		cl.viewangles[YAW] -= m_yaw->value * mouse_x;
 
-	if (in_mlook.state & 1)
+	if (freelook)
 		V_StopPitchDrift ();
 		
-	if ( (in_mlook.state & 1) && !(in_strafe.state & 1))
+	if ( freelook && !(in_strafe.state & 1))
 	{
 /* 		cl.viewangles[PITCH] += m_pitch.value * mouse_y;
  CVAR_FIXME */
@@ -1264,7 +1265,7 @@ static void IN_JoyMove (usercmd_t *cmd)
 		case AxisForward:
 /* 			if ((joy_advanced.value == 0.0) && (in_mlook.state & 1))
  CVAR_FIXME */
-			if ((joy_advanced->value == 0.0) && (in_mlook.state & 1))
+			if ((joy_advanced->value == 0.0) && freelook)
 			{
 				// user wants forward control to become look control
 /* 				if (fabs(fAxisValue) > joy_pitchthreshold.value)
@@ -1329,7 +1330,7 @@ static void IN_JoyMove (usercmd_t *cmd)
 		case AxisTurn:
 /* 			if ((in_strafe.state & 1) || (lookstrafe.value && (in_mlook.state & 1)))
  CVAR_FIXME */
-			if ((in_strafe.state & 1) || (lookstrafe->value && (in_mlook.state & 1)))
+			if ((in_strafe.state & 1) || (lookstrafe->value && freelook))
 			{
 				// user wants turn control to become side control
 /* 				if (fabs(fAxisValue) > joy_sidethreshold.value)
@@ -1366,7 +1367,7 @@ static void IN_JoyMove (usercmd_t *cmd)
 			break;
 
 		case AxisLook:
-			if (in_mlook.state & 1)
+			if (freelook)
 			{
 /* 				if (fabs(fAxisValue) > joy_pitchthreshold.value)
  CVAR_FIXME */
diff --git a/source/vid_ggi.c b/source/vid_ggi.c
index f1a9238..7487eb8 100644
--- a/source/vid_ggi.c
+++ b/source/vid_ggi.c
@@ -967,14 +967,14 @@ IN_Move(usercmd_t *cmd)
 	mouse_x *= sensitivity->value;
 	mouse_y *= sensitivity->value;
 
-	if ( (in_strafe.state & 1) || (lookstrafe->value && (in_mlook.state & 1) ))
+	if ( (in_strafe.state & 1) || (lookstrafe->value && freelook ))
 		cmd->sidemove += m_side->value * mouse_x;
 	else
 		cl.viewangles[YAW] -= m_yaw->value * mouse_x;
-	if (in_mlook.state & 1)
+	if (freelook)
 		V_StopPitchDrift ();
 
-	if ( (in_mlook.state & 1) && !(in_strafe.state & 1)) {
+	if ( freelook && !(in_strafe.state & 1)) {
 		cl.viewangles[PITCH] += m_pitch->value * mouse_y;
 		if (cl.viewangles[PITCH] > 80)
 			cl.viewangles[PITCH] = 80;
diff --git a/source/vid_glx.c b/source/vid_glx.c
index 1e78c89..8fa4adb 100644
--- a/source/vid_glx.c
+++ b/source/vid_glx.c
@@ -850,15 +850,15 @@ void IN_MouseMove (usercmd_t *cmd)
 	mouse_y *= sensitivity->value;
 
 // add mouse X/Y movement to cmd
-	if ( (in_strafe.state & 1) || (lookstrafe->value && (in_mlook.state & 1) ))
+	if ( (in_strafe.state & 1) || (lookstrafe->value && freelook ))
 		cmd->sidemove += m_side->value * mouse_x;
 	else
 		cl.viewangles[YAW] -= m_yaw->value * mouse_x;
 	
-	if (in_mlook.state & 1)
+	if (freelook)
 		V_StopPitchDrift ();
 		
-	if ( (in_mlook.state & 1) && !(in_strafe.state & 1))
+	if ( freelook && !(in_strafe.state & 1))
 	{
 		cl.viewangles[PITCH] += m_pitch->value * mouse_y;
 		if (cl.viewangles[PITCH] > 80)
diff --git a/source/vid_svgalib.c b/source/vid_svgalib.c
index 56c25d1..cce4017 100644
--- a/source/vid_svgalib.c
+++ b/source/vid_svgalib.c
@@ -1032,7 +1032,7 @@ void IN_MouseMove (usercmd_t *cmd)
 // add mouse X/Y movement to cmd
 /* 	if ( (in_strafe.state & 1) || (lookstrafe.value && (in_mlook.state & 1) ))
  CVAR_FIXME */
-	if ( (in_strafe.state & 1) || (lookstrafe->value && (in_mlook.state & 1) ))
+	if ( (in_strafe.state & 1) || (lookstrafe->value && freelook ))
 /* 		cmd->sidemove += m_side.value * mouse_x;
  CVAR_FIXME */
 		cmd->sidemove += m_side->value * mouse_x;
@@ -1041,10 +1041,10 @@ void IN_MouseMove (usercmd_t *cmd)
  CVAR_FIXME */
 		cl.viewangles[YAW] -= m_yaw->value * mouse_x;
 	
-	if (in_mlook.state & 1)
+	if (freelook)
 		V_StopPitchDrift ();
 		
-	if ( (in_mlook.state & 1) && !(in_strafe.state & 1))
+	if ( freelook && !(in_strafe.state & 1))
 	{
 /* 		cl.viewangles[PITCH] += m_pitch.value * mouse_y;
  CVAR_FIXME */
diff --git a/source/vid_x11.c b/source/vid_x11.c
index 2e1efdf..d6ba06f 100644
--- a/source/vid_x11.c
+++ b/source/vid_x11.c
@@ -1144,7 +1144,7 @@ void IN_Move (usercmd_t *cmd)
    
 /* 	if ( (in_strafe.state & 1) || (lookstrafe.value && (in_mlook.state & 1) ))
  CVAR_FIXME */
-	if ( (in_strafe.state & 1) || (lookstrafe->value && (in_mlook.state & 1) ))
+	if ( (in_strafe.state & 1) || (lookstrafe->value && freelook ))
 /* 		cmd->sidemove += m_side.value * mouse_x;
  CVAR_FIXME */
 		cmd->sidemove += m_side->value * mouse_x;
@@ -1152,10 +1152,10 @@ void IN_Move (usercmd_t *cmd)
 /* 		cl.viewangles[YAW] -= m_yaw.value * mouse_x;
  CVAR_FIXME */
 		cl.viewangles[YAW] -= m_yaw->value * mouse_x;
-	if (in_mlook.state & 1)
+	if (freelook)
 		V_StopPitchDrift ();
    
-	if ( (in_mlook.state & 1) && !(in_strafe.state & 1)) {
+	if ( freelook && !(in_strafe.state & 1)) {
 /* 		cl.viewangles[PITCH] += m_pitch.value * mouse_y;
  CVAR_FIXME */
 		cl.viewangles[PITCH] += m_pitch->value * mouse_y;