Fixes anim playback, mouse lag with low fps, keyboard setup menu

git-svn-id: https://svn.eduke32.com/eduke32@1632 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
terminx 2010-05-07 20:45:40 +00:00
parent e1649b9d0b
commit bb21e1c05f
13 changed files with 274 additions and 387 deletions

View file

@ -1654,14 +1654,15 @@ int32_t OSD_RegisterFunction(const char *name, const char *help, int32_t (*func)
if ((osdflags & OSD_INITIALIZED) == 0) if ((osdflags & OSD_INITIALIZED) == 0)
OSD_Init(); OSD_Init();
if (!name) if (!name || !name[0])
{ {
OSD_Printf("OSD_RegisterFunction(): may not register a function with a null name\n"); OSD_Printf("OSD_RegisterFunction(): can't register function with null name\n");
return -1; return -1;
} }
if (!name[0])
if (!func)
{ {
OSD_Printf("OSD_RegisterFunction(): may not register a function with no name\n"); OSD_Printf("OSD_RegisterFunction(): can't register null function\n");
return -1; return -1;
} }
@ -1684,13 +1685,9 @@ int32_t OSD_RegisterFunction(const char *name, const char *help, int32_t (*func)
} }
if (!help) help = "(no description for this function)"; if (!help) help = "(no description for this function)";
if (!func)
{
OSD_Printf("OSD_RegisterFunction(): may not register a null function\n");
return -1;
}
symb = findexactsymbol(name); symb = findexactsymbol(name);
if (symb) // allow this now for reusing an alias name if (symb) // allow this now for reusing an alias name
{ {
if (symb->func != OSD_ALIAS && symb->func != OSD_UNALIASED) if (symb->func != OSD_ALIAS && symb->func != OSD_UNALIASED)
@ -1705,6 +1702,7 @@ int32_t OSD_RegisterFunction(const char *name, const char *help, int32_t (*func)
} }
symb = addnewsymbol(name); symb = addnewsymbol(name);
if (!symb) if (!symb)
{ {
OSD_Printf("OSD_RegisterFunction(): Failed registering function \"%s\"\n", name); OSD_Printf("OSD_RegisterFunction(): Failed registering function \"%s\"\n", name);

View file

@ -6,7 +6,7 @@
#include "scancodes.h" #include "scancodes.h"
#include "build.h" #include "build.h"
static BOOL init_done = 0; static BOOL rawinput_started = 0;
static uint8_t KeyboardState[256] = {0}; // VKeys static uint8_t KeyboardState[256] = {0}; // VKeys
static int8_t MWheel = 0; static int8_t MWheel = 0;
@ -80,6 +80,7 @@ static inline void RI_ProcessMouse(const RAWMOUSE* rmouse)
static inline void RI_ProcessKeyboard(const RAWKEYBOARD* rkbd) static inline void RI_ProcessKeyboard(const RAWKEYBOARD* rkbd)
{ {
uint8_t key = rkbd->MakeCode, VKey = rkbd->VKey; uint8_t key = rkbd->MakeCode, VKey = rkbd->VKey;
uint8_t buf[2], i;
// for some reason rkbd->MakeCode is wrong for these // for some reason rkbd->MakeCode is wrong for these
// even though rkbd->VKey is right... // even though rkbd->VKey is right...
@ -122,18 +123,36 @@ static inline void RI_ProcessKeyboard(const RAWKEYBOARD* rkbd)
key = sc_PgDn; break; key = sc_PgDn; break;
case VK_RETURN: case VK_RETURN:
if (rkbd->Flags & RI_KEY_E0) key = sc_kpad_Enter; break; if (rkbd->Flags & RI_KEY_E0) key = sc_kpad_Enter; break;
} case VK_PAUSE:
KeyboardState[VKey] = 1 - (rkbd->Flags & RI_KEY_BREAK);
if (rkbd->Flags & RI_KEY_BREAK) return;
KeyboardState[VKey] &= 0xfe; SetKey(sc_Pause, 1);
KeyboardState[VKey] |= 1 - (rkbd->Flags & RI_KEY_BREAK);
if (OSD_HandleScanCode(key, (rkbd->Flags & RI_KEY_BREAK) == 0))
{
SetKey(key, (rkbd->Flags & RI_KEY_BREAK) == 0);
if (keypresscallback) if (keypresscallback)
keypresscallback(key, (rkbd->Flags & RI_KEY_BREAK) == 0); keypresscallback(sc_Pause, 1);
return;
} }
KeyboardState[VKey] = 1 - (rkbd->Flags & RI_KEY_BREAK);
if (OSD_HandleScanCode(key, KeyboardState[VKey] != 0))
{
SetKey(key, KeyboardState[VKey] != 0);
if (keypresscallback)
keypresscallback(key, KeyboardState[VKey] != 0);
}
if (rkbd->Flags & RI_KEY_BREAK) return;
if (((keyasciififoend+1)&(KEYFIFOSIZ-1)) == keyasciififoplc) return;
if ((keyasciififoend - keyasciififoplc) > 0) return;
if (ToAscii(VKey, key, &KeyboardState[0], (LPWORD)&buf[0], 0) != 1) return;
if ((OSD_OSDKey() < 128) && (Btolower(scantoasc[OSD_OSDKey()]) == Btolower(buf[0]))) return;
if (OSD_HandleChar(buf[0]) == 0) return;
keyasciififo[keyasciififoend] = buf[0];
keyasciififoend = ((keyasciififoend+1)&(KEYFIFOSIZ-1));
} }
// keyboard is always captured regardless of what we tell this function // keyboard is always captured regardless of what we tell this function
@ -148,8 +167,8 @@ int32_t RI_CaptureInput(int32_t grab, HWND target)
raw[1].usUsagePage = 0x01; raw[1].usUsagePage = 0x01;
raw[1].usUsage = 0x06; raw[1].usUsage = 0x06;
raw[1].dwFlags = 0; raw[1].dwFlags = RIDEV_NOLEGACY;
raw[1].hwndTarget = NULL; raw[1].hwndTarget = target;
mousegrab = grab; mousegrab = grab;
@ -161,16 +180,16 @@ void RI_PollDevices()
int32_t i; int32_t i;
MSG msg; MSG msg;
if (!init_done) if (!rawinput_started)
{ {
if (RI_CaptureInput(1, (HWND)win_gethwnd())) if (RI_CaptureInput(1, (HWND)win_gethwnd()))
return; return;
rawinput_started = 1;
init_done = 1;
} }
// snapshot the whole keyboard state so we can translate key presses into ascii later
for (i = 0; i < 256; i++) for (i = 0; i < 256; i++)
KeyboardState[i] = (KeyboardState[i] << 1) | (1 & KeyboardState[i]); KeyboardState[i] = GetAsyncKeyState(i) >> 8;
MWheel = 0; MWheel = 0;

View file

@ -86,7 +86,7 @@ static BOOL InitDirectInput(void);
static void UninitDirectInput(void); static void UninitDirectInput(void);
static void GetKeyNames(void); static void GetKeyNames(void);
static void AcquireInputDevices(char acquire, int8_t device); static void AcquireInputDevices(char acquire, int8_t device);
static inline void DI_ProcessDevices(void); static inline void DI_PollJoysticks(void);
static int32_t SetupDirectDraw(int32_t width, int32_t height); static int32_t SetupDirectDraw(int32_t width, int32_t height);
static void UninitDIB(void); static void UninitDIB(void);
static int32_t SetupDIB(int32_t width, int32_t height); static int32_t SetupDIB(int32_t width, int32_t height);
@ -97,6 +97,8 @@ static BOOL RegisterWindowClass(void);
static BOOL CreateAppWindow(int32_t modenum); static BOOL CreateAppWindow(int32_t modenum);
static void DestroyAppWindow(void); static void DestroyAppWindow(void);
static BOOL bDInputInited = FALSE;
// video // video
static int32_t desktopxdim=0,desktopydim=0,desktopbpp=0,modesetusing=-1; static int32_t desktopxdim=0,desktopydim=0,desktopbpp=0,modesetusing=-1;
int32_t xres=-1, yres=-1, fullscreen=0, bpp=0, bytesperline=0, imageSize=0; int32_t xres=-1, yres=-1, fullscreen=0, bpp=0, bytesperline=0, imageSize=0;
@ -663,7 +665,9 @@ int32_t handleevents(void)
//if (frameplace && fullscreen) printf("Offscreen buffer is locked!\n"); //if (frameplace && fullscreen) printf("Offscreen buffer is locked!\n");
RI_PollDevices(); RI_PollDevices();
DI_ProcessDevices();
if (bDInputInited)
DI_PollJoysticks();
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{ {
@ -693,7 +697,6 @@ int32_t handleevents(void)
static HMODULE hDInputDLL = NULL; static HMODULE hDInputDLL = NULL;
static LPDIRECTINPUT7A lpDI = NULL; static LPDIRECTINPUT7A lpDI = NULL;
static LPDIRECTINPUTDEVICE7A lpDID[NUM_INPUTS] = { NULL }; static LPDIRECTINPUTDEVICE7A lpDID[NUM_INPUTS] = { NULL };
static BOOL bDInputInited = FALSE;
#define INPUT_BUFFER_SIZE 32 #define INPUT_BUFFER_SIZE 32
static GUID guidDevs[NUM_INPUTS]; static GUID guidDevs[NUM_INPUTS];
@ -1341,7 +1344,7 @@ static void AcquireInputDevices(char acquire, int8_t device)
// //
// ProcessInputDevices() -- processes the input devices // ProcessInputDevices() -- processes the input devices
// //
static inline void DI_ProcessDevices(void) static inline void DI_PollJoysticks(void)
{ {
DWORD i, dwElements = INPUT_BUFFER_SIZE, ev = 0; DWORD i, dwElements = INPUT_BUFFER_SIZE, ev = 0;
HRESULT result; HRESULT result;
@ -1355,6 +1358,7 @@ static inline void DI_ProcessDevices(void)
if (*devicedef[t].did) if (*devicedef[t].did)
{ {
result = IDirectInputDevice7_Poll(*devicedef[t].did); result = IDirectInputDevice7_Poll(*devicedef[t].did);
if (result == DIERR_INPUTLOST || result == DIERR_NOTACQUIRED) if (result == DIERR_INPUTLOST || result == DIERR_NOTACQUIRED)
{ {
if (SUCCEEDED(IDirectInputDevice7_Acquire(*devicedef[t].did))) if (SUCCEEDED(IDirectInputDevice7_Acquire(*devicedef[t].did)))
@ -1362,10 +1366,7 @@ static inline void DI_ProcessDevices(void)
devacquired[t] = 1; devacquired[t] = 1;
IDirectInputDevice7_Poll(*devicedef[t].did); IDirectInputDevice7_Poll(*devicedef[t].did);
} }
else else devacquired[t] = 0;
{
devacquired[t] = 0;
}
} }
if (devacquired[t]) if (devacquired[t])
@ -1383,52 +1384,53 @@ static inline void DI_ProcessDevices(void)
// to be read and input events processed // to be read and input events processed
ev = MsgWaitForMultipleObjects(numdevs, waithnds, FALSE, 0, 0); ev = MsgWaitForMultipleObjects(numdevs, waithnds, FALSE, 0, 0);
if ((ev >= WAIT_OBJECT_0) && (ev < (WAIT_OBJECT_0+numdevs))) if (ev < WAIT_OBJECT_0 || ev > WAIT_OBJECT_0+numdevs)
return;
switch (idevnums[ev - WAIT_OBJECT_0])
{ {
switch (idevnums[ev - WAIT_OBJECT_0]) case JOYSTICK:
if (!lpDID[JOYSTICK]) break;
result = IDirectInputDevice7_GetDeviceData(lpDID[JOYSTICK], sizeof(DIDEVICEOBJECTDATA),
(LPDIDEVICEOBJECTDATA)&didod, &dwElements, 0);
if (result != DI_OK || !dwElements) break;
for (i=dwElements-1; i>=0; i--)
{ {
case JOYSTICK: // joystick int32_t j;
if (!lpDID[JOYSTICK]) break;
result = IDirectInputDevice7_GetDeviceData(lpDID[JOYSTICK], sizeof(DIDEVICEOBJECTDATA), // check axes
(LPDIDEVICEOBJECTDATA)&didod, &dwElements, 0); for (j=0; j<joynumaxes; j++)
if (result == DI_OK)
{ {
int32_t j; if (axisdefs[j].ofs != didod[i].dwOfs) continue;
joyaxis[j] = didod[i].dwData - 32767;
for (i=0; i<dwElements; i++) break;
{ }
// check axes if (j<joynumaxes) continue;
for (j=0; j<joynumaxes; j++)
{ // check buttons
if (axisdefs[j].ofs != didod[i].dwOfs) continue; for (j=0; j<joynumbuttons; j++)
joyaxis[j] = didod[i].dwData - 32767; {
break; if (buttondefs[j].ofs != didod[i].dwOfs) continue;
} if (didod[i].dwData & 0x80) joyb |= (1<<j);
if (j<joynumaxes) continue; else joyb &= ~(1<<j);
if (joypresscallback)
// check buttons joypresscallback(j+1, (didod[i].dwData & 0x80)==0x80);
for (j=0; j<joynumbuttons; j++) break;
{ }
if (buttondefs[j].ofs != didod[i].dwOfs) continue; if (j<joynumbuttons) continue;
if (didod[i].dwData & 0x80) joyb |= (1<<j);
else joyb &= ~(1<<j); // check hats
if (joypresscallback) for (j=0; j<joynumhats; j++)
joypresscallback(j+1, (didod[i].dwData & 0x80)==0x80); {
break; if (hatdefs[j].ofs != didod[i].dwOfs) continue;
} joyhat[j] = didod[i].dwData;
if (j<joynumbuttons) continue; break;
// check hats
for (j=0; j<joynumhats; j++)
{
if (hatdefs[j].ofs != didod[i].dwOfs) continue;
joyhat[j] = didod[i].dwData;
break;
}
}
} }
break;
} }
break;
} }
} }
@ -3794,37 +3796,6 @@ static LRESULT CALLBACK WndProcCallback(HWND hWnd, UINT uMsg, WPARAM wParam, LPA
quitevent = 1; quitevent = 1;
return 0; return 0;
case WM_KEYDOWN:
case WM_KEYUP:
// pause sucks. I read that apparently it doesn't work the same everwhere
// with DirectInput but it does with Windows messages. Oh well.
if (wParam == VK_PAUSE && (lParam & 0x80000000l))
{
SetKey(0x59, 1);
if (keypresscallback)
keypresscallback(0x59, 1);
}
break;
// JBF 20040115: Alt-F4 upsets us, so drop all system keys on their asses
case WM_SYSKEYDOWN:
case WM_SYSKEYUP:
return 0;
case WM_CHAR:
if (((keyasciififoend+1)&(KEYFIFOSIZ-1)) == keyasciififoplc) return 0;
if ((keyasciififoend - keyasciififoplc) > 0) return 0;
if ((OSD_OSDKey() < 128) && (Btolower(scantoasc[OSD_OSDKey()]) == Btolower((uint8_t)wParam))) return 0;
if (!OSD_HandleChar((uint8_t)wParam)) return 0;
keyasciififo[keyasciififoend] = (uint8_t)wParam;
keyasciififoend = ((keyasciififoend+1)&(KEYFIFOSIZ-1));
//OSD_Printf("WM_CHAR %d, %d-%d\n",wParam,keyasciififoplc,keyasciififoend);
return 0;
case WM_HOTKEY:
return 0;
case WM_ENTERMENULOOP: case WM_ENTERMENULOOP:
case WM_ENTERSIZEMOVE: case WM_ENTERSIZEMOVE:
AcquireInputDevices(0,-1); AcquireInputDevices(0,-1);

View file

@ -237,7 +237,6 @@ void G_PlayAnim(const char *fn,char t)
ANIM_LoadAnim(animbuf); ANIM_LoadAnim(animbuf);
numframes = ANIM_NumFrames(); numframes = ANIM_NumFrames();
animpal = ANIM_GetPalette(); animpal = ANIM_GetPalette();
//setpalette(0L,256L,tempbuf); //setpalette(0L,256L,tempbuf);
@ -251,28 +250,35 @@ void G_PlayAnim(const char *fn,char t)
ototalclock = totalclock + 10; ototalclock = totalclock + 10;
frametime = totalclock;
for (i=1; i<numframes; i++) for (i=1; i<numframes; i++)
{ {
if ((i > 4) && (totalclock > frametime + 60)) if (i > 4 && totalclock > frametime + 60)
{ {
OSD_Printf("WARNING: slowdown in %s, skipping playback\n",fn); OSD_Printf("WARNING: slowdown in %s, skipping playback\n",fn);
goto ENDOFANIMLOOP; goto ENDOFANIMLOOP;
} }
frametime = totalclock; frametime = totalclock;
waloff[TILE_ANIM] = (intptr_t)ANIM_DrawFrame(i);
invalidatetile(TILE_ANIM, 0, 1<<4); // JBF 20031228
while (totalclock < ototalclock) while (totalclock < ototalclock)
{ {
if (KB_KeyWaiting() || MOUSE_GetButtons()&LEFT_MOUSE)
goto ENDOFANIMLOOP;
handleevents(); handleevents();
Net_GetPackets(); Net_GetPackets();
if (KB_KeyWaiting() || MOUSE_GetButtons()&LEFT_MOUSE)
goto ENDOFANIMLOOP;
if (g_restorePalette == 1) if (g_restorePalette == 1)
{ {
P_SetGamePalette(g_player[myconnectindex].ps,animpal,0); P_SetGamePalette(g_player[myconnectindex].ps,animpal,0);
g_restorePalette = 0; g_restorePalette = 0;
} }
idle();
rotatesprite(0<<16,0<<16,65536L,512,TILE_ANIM,0,0,2+4+8+16+64, 0,0,xdim-1,ydim-1);
nextpage();
} }
if (t == 10) ototalclock += 14; if (t == 10) ototalclock += 14;
@ -285,11 +291,6 @@ void G_PlayAnim(const char *fn,char t)
else if (ud.volume_number == 1) ototalclock += 18; else if (ud.volume_number == 1) ototalclock += 18;
else ototalclock += 10; else ototalclock += 10;
waloff[TILE_ANIM] = (intptr_t)ANIM_DrawFrame(i);
invalidatetile(TILE_ANIM, 0, 1<<4); // JBF 20031228
rotatesprite(0<<16,0<<16,65536L,512,TILE_ANIM,0,0,2+4+8+16+64, 0,0,xdim-1,ydim-1);
nextpage();
if (t == 8) endanimvol41(i); if (t == 8) endanimvol41(i);
else if (t == 10) endanimvol42(i); else if (t == 10) endanimvol42(i);
else if (t == 11) endanimvol43(i); else if (t == 11) endanimvol43(i);
@ -301,7 +302,6 @@ void G_PlayAnim(const char *fn,char t)
} }
ENDOFANIMLOOP: ENDOFANIMLOOP:
#if defined(POLYMOST) && defined(USE_OPENGL) #if defined(POLYMOST) && defined(USE_OPENGL)
gltexfiltermode = ogltexfiltermode; gltexfiltermode = ogltexfiltermode;
gltexapplyprops(); gltexapplyprops();

View file

@ -1026,6 +1026,8 @@ void CONFIG_WriteBinds(void) // save binds and aliases to <cfgname>_settings.cfg
fprintf(fp,"// these settings take precedence over your main cfg file\n"); fprintf(fp,"// these settings take precedence over your main cfg file\n");
fprintf(fp,"// do not modify if you lack common sense\n"); fprintf(fp,"// do not modify if you lack common sense\n");
fprintf(fp,"unbindall\n");
for (i=0; i<MAXBOUNDKEYS; i++) for (i=0; i<MAXBOUNDKEYS; i++)
if (KeyBindings[i].cmd[0] && KeyBindings[i].key) if (KeyBindings[i].cmd[0] && KeyBindings[i].key)
fprintf(fp,"bind \"%s\"%s \"%s\"\n",KeyBindings[i].key,KeyBindings[i].repeat?"":" norepeat",KeyBindings[i].cmd); fprintf(fp,"bind \"%s\"%s \"%s\"\n",KeyBindings[i].key,KeyBindings[i].repeat?"":" norepeat",KeyBindings[i].cmd);

View file

@ -45,6 +45,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "crc32.h" #include "crc32.h"
#include "util_lib.h" #include "util_lib.h"
#include "hightile.h" #include "hightile.h"
#include "control.h"
#include "enet/enet.h" #include "enet/enet.h"
#include "quicklz.h" #include "quicklz.h"
@ -96,6 +97,7 @@ static int32_t g_noMusic = 0;
static char *CommandMap = NULL; static char *CommandMap = NULL;
static char *CommandName = NULL; static char *CommandName = NULL;
int32_t g_forceWeaponChoice = 0; int32_t g_forceWeaponChoice = 0;
static struct strllist static struct strllist
{ {
struct strllist *next; struct strllist *next;
@ -549,7 +551,7 @@ void G_HandleSpecialKeys(void)
CONTROL_GetInput(&noshareinfo); CONTROL_GetInput(&noshareinfo);
} }
CONTROL_ProcessBinds(); // CONTROL_ProcessBinds();
if (ALT_IS_PRESSED && KB_KeyPressed(sc_Enter)) if (ALT_IS_PRESSED && KB_KeyPressed(sc_Enter))
{ {
@ -2240,7 +2242,6 @@ void Net_UpdateClients(void)
void faketimerhandler(void) void faketimerhandler(void)
{ {
int32_t i; int32_t i;
input_t *nsyn;
if (g_quickExit == 0 && KB_KeyPressed(sc_LeftControl) && KB_KeyPressed(sc_LeftAlt) && KB_KeyPressed(sc_Delete)) if (g_quickExit == 0 && KB_KeyPressed(sc_LeftControl) && KB_KeyPressed(sc_LeftAlt) && KB_KeyPressed(sc_Delete))
{ {
@ -2256,35 +2257,7 @@ void faketimerhandler(void)
Net_GetPackets(); Net_GetPackets();
getinput(myconnectindex);
avg.fvel += loc.fvel;
avg.svel += loc.svel;
avg.avel += loc.avel;
avg.horz += loc.horz;
avg.bits |= loc.bits;
avg.extbits |= loc.extbits;
nsyn = &inputfifo[0][myconnectindex];
nsyn[0].fvel = avg.fvel;
nsyn[0].svel = avg.svel;
nsyn[0].avel = avg.avel;
nsyn[0].horz = avg.horz;
nsyn[0].bits = avg.bits;
nsyn[0].extbits = avg.extbits;
avg.fvel = avg.svel = avg.avel = avg.horz = avg.bits = avg.extbits = 0;
g_player[myconnectindex].movefifoend++; g_player[myconnectindex].movefifoend++;
if (numplayers < 2)
{
if ((g_netServer || ud.multimode > 1) && ud.playerai)
TRAVERSE_CONNECT(i)
if (i != myconnectindex)
{
//clearbufbyte(&inputfifo[g_player[i].movefifoend&(MOVEFIFOSIZ-1)][i],sizeof(input_t),0L);
computergetinput(i,&inputfifo[0][i]);
}
}
} }
extern int32_t cacnum; extern int32_t cacnum;
@ -2701,22 +2674,22 @@ static void G_DrawInventory(DukePlayer_t *p)
{ {
switch (n&(1<<j)) switch (n&(1<<j))
{ {
case 1: case 1:
rotatesprite(xoff<<16,y<<16,65536L,0,FIRSTAID_ICON,0,0,2+16,windowx1,windowy1,windowx2,windowy2); rotatesprite(xoff<<16,y<<16,65536L,0,FIRSTAID_ICON,0,0,2+16,windowx1,windowy1,windowx2,windowy2);
break; break;
case 2: case 2:
rotatesprite((xoff+1)<<16,y<<16,65536L,0,STEROIDS_ICON,0,0,2+16,windowx1,windowy1,windowx2,windowy2); rotatesprite((xoff+1)<<16,y<<16,65536L,0,STEROIDS_ICON,0,0,2+16,windowx1,windowy1,windowx2,windowy2);
break; break;
case 4: case 4:
rotatesprite((xoff+2)<<16,y<<16,65536L,0,HOLODUKE_ICON,0,0,2+16,windowx1,windowy1,windowx2,windowy2); rotatesprite((xoff+2)<<16,y<<16,65536L,0,HOLODUKE_ICON,0,0,2+16,windowx1,windowy1,windowx2,windowy2);
break; break;
case 8: case 8:
rotatesprite(xoff<<16,y<<16,65536L,0,JETPACK_ICON,0,0,2+16,windowx1,windowy1,windowx2,windowy2); rotatesprite(xoff<<16,y<<16,65536L,0,JETPACK_ICON,0,0,2+16,windowx1,windowy1,windowx2,windowy2);
break; break;
case 16: case 16:
rotatesprite(xoff<<16,y<<16,65536L,0,HEAT_ICON,0,0,2+16,windowx1,windowy1,windowx2,windowy2); rotatesprite(xoff<<16,y<<16,65536L,0,HEAT_ICON,0,0,2+16,windowx1,windowy1,windowx2,windowy2);
break; break;
case 32: case 32:
rotatesprite(xoff<<16,y<<16,65536L,0,AIRTANK_ICON,0,0,2+16,windowx1,windowy1,windowx2,windowy2); rotatesprite(xoff<<16,y<<16,65536L,0,AIRTANK_ICON,0,0,2+16,windowx1,windowy1,windowx2,windowy2);
break; break;
case 64: case 64:
@ -2764,12 +2737,6 @@ static void G_DrawStatusBar(int32_t snum)
if (ss < 4) return; if (ss < 4) return;
/*
if (g_player[snum].ps->gm&MODE_MENU)
if ((g_currentMenu >= 400 && g_currentMenu <= 405))
return;
*/
if (getrendermode() >= 3) pus = NUMPAGES; // JBF 20040101: always redraw in GL if (getrendermode() >= 3) pus = NUMPAGES; // JBF 20040101: always redraw in GL
if ((g_netServer || (g_netServer || ud.multimode > 1)) && (GametypeFlags[ud.coop] & GAMETYPE_FRAGBAR)) if ((g_netServer || (g_netServer || ud.multimode > 1)) && (GametypeFlags[ud.coop] & GAMETYPE_FRAGBAR))
@ -8929,7 +8896,7 @@ GAME_STATIC void G_HandleLocalKeys(void)
int32_t i,ch; int32_t i,ch;
int32_t j; int32_t j;
CONTROL_ProcessBinds(); // CONTROL_ProcessBinds();
if (ud.recstat == 2) if (ud.recstat == 2)
{ {
@ -10489,7 +10456,7 @@ static void G_DisplayLogo(void)
flushperms(); flushperms();
nextpage(); nextpage();
Bsprintf(tempbuf,"%s - " APPNAME,g_gameNamePtr); Bsprintf(tempbuf, "%s - " APPNAME, g_gameNamePtr);
wm_setapptitle(tempbuf); wm_setapptitle(tempbuf);
S_StopMusic(); S_StopMusic();
@ -10532,8 +10499,9 @@ static void G_DisplayLogo(void)
nextpage(); nextpage();
fadepaltile(0,0,0, 63,0,-7,DREALMS); fadepaltile(0,0,0, 63,0,-7,DREALMS);
totalclock = 0; totalclock = 0;
while (totalclock < (120*7) && !KB_KeyWaiting() && !MOUSE_GetButtons()&LEFT_MOUSE) while (totalclock < (120*7) && !KB_KeyWaiting() && !MOUSE_GetButtons()&LEFT_MOUSE && !BUTTON(gamefunc_Fire) && !BUTTON(gamefunc_Open))
{ {
rotatesprite(0,0,65536L,0,DREALMS,0,0,2+8+16+64, 0,0,xdim-1,ydim-1);
handleevents(); handleevents();
Net_GetPackets(); Net_GetPackets();
if (g_restorePalette) if (g_restorePalette)
@ -10541,6 +10509,7 @@ static void G_DisplayLogo(void)
P_SetGamePalette(g_player[myconnectindex].ps,g_player[myconnectindex].ps->palette,0); P_SetGamePalette(g_player[myconnectindex].ps,g_player[myconnectindex].ps->palette,0);
g_restorePalette = 0; g_restorePalette = 0;
} }
nextpage();
} }
fadepaltile(0,0,0, 0,64,7,DREALMS); fadepaltile(0,0,0, 0,64,7,DREALMS);
} }
@ -10579,6 +10548,7 @@ static void G_DisplayLogo(void)
rotatesprite(160<<16,(104)<<16,60<<10,0,DUKENUKEM,0,0,2+8,0,0,xdim-1,ydim-1); rotatesprite(160<<16,(104)<<16,60<<10,0,DUKENUKEM,0,0,2+8,0,0,xdim-1,ydim-1);
} }
else soundanm = 1; else soundanm = 1;
if (logoflags & LOGO_THREEDEE) if (logoflags & LOGO_THREEDEE)
{ {
if (totalclock > 220 && totalclock < (220+30)) if (totalclock > 220 && totalclock < (220+30))
@ -10596,6 +10566,7 @@ static void G_DisplayLogo(void)
rotatesprite(160<<16,(129)<<16,30<<11,0,THREEDEE,0,0,2+8,0,0,xdim-1,ydim-1); rotatesprite(160<<16,(129)<<16,30<<11,0,THREEDEE,0,0,2+8,0,0,xdim-1,ydim-1);
} }
else soundanm = 2; else soundanm = 2;
if (PLUTOPAK && (logoflags & LOGO_PLUTOPAKSPRITE)) if (PLUTOPAK && (logoflags & LOGO_PLUTOPAKSPRITE))
{ {
// JBF 20030804 // JBF 20030804
@ -10618,6 +10589,7 @@ static void G_DisplayLogo(void)
rotatesprite(160<<16,(151)<<16,30<<11,0,PLUTOPAKSPRITE+1,0,0,2+8,0,0,xdim-1,ydim-1); rotatesprite(160<<16,(151)<<16,30<<11,0,PLUTOPAKSPRITE+1,0,0,2+8,0,0,xdim-1,ydim-1);
} }
} }
VM_OnEvent(EVENT_LOGO, -1, screenpeek, -1); VM_OnEvent(EVENT_LOGO, -1, screenpeek, -1);
handleevents(); handleevents();
Net_GetPackets(); Net_GetPackets();
@ -11058,7 +11030,7 @@ void G_BackToMenu(void)
g_player[myconnectindex].ps->gm = MODE_MENU; g_player[myconnectindex].ps->gm = MODE_MENU;
ChangeToMenu(0); ChangeToMenu(0);
KB_FlushKeyboardQueue(); KB_FlushKeyboardQueue();
Bsprintf(tempbuf,APPNAME " - %s",g_gameNamePtr); Bsprintf(tempbuf, "%s - " APPNAME, g_gameNamePtr);
wm_setapptitle(tempbuf); wm_setapptitle(tempbuf);
} }
@ -11586,7 +11558,7 @@ CLEAN_DIRECTORY:
// gotta set the proper title after we compile the CONs if this is the full version // gotta set the proper title after we compile the CONs if this is the full version
Bsprintf(tempbuf,"%s - " APPNAME,g_gameNamePtr); Bsprintf(tempbuf, "%s - " APPNAME, g_gameNamePtr);
wm_setapptitle(tempbuf); wm_setapptitle(tempbuf);
if (g_scriptDebug) if (g_scriptDebug)
@ -11839,22 +11811,41 @@ MAIN_LOOP_RESTART:
static uint32_t nextrender = 0, next = 0; static uint32_t nextrender = 0, next = 0;
uint32_t j; uint32_t j;
if (handleevents() && quitevent)
{
KB_KeyDown[sc_Escape] = 1;
quitevent = 0;
}
// only allow binds to function if the player is actually in a game (not in a menu, typing, et cetera) or demo // only allow binds to function if the player is actually in a game (not in a menu, typing, et cetera) or demo
bindsenabled = g_player[myconnectindex].ps->gm & (MODE_GAME|MODE_DEMO); bindsenabled = g_player[myconnectindex].ps->gm & (MODE_GAME|MODE_DEMO);
// menus now call handleevents() from probe_() CONTROL_ProcessBinds();
while (!(g_player[myconnectindex].ps->gm & (MODE_MENU|MODE_DEMO)) && ready2send && totalclock >= ototalclock+TICSPERFRAME) OSD_DispatchQueued();
{
if (handleevents() && quitevent)
{
// JBF
KB_KeyDown[sc_Escape] = 1;
quitevent = 0;
}
OSD_DispatchQueued(); if (!(g_player[myconnectindex].ps->gm & (MODE_MENU|MODE_DEMO)) && totalclock >= ototalclock+TICSPERFRAME)
G_HandleLocalKeys(); {
faketimerhandler(); faketimerhandler();
getinput(myconnectindex);
G_HandleLocalKeys();
avg.fvel += loc.fvel;
avg.svel += loc.svel;
avg.avel += loc.avel;
avg.horz += loc.horz;
avg.bits |= loc.bits;
avg.extbits |= loc.extbits;
Bmemcpy(&inputfifo[0][myconnectindex], &avg, sizeof(input_t));
Bmemset(&avg, 0, sizeof(input_t));
if ((g_netServer || ud.multimode > 1) && ud.playerai)
TRAVERSE_CONNECT(i)
if (i != myconnectindex)
{
//clearbufbyte(&inputfifo[g_player[i].movefifoend&(MOVEFIFOSIZ-1)][i],sizeof(input_t),0L);
computergetinput(i,&inputfifo[0][i]);
}
} }
if (((ud.show_help == 0 && (g_player[myconnectindex].ps->gm&MODE_MENU) != MODE_MENU) || ud.recstat == 2 || (g_netServer || ud.multimode > 1)) && if (((ud.show_help == 0 && (g_player[myconnectindex].ps->gm&MODE_MENU) != MODE_MENU) || ud.recstat == 2 || (g_netServer || ud.multimode > 1)) &&
@ -11871,8 +11862,7 @@ MAIN_LOOP_RESTART:
case 2: goto MAIN_LOOP_RESTART; case 2: goto MAIN_LOOP_RESTART;
} }
} }
else if (g_netClient && g_multiMapState)
if (g_netClient && g_multiMapState)
{ {
for (i=g_gameVarCount-1; i>=0; i--) for (i=g_gameVarCount-1; i>=0; i--)
{ {
@ -11887,13 +11877,12 @@ MAIN_LOOP_RESTART:
if (next) if (next)
{ {
next--;
if (ud.statusbarmode == 1 && (ud.statusbarscale == 100 || !getrendermode())) if (ud.statusbarmode == 1 && (ud.statusbarscale == 100 || !getrendermode()))
{ {
ud.statusbarmode = 0; ud.statusbarmode = 0;
G_UpdateScreenArea(); G_UpdateScreenArea();
} }
next--;
nextpage(); nextpage();
} }
@ -11906,7 +11895,8 @@ MAIN_LOOP_RESTART:
nextrender += g_frameDelay; nextrender += g_frameDelay;
if ((ud.show_help == 0 && (!g_netServer && ud.multimode < 2) && !(g_player[myconnectindex].ps->gm&MODE_MENU)) || (g_netServer || ud.multimode > 1) || ud.recstat == 2) if ((ud.show_help == 0 && (!g_netServer && ud.multimode < 2) && !(g_player[myconnectindex].ps->gm&MODE_MENU)) ||
(g_netServer || ud.multimode > 1) || ud.recstat == 2)
i = min(max((totalclock-ototalclock)*(65536L/TICSPERFRAME),0),65536); i = min(max((totalclock-ototalclock)*(65536L/TICSPERFRAME),0),65536);
else else
i = 65536; i = 65536;
@ -12836,7 +12826,7 @@ void G_BonusScreen(int32_t bonusonly)
350, 380,VICTORY1+8,86,59 350, 380,VICTORY1+8,86,59
}; };
Bsprintf(tempbuf,"%s - " APPNAME,g_gameNamePtr); Bsprintf(tempbuf, "%s - " APPNAME, g_gameNamePtr);
wm_setapptitle(tempbuf); wm_setapptitle(tempbuf);
if (ud.volume_number == 0 && ud.last_level == 8 && boardfilename[0]) if (ud.volume_number == 0 && ud.last_level == 8 && boardfilename[0])

View file

@ -117,13 +117,9 @@ extern "C" {
#define BASECONTROLSCALEVALUE (1<<16) #define BASECONTROLSCALEVALUE (1<<16)
// MAX mouse sensitivity scale
#define MAXMOUSESENSITIVITY (1<<17)
// DEFAULT mouse sensitivity scale // DEFAULT mouse sensitivity scale
#define DEFAULTMOUSESENSITIVITY 18 #define DEFAULTMOUSESENSITIVITY 7
enum enum
{ {

View file

@ -15,7 +15,6 @@ struct grpfile grpfiles[numgrpfiles] =
{ "Duke Nukem 3D: Atomic Edition", 0xFD3DCFF1, 44356548, GAMEDUKE, NULL }, { "Duke Nukem 3D: Atomic Edition", 0xFD3DCFF1, 44356548, GAMEDUKE, NULL },
{ "Duke Nukem 3D Shareware", 0x983AD923, 11035779, GAMEDUKE, NULL }, { "Duke Nukem 3D Shareware", 0x983AD923, 11035779, GAMEDUKE, NULL },
{ "Duke Nukem 3D Mac Shareware", 0xC5F71561, 10444391, GAMEDUKE, NULL }, { "Duke Nukem 3D Mac Shareware", 0xC5F71561, 10444391, GAMEDUKE, NULL },
// { "Duke Nukem 3D Mac", 0x00000000, 0, GAMEDUKE, NULL },
{ "NAM", 0x75C1F07B, 43448927, GAMENAM, NULL }, { "NAM", 0x75C1F07B, 43448927, GAMENAM, NULL },
{ "Napalm", 0x3DE1589A, 44365728, GAMENAM, NULL }, { "Napalm", 0x3DE1589A, 44365728, GAMENAM, NULL },
{ "WW2GI", 0x907B82BF, 77939508, GAMEWW2, NULL }, { "WW2GI", 0x907B82BF, 77939508, GAMEWW2, NULL },

View file

@ -754,93 +754,7 @@ void CONTROL_ButtonFunctionState(int32_t *p1)
while (i--); while (i--);
} }
} }
/*
void CONTROL_GetUserInput( UserInput *info )
{
ControlInfo ci;
CONTROL_PollDevices( &ci );
info->dir = dir_None;
// checks if CONTROL_UserInputDelay is too far in the future due to clock skew?
if (GetTime() + ((ticrate * USERINPUTDELAY) / 1000) < CONTROL_UserInputDelay)
CONTROL_UserInputDelay = -1;
if (GetTime() >= CONTROL_UserInputDelay) {
if (CONTROL_MouseAxes[1].digital == -1)
info->dir = dir_North;
else if (CONTROL_MouseAxes[1].digital == 1)
info->dir = dir_South;
else if (CONTROL_MouseAxes[0].digital == -1)
info->dir = dir_West;
else if (CONTROL_MouseAxes[0].digital == 1)
info->dir = dir_East;
if (CONTROL_JoyAxes[1].digital == -1)
info->dir = dir_North;
else if (CONTROL_JoyAxes[1].digital == 1)
info->dir = dir_South;
else if (CONTROL_JoyAxes[0].digital == -1)
info->dir = dir_West;
else if (CONTROL_JoyAxes[0].digital == 1)
info->dir = dir_East;
}
info->button0 = CONTROL_MouseButtonState[0] | CONTROL_JoyButtonState[0];
info->button1 = CONTROL_MouseButtonState[1] | CONTROL_JoyButtonState[1];
if (KB_KeyDown[sc_kpad_8] || KB_KeyDown[sc_UpArrow])
info->dir = dir_North;
else if (KB_KeyDown[sc_kpad_2] || KB_KeyDown[sc_DownArrow])
info->dir = dir_South;
else if (KB_KeyDown[sc_kpad_4] || KB_KeyDown[sc_LeftArrow])
info->dir = dir_West;
else if (KB_KeyDown[sc_kpad_6] || KB_KeyDown[sc_RightArrow])
info->dir = dir_East;
if (KB_KeyDown[BUTTON0_SCAN_1] || KB_KeyDown[BUTTON0_SCAN_2] || KB_KeyDown[BUTTON0_SCAN_3])
info->button0 = 1;
if (KB_KeyDown[BUTTON1_SCAN])
info->button1 = 1;
if (CONTROL_UserInputCleared[1]) {
if (!info->button0)
CONTROL_UserInputCleared[1] = false;
else
info->button0 = false;
}
if (CONTROL_UserInputCleared[2]) {
if (!info->button1)
CONTROL_UserInputCleared[2] = false;
else
info->button1 = false;
}
}
void CONTROL_ClearUserInput( UserInput *info )
{
switch (info->dir) {
case dir_North:
case dir_South:
case dir_East:
case dir_West:
CONTROL_UserInputCleared[0] = true;
CONTROL_UserInputDelay = GetTime() + ((ticrate * USERINPUTDELAY) / 1000);
switch (info->dir) {
case dir_North: KB_KeyDown[sc_UpArrow] = KB_KeyDown[sc_kpad_8] = 0; break;
case dir_South: KB_KeyDown[sc_DownArrow] = KB_KeyDown[sc_kpad_2] = 0; break;
case dir_East: KB_KeyDown[sc_LeftArrow] = KB_KeyDown[sc_kpad_4] = 0; break;
case dir_West: KB_KeyDown[sc_RightArrow] = KB_KeyDown[sc_kpad_6] = 0; break;
default: break;
}
break;
default: break;
}
if (info->button0) CONTROL_UserInputCleared[1] = true;
if (info->button1) CONTROL_UserInputCleared[2] = true;
}
*/
void CONTROL_ClearButton(int32_t whichbutton) void CONTROL_ClearButton(int32_t whichbutton)
{ {
if (CONTROL_CheckRange(whichbutton)) return; if (CONTROL_CheckRange(whichbutton)) return;
@ -848,38 +762,32 @@ void CONTROL_ClearButton(int32_t whichbutton)
CONTROL_Flags[whichbutton].cleared = TRUE; CONTROL_Flags[whichbutton].cleared = TRUE;
} }
inline void CONTROL_ProcessBinds(void) void CONTROL_ProcessBinds(void)
{ {
int32_t i=MAXBOUNDKEYS-1;
if (!bindsenabled) if (!bindsenabled)
return; return;
do
{ {
int32_t i=MAXBOUNDKEYS-1; if (KeyBindings[i].cmd[0])
do
{ {
if (KeyBindings[i].cmd[0] && KB_KeyPressed(i)) if (KB_KeyPressed(i) && (KeyBindings[i].repeat || (KeyBindings[i].laststate == 0)))
{ {
if (KeyBindings[i].repeat || (KeyBindings[i].laststate == 0)) OSD_Dispatch(KeyBindings[i].cmd);
OSD_Dispatch(KeyBindings[i].cmd); KeyBindings[i].laststate = KB_KeyPressed(i);
} }
KeyBindings[i].laststate = KB_KeyPressed(i); else KeyBindings[i].laststate = KB_KeyPressed(i);
} }
while (--i);
} }
while (i--);
if (KeyBindings[0].cmd[0] && KB_KeyPressed(0))
{
if (KeyBindings[0].repeat || (KeyBindings[0].laststate == 0))
OSD_Dispatch(KeyBindings[0].cmd);
}
KeyBindings[0].laststate = KB_KeyPressed(0);
} }
void CONTROL_GetInput(ControlInfo *info) void CONTROL_GetInput(ControlInfo *info)
{ {
int32_t periphs[CONTROL_NUM_FLAGS]; int32_t periphs[CONTROL_NUM_FLAGS];
int32_t i = CONTROL_NUM_FLAGS-1;
CONTROL_PollDevices(info); CONTROL_PollDevices(info);
@ -890,36 +798,18 @@ void CONTROL_GetInput(ControlInfo *info)
CONTROL_ButtonHeldState = CONTROL_ButtonState; CONTROL_ButtonHeldState = CONTROL_ButtonState;
CONTROL_ButtonState = 0; CONTROL_ButtonState = 0;
CONTROL_ProcessBinds(); do
{ {
int32_t i = CONTROL_NUM_FLAGS-1; CONTROL_SetFlag(i, CONTROL_KeyboardFunctionPressed(i) | periphs[i] | extinput[i]);
do if (CONTROL_Flags[i].cleared == FALSE) BUTTONSET(i, CONTROL_Flags[i].active);
{ else if (CONTROL_Flags[i].active == FALSE) CONTROL_Flags[i].cleared = 0;
CONTROL_SetFlag(i, CONTROL_KeyboardFunctionPressed(i) | periphs[i] | extinput[i]);
if (CONTROL_Flags[i].cleared == FALSE) BUTTONSET(i, CONTROL_Flags[i].active);
else if (CONTROL_Flags[i].active == FALSE) CONTROL_Flags[i].cleared = 0;
}
while (--i);
CONTROL_SetFlag(0, CONTROL_KeyboardFunctionPressed(0) | periphs[0] | extinput[0]);
if (CONTROL_Flags[0].cleared == FALSE) BUTTONSET(0, CONTROL_Flags[0].active);
else if (CONTROL_Flags[0].active == FALSE) CONTROL_Flags[0].cleared = 0;
} }
while (i--);
memset(extinput, 0, sizeof(extinput)); memset(extinput, 0, sizeof(extinput));
} }
void CONTROL_WaitRelease(void)
{
}
void CONTROL_Ack(void)
{
}
int32_t CONTROL_Startup(controltype which, int32_t(*TimeFunction)(void), int32_t ticspersecond) int32_t CONTROL_Startup(controltype which, int32_t(*TimeFunction)(void), int32_t ticspersecond)
{ {
int32_t i; int32_t i;

View file

@ -153,17 +153,13 @@ void CONTROL_MapButton
int32_t whichfunction, int32_t whichfunction,
int32_t whichbutton, int32_t whichbutton,
int32_t doubleclicked, int32_t doubleclicked,
controldevice device controldevice device
); );
void CONTROL_DefineFlag( int32_t which, int32_t toggle ); void CONTROL_DefineFlag( int32_t which, int32_t toggle );
int32_t CONTROL_FlagActive( int32_t which ); int32_t CONTROL_FlagActive( int32_t which );
void CONTROL_ClearAssignments( void ); void CONTROL_ClearAssignments( void );
void CONTROL_GetUserInput( UserInput *info );
void CONTROL_GetInput( ControlInfo *info ); void CONTROL_GetInput( ControlInfo *info );
void CONTROL_ClearButton( int32_t whichbutton ); void CONTROL_ClearButton( int32_t whichbutton );
void CONTROL_ClearUserInput( UserInput *info );
void CONTROL_WaitRelease( void );
void CONTROL_Ack( void );
float CONTROL_MouseSensitivity; float CONTROL_MouseSensitivity;
int32_t CONTROL_Startup int32_t CONTROL_Startup
( (

View file

@ -109,8 +109,6 @@ static int32_t probe_(int32_t type,int32_t x,int32_t y,int32_t i,int32_t n)
{ {
int16_t centre; int16_t centre;
handleevents();
CONTROL_GetInput(&minfo); CONTROL_GetInput(&minfo);
mi += (minfo.dpitch+minfo.dz); mi += (minfo.dpitch+minfo.dz);
mii += minfo.dyaw; mii += minfo.dyaw;
@ -3678,9 +3676,9 @@ cheat_for_port_credits:
mgametextpal(40,118+9+9+9+9,"Advanced mouse setup",MENUHIGHLIGHT((MAXMOUSEBUTTONS-2)*2+2+2+2),10); mgametextpal(40,118+9+9+9+9,"Advanced mouse setup",MENUHIGHLIGHT((MAXMOUSEBUTTONS-2)*2+2+2+2),10);
{ {
int32_t sense = (int32_t)(CONTROL_MouseSensitivity * 2.0f); int32_t sense = (int32_t)(CONTROL_MouseSensitivity * 4.0f);
barsm(248,126,&sense,2,x==(MAXMOUSEBUTTONS-2)*2+2,MENUHIGHLIGHT((MAXMOUSEBUTTONS-2)*2+2),PHX(-7)); barsm(248,126,&sense,2,x==(MAXMOUSEBUTTONS-2)*2+2,MENUHIGHLIGHT((MAXMOUSEBUTTONS-2)*2+2),PHX(-7));
CONTROL_MouseSensitivity = sense / 2.0f; CONTROL_MouseSensitivity = sense / 4.0f;
} }
if (!ud.mouseaiming) modval(0,1,(int32_t *)&g_myAimMode,1,probey == (MAXMOUSEBUTTONS-2)*2+2+1); if (!ud.mouseaiming) modval(0,1,(int32_t *)&g_myAimMode,1,probey == (MAXMOUSEBUTTONS-2)*2+2+1);

View file

@ -1038,7 +1038,18 @@ static int32_t osdcmd_bind(const osdfuncparm_t *parm)
KeyBindings[ConsoleKeys[i].id].key=ConsoleKeys[i].name; KeyBindings[ConsoleKeys[i].id].key=ConsoleKeys[i].name;
CONTROL_MapKey(CONFIG_FunctionNameToNum(tempbuf), ConsoleKeys[i].id, 0); // populate the keyboard config menu based on the bind
if (!Bstrncasecmp(tempbuf, "gamefunc_", 9))
{
j = CONFIG_FunctionNameToNum(tempbuf+9);
if (j != -1)
{
ud.config.KeyboardKeys[j][1] = ud.config.KeyboardKeys[j][0];
ud.config.KeyboardKeys[j][0] = ConsoleKeys[i].id;
CONTROL_MapKey(j, ConsoleKeys[i].id, ud.config.KeyboardKeys[j][0]);
}
}
if (!OSD_ParsingScript()) if (!OSD_ParsingScript())
OSD_Printf("%s\n",parm->raw); OSD_Printf("%s\n",parm->raw);
@ -1055,10 +1066,20 @@ static int32_t osdcmd_unbindall(const osdfuncparm_t *parm)
for (i=0; i<MAXBOUNDKEYS; i++) for (i=0; i<MAXBOUNDKEYS; i++)
if (KeyBindings[i].cmd[0]) if (KeyBindings[i].cmd[0])
KeyBindings[i].cmd[0] = 0; KeyBindings[i].cmd[0] = 0;
for (i=0; i<MAXMOUSEBUTTONS; i++) for (i=0; i<MAXMOUSEBUTTONS; i++)
if (MouseBindings[i].cmd[0]) if (MouseBindings[i].cmd[0])
MouseBindings[i].cmd[0] = 0; MouseBindings[i].cmd[0] = 0;
OSD_Printf("unbound all keys\n");
for (i=0; i<NUMGAMEFUNCTIONS; i++)
{
ud.config.KeyboardKeys[i][0] = ud.config.KeyboardKeys[i][1] = 0xff;
CONTROL_MapKey(i, ud.config.KeyboardKeys[i][0], ud.config.KeyboardKeys[i][1]);
}
if (!OSD_ParsingScript())
OSD_Printf("unbound all controls\n");
return OSDCMD_OK; return OSDCMD_OK;
} }
@ -1067,24 +1088,33 @@ static int32_t osdcmd_unbind(const osdfuncparm_t *parm)
int32_t i; int32_t i;
if (parm->numparms < 1) return OSDCMD_SHOWHELP; if (parm->numparms < 1) return OSDCMD_SHOWHELP;
for (i=0; ConsoleKeys[i].name; i++) for (i=0; ConsoleKeys[i].name; i++)
if (!Bstrcasecmp(parm->parms[0],ConsoleKeys[i].name)) if (!Bstrcasecmp(parm->parms[0],ConsoleKeys[i].name))
break; break;
if (!ConsoleKeys[i].name) if (!ConsoleKeys[i].name)
{ {
for (i=0; i<MAXMOUSEBUTTONS; i++) for (i=0; i<MAXMOUSEBUTTONS; i++)
if (!Bstrcasecmp(parm->parms[0],ConsoleButtons[i])) if (!Bstrcasecmp(parm->parms[0],ConsoleButtons[i]))
break; break;
if (i >= MAXMOUSEBUTTONS) if (i >= MAXMOUSEBUTTONS)
return OSDCMD_SHOWHELP; return OSDCMD_SHOWHELP;
MouseBindings[i].repeat = 0; MouseBindings[i].repeat = 0;
MouseBindings[i].cmd[0] = 0; MouseBindings[i].cmd[0] = 0;
OSD_Printf("unbound %s\n",ConsoleButtons[i]); OSD_Printf("unbound %s\n",ConsoleButtons[i]);
return OSDCMD_OK; return OSDCMD_OK;
} }
KeyBindings[ConsoleKeys[i].id].repeat = 0; KeyBindings[ConsoleKeys[i].id].repeat = 0;
KeyBindings[ConsoleKeys[i].id].cmd[0] = 0; KeyBindings[ConsoleKeys[i].id].cmd[0] = 0;
OSD_Printf("unbound key %s\n",ConsoleKeys[i].name); OSD_Printf("unbound key %s\n",ConsoleKeys[i].name);
return OSDCMD_OK; return OSDCMD_OK;
} }
@ -1131,7 +1161,6 @@ static int32_t osdcmd_restorestate(const osdfuncparm_t *parm)
G_RestoreMapState(MapInfo[ud.volume_number*MAXLEVELS+ud.level_number].savedstate); G_RestoreMapState(MapInfo[ud.volume_number*MAXLEVELS+ud.level_number].savedstate);
return OSDCMD_OK; return OSDCMD_OK;
} }
*/
static int32_t osdcmd_inittimer(const osdfuncparm_t *parm) static int32_t osdcmd_inittimer(const osdfuncparm_t *parm)
{ {
@ -1153,6 +1182,7 @@ static int32_t osdcmd_inittimer(const osdfuncparm_t *parm)
OSD_Printf("%s\n",parm->raw); OSD_Printf("%s\n",parm->raw);
return OSDCMD_OK; return OSDCMD_OK;
} }
*/
static int32_t osdcmd_disconnect(const osdfuncparm_t *parm) static int32_t osdcmd_disconnect(const osdfuncparm_t *parm)
{ {
@ -1274,6 +1304,8 @@ static int32_t osdcmd_kickban(const osdfuncparm_t *parm)
sscanf(parm->parms[0],"%" PRIxPTR "", &hexaddr); sscanf(parm->parms[0],"%" PRIxPTR "", &hexaddr);
// TODO: implement banning logic
if (currentPeer->address.host == hexaddr) if (currentPeer->address.host == hexaddr)
{ {
char ipaddr[32]; char ipaddr[32];
@ -1303,72 +1335,69 @@ static int32_t osdcmd_cvar_set_game(const osdfuncparm_t *parm)
{ {
int32_t r = osdcmd_cvar_set(parm); int32_t r = osdcmd_cvar_set(parm);
#ifdef USE_OPENGL if (r != OSDCMD_OK) return r;
if (r == OSDCMD_OK)
if (!Bstrcasecmp(parm->name, "r_maxfps"))
{ {
if (!Bstrcasecmp(parm->name, "r_maxfps")) if (r_maxfps) g_frameDelay = (1000/r_maxfps);
{ else g_frameDelay = 0;
if (r_maxfps) g_frameDelay = (1000/r_maxfps);
else g_frameDelay = 0;
return r;
}
else if (!Bstrcasecmp(parm->name, "r_ambientlight"))
{
r_ambientlightrecip = 1.f/r_ambientlight;
return r;
}
else if (!Bstrcasecmp(parm->name, "in_mouse"))
{
CONTROL_MouseEnabled = (ud.config.UseMouse && CONTROL_MousePresent);
return r;
}
else if (!Bstrcasecmp(parm->name, "in_joystick"))
{
CONTROL_JoystickEnabled = (ud.config.UseJoystick && CONTROL_JoyPresent);
return r;
}
else if (!Bstrcasecmp(parm->name, "vid_gamma"))
{
ud.brightness = (int32_t)(min(max((float)((vid_gamma-1.0)*10.0),0),15));
ud.brightness <<= 2;
setbrightness(ud.brightness>>2,&g_player[myconnectindex].ps->palette[0],0);
return r;
}
else if (!Bstrcasecmp(parm->name, "vid_brightness"))
{
setbrightness(ud.brightness>>2,&g_player[myconnectindex].ps->palette[0],0);
return r;
}
else if (!Bstrcasecmp(parm->name, "vid_contrast"))
{
setbrightness(ud.brightness>>2,&g_player[myconnectindex].ps->palette[0],0);
return r;
}
else if (!Bstrcasecmp(parm->name, "hud_scale"))
{
G_UpdateScreenArea();
return r;
}
else if (!Bstrcasecmp(parm->name, "skill"))
{
if (numplayers > 1)
return r; return r;
}
else if (!Bstrcasecmp(parm->name, "r_ambientlight"))
{
r_ambientlightrecip = 1.f/r_ambientlight;
return r; ud.m_player_skill = ud.player_skill;
}
else if (!Bstrcasecmp(parm->name, "in_mouse"))
{
CONTROL_MouseEnabled = (ud.config.UseMouse && CONTROL_MousePresent);
return r; return r;
}
else if (!Bstrcasecmp(parm->name, "in_joystick"))
{
CONTROL_JoystickEnabled = (ud.config.UseJoystick && CONTROL_JoyPresent);
return r;
}
else if (!Bstrcasecmp(parm->name, "vid_gamma"))
{
ud.brightness = (int32_t)(min(max((float)((vid_gamma-1.0)*10.0),0),15));
ud.brightness <<= 2;
setbrightness(ud.brightness>>2,&g_player[myconnectindex].ps->palette[0],0);
return r;
}
else if (!Bstrcasecmp(parm->name, "vid_brightness"))
{
setbrightness(ud.brightness>>2,&g_player[myconnectindex].ps->palette[0],0);
return r;
}
else if (!Bstrcasecmp(parm->name, "vid_contrast"))
{
setbrightness(ud.brightness>>2,&g_player[myconnectindex].ps->palette[0],0);
return r;
}
else if (!Bstrcasecmp(parm->name, "hud_scale"))
{
G_UpdateScreenArea();
return r;
}
else if (!Bstrcasecmp(parm->name, "skill"))
{
if (numplayers > 1)
return r;
ud.m_player_skill = ud.player_skill;
return r;
}
} }
#endif
return r; return r;
} }
@ -1523,7 +1552,7 @@ int32_t registerosdcommands(void)
OSD_RegisterFunction("god","god: toggles god mode", osdcmd_god); OSD_RegisterFunction("god","god: toggles god mode", osdcmd_god);
OSD_RegisterFunction("initgroupfile","initgroupfile <path>: adds a grp file into the game filesystem", osdcmd_initgroupfile); OSD_RegisterFunction("initgroupfile","initgroupfile <path>: adds a grp file into the game filesystem", osdcmd_initgroupfile);
OSD_RegisterFunction("inittimer","debug", osdcmd_inittimer); // OSD_RegisterFunction("inittimer","debug", osdcmd_inittimer);
OSD_RegisterFunction("kick","kick <id>: kicks a multiplayer client. See listplayers.", osdcmd_kick); OSD_RegisterFunction("kick","kick <id>: kicks a multiplayer client. See listplayers.", osdcmd_kick);
OSD_RegisterFunction("kickban","kickban <id>: kicks a multiplayer client and prevents them from reconnecting. See listplayers.", osdcmd_kickban); OSD_RegisterFunction("kickban","kickban <id>: kicks a multiplayer client and prevents them from reconnecting. See listplayers.", osdcmd_kickban);

View file

@ -2939,7 +2939,6 @@ void P_DisplayWeapon(int32_t snum)
} }
} }
P_DisplaySpit(snum); P_DisplaySpit(snum);
} }
#define TURBOTURNTIME (TICRATE/8) // 7 #define TURBOTURNTIME (TICRATE/8) // 7
@ -2966,7 +2965,7 @@ void getinput(int32_t snum)
int32_t momx = 0,momy = 0; int32_t momx = 0,momy = 0;
DukePlayer_t *p = g_player[snum].ps; DukePlayer_t *p = g_player[snum].ps;
if ((p->gm&MODE_MENU) || (p->gm&MODE_TYPE) || (ud.pause_on && !KB_KeyPressed(sc_Pause))) if ((p->gm & (MODE_MENU|MODE_TYPE)) || (ud.pause_on && !KB_KeyPressed(sc_Pause)))
{ {
if (!(p->gm&MODE_MENU)) if (!(p->gm&MODE_MENU))
CONTROL_GetInput(&info[0]); CONTROL_GetInput(&info[0]);