]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - keys.c
Cleaned up reflection and refraction a bit; added Q3 shader parameters dp_reflect...
[xonotic/darkplaces.git] / keys.c
diff --git a/keys.c b/keys.c
index 5708c1b5cbdc37ee1698cd5c7973f2dfa0ff2d9e..9f7bf711760345e55ec7ba648d196ebe337c3270 100644 (file)
--- a/keys.c
+++ b/keys.c
@@ -189,11 +189,12 @@ static const keyname_t   keynames[] = {
        {"AUX31", K_AUX31},
        {"AUX32", K_AUX32},
 
-       {"SEMICOLON", ';'},                     // because a raw semicolon seperates commands
+       {"SEMICOLON", ';'},                     // because a raw semicolon separates commands
        {"TILDE", '~'},
        {"BACKQUOTE", '`'},
        {"QUOTE", '"'},
        {"APOSTROPHE", '\''},
+       {"BACKSLASH", '\\'},            // because a raw backslash is used for special characters
 
        {NULL, 0}
 };
@@ -509,7 +510,7 @@ static void
 Key_Message (int key, char ascii)
 {
 
-       if (key == K_ENTER)
+       if (key == K_ENTER || ascii == 10 || ascii == 13)
        {
                Cmd_ForwardStringToServer(va("%s %s", chat_team ? "say_team" : "say ", chat_buffer));
 
@@ -584,18 +585,24 @@ Key_KeynumToString (int keynum)
        const keyname_t  *kn;
        static char tinystr[2];
 
-       if (keynum == -1)
+       // -1 is an invalid code
+       if (keynum < 0)
                return "<KEY NOT FOUND>";
-       if (keynum > 32 && keynum < 127) {      // printable ascii
-               tinystr[0] = keynum;
-               tinystr[1] = 0;
-               return tinystr;
-       }
 
+       // search overrides first, because some characters are special
        for (kn = keynames; kn->name; kn++)
                if (keynum == kn->keynum)
                        return kn->name;
 
+       // if it is printable, output it as a single character
+       if (keynum > 32 && keynum < 256)
+       {
+               tinystr[0] = keynum;
+               tinystr[1] = 0;
+               return tinystr;
+       }
+
+       // if it is not overridden and not printable, we don't know what to do with it
        return "<UNKNOWN KEYNUM>";
 }
 
@@ -614,6 +621,8 @@ Key_SetBinding (int keynum, int bindmap, const char *binding)
                Z_Free (keybindings[bindmap][keynum]);
                keybindings[bindmap][keynum] = NULL;
        }
+       if(!binding[0]) // make "" binds be removed --blub
+               return;
 // allocate memory for new binding
        l = strlen (binding);
        newbinding = (char *)Z_Malloc (l + 1);
@@ -794,16 +803,24 @@ void
 Key_WriteBindings (qfile_t *f)
 {
        int         i, j;
+       char bindbuf[MAX_INPUTLINE];
+       const char *p;
 
-       for (i = 0; i < (int)(sizeof(keybindings[0])/sizeof(keybindings[0][0])); i++)
-               if (keybindings[0][i])
-                       FS_Printf(f, "bind \"%s\" \"%s\"\n",
-                                       Key_KeynumToString (i), keybindings[0][i]);
-       for (j = 1; j < 8; j++)
+       for (j = 0; j < MAX_BINDMAPS; j++)
+       {
                for (i = 0; i < (int)(sizeof(keybindings[0])/sizeof(keybindings[0][0])); i++)
-                       if (keybindings[j][i])
-                               FS_Printf(f, "in_bind %d \"%s\" \"%s\"\n",
-                                               j, Key_KeynumToString (i), keybindings[j][i]);
+               {
+                       p = keybindings[j][i];
+                       if (p)
+                       {
+                               Cmd_QuoteString(bindbuf, sizeof(bindbuf), p, "\"\\");
+                               if (j == 0)
+                                       FS_Printf(f, "bind %s \"%s\"\n", Key_KeynumToString (i), bindbuf);
+                               else
+                                       FS_Printf(f, "in_bind %d %s \"%s\"\n", j, Key_KeynumToString (i), bindbuf);
+                       }
+               }
+       }
 }
 
 
@@ -865,6 +882,9 @@ Key_Event (int key, char ascii, qboolean down)
        if (!bind)
                bind = keybindings[key_bmap2][key];
 
+       if (developer.integer >= 1000)
+               Con_Printf("Key_Event(%i, '%c', %s) keydown %i bind \"%s\"\n", key, ascii, down ? "down" : "up", keydown[key], bind ? bind : "");
+
        if(key_dest == key_game)
        {
                q = CL_VM_InputEvent(!down, key);