- fixed the compile errors and consolidated the key binding CCMDs.

This commit is contained in:
Christoph Oelckers 2019-10-28 06:47:49 +01:00
parent e7f75cbf4d
commit f8203ac766
18 changed files with 312 additions and 722 deletions

View file

@ -786,6 +786,7 @@ set (PCH_SOURCES
common/gameconfigfile.cpp common/gameconfigfile.cpp
common/gamecvars.cpp common/gamecvars.cpp
common/gamecontrol.cpp common/gamecontrol.cpp
common/inputstate.cpp
common/2d/v_2ddrawer.cpp common/2d/v_2ddrawer.cpp
common/2d/v_draw.cpp common/2d/v_draw.cpp

View file

@ -616,7 +616,6 @@ void CPlayerMsg::ProcessKeys(void)
Set(*CombatMacros[key-sc_F1]); Set(*CombatMacros[key-sc_F1]);
Send(); Send();
inputState.ClearKeyStatus(key); inputState.ClearKeyStatus(key);
}
break; break;
case sc_BackSpace: case sc_BackSpace:
if (ctrl) if (ctrl)

View file

@ -476,207 +476,6 @@ void onvideomodechange(int32_t newmode)
UpdateDacs(gLastPal, false); UpdateDacs(gLastPal, false);
} }
const char *const ConsoleButtons[] =
{
"mouse1", "mouse2", "mouse3", "mouse4", "mwheelup",
"mwheeldn", "mouse5", "mouse6", "mouse7", "mouse8"
};
static int osdcmd_bind(osdcmdptr_t parm)
{
char buffer[256];
if (parm->numparms==1 && !Bstrcasecmp(parm->parms[0],"showkeys"))
{
for (auto & s : sctokeylut)
OSD_Printf("%s\n", s.key);
for (auto ConsoleButton : ConsoleButtons)
OSD_Printf("%s\n",ConsoleButton);
return OSDCMD_OK;
}
if (parm->numparms==0)
{
int j=0;
OSD_Printf("Current key bindings:\n");
for (int i=0; i<MAXBOUNDKEYS+MAXMOUSEBUTTONS; i++)
if (CONTROL_KeyIsBound(i))
{
j++;
OSD_Printf("%-9s %s\"%s\"\n", CONTROL_KeyBinds[i].key, CONTROL_KeyBinds[i].repeat?"":"norepeat ",
CONTROL_KeyBinds[i].cmdstr);
}
if (j == 0)
OSD_Printf("No binds found.\n");
return OSDCMD_OK;
}
int i, j, repeat;
for (i=0; i < ARRAY_SSIZE(sctokeylut); i++)
{
if (!Bstrcasecmp(parm->parms[0], sctokeylut[i].key))
break;
}
// didn't find the key
if (i == ARRAY_SSIZE(sctokeylut))
{
for (i=0; i<MAXMOUSEBUTTONS; i++)
if (!Bstrcasecmp(parm->parms[0],ConsoleButtons[i]))
break;
if (i >= MAXMOUSEBUTTONS)
return OSDCMD_SHOWHELP;
if (parm->numparms < 2)
{
if (CONTROL_KeyBinds[MAXBOUNDKEYS + i].cmdstr && CONTROL_KeyBinds[MAXBOUNDKEYS + i ].key)
OSD_Printf("%-9s %s\"%s\"\n", ConsoleButtons[i], CONTROL_KeyBinds[MAXBOUNDKEYS + i].repeat?"":"norepeat ",
CONTROL_KeyBinds[MAXBOUNDKEYS + i].cmdstr);
else OSD_Printf("%s is unbound\n", ConsoleButtons[i]);
return OSDCMD_OK;
}
j = 1;
repeat = 1;
if (!Bstrcasecmp(parm->parms[j],"norepeat"))
{
repeat = 0;
j++;
}
Bstrcpy(buffer,parm->parms[j++]);
for (; j<parm->numparms; j++)
{
Bstrcat(buffer," ");
Bstrcat(buffer,parm->parms[j++]);
}
CONTROL_BindMouse(i, buffer, repeat, ConsoleButtons[i]);
if (!OSD_ParsingScript())
OSD_Printf("%s\n",parm->raw);
return OSDCMD_OK;
}
if (parm->numparms < 2)
{
if (CONTROL_KeyIsBound(sctokeylut[i].sc))
OSD_Printf("%-9s %s\"%s\"\n", sctokeylut[i].key, CONTROL_KeyBinds[sctokeylut[i].sc].repeat?"":"norepeat ",
CONTROL_KeyBinds[sctokeylut[i].sc].cmdstr);
else OSD_Printf("%s is unbound\n", sctokeylut[i].key);
return OSDCMD_OK;
}
j = 1;
repeat = 1;
if (!Bstrcasecmp(parm->parms[j],"norepeat"))
{
repeat = 0;
j++;
}
Bstrcpy(buffer,parm->parms[j++]);
for (; j<parm->numparms; j++)
{
Bstrcat(buffer," ");
Bstrcat(buffer,parm->parms[j++]);
}
CONTROL_BindKey(sctokeylut[i].sc, buffer, repeat, sctokeylut[i].key);
char *cp = buffer;
// Populate the keyboard config menu based on the bind.
// Take care of processing one-to-many bindings properly, too.
static char const s_gamefunc_[] = "gamefunc_";
int constexpr strlen_gamefunc_ = ARRAY_SIZE(s_gamefunc_) - 1;
while ((cp = Bstrstr(cp, s_gamefunc_)))
{
cp += strlen_gamefunc_;
char *semi = Bstrchr(cp, ';');
if (semi)
*semi = 0;
j = CONFIG_FunctionNameToNum(cp);
if (semi)
cp = semi+1;
if (j != -1)
{
KeyboardKeys[j][1] = KeyboardKeys[j][0];
KeyboardKeys[j][0] = sctokeylut[i].sc;
// CONTROL_MapKey(j, sctokeylut[i].sc, KeyboardKeys[j][0]);
if (j == gamefunc_Show_Console)
OSD_CaptureKey(sctokeylut[i].sc);
}
}
if (!OSD_ParsingScript())
OSD_Printf("%s\n",parm->raw);
return OSDCMD_OK;
}
static int osdcmd_unbindall(osdcmdptr_t UNUSED(parm))
{
UNREFERENCED_CONST_PARAMETER(parm);
for (int i = 0; i < MAXBOUNDKEYS; ++i)
CONTROL_FreeKeyBind(i);
for (int i = 0; i < MAXMOUSEBUTTONS; ++i)
CONTROL_FreeMouseBind(i);
for (auto &KeyboardKey : KeyboardKeys)
KeyboardKey[0] = KeyboardKey[1] = 0xff;
if (!OSD_ParsingScript())
OSD_Printf("unbound all controls\n");
return OSDCMD_OK;
}
static int osdcmd_unbind(osdcmdptr_t parm)
{
if (parm->numparms != 1)
return OSDCMD_SHOWHELP;
for (auto ConsoleKey : sctokeylut)
{
if (ConsoleKey.key && !Bstrcasecmp(parm->parms[0], ConsoleKey.key))
{
CONTROL_FreeKeyBind(ConsoleKey.sc);
OSD_Printf("unbound key %s\n", ConsoleKey.key);
return OSDCMD_OK;
}
}
for (int i = 0; i < MAXMOUSEBUTTONS; i++)
{
if (!Bstrcasecmp(parm->parms[0], ConsoleButtons[i]))
{
CONTROL_FreeMouseBind(i);
OSD_Printf("unbound %s\n", ConsoleButtons[i]);
return OSDCMD_OK;
}
}
return OSDCMD_SHOWHELP;
}
static int osdcmd_unbound(osdcmdptr_t parm) static int osdcmd_unbound(osdcmdptr_t parm)
{ {
if (parm->numparms != 1) if (parm->numparms != 1)

View file

@ -1,4 +1,4 @@
#pragma once
#define sc_None 0 #define sc_None 0
#define sc_Bad 0xff #define sc_Bad 0xff
#define sc_Comma 0x33 #define sc_Comma 0x33

View file

@ -433,7 +433,7 @@ void FGameConfigFile::ArchiveGameData (const char *gamename)
strcpy(subsection, "Bindings"); strcpy(subsection, "Bindings");
if (SetSection(section, true)) if (SetSection(section, true))
{ {
for (int i = 0; i < MAXBOUNDKEYS + MAXMOUSEBUTTONS; i++) for (int i = 0; i < NUMKEYS + MAXMOUSEBUTTONS; i++)
{ {
if (CONTROL_KeyIsBound(i)) if (CONTROL_KeyIsBound(i))
{ {

View file

@ -9,6 +9,7 @@
#include "gameconfigfile.h" #include "gameconfigfile.h"
#include "gamecvars.h" #include "gamecvars.h"
#include "build.h" #include "build.h"
#include "inputstate.h"
InputState inputState; InputState inputState;
@ -1111,3 +1112,206 @@ void CONFIG_WriteControllerSettings()
} }
} }
const char* const ConsoleButtons[] =
{
"mouse1", "mouse2", "mouse3", "mouse4", "mwheelup",
"mwheeldn", "mouse5", "mouse6", "mouse7", "mouse8"
};
int osdcmd_bind(osdcmdptr_t parm)
{
char tempbuf[256];
if (parm->numparms == 1 && !Bstrcasecmp(parm->parms[0], "showkeys"))
{
for (auto& s : sctokeylut)
OSD_Printf("%s\n", s.key);
for (auto ConsoleButton : ConsoleButtons)
OSD_Printf("%s\n", ConsoleButton);
return OSDCMD_OK;
}
if (parm->numparms == 0)
{
int j = 0;
OSD_Printf("Current key bindings:\n");
for (int i = 0; i < NUMKEYS + MAXMOUSEBUTTONS; i++)
if (CONTROL_KeyIsBound(i))
{
j++;
OSD_Printf("%-9s %s\"%s\"\n", CONTROL_KeyBinds[i].key, CONTROL_KeyBinds[i].repeat ? "" : "norepeat ",
CONTROL_KeyBinds[i].cmdstr);
}
if (j == 0)
OSD_Printf("No binds found.\n");
return OSDCMD_OK;
}
int i, j, repeat;
for (i = 0; i < ARRAY_SSIZE(sctokeylut); i++)
{
if (!Bstrcasecmp(parm->parms[0], sctokeylut[i].key))
break;
}
// didn't find the key
if (i == ARRAY_SSIZE(sctokeylut))
{
for (i = 0; i < MAXMOUSEBUTTONS; i++)
if (!Bstrcasecmp(parm->parms[0], ConsoleButtons[i]))
break;
if (i >= MAXMOUSEBUTTONS)
return OSDCMD_SHOWHELP;
if (parm->numparms < 2)
{
if (CONTROL_KeyBinds[NUMKEYS + i].cmdstr && CONTROL_KeyBinds[NUMKEYS + i].key)
OSD_Printf("%-9s %s\"%s\"\n", ConsoleButtons[i], CONTROL_KeyBinds[NUMKEYS + i].repeat ? "" : "norepeat ",
CONTROL_KeyBinds[NUMKEYS + i].cmdstr);
else OSD_Printf("%s is unbound\n", ConsoleButtons[i]);
return OSDCMD_OK;
}
j = 1;
repeat = 1;
if (!Bstrcasecmp(parm->parms[j], "norepeat"))
{
repeat = 0;
j++;
}
Bstrcpy(tempbuf, parm->parms[j++]);
for (; j < parm->numparms; j++)
{
Bstrcat(tempbuf, " ");
Bstrcat(tempbuf, parm->parms[j++]);
}
CONTROL_BindMouse(i, tempbuf, repeat, ConsoleButtons[i]);
if (!OSD_ParsingScript())
OSD_Printf("%s\n", parm->raw);
return OSDCMD_OK;
}
if (parm->numparms < 2)
{
if (CONTROL_KeyIsBound(sctokeylut[i].sc))
OSD_Printf("%-9s %s\"%s\"\n", sctokeylut[i].key, CONTROL_KeyBinds[sctokeylut[i].sc].repeat ? "" : "norepeat ",
CONTROL_KeyBinds[sctokeylut[i].sc].cmdstr);
else OSD_Printf("%s is unbound\n", sctokeylut[i].key);
return OSDCMD_OK;
}
j = 1;
repeat = 1;
if (!Bstrcasecmp(parm->parms[j], "norepeat"))
{
repeat = 0;
j++;
}
Bstrcpy(tempbuf, parm->parms[j++]);
for (; j < parm->numparms; j++)
{
Bstrcat(tempbuf, " ");
Bstrcat(tempbuf, parm->parms[j++]);
}
CONTROL_BindKey(sctokeylut[i].sc, tempbuf, repeat, sctokeylut[i].key);
char* cp = tempbuf;
// Populate the keyboard config menu based on the bind.
// Take care of processing one-to-many bindings properly, too.
static char const s_gamefunc_[] = "gamefunc_";
int constexpr strlen_gamefunc_ = ARRAY_SIZE(s_gamefunc_) - 1;
while ((cp = Bstrstr(cp, s_gamefunc_)))
{
cp += strlen_gamefunc_;
char* semi = Bstrchr(cp, ';');
if (semi)
*semi = 0;
j = CONFIG_FunctionNameToNum(cp);
if (semi)
cp = semi + 1;
if (j != -1)
{
KeyboardKeys[j][1] = KeyboardKeys[j][0];
KeyboardKeys[j][0] = sctokeylut[i].sc;
// CONTROL_MapKey(j, sctokeylut[i].sc, KeyboardKeys[j][0]);
if (j == gamefunc_Show_Console)
OSD_CaptureKey(sctokeylut[i].sc);
}
}
if (!OSD_ParsingScript())
OSD_Printf("%s\n", parm->raw);
return OSDCMD_OK;
}
int osdcmd_unbindall(osdcmdptr_t UNUSED(parm))
{
UNREFERENCED_CONST_PARAMETER(parm);
for (int i = 0; i < NUMKEYS; ++i)
CONTROL_FreeKeyBind(i);
for (int i = 0; i < MAXMOUSEBUTTONS; ++i)
CONTROL_FreeMouseBind(i);
for (auto& KeyboardKey : KeyboardKeys)
KeyboardKey[0] = KeyboardKey[1] = 0xff;
if (!OSD_ParsingScript())
OSD_Printf("unbound all controls\n");
return OSDCMD_OK;
}
int osdcmd_unbind(osdcmdptr_t parm)
{
if (parm->numparms != 1)
return OSDCMD_SHOWHELP;
for (auto& ConsoleKey : sctokeylut)
{
if (ConsoleKey.key && !Bstrcasecmp(parm->parms[0], ConsoleKey.key))
{
CONTROL_FreeKeyBind(ConsoleKey.sc);
OSD_Printf("unbound key %s\n", ConsoleKey.key);
return OSDCMD_OK;
}
}
for (int i = 0; i < MAXMOUSEBUTTONS; i++)
{
if (!Bstrcasecmp(parm->parms[0], ConsoleButtons[i]))
{
CONTROL_FreeMouseBind(i);
OSD_Printf("unbound %s\n", ConsoleButtons[i]);
return OSDCMD_OK;
}
}
return OSDCMD_SHOWHELP;
}

View file

@ -61,6 +61,10 @@ void CONFIG_SetGameControllerDefaultsClear();
char const* CONFIG_GetGameFuncOnJoystick(int gameFunc); char const* CONFIG_GetGameFuncOnJoystick(int gameFunc);
char const* CONFIG_GetGameFuncOnKeyboard(int gameFunc); char const* CONFIG_GetGameFuncOnKeyboard(int gameFunc);
int osdcmd_bind(osdcmdptr_t parm);
int osdcmd_unbindall(osdcmdptr_t);
int osdcmd_unbind(osdcmdptr_t parm);
extern FStringCVar* const CombatMacros[]; extern FStringCVar* const CombatMacros[];
void CONFIG_ReadCombatMacros(); void CONFIG_ReadCombatMacros();

View file

@ -1,18 +1,33 @@
#pragma once #pragma once
#include "keyboard.h" #include <stdint.h>
#include "control.h" #include "tarray.h"
#include "scancodes.h" #include "scancodes.h"
typedef uint8_t kb_scancode;
extern kb_scancode KB_LastScan; extern kb_scancode KB_LastScan;
typedef struct
{
const char* key;
char* cmdstr;
char repeat;
char laststate;
}
consolekeybind_t;
// This encapsulates the entire game-readable input state which previously was spread out across several files. // This encapsulates the entire game-readable input state which previously was spread out across several files.
enum enum
{ {
NUMKEYS = 256, NUMKEYS = 256,
MAXMOUSEBUTTONS = 10,
}; };
extern consolekeybind_t CONTROL_KeyBinds[NUMKEYS + MAXMOUSEBUTTONS];
// Order is that of EDuke32 by necessity because it exposes the key binds to scripting by index instead of by name. // Order is that of EDuke32 by necessity because it exposes the key binds to scripting by index instead of by name.
enum GameFunction_t enum GameFunction_t
@ -164,7 +179,7 @@ public:
return KeyStatus[key]; return KeyStatus[key];
} }
void SetKeyStatus(int key, int state) void SetKeyStatus(int key, int state = 1)
{ {
KeyStatus[key] = (uint8_t)state; KeyStatus[key] = (uint8_t)state;
} }
@ -186,7 +201,7 @@ public:
bool CtrlPressed() bool CtrlPressed()
{ {
KeyStatus[sc_LeftControl] || KeyStatus[sc_RightControl]; return KeyStatus[sc_LeftControl] || KeyStatus[sc_RightControl];
} }
bool ShiftPressed() bool ShiftPressed()

View file

@ -204,21 +204,6 @@ typedef struct {
struct { struct {
int32_t AutoAim; int32_t AutoAim;
int32_t ShowWeapons; int32_t ShowWeapons;
// JBF 20031211: Store the input settings because
// (currently) mact can't regurgitate them
int32_t MouseFunctions[MAXMOUSEBUTTONS][2];
int32_t MouseDigitalFunctions[MAXMOUSEAXES][2];
int32_t MouseAnalogueAxes[MAXMOUSEAXES];
int32_t MouseAnalogueScale[MAXMOUSEAXES];
int32_t JoystickFunctions[MAXJOYBUTTONSANDHATS][2];
int32_t JoystickDigitalFunctions[MAXJOYAXES][2];
int32_t JoystickAnalogueAxes[MAXJOYAXES];
int32_t JoystickAnalogueScale[MAXJOYAXES];
int32_t JoystickAnalogueInvert[MAXJOYAXES];
int32_t JoystickAnalogueDead[MAXJOYAXES];
int32_t JoystickAnalogueSaturate[MAXJOYAXES];
int32_t setupread; int32_t setupread;
} config; } config;

View file

@ -857,206 +857,6 @@ void onvideomodechange(int32_t newmode)
g_crosshairSum = -1; g_crosshairSum = -1;
} }
const char *const ConsoleButtons[] =
{
"mouse1", "mouse2", "mouse3", "mouse4", "mwheelup",
"mwheeldn", "mouse5", "mouse6", "mouse7", "mouse8"
};
static int osdcmd_bind(osdcmdptr_t parm)
{
if (parm->numparms==1 && !Bstrcasecmp(parm->parms[0],"showkeys"))
{
for (auto & s : sctokeylut)
OSD_Printf("%s\n", s.key);
for (auto ConsoleButton : ConsoleButtons)
OSD_Printf("%s\n",ConsoleButton);
return OSDCMD_OK;
}
if (parm->numparms==0)
{
int j=0;
OSD_Printf("Current key bindings:\n");
for (int i=0; i<MAXBOUNDKEYS+MAXMOUSEBUTTONS; i++)
if (CONTROL_KeyIsBound(i))
{
j++;
OSD_Printf("%-9s %s\"%s\"\n", CONTROL_KeyBinds[i].key, CONTROL_KeyBinds[i].repeat?"":"norepeat ",
CONTROL_KeyBinds[i].cmdstr);
}
if (j == 0)
OSD_Printf("No binds found.\n");
return OSDCMD_OK;
}
int i, j, repeat;
for (i=0; i < ARRAY_SSIZE(sctokeylut); i++)
{
if (!Bstrcasecmp(parm->parms[0], sctokeylut[i].key))
break;
}
// didn't find the key
if (i == ARRAY_SSIZE(sctokeylut))
{
for (i=0; i<MAXMOUSEBUTTONS; i++)
if (!Bstrcasecmp(parm->parms[0],ConsoleButtons[i]))
break;
if (i >= MAXMOUSEBUTTONS)
return OSDCMD_SHOWHELP;
if (parm->numparms < 2)
{
if (CONTROL_KeyBinds[MAXBOUNDKEYS + i].cmdstr && CONTROL_KeyBinds[MAXBOUNDKEYS + i ].key)
OSD_Printf("%-9s %s\"%s\"\n", ConsoleButtons[i], CONTROL_KeyBinds[MAXBOUNDKEYS + i].repeat?"":"norepeat ",
CONTROL_KeyBinds[MAXBOUNDKEYS + i].cmdstr);
else OSD_Printf("%s is unbound\n", ConsoleButtons[i]);
return OSDCMD_OK;
}
j = 1;
repeat = 1;
if (!Bstrcasecmp(parm->parms[j],"norepeat"))
{
repeat = 0;
j++;
}
Bstrcpy(tempbuf,parm->parms[j++]);
for (; j<parm->numparms; j++)
{
Bstrcat(tempbuf," ");
Bstrcat(tempbuf,parm->parms[j++]);
}
CONTROL_BindMouse(i, tempbuf, repeat, ConsoleButtons[i]);
if (!OSD_ParsingScript())
OSD_Printf("%s\n",parm->raw);
return OSDCMD_OK;
}
if (parm->numparms < 2)
{
if (CONTROL_KeyIsBound(sctokeylut[i].sc))
OSD_Printf("%-9s %s\"%s\"\n", sctokeylut[i].key, CONTROL_KeyBinds[sctokeylut[i].sc].repeat?"":"norepeat ",
CONTROL_KeyBinds[sctokeylut[i].sc].cmdstr);
else OSD_Printf("%s is unbound\n", sctokeylut[i].key);
return OSDCMD_OK;
}
j = 1;
repeat = 1;
if (!Bstrcasecmp(parm->parms[j],"norepeat"))
{
repeat = 0;
j++;
}
Bstrcpy(tempbuf,parm->parms[j++]);
for (; j<parm->numparms; j++)
{
Bstrcat(tempbuf," ");
Bstrcat(tempbuf,parm->parms[j++]);
}
CONTROL_BindKey(sctokeylut[i].sc, tempbuf, repeat, sctokeylut[i].key);
char *cp = tempbuf;
// Populate the keyboard config menu based on the bind.
// Take care of processing one-to-many bindings properly, too.
static char const s_gamefunc_[] = "gamefunc_";
int constexpr strlen_gamefunc_ = ARRAY_SIZE(s_gamefunc_) - 1;
while ((cp = Bstrstr(cp, s_gamefunc_)))
{
cp += strlen_gamefunc_;
char *semi = Bstrchr(cp, ';');
if (semi)
*semi = 0;
j = CONFIG_FunctionNameToNum(cp);
if (semi)
cp = semi+1;
if (j != -1)
{
KeyboardKeys[j][1] = KeyboardKeys[j][0];
KeyboardKeys[j][0] = sctokeylut[i].sc;
// CONTROL_MapKey(j, sctokeylut[i].sc, KeyboardKeys[j][0]);
if (j == gamefunc_Show_Console)
OSD_CaptureKey(sctokeylut[i].sc);
}
}
if (!OSD_ParsingScript())
OSD_Printf("%s\n",parm->raw);
return OSDCMD_OK;
}
static int osdcmd_unbindall(osdcmdptr_t UNUSED(parm))
{
UNREFERENCED_CONST_PARAMETER(parm);
for (int i = 0; i < MAXBOUNDKEYS; ++i)
CONTROL_FreeKeyBind(i);
for (int i = 0; i < MAXMOUSEBUTTONS; ++i)
CONTROL_FreeMouseBind(i);
for (auto &KeyboardKey : KeyboardKeys)
KeyboardKey[0] = KeyboardKey[1] = 0xff;
if (!OSD_ParsingScript())
OSD_Printf("unbound all controls\n");
return OSDCMD_OK;
}
static int osdcmd_unbind(osdcmdptr_t parm)
{
if (parm->numparms != 1)
return OSDCMD_SHOWHELP;
for (auto & ConsoleKey : sctokeylut)
{
if (ConsoleKey.key && !Bstrcasecmp(parm->parms[0], ConsoleKey.key))
{
CONTROL_FreeKeyBind(ConsoleKey.sc);
OSD_Printf("unbound key %s\n", ConsoleKey.key);
return OSDCMD_OK;
}
}
for (int i = 0; i < MAXMOUSEBUTTONS; i++)
{
if (!Bstrcasecmp(parm->parms[0], ConsoleButtons[i]))
{
CONTROL_FreeMouseBind(i);
OSD_Printf("unbound %s\n", ConsoleButtons[i]);
return OSDCMD_OK;
}
}
return OSDCMD_SHOWHELP;
}
static int osdcmd_unbound(osdcmdptr_t parm) static int osdcmd_unbound(osdcmdptr_t parm)
{ {
if (parm->numparms != 1) if (parm->numparms != 1)

View file

@ -207,20 +207,8 @@ void CONTROL_ClearGameControllerDigitalAxisNeg(int32_t axis);
////////// KEY/MOUSE BIND STUFF ////////// ////////// KEY/MOUSE BIND STUFF //////////
#define MAXBOUNDKEYS MAXKEYBOARDSCAN
#define MAXMOUSEBUTTONS 10
typedef struct
{
const char *key;
char *cmdstr;
char repeat;
char laststate;
}
consolekeybind_t;
// Direct use DEPRECATED: // Direct use DEPRECATED:
extern consolekeybind_t CONTROL_KeyBinds[MAXBOUNDKEYS+MAXMOUSEBUTTONS];
extern bool CONTROL_BindsEnabled; extern bool CONTROL_BindsEnabled;
void CONTROL_ClearAllBinds(void); void CONTROL_ClearAllBinds(void);

View file

@ -33,8 +33,6 @@ Modifications for JonoF's port by Jonathon Fowler (jf@jonof.id.au)
#include "baselayer.h" // for the keyboard stuff #include "baselayer.h" // for the keyboard stuff
#include "scancodes.h" #include "scancodes.h"
typedef uint8_t kb_scancode;
// translation table for taking key names to scancodes and back again // translation table for taking key names to scancodes and back again
static struct static struct
{ {
@ -58,8 +56,6 @@ static struct
{ "Down", 0xd0 }, { "PgDn", 0xd1 }, { "Insert", 0xd2 }, { "Delete", 0xd3 }, { "Down", 0xd0 }, { "PgDn", 0xd1 }, { "Insert", 0xd2 }, { "Delete", 0xd3 },
}; };
#define MAXKEYBOARDSCAN 256
extern kb_scancode KB_LastScan; extern kb_scancode KB_LastScan;
#define KB_GetLastScanCode() (KB_LastScan) #define KB_GetLastScanCode() (KB_LastScan)

View file

@ -62,7 +62,7 @@ static int32_t(*ExtGetTime)(void);
static uint8_t CONTROL_DoubleClickSpeed; static uint8_t CONTROL_DoubleClickSpeed;
int32_t CONTROL_ButtonFlags[CONTROL_NUM_FLAGS]; int32_t CONTROL_ButtonFlags[CONTROL_NUM_FLAGS];
consolekeybind_t CONTROL_KeyBinds[MAXBOUNDKEYS + MAXMOUSEBUTTONS]; consolekeybind_t CONTROL_KeyBinds[NUMKEYS + MAXMOUSEBUTTONS];
bool CONTROL_BindsEnabled = 0; bool CONTROL_BindsEnabled = 0;
bool CONTROL_SmoothMouse = 0; bool CONTROL_SmoothMouse = 0;
@ -71,7 +71,7 @@ bool CONTROL_SmoothMouse = 0;
void CONTROL_ClearAllBinds(void) void CONTROL_ClearAllBinds(void)
{ {
for (int i=0; i<MAXBOUNDKEYS; i++) for (int i=0; i<NUMKEYS; i++)
CONTROL_FreeKeyBind(i); CONTROL_FreeKeyBind(i);
for (int i=0; i<MAXMOUSEBUTTONS; i++) for (int i=0; i<MAXMOUSEBUTTONS; i++)
CONTROL_FreeMouseBind(i); CONTROL_FreeMouseBind(i);
@ -84,7 +84,7 @@ void CONTROL_BindKey(int i, char const * const cmd, int repeat, char const * con
void CONTROL_BindMouse(int i, char const * const cmd, int repeat, char const * const keyname) void CONTROL_BindMouse(int i, char const * const cmd, int repeat, char const * const keyname)
{ {
BIND(CONTROL_KeyBinds[MAXBOUNDKEYS + i], Xstrdup(cmd), repeat, keyname); BIND(CONTROL_KeyBinds[NUMKEYS + i], Xstrdup(cmd), repeat, keyname);
} }
void CONTROL_FreeKeyBind(int i) void CONTROL_FreeKeyBind(int i)
@ -94,7 +94,7 @@ void CONTROL_FreeKeyBind(int i)
void CONTROL_FreeMouseBind(int i) void CONTROL_FreeMouseBind(int i)
{ {
BIND(CONTROL_KeyBinds[MAXBOUNDKEYS + i], NULL, 0, NULL); BIND(CONTROL_KeyBinds[NUMKEYS + i], NULL, 0, NULL);
} }
static void CONTROL_GetMouseDelta(ControlInfo * info) static void CONTROL_GetMouseDelta(ControlInfo * info)
@ -643,7 +643,7 @@ static void CONTROL_ButtonFunctionState(int32_t *p1)
do do
{ {
if (!CONTROL_KeyBinds[MAXBOUNDKEYS + i].cmdstr) if (!CONTROL_KeyBinds[NUMKEYS + i].cmdstr)
{ {
j = CONTROL_MouseButtonMapping[i].doubleclicked; j = CONTROL_MouseButtonMapping[i].doubleclicked;
if (j != KEYUNDEFINED) if (j != KEYUNDEFINED)
@ -657,12 +657,12 @@ static void CONTROL_ButtonFunctionState(int32_t *p1)
if (!CONTROL_BindsEnabled) if (!CONTROL_BindsEnabled)
continue; continue;
if (CONTROL_KeyBinds[MAXBOUNDKEYS + i].cmdstr && CONTROL_MouseButtonState[i]) if (CONTROL_KeyBinds[NUMKEYS + i].cmdstr && CONTROL_MouseButtonState[i])
{ {
if (CONTROL_KeyBinds[MAXBOUNDKEYS + i].repeat || (CONTROL_KeyBinds[MAXBOUNDKEYS + i].laststate == 0)) if (CONTROL_KeyBinds[NUMKEYS + i].repeat || (CONTROL_KeyBinds[NUMKEYS + i].laststate == 0))
OSD_Dispatch(CONTROL_KeyBinds[MAXBOUNDKEYS + i].cmdstr); OSD_Dispatch(CONTROL_KeyBinds[NUMKEYS + i].cmdstr);
} }
CONTROL_KeyBinds[MAXBOUNDKEYS + i].laststate = CONTROL_MouseButtonState[i]; CONTROL_KeyBinds[NUMKEYS + i].laststate = CONTROL_MouseButtonState[i];
} }
while (i--); while (i--);
} }
@ -752,7 +752,7 @@ void CONTROL_ProcessBinds(void)
if (!CONTROL_BindsEnabled) if (!CONTROL_BindsEnabled)
return; return;
int i = MAXBOUNDKEYS-1; int i = NUMKEYS-1;
do do
{ {

View file

@ -713,206 +713,6 @@ void onvideomodechange(int32_t newmode)
} }
const char *const ConsoleButtons[] =
{
"mouse1", "mouse2", "mouse3", "mouse4", "mwheelup",
"mwheeldn", "mouse5", "mouse6", "mouse7", "mouse8"
};
static int osdcmd_bind(osdcmdptr_t parm)
{
if (parm->numparms==1 && !Bstrcasecmp(parm->parms[0],"showkeys"))
{
for (int i=0; sctokeylut[i].key; i++)
OSD_Printf("%s\n",sctokeylut[i].key);
for (auto ConsoleButton : ConsoleButtons)
OSD_Printf("%s\n",ConsoleButton);
return OSDCMD_OK;
}
if (parm->numparms==0)
{
int j=0;
OSD_Printf("Current key bindings:\n");
for (int i=0; i<MAXBOUNDKEYS+MAXMOUSEBUTTONS; i++)
if (CONTROL_KeyIsBound(i))
{
j++;
OSD_Printf("%-9s %s\"%s\"\n", CONTROL_KeyBinds[i].key, CONTROL_KeyBinds[i].repeat?"":"norepeat ",
CONTROL_KeyBinds[i].cmdstr);
}
if (j == 0)
OSD_Printf("No binds found.\n");
return OSDCMD_OK;
}
int i, j, repeat;
for (i=0; i < ARRAY_SSIZE(sctokeylut); i++)
{
if (!Bstrcasecmp(parm->parms[0], sctokeylut[i].key))
break;
}
// didn't find the key
if (i == ARRAY_SSIZE(sctokeylut))
{
for (i=0; i<MAXMOUSEBUTTONS; i++)
if (!Bstrcasecmp(parm->parms[0],ConsoleButtons[i]))
break;
if (i >= MAXMOUSEBUTTONS)
return OSDCMD_SHOWHELP;
if (parm->numparms < 2)
{
if (CONTROL_KeyBinds[MAXBOUNDKEYS + i].cmdstr && CONTROL_KeyBinds[MAXBOUNDKEYS + i ].key)
OSD_Printf("%-9s %s\"%s\"\n", ConsoleButtons[i], CONTROL_KeyBinds[MAXBOUNDKEYS + i].repeat?"":"norepeat ",
CONTROL_KeyBinds[MAXBOUNDKEYS + i].cmdstr);
else OSD_Printf("%s is unbound\n", ConsoleButtons[i]);
return OSDCMD_OK;
}
j = 1;
repeat = 1;
if (!Bstrcasecmp(parm->parms[j],"norepeat"))
{
repeat = 0;
j++;
}
Bstrcpy(tempbuf,parm->parms[j++]);
for (; j<parm->numparms; j++)
{
Bstrcat(tempbuf," ");
Bstrcat(tempbuf,parm->parms[j++]);
}
CONTROL_BindMouse(i, tempbuf, repeat, ConsoleButtons[i]);
if (!OSD_ParsingScript())
OSD_Printf("%s\n",parm->raw);
return OSDCMD_OK;
}
if (parm->numparms < 2)
{
if (CONTROL_KeyIsBound(sctokeylut[i].sc))
OSD_Printf("%-9s %s\"%s\"\n", sctokeylut[i].key, CONTROL_KeyBinds[sctokeylut[i].sc].repeat?"":"norepeat ",
CONTROL_KeyBinds[sctokeylut[i].sc].cmdstr);
else OSD_Printf("%s is unbound\n", sctokeylut[i].key);
return OSDCMD_OK;
}
j = 1;
repeat = 1;
if (!Bstrcasecmp(parm->parms[j],"norepeat"))
{
repeat = 0;
j++;
}
Bstrcpy(tempbuf,parm->parms[j++]);
for (; j<parm->numparms; j++)
{
Bstrcat(tempbuf," ");
Bstrcat(tempbuf,parm->parms[j++]);
}
CONTROL_BindKey(sctokeylut[i].sc, tempbuf, repeat, sctokeylut[i].key);
char *cp = tempbuf;
// Populate the keyboard config menu based on the bind.
// Take care of processing one-to-many bindings properly, too.
static char const s_gamefunc_[] = "gamefunc_";
int constexpr strlen_gamefunc_ = ARRAY_SIZE(s_gamefunc_) - 1;
while ((cp = Bstrstr(cp, s_gamefunc_)))
{
cp += strlen_gamefunc_;
char *semi = Bstrchr(cp, ';');
if (semi)
*semi = 0;
j = CONFIG_FunctionNameToNum(cp);
if (semi)
cp = semi+1;
if (j != -1)
{
KeyboardKeys[j][1] = KeyboardKeys[j][0];
KeyboardKeys[j][0] = sctokeylut[i].sc;
// CONTROL_MapKey(j, sctokeylut[i].sc, KeyboardKeys[j][0]);
if (j == gamefunc_Show_Console)
OSD_CaptureKey(sctokeylut[i].sc);
}
}
if (!OSD_ParsingScript())
OSD_Printf("%s\n",parm->raw);
return OSDCMD_OK;
}
static int osdcmd_unbindall(osdcmdptr_t UNUSED(parm))
{
UNREFERENCED_CONST_PARAMETER(parm);
for (int i = 0; i < MAXBOUNDKEYS; ++i)
CONTROL_FreeKeyBind(i);
for (int i = 0; i < MAXMOUSEBUTTONS; ++i)
CONTROL_FreeMouseBind(i);
for (auto &KeyboardKey : KeyboardKeys)
KeyboardKey[0] = KeyboardKey[1] = 0xff;
if (!OSD_ParsingScript())
OSD_Printf("unbound all controls\n");
return OSDCMD_OK;
}
static int osdcmd_unbind(osdcmdptr_t parm)
{
if (parm->numparms != 1)
return OSDCMD_SHOWHELP;
for (auto ConsoleKey : sctokeylut)
{
if (ConsoleKey.key && !Bstrcasecmp(parm->parms[0], ConsoleKey.key))
{
CONTROL_FreeKeyBind(ConsoleKey.sc);
OSD_Printf("unbound key %s\n", ConsoleKey.key);
return OSDCMD_OK;
}
}
for (int i = 0; i < MAXMOUSEBUTTONS; i++)
{
if (!Bstrcasecmp(parm->parms[0], ConsoleButtons[i]))
{
CONTROL_FreeMouseBind(i);
OSD_Printf("unbound %s\n", ConsoleButtons[i]);
return OSDCMD_OK;
}
}
return OSDCMD_SHOWHELP;
}
static int osdcmd_quicksave(osdcmdptr_t UNUSED(parm)) static int osdcmd_quicksave(osdcmdptr_t UNUSED(parm))
{ {
UNREFERENCED_CONST_PARAMETER(parm); UNREFERENCED_CONST_PARAMETER(parm);

View file

@ -1058,7 +1058,7 @@ ResizeView(PLAYERp pp)
{ {
extern SWBOOL ScrollMode2D; extern SWBOOL ScrollMode2D;
KEY_PRESSED(KEYSC_ESC) = 0; inputState.ClearKeyStatus(sc_Escape);
dimensionmode = 3; dimensionmode = 3;
ScrollMode2D = FALSE; ScrollMode2D = FALSE;
SetRedrawScreen(pp); SetRedrawScreen(pp);
@ -1676,7 +1676,7 @@ void ScreenCaptureKeys(void)
// screen capture // screen capture
if (KEY_PRESSED(KEYSC_F12)) if (KEY_PRESSED(KEYSC_F12))
{ {
KEY_PRESSED(KEYSC_F12) = 0; inputState.ClearKeyStatus(KEYSC_F12);
PauseAction(); PauseAction();
videoCaptureScreenTGA("swcpxxxx.tga", KEY_PRESSED(KEYSC_LSHIFT) | KEY_PRESSED(KEYSC_RSHIFT)); videoCaptureScreenTGA("swcpxxxx.tga", KEY_PRESSED(KEYSC_LSHIFT) | KEY_PRESSED(KEYSC_RSHIFT));
ResumeAction(); ResumeAction();

View file

@ -1560,8 +1560,8 @@ NewLevel(void)
if (DemoModeMenuInit) if (DemoModeMenuInit)
{ {
DemoModeMenuInit = FALSE; DemoModeMenuInit = FALSE;
KEY_PRESSED(KEYSC_ESC) = TRUE; inputState.ClearKeyStatus(sc_Escape);
} }
} }
DemoPlayBack(); DemoPlayBack();
@ -1620,10 +1620,7 @@ ResetKeys(void)
{ {
int i; int i;
for (i = 0; i < MAXKEYBOARDSCAN; i++) inputState.ClearAllKeyStatus();
{
KEY_PRESSED(i) = 0;
}
} }
SWBOOL SWBOOL
@ -1631,7 +1628,7 @@ KeyPressed(void)
{ {
int i; int i;
for (i = 0; i < MAXKEYBOARDSCAN; i++) for (i = 0; i < NUMKEYS; i++)
{ {
if (KEY_PRESSED(i)) if (KEY_PRESSED(i))
return TRUE; return TRUE;
@ -2152,8 +2149,8 @@ MenuLevel(void)
// go to ordering menu only if shareware // go to ordering menu only if shareware
if (FinishAnim) if (FinishAnim)
{ {
KEY_PRESSED(KEYSC_ESC) = 1; inputState.ClearKeyStatus(sc_Escape);
ControlPanelType = ct_ordermenu; ControlPanelType = ct_ordermenu;
FinishAnim = 0; FinishAnim = 0;
} }
} }
@ -2214,7 +2211,7 @@ MenuLevel(void)
// force the use of menus at all time // force the use of menus at all time
if (!UsingMenus && !ConPanel) if (!UsingMenus && !ConPanel)
{ {
KEY_PRESSED(KEYSC_ESC) = TRUE; inputState.SetKeyStatus(sc_Escape);
MNU_CheckForMenusAnyKey(); MNU_CheckForMenusAnyKey();
} }
@ -2232,8 +2229,8 @@ MenuLevel(void)
BorderAdjust = TRUE; BorderAdjust = TRUE;
//LoadGameOutsideMoveLoop = FALSE; //LoadGameOutsideMoveLoop = FALSE;
KEY_PRESSED(KEYSC_ESC) = FALSE; inputState.ClearKeyStatus(sc_Escape);
KB_ClearKeysDown(); KB_ClearKeysDown();
//ExitMenus(); //ExitMenus();
UsingMenus = FALSE; UsingMenus = FALSE;
InMenuLevel = FALSE; InMenuLevel = FALSE;
@ -2793,8 +2790,8 @@ StatScreen(PLAYERp mpp)
while (KeyPressed()) ; while (KeyPressed()) ;
} }
KEY_PRESSED(KEYSC_SPACE) = 0; inputState.ClearKeyStatus(KEYSC_SPACE);
KEY_PRESSED(KEYSC_ENTER) = 0; inputState.ClearKeyStatus(KEYSC_ENTER);
if (mus_enabled) if (mus_enabled)
{ {
@ -4398,7 +4395,7 @@ FunctionKeys(PLAYERp pp)
{ {
if (rts_delay > 16 && fn_key && CommEnabled && !adult_lockout && !Global_PLock) if (rts_delay > 16 && fn_key && CommEnabled && !adult_lockout && !Global_PLock)
{ {
KEY_PRESSED(sc_F1 + fn_key - 1) = 0; inputState.ClearKeyStatus(sc_F1 + fn_key - 1);
rts_delay = 0; rts_delay = 0;
@ -4423,7 +4420,8 @@ FunctionKeys(PLAYERp pp)
{ {
if (fn_key && CommEnabled) if (fn_key && CommEnabled)
{ {
KEY_PRESSED(sc_F1 + fn_key - 1) = 0; inputState.ClearKeyStatus(sc_Escape);
inputState.ClearKeyStatus(sc_F1 + fn_key - 1);
if (CommEnabled) if (CommEnabled)
{ {
@ -4452,22 +4450,22 @@ FunctionKeys(PLAYERp pp)
// F2 save menu // F2 save menu
if (KEY_PRESSED(KEYSC_F2)) if (KEY_PRESSED(KEYSC_F2))
{ {
KEY_PRESSED(KEYSC_F2) = 0; inputState.ClearKeyStatus(KEYSC_F2);
if (!TEST(pp->Flags, PF_DEAD)) if (!TEST(pp->Flags, PF_DEAD))
{ {
KEY_PRESSED(KEYSC_ESC) = 1; inputState.SetKeyStatus(sc_Escape);
ControlPanelType = ct_savemenu; ControlPanelType = ct_savemenu;
} }
} }
// F3 load menu // F3 load menu
if (KEY_PRESSED(KEYSC_F3)) if (KEY_PRESSED(KEYSC_F3))
{ {
KEY_PRESSED(KEYSC_F3) = 0; inputState.ClearKeyStatus(KEYSC_F3);
if (!TEST(pp->Flags, PF_DEAD)) if (!TEST(pp->Flags, PF_DEAD))
{ {
KEY_PRESSED(KEYSC_ESC) = 1; inputState.SetKeyStatus(sc_Escape);
ControlPanelType = ct_loadmenu; ControlPanelType = ct_loadmenu;
} }
} }
@ -4475,11 +4473,11 @@ FunctionKeys(PLAYERp pp)
if (KEY_PRESSED(KEYSC_F6)) if (KEY_PRESSED(KEYSC_F6))
{ {
extern SWBOOL QuickSaveMode; extern SWBOOL QuickSaveMode;
KEY_PRESSED(KEYSC_F6) = 0; inputState.ClearKeyStatus(KEYSC_F6);
if (!TEST(pp->Flags, PF_DEAD)) if (!TEST(pp->Flags, PF_DEAD))
{ {
KEY_PRESSED(KEYSC_ESC) = 1; inputState.SetKeyStatus(sc_Escape);
ControlPanelType = ct_savemenu; ControlPanelType = ct_savemenu;
QuickSaveMode = TRUE; QuickSaveMode = TRUE;
} }
} }
@ -4487,7 +4485,7 @@ FunctionKeys(PLAYERp pp)
// F9 quick load // F9 quick load
if (KEY_PRESSED(KEYSC_F9)) if (KEY_PRESSED(KEYSC_F9))
{ {
KEY_PRESSED(KEYSC_F9) = 0; inputState.ClearKeyStatus(KEYSC_F9);
if (!TEST(pp->Flags, PF_DEAD)) if (!TEST(pp->Flags, PF_DEAD))
{ {
@ -4498,8 +4496,8 @@ FunctionKeys(PLAYERp pp)
else else
{ {
KB_ClearKeysDown(); KB_ClearKeysDown();
KEY_PRESSED(KEYSC_ESC) = 1; inputState.SetKeyStatus(sc_Escape);
ControlPanelType = ct_quickloadmenu; ControlPanelType = ct_quickloadmenu;
} }
} }
} }
@ -4510,16 +4508,16 @@ FunctionKeys(PLAYERp pp)
// F4 sound menu // F4 sound menu
if (KEY_PRESSED(KEYSC_F4)) if (KEY_PRESSED(KEYSC_F4))
{ {
KEY_PRESSED(KEYSC_F4) = 0; inputState.ClearKeyStatus(KEYSC_F4);
KEY_PRESSED(KEYSC_ESC) = 1; inputState.SetKeyStatus(sc_Escape);
ControlPanelType = ct_soundmenu; ControlPanelType = ct_soundmenu;
} }
// F7 VIEW control // F7 VIEW control
if (KEY_PRESSED(KEYSC_F7)) if (KEY_PRESSED(KEYSC_F7))
{ {
KEY_PRESSED(KEYSC_F7) = 0; inputState.ClearKeyStatus(KEYSC_F7);
if (KEY_PRESSED(KEYSC_LSHIFT) || KEY_PRESSED(KEYSC_RSHIFT)) if (KEY_PRESSED(KEYSC_LSHIFT) || KEY_PRESSED(KEYSC_RSHIFT))
{ {
@ -4543,7 +4541,7 @@ FunctionKeys(PLAYERp pp)
// F8 toggle messages // F8 toggle messages
if (KEY_PRESSED(KEYSC_F8)) if (KEY_PRESSED(KEYSC_F8))
{ {
KEY_PRESSED(KEYSC_F8) = 0; inputState.ClearKeyStatus(KEYSC_F8);
hud_messages = !hud_messages; hud_messages = !hud_messages;
@ -4556,15 +4554,15 @@ FunctionKeys(PLAYERp pp)
// F10 quit menu // F10 quit menu
if (KEY_PRESSED(KEYSC_F10)) if (KEY_PRESSED(KEYSC_F10))
{ {
KEY_PRESSED(KEYSC_F10) = 0; inputState.ClearKeyStatus(KEYSC_F10);
KEY_PRESSED(KEYSC_ESC) = 1; inputState.SetKeyStatus(sc_Escape);
ControlPanelType = ct_quitmenu; ControlPanelType = ct_quitmenu;
} }
// F11 gamma correction // F11 gamma correction
if (KEY_PRESSED(KEYSC_F11) > 0) if (KEY_PRESSED(KEYSC_F11) > 0)
{ {
KEY_PRESSED(KEYSC_F11) = 0; inputState.ClearKeyStatus(KEYSC_F11);
// Do this entirely in the video backend. // Do this entirely in the video backend.
} }
@ -4578,7 +4576,7 @@ void PauseKey(PLAYERp pp)
if (KEY_PRESSED(sc_Pause) && !CommEnabled && !InputMode && !UsingMenus && !CheatInputMode && !ConPanel) if (KEY_PRESSED(sc_Pause) && !CommEnabled && !InputMode && !UsingMenus && !CheatInputMode && !ConPanel)
{ {
KEY_PRESSED(sc_Pause) = 0; inputState.ClearKeyStatus(sc_Pause);
PauseKeySet ^= 1; PauseKeySet ^= 1;
@ -4612,8 +4610,8 @@ void PauseKey(PLAYERp pp)
} }
else else
{ {
KEY_PRESSED(KEYSC_ESC) = 1; inputState.SetKeyStatus(sc_Escape);
ControlPanelType = ct_quickloadmenu; ControlPanelType = ct_quickloadmenu;
} }
} }
} }
@ -4844,8 +4842,8 @@ void GetHelpInput(PLAYERp pp)
{ {
if (KEY_PRESSED(KEYSC_F1)) if (KEY_PRESSED(KEYSC_F1))
{ {
KEY_PRESSED(KEYSC_F1) = FALSE; inputState.ClearKeyStatus(KEYSC_F11);
HelpPage = 0; HelpPage = 0;
HelpInputMode = TRUE; HelpInputMode = TRUE;
PanelUpdateMode = FALSE; PanelUpdateMode = FALSE;
InputMode = TRUE; InputMode = TRUE;
@ -4857,8 +4855,8 @@ void GetHelpInput(PLAYERp pp)
{ {
if (KEY_PRESSED(KEYSC_ESC)) if (KEY_PRESSED(KEYSC_ESC))
{ {
KEY_PRESSED(KEYSC_ESC) = 0; inputState.ClearKeyStatus(sc_Escape);
KB_ClearKeysDown(); KB_ClearKeysDown();
PanelUpdateMode = TRUE; PanelUpdateMode = TRUE;
HelpInputMode = FALSE; HelpInputMode = FALSE;
InputMode = FALSE; InputMode = FALSE;
@ -4869,13 +4867,14 @@ void GetHelpInput(PLAYERp pp)
if (KEY_PRESSED(KEYSC_SPACE) || KEY_PRESSED(KEYSC_ENTER) || KEY_PRESSED(KEYSC_PGDN) || KEY_PRESSED(KEYSC_DOWN) || KEY_PRESSED(KEYSC_RIGHT) || KEY_PRESSED(sc_kpad_3) || KEY_PRESSED(sc_kpad_2) || KEY_PRESSED(sc_kpad_6)) if (KEY_PRESSED(KEYSC_SPACE) || KEY_PRESSED(KEYSC_ENTER) || KEY_PRESSED(KEYSC_PGDN) || KEY_PRESSED(KEYSC_DOWN) || KEY_PRESSED(KEYSC_RIGHT) || KEY_PRESSED(sc_kpad_3) || KEY_PRESSED(sc_kpad_2) || KEY_PRESSED(sc_kpad_6))
{ {
KEY_PRESSED(KEYSC_SPACE) = KEY_PRESSED(KEYSC_ENTER) = 0; inputState.ClearKeyStatus(KEYSC_SPACE);
KEY_PRESSED(KEYSC_PGDN) = 0; inputState.ClearKeyStatus(KEYSC_ENTER);
KEY_PRESSED(KEYSC_DOWN) = 0; inputState.ClearKeyStatus(KEYSC_PGDN);
KEY_PRESSED(KEYSC_RIGHT) = 0; inputState.ClearKeyStatus(KEYSC_DOWN);
KEY_PRESSED(sc_kpad_3) = 0; inputState.ClearKeyStatus(KEYSC_RIGHT);
KEY_PRESSED(sc_kpad_2) = 0; inputState.ClearKeyStatus(sc_kpad_3);
KEY_PRESSED(sc_kpad_6) = 0; inputState.ClearKeyStatus(sc_kpad_2);
inputState.ClearKeyStatus(sc_kpad_6);
HelpPage++; HelpPage++;
if (HelpPage >= (int)SIZ(HelpPagePic)) if (HelpPage >= (int)SIZ(HelpPagePic))
@ -4888,12 +4887,12 @@ void GetHelpInput(PLAYERp pp)
if (KEY_PRESSED(KEYSC_PGUP) || KEY_PRESSED(KEYSC_UP) || KEY_PRESSED(KEYSC_LEFT) || KEY_PRESSED(sc_kpad_9) || KEY_PRESSED(sc_kpad_8) || KEY_PRESSED(sc_kpad_4)) if (KEY_PRESSED(KEYSC_PGUP) || KEY_PRESSED(KEYSC_UP) || KEY_PRESSED(KEYSC_LEFT) || KEY_PRESSED(sc_kpad_9) || KEY_PRESSED(sc_kpad_8) || KEY_PRESSED(sc_kpad_4))
{ {
KEY_PRESSED(KEYSC_PGUP) = 0; inputState.ClearKeyStatus(KEYSC_PGUP);
KEY_PRESSED(KEYSC_UP) = 0; inputState.ClearKeyStatus(KEYSC_UP);
KEY_PRESSED(KEYSC_LEFT) = 0; inputState.ClearKeyStatus(KEYSC_LEFT);
KEY_PRESSED(sc_kpad_8) = 0; inputState.ClearKeyStatus(sc_kpad_8);
KEY_PRESSED(sc_kpad_9) = 0; inputState.ClearKeyStatus(sc_kpad_9);
KEY_PRESSED(sc_kpad_4) = 0; inputState.ClearKeyStatus(sc_kpad_4);
HelpPage--; HelpPage--;
if (HelpPage < 0) if (HelpPage < 0)
@ -5167,8 +5166,8 @@ getinput(SW_PACKET *loc)
else if (KEY_PRESSED(sc_Pause)) else if (KEY_PRESSED(sc_Pause))
{ {
SET_LOC_KEY(loc->bits, SK_PAUSE, KEY_PRESSED(sc_Pause)); SET_LOC_KEY(loc->bits, SK_PAUSE, KEY_PRESSED(sc_Pause));
KEY_PRESSED(sc_Pause) = 0; inputState.ClearKeyStatus(sc_Pause);
} }
SET_LOC_KEY(loc->bits, SK_CENTER_VIEW, BUTTON(gamefunc_Center_View)); SET_LOC_KEY(loc->bits, SK_CENTER_VIEW, BUTTON(gamefunc_Center_View));

View file

@ -728,7 +728,7 @@ SWBOOL MNU_KeySetupCustom(UserCall call, MenuItem *item)
if (KEY_PRESSED(KEYSC_ESC) || inpt.button1) if (KEY_PRESSED(KEYSC_ESC) || inpt.button1)
{ {
KEY_PRESSED(KEYSC_ESC) = FALSE; inputState.ClearKeyStatus(sc_Escape);
cust_callback = NULL; cust_callback = NULL;
CONTROL_ClearUserInput(&inpt); CONTROL_ClearUserInput(&inpt);
return TRUE; return TRUE;
@ -1576,8 +1576,8 @@ MNU_OrderCustom(UserCall call, MenuItem *item)
// Support a few other keys too // Support a few other keys too
if (KEY_PRESSED(KEYSC_SPACE)||KEY_PRESSED(KEYSC_ENTER)) if (KEY_PRESSED(KEYSC_SPACE)||KEY_PRESSED(KEYSC_ENTER))
{ {
KEY_PRESSED(KEYSC_SPACE) = FALSE; inputState.ClearKeyStatus(KEYSC_SPACE);
KEY_PRESSED(KEYSC_ENTER) = FALSE; inputState.ClearKeyStatus(KEYSC_ENTER);
tst_input.dir = dir_South; tst_input.dir = dir_South;
} }
} }
@ -1622,7 +1622,7 @@ MNU_OrderCustom(UserCall call, MenuItem *item)
} }
else else
{ {
KEY_PRESSED(KEYSC_ESC) = FALSE; inputState.ClearKeyStatus(sc_Escape);
cust_callback = NULL; cust_callback = NULL;
DidOrderSound = FALSE; DidOrderSound = FALSE;
on_screen = 0; on_screen = 0;
@ -4395,8 +4395,8 @@ SetupMenu(void)
MNU_SetupMenu(); MNU_SetupMenu();
// Clear the previous ESC key press // Clear the previous ESC key press
KEY_PRESSED(KEYSC_ESC) = FALSE; inputState.ClearKeyStatus(sc_Escape);
UsingMenus = TRUE; UsingMenus = TRUE;
} }
} }
@ -4565,8 +4565,8 @@ MNU_CheckForMenus(void)
{ {
if ((KEY_PRESSED(KEYSC_ESC)) && dimensionmode == 3 && !ConPanel) if ((KEY_PRESSED(KEYSC_ESC)) && dimensionmode == 3 && !ConPanel)
{ {
KEY_PRESSED(KEYSC_ESC) = 0; inputState.ClearKeyStatus(sc_Escape);
KB_ClearKeysDown(); KB_ClearKeysDown();
// setup sliders/buttons // setup sliders/buttons
MNU_InitMenus(); MNU_InitMenus();
MNU_DoMenu(ct_mainmenu, Player + myconnectindex); MNU_DoMenu(ct_mainmenu, Player + myconnectindex);

View file

@ -4117,8 +4117,8 @@ SWBOOL PlayerFlyKey(PLAYERp pp)
key = KEY_PRESSED(KEYSC_J); key = KEY_PRESSED(KEYSC_J);
if (key) if (key)
KEY_PRESSED(KEYSC_J) = 0; inputState.ClearKeyStatus(KEYSC_J);
return key; return key;
} }