diff --git a/common/in_svgalib.c b/common/in_svgalib.c index 7d37670..056e212 100644 --- a/common/in_svgalib.c +++ b/common/in_svgalib.c @@ -44,6 +44,8 @@ static float mouse_x, mouse_y; static float old_mouse_x, old_mouse_y; static int mx, my; +static void IN_init_kb(); +static void IN_init_mouse(); cvar_t _windowed_mouse = {"_windowed_mouse", "1", true}; cvar_t m_filter = {"m_filter","0"}; @@ -97,12 +99,18 @@ keyhandler(int scancode, int state) } -static void -mousehandler(int buttonstate, int dx, int dy) +static void mousehandler(int buttonstate, int dx, int dy, int dz, int drx, int dry, int drz) { mouse_buttonstate = buttonstate; mx += dx; my += dy; + if (drx > 0) { + Key_Event(K_MWHEELUP, 1); + Key_Event(K_MWHEELUP, 0); + } else if (drx < 0) { + Key_Event(K_MWHEELDOWN, 1); + Key_Event(K_MWHEELDOWN, 0); + } } @@ -113,171 +121,177 @@ Force_CenterView_f(void) } -void -IN_Init(void) +void IN_Init(void) { - int i; - int mtype; - char *mousedev; - int mouserate = MOUSE_DEFAULTSAMPLERATE; - if (COM_CheckParm("-nokbd")) UseKeyboard = 0; if (COM_CheckParm("-nomouse")) UseMouse = 0; - if (UseKeyboard) { - for (i=0 ; i<128 ; i++) { - scantokey[i] = ' '; - } - - scantokey[ 1] = K_ESCAPE; - scantokey[ 2] = '1'; - scantokey[ 3] = '2'; - scantokey[ 4] = '3'; - scantokey[ 5] = '4'; - scantokey[ 6] = '5'; - scantokey[ 7] = '6'; - scantokey[ 8] = '7'; - scantokey[ 9] = '8'; - scantokey[ 10] = '9'; - scantokey[ 11] = '0'; - scantokey[ 12] = '-'; - scantokey[ 13] = '='; - scantokey[ 14] = K_BACKSPACE; - scantokey[ 15] = K_TAB; - scantokey[ 16] = 'q'; - scantokey[ 17] = 'w'; - scantokey[ 18] = 'e'; - scantokey[ 19] = 'r'; - scantokey[ 20] = 't'; - scantokey[ 21] = 'y'; - scantokey[ 22] = 'u'; - scantokey[ 23] = 'i'; - scantokey[ 24] = 'o'; - scantokey[ 25] = 'p'; - scantokey[ 26] = '['; - scantokey[ 27] = ']'; - scantokey[ 28] = K_ENTER; - scantokey[ 29] = K_CTRL; /*left */ - scantokey[ 30] = 'a'; - scantokey[ 31] = 's'; - scantokey[ 32] = 'd'; - scantokey[ 33] = 'f'; - scantokey[ 34] = 'g'; - scantokey[ 35] = 'h'; - scantokey[ 36] = 'j'; - scantokey[ 37] = 'k'; - scantokey[ 38] = 'l'; - scantokey[ 39] = ';'; - scantokey[ 40] = '\''; - scantokey[ 41] = '`'; - scantokey[ 42] = K_SHIFT; /*left */ - scantokey[ 43] = '\\'; - scantokey[ 44] = 'z'; - scantokey[ 45] = 'x'; - scantokey[ 46] = 'c'; - scantokey[ 47] = 'v'; - scantokey[ 48] = 'b'; - scantokey[ 49] = 'n'; - scantokey[ 50] = 'm'; - scantokey[ 51] = ','; - scantokey[ 52] = '.'; - scantokey[ 53] = '/'; - scantokey[ 54] = K_SHIFT; /*right */ - scantokey[ 55] = KP_MULTIPLY; /*keypad */ - scantokey[ 56] = K_ALT; /*left */ - scantokey[ 57] = ' '; - /* 58 caps lock */ - scantokey[ 59] = K_F1; - scantokey[ 60] = K_F2; - scantokey[ 61] = K_F3; - scantokey[ 62] = K_F4; - scantokey[ 63] = K_F5; - scantokey[ 64] = K_F6; - scantokey[ 65] = K_F7; - scantokey[ 66] = K_F8; - scantokey[ 67] = K_F9; - scantokey[ 68] = K_F10; - /* 69 numlock */ - /* 70 scrollock */ - scantokey[ 71] = KP_HOME; - scantokey[ 72] = KP_UPARROW; - scantokey[ 73] = KP_PGUP; - scantokey[ 74] = KP_MINUS; - scantokey[ 75] = KP_LEFTARROW; - scantokey[ 76] = KP_5; - scantokey[ 77] = KP_RIGHTARROW; - scantokey[ 79] = KP_END; - scantokey[ 78] = KP_PLUS; - scantokey[ 80] = KP_DOWNARROW; - scantokey[ 81] = KP_PGDN; - scantokey[ 82] = KP_INS; - scantokey[ 83] = KP_DEL; - /* 84 to 86 not used */ - scantokey[ 87] = K_F11; - scantokey[ 88] = K_F12; - /* 89 to 95 not used */ - scantokey[ 96] = KP_ENTER; /* keypad enter */ - scantokey[ 97] = K_CTRL; /* right */ - scantokey[ 98] = KP_DIVIDE; - scantokey[ 99] = K_F12; /* print screen, bind to screenshot by default */ - scantokey[100] = K_ALT; /* right */ - - scantokey[101] = K_PAUSE; /* break */ - scantokey[102] = K_HOME; - scantokey[103] = K_UPARROW; - scantokey[104] = K_PGUP; - scantokey[105] = K_LEFTARROW; - scantokey[106] = K_RIGHTARROW; - scantokey[107] = K_END; - scantokey[108] = K_DOWNARROW; - scantokey[109] = K_PGDN; - scantokey[110] = K_INS; - scantokey[111] = K_DEL; - scantokey[119] = K_PAUSE; - - if (keyboard_init()) { - Sys_Error("keyboard_init() failed"); - } - keyboard_seteventhandler(keyhandler); - } - - if (UseMouse) { - Cvar_RegisterVariable(&mouse_button_commands[0]); - Cvar_RegisterVariable(&mouse_button_commands[1]); - Cvar_RegisterVariable(&mouse_button_commands[2]); - Cvar_RegisterVariable(&m_filter); - Cmd_AddCommand("force_centerview", Force_CenterView_f); - - mouse_buttons = 3; - - mtype = vga_getmousetype(); - - mousedev = "/dev/mouse"; - if (getenv("MOUSEDEV")) mousedev = getenv("MOUSEDEV"); - if (COM_CheckParm("-mdev")) { - mousedev = com_argv[COM_CheckParm("-mdev")+1]; - } - - if (getenv("MOUSERATE")) mouserate = atoi(getenv("MOUSERATE")); - if (COM_CheckParm("-mrate")) { - mouserate = atoi(com_argv[COM_CheckParm("-mrate")+1]); - } - -#if 0 - printf("Mouse: dev=%s,type=%s,speed=%d\n", - mousedev, mice[mtype].name, mouserate); -#endif - if (mouse_init(mousedev, mtype, mouserate)) { - Con_Printf("No mouse found\n"); - UseMouse = 0; - } else{ - mouse_seteventhandler((void*)mousehandler); - } - } + if (UseKeyboard) + IN_init_kb(); + if (UseMouse) + IN_init_mouse(); in_svgalib_inited = 1; } +static void IN_init_kb() +{ + int i; + + for (i=0 ; i<128 ; i++) { + scantokey[i] = ' '; + } + + scantokey[ 1] = K_ESCAPE; + scantokey[ 2] = '1'; + scantokey[ 3] = '2'; + scantokey[ 4] = '3'; + scantokey[ 5] = '4'; + scantokey[ 6] = '5'; + scantokey[ 7] = '6'; + scantokey[ 8] = '7'; + scantokey[ 9] = '8'; + scantokey[ 10] = '9'; + scantokey[ 11] = '0'; + scantokey[ 12] = '-'; + scantokey[ 13] = '='; + scantokey[ 14] = K_BACKSPACE; + scantokey[ 15] = K_TAB; + scantokey[ 16] = 'q'; + scantokey[ 17] = 'w'; + scantokey[ 18] = 'e'; + scantokey[ 19] = 'r'; + scantokey[ 20] = 't'; + scantokey[ 21] = 'y'; + scantokey[ 22] = 'u'; + scantokey[ 23] = 'i'; + scantokey[ 24] = 'o'; + scantokey[ 25] = 'p'; + scantokey[ 26] = '['; + scantokey[ 27] = ']'; + scantokey[ 28] = K_ENTER; + scantokey[ 29] = K_CTRL; /*left */ + scantokey[ 30] = 'a'; + scantokey[ 31] = 's'; + scantokey[ 32] = 'd'; + scantokey[ 33] = 'f'; + scantokey[ 34] = 'g'; + scantokey[ 35] = 'h'; + scantokey[ 36] = 'j'; + scantokey[ 37] = 'k'; + scantokey[ 38] = 'l'; + scantokey[ 39] = ';'; + scantokey[ 40] = '\''; + scantokey[ 41] = '`'; + scantokey[ 42] = K_SHIFT; /*left */ + scantokey[ 43] = '\\'; + scantokey[ 44] = 'z'; + scantokey[ 45] = 'x'; + scantokey[ 46] = 'c'; + scantokey[ 47] = 'v'; + scantokey[ 48] = 'b'; + scantokey[ 49] = 'n'; + scantokey[ 50] = 'm'; + scantokey[ 51] = ','; + scantokey[ 52] = '.'; + scantokey[ 53] = '/'; + scantokey[ 54] = K_SHIFT; /*right */ + scantokey[ 55] = KP_MULTIPLY; + scantokey[ 56] = K_ALT; /*left */ + scantokey[ 57] = ' '; + /* 58 caps lock */ + scantokey[ 59] = K_F1; + scantokey[ 60] = K_F2; + scantokey[ 61] = K_F3; + scantokey[ 62] = K_F4; + scantokey[ 63] = K_F5; + scantokey[ 64] = K_F6; + scantokey[ 65] = K_F7; + scantokey[ 66] = K_F8; + scantokey[ 67] = K_F9; + scantokey[ 68] = K_F10; + scantokey[ 69] = KP_NUMLCK; + scantokey[ 70] = K_SCRLCK; + scantokey[ 71] = KP_HOME; + scantokey[ 72] = KP_UPARROW; + scantokey[ 73] = KP_PGUP; + scantokey[ 74] = KP_MINUS; + scantokey[ 75] = KP_LEFTARROW; + scantokey[ 76] = KP_5; + scantokey[ 77] = KP_RIGHTARROW; + scantokey[ 79] = KP_END; + scantokey[ 78] = KP_PLUS; + scantokey[ 80] = KP_DOWNARROW; + scantokey[ 81] = KP_PGDN; + scantokey[ 82] = KP_INS; + scantokey[ 83] = KP_DEL; + /* 84 to 86 not used */ + scantokey[ 87] = K_F11; + scantokey[ 88] = K_F12; + /* 89 to 95 not used */ + scantokey[ 96] = KP_ENTER; /* keypad enter */ + scantokey[ 97] = K_CTRL; /* right */ + scantokey[ 98] = KP_DIVIDE; + scantokey[ 99] = K_PRNTSCR; /* print screen */ + scantokey[100] = K_ALT; /* right */ + + scantokey[101] = K_PAUSE; /* break */ + scantokey[102] = K_HOME; + scantokey[103] = K_UPARROW; + scantokey[104] = K_PGUP; + scantokey[105] = K_LEFTARROW; + scantokey[106] = K_RIGHTARROW; + scantokey[107] = K_END; + scantokey[108] = K_DOWNARROW; + scantokey[109] = K_PGDN; + scantokey[110] = K_INS; + scantokey[111] = K_DEL; + scantokey[119] = K_PAUSE; + + if (keyboard_init()) { + Sys_Error("keyboard_init() failed"); + } + keyboard_seteventhandler(keyhandler); +} + +static void IN_init_mouse() +{ + int mtype; + char *mousedev; + int mouserate = MOUSE_DEFAULTSAMPLERATE; + + Cvar_RegisterVariable(&mouse_button_commands[0]); + Cvar_RegisterVariable(&mouse_button_commands[1]); + Cvar_RegisterVariable(&mouse_button_commands[2]); + Cvar_RegisterVariable(&m_filter); + Cmd_AddCommand("force_centerview", Force_CenterView_f); + + mouse_buttons = 3; + + mtype = vga_getmousetype(); + + mousedev = "/dev/mouse"; + if (getenv("MOUSEDEV")) mousedev = getenv("MOUSEDEV"); + if (COM_CheckParm("-mdev")) { + mousedev = com_argv[COM_CheckParm("-mdev")+1]; + } + + if (getenv("MOUSERATE")) mouserate = atoi(getenv("MOUSERATE")); + if (COM_CheckParm("-mrate")) { + mouserate = atoi(com_argv[COM_CheckParm("-mrate")+1]); + } + +#if 0 + printf("Mouse: dev=%s,type=%s,speed=%d\n", + mousedev, mice[mtype].name, mouserate); +#endif + if (mouse_init(mousedev, mtype, mouserate)) { + Con_Printf("No mouse found\n"); + UseMouse = 0; + } else{ + mouse_seteventhandler((void*)mousehandler); + } +} void IN_Shutdown(void) diff --git a/common/keys.c b/common/keys.c index 8e7be5e..3688e2a 100644 --- a/common/keys.c +++ b/common/keys.c @@ -74,7 +74,7 @@ keyname_t keynames[] = {"SHIFT", K_SHIFT}, // Keypad stuff.. - {"KP_NUM", KP_NUM}, + {"KP_NUMLCK", KP_NUMLCK}, {"KP_DIVIDE", KP_DIVIDE}, {"KP_MULTIPLY", KP_MULTIPLY}, {"KP_MINUS", KP_MINUS}, @@ -159,6 +159,8 @@ keyname_t keynames[] = {"AUX31", K_AUX31}, {"AUX32", K_AUX32}, + {"PRNTSCR", K_PRNTSCR}, + {"SCRLCK", K_SCRLCK}, {"PAUSE", K_PAUSE}, {"MWHEELUP", K_MWHEELUP}, diff --git a/common/keys.h b/common/keys.h index 94605d0..bf9e139 100644 --- a/common/keys.h +++ b/common/keys.h @@ -62,7 +62,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // Keypad stuff.. // -#define KP_NUM 153 +#define KP_NUMLCK 153 #define KP_DIVIDE 154 #define KP_MULTIPLY 155 @@ -84,6 +84,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define KP_DEL 168 #define KP_ENTER 169 +#define K_PRNTSCR 253 +#define K_SCRLCK 254 #define K_PAUSE 255 // @@ -141,7 +143,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // JACK: Intellimouse(c) Mouse Wheel Support #define K_MWHEELUP 239 -#define K_MWHEELDOWN 240 +#define K_MWHEELDOWN 240 diff --git a/qw_server/sv_user.c b/qw_server/sv_user.c index 1ac03a7..5a28486 100644 --- a/qw_server/sv_user.c +++ b/qw_server/sv_user.c @@ -1373,14 +1373,20 @@ void SV_RunCmd (usercmd_t *ucmd, qboolean inside) int oldmsec; double tmp_time; + // To prevent a infinate loop if (!inside) { oldmsec = ucmd->msec; + // Calculate the real msec. tmp_time = realtime - host_client->frame_time_2; tmp_time /= 2; - ucmd->msec = tmp_time * 1000; + // Cap it at a max of 250 msec though.. + ucmd->msec = max(tmp_time * 1000, 250); + /* if (ucmd->msec > oldmsec) ucmd->msec = oldmsec; + */ + // If were more then 10 msecs off what the client tells us, report it. if (abs(oldmsec - ucmd->msec) > 10) { printf("tmp_time: %f, realtime: %f, frame_time_1: %f\n", tmp_time, realtime, host_client->frame_time_1); @@ -1389,19 +1395,19 @@ void SV_RunCmd (usercmd_t *ucmd, qboolean inside) } host_client->frame_time_2 = host_client->frame_time_1; host_client->frame_time_1 = realtime; + } - cmd = *ucmd; + cmd = *ucmd; - // chop up very long commands - if (cmd.msec > 50) { - oldmsec = ucmd->msec; - cmd.msec = oldmsec/2; - SV_RunCmd (&cmd, 1); - cmd.msec = oldmsec/2; - cmd.impulse = 0; - SV_RunCmd (&cmd, 1); - return; - } + // chop up very long commands + if (cmd.msec > 50) { + oldmsec = ucmd->msec; + cmd.msec = oldmsec/2; + SV_RunCmd (&cmd, 1); + cmd.msec = oldmsec/2; + cmd.impulse = 0; + SV_RunCmd (&cmd, 1); + return; } if (!sv_player->v.fixangle) @@ -1656,6 +1662,7 @@ void SV_ExecuteClientMessage (client_t *cl) if (!sv.paused) { SV_PreRunCmd(); + /* if (net_drop < 20) { while (net_drop > 2) @@ -1668,6 +1675,7 @@ void SV_ExecuteClientMessage (client_t *cl) if (net_drop > 0) SV_RunCmd (&oldcmd, 0); } + */ SV_RunCmd (&newcmd, 0); SV_PostRunCmd();