Support for a few more keys, and more importantly real support for the

wheel!!!

Some more tweaks to the speed cheat prevention..
This commit is contained in:
Zephaniah E. Hull 2000-01-09 04:22:57 +00:00
parent a09bf9b081
commit a227f53163
4 changed files with 200 additions and 174 deletions

View file

@ -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)

View file

@ -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},

View file

@ -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

View file

@ -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();