foxygit / doom Log in
commit 331aed42b4490388d0d60867a731b7b7e63e8f3e
Author:     Fabian Greffrath <fabian@greffrath.com>
AuthorDate: Tue Apr 6 11:25:59 2021 +0200
Commit:     Fabian Greffrath <fabian@greffrath.com>
CommitDate: Tue Apr 6 11:25:59 2021 +0200

    add mouse button bindings for turning left/right
---
 src/doom/g_game.c    | 12 +++++++++++-
 src/heretic/g_game.c | 11 ++++++++++-
 src/hexen/g_game.c   | 15 ++++++++++++++-
 src/m_config.c       | 12 ++++++++++++
 src/m_controls.c     |  4 ++++
 src/m_controls.h     |  2 ++
 src/setup/mouse.c    |  8 ++++++--
 src/strife/g_game.c  | 12 +++++++++++-
 8 files changed, 70 insertions(+), 6 deletions(-)

diff --git a/src/doom/g_game.c b/src/doom/g_game.c
index 7efc6529..f91db155 100644
--- a/src/doom/g_game.c
+++ b/src/doom/g_game.c
@@ -354,7 +354,9 @@ void G_BuildTiccmd (ticcmd_t* cmd, int maketic)
     if (joyxmove < 0
 	|| joyxmove > 0
 	|| gamekeydown[key_right]
-	|| gamekeydown[key_left])
+	|| gamekeydown[key_left]
+	|| mousebuttons[mousebturnright]
+	|| mousebuttons[mousebturnleft])
 	turnheld += ticdup;
     else
 	turnheld = 0;
@@ -381,6 +383,10 @@ void G_BuildTiccmd (ticcmd_t* cmd, int maketic)
 	    side += sidemove[speed];
 	if (joyxmove < 0)
 	    side -= sidemove[speed];
+	if (mousebuttons[mousebturnright])
+	    side += sidemove[speed];
+	if (mousebuttons[mousebturnleft])
+	    side -= sidemove[speed];

     }
     else
@@ -393,6 +399,10 @@ void G_BuildTiccmd (ticcmd_t* cmd, int maketic)
 	    cmd->angleturn -= angleturn[tspeed];
 	if (joyxmove < 0)
 	    cmd->angleturn += angleturn[tspeed];
+	if (mousebuttons[mousebturnright])
+	    cmd->angleturn -= angleturn[tspeed];
+	if (mousebuttons[mousebturnleft])
+	    cmd->angleturn += angleturn[tspeed];
     }

     if (gamekeydown[key_up])
diff --git a/src/heretic/g_game.c b/src/heretic/g_game.c
index f85de205..b0268875 100644
--- a/src/heretic/g_game.c
+++ b/src/heretic/g_game.c
@@ -320,7 +320,8 @@ void G_BuildTiccmd(ticcmd_t *cmd, int maketic)
 // use two stage accelerative turning on the keyboard and joystick
 //
     if (joyxmove < 0 || joyxmove > 0
-        || gamekeydown[key_right] || gamekeydown[key_left])
+        || gamekeydown[key_right] || gamekeydown[key_left]
+        || mousebuttons[mousebturnright] || mousebuttons[mousebturnleft])
         turnheld += ticdup;
     else
         turnheld = 0;
@@ -359,6 +360,10 @@ void G_BuildTiccmd(ticcmd_t *cmd, int maketic)
             side += sidemove[speed];
         if (joyxmove < 0)
             side -= sidemove[speed];
+        if (mousebuttons[mousebturnright])
+            side += sidemove[speed];
+        if (mousebuttons[mousebturnleft])
+            side -= sidemove[speed];
     }
     else
     {
@@ -370,6 +375,10 @@ void G_BuildTiccmd(ticcmd_t *cmd, int maketic)
             cmd->angleturn -= angleturn[tspeed];
         if (joyxmove < 0)
             cmd->angleturn += angleturn[tspeed];
+        if (mousebuttons[mousebturnright])
+            cmd->angleturn -= angleturn[tspeed];
+        if (mousebuttons[mousebturnleft])
+            cmd->angleturn += angleturn[tspeed];
     }

     if (gamekeydown[key_up])
diff --git a/src/hexen/g_game.c b/src/hexen/g_game.c
index 9854cf9c..df13651a 100644
--- a/src/hexen/g_game.c
+++ b/src/hexen/g_game.c
@@ -238,7 +238,8 @@ void G_BuildTiccmd(ticcmd_t *cmd, int maketic)
 // use two stage accelerative turning on the keyboard and joystick
 //
     if (joyxmove < 0 || joyxmove > 0
-        || gamekeydown[key_right] || gamekeydown[key_left])
+        || gamekeydown[key_right] || gamekeydown[key_left]
+        || mousebuttons[mousebturnright] || mousebuttons[mousebturnleft])
         turnheld += ticdup;
     else
         turnheld = 0;
@@ -285,6 +286,14 @@ void G_BuildTiccmd(ticcmd_t *cmd, int maketic)
         {
             side -= sidemove[pClass][speed];
         }
+        if (mousebuttons[mousebturnright])
+        {
+            side += sidemove[pClass][speed];
+        }
+        if (mousebuttons[mousebturnleft])
+        {
+            side -= sidemove[pClass][speed];
+        }
     }
     else
     {
@@ -296,6 +305,10 @@ void G_BuildTiccmd(ticcmd_t *cmd, int maketic)
             cmd->angleturn -= angleturn[tspeed];
         if (joyxmove < 0)
             cmd->angleturn += angleturn[tspeed];
+        if (mousebuttons[mousebturnright])
+            cmd->angleturn -= angleturn[tspeed];
+        if (mousebuttons[mousebturnleft])
+            cmd->angleturn += angleturn[tspeed];
     }

     if (gamekeydown[key_up])
diff --git a/src/m_config.c b/src/m_config.c
index d98cdecc..f5b3b4c6 100644
--- a/src/m_config.c
+++ b/src/m_config.c
@@ -1032,6 +1032,18 @@ static default_t extra_defaults_list[] =

     CONFIG_VARIABLE_INT(mouseb_straferight),

+    //!
+    // Mouse button to turn left.
+    //
+
+    CONFIG_VARIABLE_INT(mouseb_turnleft),
+
+    //!
+    // Mouse button to turn right.
+    //
+
+    CONFIG_VARIABLE_INT(mouseb_turnright),
+
     //!
     // Mouse button to "use" an object, eg. a door or switch.
     //
diff --git a/src/m_controls.c b/src/m_controls.c
index 41f0504e..8d984072 100644
--- a/src/m_controls.c
+++ b/src/m_controls.c
@@ -112,6 +112,8 @@ int mousebjump = -1;

 int mousebstrafeleft = -1;
 int mousebstraferight = -1;
+int mousebturnleft = -1;
+int mousebturnright = -1;
 int mousebbackward = -1;
 int mousebuse = -1;

@@ -246,6 +248,8 @@ void M_BindBaseControls(void)
     M_BindIntVariable("joyb_straferight",    &joybstraferight);
     M_BindIntVariable("mouseb_strafeleft",   &mousebstrafeleft);
     M_BindIntVariable("mouseb_straferight",  &mousebstraferight);
+    M_BindIntVariable("mouseb_turnleft",     &mousebturnleft);
+    M_BindIntVariable("mouseb_turnright",    &mousebturnright);
     M_BindIntVariable("mouseb_use",          &mousebuse);
     M_BindIntVariable("mouseb_backward",     &mousebbackward);
     M_BindIntVariable("dclick_use",          &dclick_use);
diff --git a/src/m_controls.h b/src/m_controls.h
index 27ffdade..1e2472b3 100644
--- a/src/m_controls.h
+++ b/src/m_controls.h
@@ -141,6 +141,8 @@ extern int mousebjump;

 extern int mousebstrafeleft;
 extern int mousebstraferight;
+extern int mousebturnleft;
+extern int mousebturnright;
 extern int mousebbackward;
 extern int mousebuse;

diff --git a/src/setup/mouse.c b/src/setup/mouse.c
index 388f594d..41af7580 100644
--- a/src/setup/mouse.c
+++ b/src/setup/mouse.c
@@ -48,7 +48,9 @@ static int *all_mouse_buttons[] = {
     &mousebprevweapon,
     &mousebnextweapon,
     &mousebinvleft,
-    &mousebinvright
+    &mousebinvright,
+    &mousebturnleft,
+    &mousebturnright,
 };

 static void MouseSetCallback(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(variable))
@@ -102,8 +104,10 @@ static void ConfigExtraButtons(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(unused))
     AddMouseControl(buttons_table, "Move backward", &mousebbackward);
     AddMouseControl(buttons_table, "Strafe right", &mousebstraferight);
     AddMouseControl(buttons_table, "Previous weapon", &mousebprevweapon);
-    AddMouseControl(buttons_table, "Strafe on", &mousebstrafe);
+    AddMouseControl(buttons_table, "Turn left", &mousebturnright);
     AddMouseControl(buttons_table, "Next weapon", &mousebnextweapon);
+    AddMouseControl(buttons_table, "Turn right", &mousebturnright);
+    AddMouseControl(buttons_table, "Strafe on", &mousebstrafe);

     if (gamemission == heretic)
     {
diff --git a/src/strife/g_game.c b/src/strife/g_game.c
index 7486bd3b..80b4a9c1 100644
--- a/src/strife/g_game.c
+++ b/src/strife/g_game.c
@@ -405,7 +405,9 @@ void G_BuildTiccmd (ticcmd_t* cmd, int maketic)
     if (joyxmove < 0
         || joyxmove > 0
         || gamekeydown[key_right]
-        || gamekeydown[key_left])
+        || gamekeydown[key_left]
+        || mousebuttons[mousebturnright]
+        || mousebuttons[mousebturnleft])
         turnheld += ticdup;
     else
         turnheld = 0;
@@ -432,6 +434,10 @@ void G_BuildTiccmd (ticcmd_t* cmd, int maketic)
             side += sidemove[speed];
         if (joyxmove < 0)
             side -= sidemove[speed];
+        if (mousebuttons[mousebturnright])
+            side += sidemove[speed];
+        if (mousebuttons[mousebturnleft])
+            side -= sidemove[speed];

     }
     else
@@ -444,6 +450,10 @@ void G_BuildTiccmd (ticcmd_t* cmd, int maketic)
             cmd->angleturn -= angleturn[tspeed];
         if (joyxmove < 0)
             cmd->angleturn += angleturn[tspeed];
+        if (mousebuttons[mousebturnright])
+            cmd->angleturn -= angleturn[tspeed];
+        if (mousebuttons[mousebturnleft])
+            cmd->angleturn += angleturn[tspeed];
     }

     if (gamekeydown[key_up])