From bf08f5cf52fb3d65e653eca8739dce2392af1a5c Mon Sep 17 00:00:00 2001 From: turbocat Date: Mon, 10 Oct 2022 21:05:53 +0000 Subject: [PATCH] Quake: mouse capture fixed. git-svn-id: svn://kolibrios.org@9878 a494cfbc-eb01-0410-851d-a64ba20cac60 --- contrib/other/sdlquake-1.0.9/sys_sdl.c | 29 +++++++++++++------------- contrib/other/sdlquake-1.0.9/vid_sdl.c | 18 +++++++++++++--- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/contrib/other/sdlquake-1.0.9/sys_sdl.c b/contrib/other/sdlquake-1.0.9/sys_sdl.c index cb8f93d29a..0b500f6d8a 100644 --- a/contrib/other/sdlquake-1.0.9/sys_sdl.c +++ b/contrib/other/sdlquake-1.0.9/sys_sdl.c @@ -11,7 +11,6 @@ #include #include #include -#include #if !defined(__WIN32__) && !defined(_KOLIBRI) #include #include @@ -20,6 +19,11 @@ #include #endif +#ifdef _KOLIBRI +#include +#include +#endif + #include "quakedef.h" qboolean isDedicated; @@ -270,7 +274,7 @@ void Sys_mkdir (char *path) #ifdef __WIN32__ mkdir (path); #else - //mkdir (path, 0777); + mkdir (path, 0777); #endif } @@ -293,11 +297,11 @@ double Sys_FloatTime (void) #if defined(_KOLIBRI) static int starttime = 0; - if ( ! starttime ) - __asm__ __volatile__("int $0x40" : "=a"(starttime) : "a"(26), "b"(9)); + if (!starttime) { + starttime = _ksys_get_tick_count(); + } - int curtime; - __asm__ __volatile__("int $0x40" : "=a"(curtime) : "a"(26), "b"(9)); + int curtime = _ksys_get_tick_count(); return (curtime-starttime)*0.01; #elif defined(__WIN32__) @@ -364,7 +368,7 @@ void Sys_LineRefresh(void) void Sys_Sleep(void) { #ifdef _KOLIBRI - delay(1); + _ksys_delay(1); #else SDL_Delay(1); #endif @@ -384,12 +388,7 @@ void moncontrol(int x) int main (int c, char **v) { - #ifdef _KOLIBRI - #include "kolibri.h" - _ksys_setcwd(dirname(v[0])); - #endif - - double time, oldtime, newtime; + double time, oldtime, newtime; quakeparms_t parms; extern int vcrFile; extern qboolean recording; @@ -400,6 +399,8 @@ int main (int c, char **v) #ifndef _KOLIBRI // signal(SIGFPE, floating_point_exception_handler); signal(SIGFPE, SIG_IGN); +#else + basedir = dirname(v[0]); #endif parms.memsize = 8*1024*1024; @@ -429,7 +430,7 @@ int main (int c, char **v) if (time < sys_ticrate.value && (vcrFile == -1 || recording) ) { #ifdef _KOLIBRI - delay(1); + _ksys_delay(1); #else SDL_Delay (1); #endif diff --git a/contrib/other/sdlquake-1.0.9/vid_sdl.c b/contrib/other/sdlquake-1.0.9/vid_sdl.c index 0898e5cd91..35bfb748b8 100644 --- a/contrib/other/sdlquake-1.0.9/vid_sdl.c +++ b/contrib/other/sdlquake-1.0.9/vid_sdl.c @@ -4,6 +4,11 @@ #include "quakedef.h" #include "d_local.h" +#ifdef _KOLIBRI +#include +#endif + + viddef_t vid; // global video state unsigned short d_8to16table[256]; @@ -78,10 +83,12 @@ void VID_Init (unsigned char *palette) Sys_Error("VID: Bad window width/height\n"); } - // Set video width, height and flags flags = (SDL_SWSURFACE|SDL_HWPALETTE); +#ifndef _KOLIBRI + // Set video width, height and flags if ( COM_CheckParm ("-fullscreen") ) flags |= SDL_FULLSCREEN; +#endif // Initialize display if (!(screen = SDL_SetVideoMode(vid.width, vid.height, 8, flags))) @@ -323,12 +330,15 @@ void IN_Init (void) { if ( COM_CheckParm ("-nomouse") ) return; + + SDL_WM_GrabInput(SDL_GRAB_ON); mouse_x = mouse_y = 0.0; mouse_avail = 1; } void IN_Shutdown (void) { + SDL_WM_GrabInput(SDL_GRAB_OFF); mouse_avail = 0; } @@ -338,7 +348,9 @@ void IN_Commands (void) int mouse_buttonstate; if (!mouse_avail) return; - + + SDL_WM_GrabInput(SDL_GRAB_ON); + i = SDL_GetMouseState(NULL, NULL); /* Quake swaps the second and third buttons */ mouse_buttonstate = (i & ~0x06) | ((i & 0x02)<<1) | ((i & 0x04)>>1); @@ -356,7 +368,7 @@ void IN_Move (usercmd_t *cmd) { if (!mouse_avail) return; - + mouse_x *= sensitivity.value; mouse_y *= sensitivity.value;