Package: wolf4sdl / 1.7+svn262+dfsg1-2

44-autostrafe.patch Patch series | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Subject: Toggle autostrafe for the keyboard when both Alt keys are pressed.
 By the way, accept the German AltGr key as a right Alt key.
Author: Fabian Greffrath <fabian+debian@greffrath.com>

--- a/id_in.cpp
+++ b/id_in.cpp
@@ -239,6 +239,7 @@ boolean IN_JoyPresent()
 
 boolean mw_dn = false, mw_up = false;
 boolean autorun = false;
+boolean autostrafe = false;
 
 static void processEvent(SDL_Event *event)
 {
@@ -262,6 +263,9 @@ static void processEvent(SDL_Event *even
             SDLMod mod = SDL_GetModState();
             if ((mod & KMOD_LSHIFT) && (mod & KMOD_RSHIFT))
                 autorun = !autorun;
+            if (((mod & KMOD_LALT) && (mod & KMOD_RALT)) ||
+                ((mod & KMOD_LALT) && (mod & KMOD_MODE)))
+                autostrafe = !autostrafe;
 
             if(Keyboard[sc_Alt])
             {
@@ -272,6 +276,7 @@ static void processEvent(SDL_Event *even
             if(LastScan == SDLK_KP_ENTER) LastScan = SDLK_RETURN;
             else if(LastScan == SDLK_RSHIFT) LastScan = SDLK_LSHIFT;
             else if(LastScan == SDLK_RALT) LastScan = SDLK_LALT;
+            else if(LastScan == SDLK_MODE) LastScan = SDLK_LALT; /* AltGr */
             else if(LastScan == SDLK_RCTRL) LastScan = SDLK_LCTRL;
             else
             {
@@ -314,6 +319,7 @@ static void processEvent(SDL_Event *even
             if(key == SDLK_KP_ENTER) key = SDLK_RETURN;
             else if(key == SDLK_RSHIFT) key = SDLK_LSHIFT;
             else if(key == SDLK_RALT) key = SDLK_LALT;
+            else if(key == SDLK_MODE) key = SDLK_LALT; /* AltGr */
             else if(key == SDLK_RCTRL) key = SDLK_LCTRL;
             else
             {
--- a/wl_play.cpp
+++ b/wl_play.cpp
@@ -329,15 +329,22 @@ void PollJoystickButtons (void)
 void PollKeyboardMove (void)
 {
     int delta = buttonstate[bt_run] ? RUNMOVE * tics : BASEMOVE * tics;
+    extern boolean autostrafe;
 
     if (Keyboard[dirscan[di_north]])
         controly -= delta;
     if (Keyboard[dirscan[di_south]])
         controly += delta;
     if (Keyboard[dirscan[di_west]])
-        controlx -= delta;
+        if (autostrafe)
+            buttonstate[bt_strafeleft] = true;
+        else
+            controlx -= delta;
     if (Keyboard[dirscan[di_east]])
-        controlx += delta;
+        if (autostrafe)
+            buttonstate[bt_straferight] = true;
+        else
+            controlx += delta;
 }