diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/am_map.c | 2 | ||||
-rw-r--r-- | src/m_menu.c | 63 | ||||
-rw-r--r-- | src/st_stuff.c | 22 |
3 files changed, 51 insertions, 36 deletions
diff --git a/src/am_map.c b/src/am_map.c index 7ba71f5c..11f77c1e 100644 --- a/src/am_map.c +++ b/src/am_map.c @@ -706,7 +706,7 @@ AM_Responder cheatstate=0; rc = false; } - if (!deathmatch && cht_CheckCheat(&cheat_amap, ev->data1)) + if (!deathmatch && cht_CheckCheat(&cheat_amap, ev->data2)) { rc = false; cheating = (cheating+1) % 3; diff --git a/src/m_menu.c b/src/m_menu.c index 2abcc52c..1b9f8014 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1397,6 +1397,7 @@ M_WriteText boolean M_Responder (event_t* ev) { int ch; + int key; int i; static int joywait = 0; static int mousewait = 0; @@ -1405,40 +1406,50 @@ boolean M_Responder (event_t* ev) static int mousex = 0; static int lastx = 0; - ch = -1; + // There is a distinction here between the typed character and the key + // pressed. 'key' is the key code, while 'ch' is the actual character + // typed. For an example, on a German QWERTZ keyboard, if 'z' is + // pressed, ch='z' but key='y' (the position it occupies on the + // "standard" american keyboard) + // + // When dealing with actual keys pressed, we must use key, but any time + // we want the actual character typed, we use ch. + + key = -1; + ch = 0; if (ev->type == ev_joystick && joywait < I_GetTime()) { if (ev->data3 == -1) { - ch = KEY_UPARROW; + key = KEY_UPARROW; joywait = I_GetTime() + 5; } else if (ev->data3 == 1) { - ch = KEY_DOWNARROW; + key = KEY_DOWNARROW; joywait = I_GetTime() + 5; } if (ev->data2 == -1) { - ch = KEY_LEFTARROW; + key = KEY_LEFTARROW; joywait = I_GetTime() + 2; } else if (ev->data2 == 1) { - ch = KEY_RIGHTARROW; + key = KEY_RIGHTARROW; joywait = I_GetTime() + 2; } if (ev->data1&1) { - ch = KEY_ENTER; + key = KEY_ENTER; joywait = I_GetTime() + 5; } if (ev->data1&2) { - ch = KEY_BACKSPACE; + key = KEY_BACKSPACE; joywait = I_GetTime() + 5; } } @@ -1449,13 +1460,13 @@ boolean M_Responder (event_t* ev) mousey += ev->data3; if (mousey < lasty-30) { - ch = KEY_DOWNARROW; + key = KEY_DOWNARROW; mousewait = I_GetTime() + 5; mousey = lasty -= 30; } else if (mousey > lasty+30) { - ch = KEY_UPARROW; + key = KEY_UPARROW; mousewait = I_GetTime() + 5; mousey = lasty += 30; } @@ -1463,37 +1474,38 @@ boolean M_Responder (event_t* ev) mousex += ev->data2; if (mousex < lastx-30) { - ch = KEY_LEFTARROW; + key = KEY_LEFTARROW; mousewait = I_GetTime() + 5; mousex = lastx -= 30; } else if (mousex > lastx+30) { - ch = KEY_RIGHTARROW; + key = KEY_RIGHTARROW; mousewait = I_GetTime() + 5; mousex = lastx += 30; } if (ev->data1&1) { - ch = KEY_ENTER; + key = KEY_ENTER; mousewait = I_GetTime() + 15; } if (ev->data1&2) { - ch = KEY_BACKSPACE; + key = KEY_BACKSPACE; mousewait = I_GetTime() + 15; } } else if (ev->type == ev_keydown) { - ch = ev->data1; + key = ev->data1; + ch = ev->data2; } } - if (ch == -1) + if (key == -1) return false; // In testcontrols mode, none of the function keys should do anything @@ -1501,7 +1513,7 @@ boolean M_Responder (event_t* ev) if (testcontrols) { - if (ch == KEY_ESCAPE || ch == KEY_F10) + if (key == KEY_ESCAPE || key == KEY_F10) { I_Quit(); return true; @@ -1513,7 +1525,7 @@ boolean M_Responder (event_t* ev) // Save Game string input if (saveStringEnter) { - switch(ch) + switch(key) { case KEY_BACKSPACE: if (saveCharIndex > 0) @@ -1536,16 +1548,19 @@ boolean M_Responder (event_t* ev) default: ch = toupper(ch); - if (ch != 32) + if (ch != ' ') + { if (ch-HU_FONTSTART < 0 || ch-HU_FONTSTART >= HU_FONTSIZE) break; + } + if (ch >= 32 && ch <= 127 && saveCharIndex < SAVESTRINGSIZE-1 && M_StringWidth(savegamestrings[saveSlot]) < (SAVESTRINGSIZE-2)*8) { savegamestrings[saveSlot][saveCharIndex++] = ch; - savegamestrings[saveSlot][saveCharIndex] = 0; + savegamestrings[saveSlot][saveCharIndex] = '\0'; } break; } @@ -1556,7 +1571,7 @@ boolean M_Responder (event_t* ev) if (messageToPrint) { if (messageNeedsInput == true && - !(ch == ' ' || ch == 'n' || ch == 'y' || ch == KEY_ESCAPE)) + !(ch == ' ' || ch == 'n' || ch == 'y' || key == KEY_ESCAPE)) return false; menuactive = messageLastMenuActive; @@ -1569,7 +1584,7 @@ boolean M_Responder (event_t* ev) return true; } - if (devparm && ch == KEY_F1) + if (devparm && key == KEY_F1) { G_ScreenShot (); return true; @@ -1578,7 +1593,7 @@ boolean M_Responder (event_t* ev) // F-Keys if (!menuactive) - switch(ch) + switch(key) { case KEY_MINUS: // Screen size down if (automapactive || chat_on) @@ -1669,7 +1684,7 @@ boolean M_Responder (event_t* ev) // Pop-up menu? if (!menuactive) { - if (ch == KEY_ESCAPE) + if (key == KEY_ESCAPE) { M_StartControlPanel (); S_StartSound(NULL,sfx_swtchn); @@ -1680,7 +1695,7 @@ boolean M_Responder (event_t* ev) // Keys usable within menu - switch (ch) + switch (key) { case KEY_DOWNARROW: do diff --git a/src/st_stuff.c b/src/st_stuff.c index b8e636c5..b82504af 100644 --- a/src/st_stuff.c +++ b/src/st_stuff.c @@ -474,7 +474,7 @@ ST_Responder (event_t* ev) if (!netgame && gameskill != sk_nightmare) { // 'dqd' cheat for toggleable god mode - if (cht_CheckCheat(&cheat_god, ev->data1)) + if (cht_CheckCheat(&cheat_god, ev->data2)) { plyr->cheats ^= CF_GODMODE; if (plyr->cheats & CF_GODMODE) @@ -489,7 +489,7 @@ ST_Responder (event_t* ev) plyr->message = DEH_String(STSTR_DQDOFF); } // 'fa' cheat for killer fucking arsenal - else if (cht_CheckCheat(&cheat_ammonokey, ev->data1)) + else if (cht_CheckCheat(&cheat_ammonokey, ev->data2)) { plyr->armorpoints = deh_idfa_armor; plyr->armortype = deh_idfa_armor_class; @@ -503,7 +503,7 @@ ST_Responder (event_t* ev) plyr->message = DEH_String(STSTR_FAADDED); } // 'kfa' cheat for key full ammo - else if (cht_CheckCheat(&cheat_ammo, ev->data1)) + else if (cht_CheckCheat(&cheat_ammo, ev->data2)) { plyr->armorpoints = deh_idkfa_armor; plyr->armortype = deh_idkfa_armor_class; @@ -520,7 +520,7 @@ ST_Responder (event_t* ev) plyr->message = DEH_String(STSTR_KFAADDED); } // 'mus' cheat for changing music - else if (cht_CheckCheat(&cheat_mus, ev->data1)) + else if (cht_CheckCheat(&cheat_mus, ev->data2)) { char buf[3]; @@ -549,9 +549,9 @@ ST_Responder (event_t* ev) } } else if ( (gamemission == doom - && cht_CheckCheat(&cheat_noclip, ev->data1)) + && cht_CheckCheat(&cheat_noclip, ev->data2)) || (gamemission != doom - && cht_CheckCheat(&cheat_commercial_noclip,ev->data1))) + && cht_CheckCheat(&cheat_commercial_noclip,ev->data2))) { // Noclip cheat. // For Doom 1, use the idspipsopd cheat; for all others, use @@ -567,7 +567,7 @@ ST_Responder (event_t* ev) // 'behold?' power-up cheats for (i=0;i<6;i++) { - if (cht_CheckCheat(&cheat_powerup[i], ev->data1)) + if (cht_CheckCheat(&cheat_powerup[i], ev->data2)) { if (!plyr->powers[i]) P_GivePower( plyr, i); @@ -581,19 +581,19 @@ ST_Responder (event_t* ev) } // 'behold' power-up menu - if (cht_CheckCheat(&cheat_powerup[6], ev->data1)) + if (cht_CheckCheat(&cheat_powerup[6], ev->data2)) { plyr->message = DEH_String(STSTR_BEHOLD); } // 'choppers' invulnerability & chainsaw - else if (cht_CheckCheat(&cheat_choppers, ev->data1)) + else if (cht_CheckCheat(&cheat_choppers, ev->data2)) { plyr->weaponowned[wp_chainsaw] = true; plyr->powers[pw_invulnerability] = true; plyr->message = DEH_String(STSTR_CHOPPERS); } // 'mypos' for player position - else if (cht_CheckCheat(&cheat_mypos, ev->data1)) + else if (cht_CheckCheat(&cheat_mypos, ev->data2)) { static char buf[ST_MSGWIDTH]; sprintf(buf, "ang=0x%x;x,y=(0x%x,0x%x)", @@ -605,7 +605,7 @@ ST_Responder (event_t* ev) } // 'clev' change-level cheat - if (cht_CheckCheat(&cheat_clev, ev->data1)) + if (cht_CheckCheat(&cheat_clev, ev->data2)) { char buf[3]; int epsd; |