This commit is contained in:
IoIxD 2026-05-17 21:06:39 -07:00
commit 6740fb6c86
6 changed files with 456 additions and 334 deletions

View file

@ -4,19 +4,27 @@ project(gquake)
file(GLOB SOURCES src/*.c) file(GLOB SOURCES src/*.c)
if(PS2) if(PS2)
set(GL ps2gl) set(GL ps2gl)
set(CMAKE_EXECUTABLE_SUFFIX .elf) set(CMAKE_EXECUTABLE_SUFFIX .elf)
elseif(VITA) elseif(VITA)
set(GL vitaGL) set(GL vitaGL)
elseif(PLATFORM_DREAMCAST)
include(kallistios)
add_compile_definitions(USE_KALLISTIOS)
add_compile_definitions(NO_FCNTL)
set(GL GL)
else() else()
find_package(OpenGL REQUIRED) find_package(OpenGL REQUIRED)
set(GL OpenGL::GL) set(GL OpenGL::GL)
endif() endif()
set(MILSKO "/usr/local") set(MILSKO "/usr/local")
option(TRY_SDL2 "Try SDL2" ON) if(NOT PLATFORM_DREAMCAST)
option(TRY_SDL2 "Try SDL2" ON)
option(TRY_MILSKO "Try SDL2" OFF)
endif()
add_executable(gquake ${SOURCES}) add_executable(gquake ${SOURCES})
target_include_directories(gquake PRIVATE include) target_include_directories(gquake PRIVATE include)
@ -24,49 +32,55 @@ target_compile_definitions(gquake PRIVATE GL_EXT_SHARED GLQUAKE)
target_link_libraries(gquake PRIVATE ${GL}) target_link_libraries(gquake PRIVATE ${GL})
if(PSP) if(PSP)
target_link_libraries(gquake PRIVATE SDL2main pspsdk pspnet cglue) target_link_libraries(gquake PRIVATE SDL2main pspsdk pspnet cglue)
create_pbp_file(TARGET gquake create_pbp_file(TARGET gquake
TITLE "GQuake") TITLE "GQuake")
elseif(PS2) elseif(PS2)
target_link_libraries(gquake PRIVATE SDL2main stdc++ ps2stuff dma -ldebug) target_link_libraries(gquake PRIVATE SDL2main stdc++ ps2stuff dma -ldebug)
add_custom_command(TARGET gquake POST_BUILD add_custom_command(TARGET gquake POST_BUILD
COMMAND rm -rf gquake COMMAND rm -rf gquake
COMMAND mkdir -p gquake COMMAND mkdir -p gquake
COMMAND cp gquake.elf gquake/GQUAKE.ELF COMMAND cp gquake.elf gquake/GQUAKE.ELF
COMMAND cp -rf ${CMAKE_SOURCE_DIR}/id1 gquake/ COMMAND cp -rf ${CMAKE_SOURCE_DIR}/id1 gquake/
COMMAND echo "BOOT2 = cdrom0:\\\\GQUAKE.ELF" > gquake/SYSTEM.CNF COMMAND echo "BOOT2 = cdrom0:\\\\GQUAKE.ELF" > gquake/SYSTEM.CNF
COMMAND genisoimage -udf -o gquake.iso gquake COMMAND genisoimage -udf -o gquake.iso gquake
) )
elseif(VITA) elseif(VITA)
include(${VITASDK}/share/vita.cmake) include(${VITASDK}/share/vita.cmake)
target_link_libraries(gquake PRIVATE SDL2main stdc++ vitashark SceShaccCg_stub SceKernelDmacMgr_stub mathneon) target_link_libraries(gquake PRIVATE SDL2main stdc++ vitashark SceShaccCg_stub SceKernelDmacMgr_stub mathneon)
vita_create_self(gquake.self gquake) vita_create_self(gquake.self gquake)
vita_create_vpk(gquake.vpk PYRT10000 gquake.self vita_create_vpk(gquake.vpk PYRT10000 gquake.self
FILE ${CMAKE_SOURCE_DIR}/id1 sce_sys/id1 FILE ${CMAKE_SOURCE_DIR}/id1 sce_sys/id1
) )
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
target_link_libraries(gquake PRIVATE wsock32) target_link_libraries(gquake PRIVATE wsock32)
else() else()
target_link_libraries(gquake PRIVATE m) target_link_libraries(gquake PRIVATE m)
endif() endif()
set(FOUND FALSE) set(FOUND FALSE)
if(NOT FOUND AND TRY_SDL2) if(NOT FOUND AND TRY_SDL2)
find_package(SDL2) find_package(SDL2)
target_compile_definitions(gquake PRIVATE USE_SDL2) target_compile_definitions(gquake PRIVATE USE_SDL2)
target_link_libraries(gquake PRIVATE SDL2::SDL2) target_link_libraries(gquake PRIVATE SDL2::SDL2)
set(FOUND ON) set(FOUND ON)
endif() endif()
if(NOT FOUND) if(NOT FOUND AND TRY_MILSKO)
target_compile_definitions(gquake PRIVATE USE_MILSKO USE_MINIAUDIO) target_compile_definitions(gquake PRIVATE USE_MILSKO USE_MINIAUDIO)
target_include_directories(gquake PRIVATE ${MILSKO}/include) target_include_directories(gquake PRIVATE ${MILSKO}/include)
target_link_directories(gquake PRIVATE ${MILSKO}/src ${MILSKO}/lib) target_link_directories(gquake PRIVATE ${MILSKO}/src ${MILSKO}/lib)
target_link_libraries(gquake PRIVATE Mw) target_link_libraries(gquake PRIVATE Mw)
endif()
if(PLATFORM_DREAMCAST)
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/romdisk/)
file(COPY ${CMAKE_BINARY_DIR}/../id1 DESTINATION ${CMAKE_BINARY_DIR}/romdisk/)
kos_add_romdisk(${PROJECT_NAME} ${CMAKE_BINARY_DIR}/romdisk/)
endif() endif()

3
compile_flags.txt Normal file
View file

@ -0,0 +1,3 @@
-DUSE_KALLISTIOS
-I/opt/toolchains/dc/kos-ports/include/
-I/opt/toolchains/dc/kos/include/

View file

@ -8,7 +8,7 @@ of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details. See the GNU General Public License for more details.
@ -94,7 +94,7 @@ into the cache directory, then opened there.
FIXME: FIXME:
The file "parms.txt" will be read out of the game directory and appended to the current command line arguments to allow different games to initialize startup parms differently. This could be used to add a "-sspeed 22050" for the high quality sound edition. Because they are added at the end, they will not override an explicit setting on the original command line. The file "parms.txt" will be read out of the game directory and appended to the current command line arguments to allow different games to initialize startup parms differently. This could be used to add a "-sspeed 22050" for the high quality sound edition. Because they are added at the end, they will not override an explicit setting on the original command line.
*/ */
//============================================================================ //============================================================================
@ -138,7 +138,7 @@ void InsertLinkAfter (link_t *l, link_t *after)
void Q_memset (void *dest, int fill, int count) void Q_memset (void *dest, int fill, int count)
{ {
int i; int i;
if ( (((long)dest | count) & 3) == 0) if ( (((long)dest | count) & 3) == 0)
{ {
count >>= 2; count >>= 2;
@ -154,7 +154,7 @@ void Q_memset (void *dest, int fill, int count)
void Q_memcpy (void *dest, void *src, int count) void Q_memcpy (void *dest, void *src, int count)
{ {
int i; int i;
if (( ( (long)dest | (long)src | count) & 3) == 0 ) if (( ( (long)dest | (long)src | count) & 3) == 0 )
{ {
count>>=2; count>>=2;
@ -199,7 +199,7 @@ void Q_strncpy (char *dest, char *src, int count)
int Q_strlen (char *str) int Q_strlen (char *str)
{ {
int count; int count;
count = 0; count = 0;
while (str[count]) while (str[count])
count++; count++;
@ -227,13 +227,13 @@ int Q_strcmp (char *s1, char *s2)
while (1) while (1)
{ {
if (*s1 != *s2) if (*s1 != *s2)
return -1; // strings not equal return -1; // strings not equal
if (!*s1) if (!*s1)
return 0; // strings are equal return 0; // strings are equal
s1++; s1++;
s2++; s2++;
} }
return -1; return -1;
} }
@ -244,20 +244,20 @@ int Q_strncmp (char *s1, char *s2, int count)
if (!count--) if (!count--)
return 0; return 0;
if (*s1 != *s2) if (*s1 != *s2)
return -1; // strings not equal return -1; // strings not equal
if (!*s1) if (!*s1)
return 0; // strings are equal return 0; // strings are equal
s1++; s1++;
s2++; s2++;
} }
return -1; return -1;
} }
int Q_strncasecmp (char *s1, char *s2, int n) int Q_strncasecmp (char *s1, char *s2, int n)
{ {
int c1, c2; int c1, c2;
while (1) while (1)
{ {
c1 = *s1++; c1 = *s1++;
@ -265,7 +265,7 @@ int Q_strncasecmp (char *s1, char *s2, int n)
if (!n--) if (!n--)
return 0; // strings are equal until end point return 0; // strings are equal until end point
if (c1 != c2) if (c1 != c2)
{ {
if (c1 >= 'a' && c1 <= 'z') if (c1 >= 'a' && c1 <= 'z')
@ -280,7 +280,7 @@ int Q_strncasecmp (char *s1, char *s2, int n)
// s1++; // s1++;
// s2++; // s2++;
} }
return -1; return -1;
} }
@ -294,7 +294,7 @@ int Q_atoi (char *str)
int val; int val;
int sign; int sign;
int c; int c;
if (*str == '-') if (*str == '-')
{ {
sign = -1; sign = -1;
@ -302,7 +302,7 @@ int Q_atoi (char *str)
} }
else else
sign = 1; sign = 1;
val = 0; val = 0;
// //
@ -324,7 +324,7 @@ int Q_atoi (char *str)
return val*sign; return val*sign;
} }
} }
// //
// check for character // check for character
// //
@ -332,7 +332,7 @@ int Q_atoi (char *str)
{ {
return sign * str[1]; return sign * str[1];
} }
// //
// assume decimal // assume decimal
// //
@ -343,7 +343,7 @@ int Q_atoi (char *str)
return val*sign; return val*sign;
val = val*10 + c - '0'; val = val*10 + c - '0';
} }
return 0; return 0;
} }
@ -354,7 +354,7 @@ float Q_atof (char *str)
int sign; int sign;
int c; int c;
int decimal, total; int decimal, total;
if (*str == '-') if (*str == '-')
{ {
sign = -1; sign = -1;
@ -362,7 +362,7 @@ float Q_atof (char *str)
} }
else else
sign = 1; sign = 1;
val = 0; val = 0;
// //
@ -384,7 +384,7 @@ float Q_atof (char *str)
return val*sign; return val*sign;
} }
} }
// //
// check for character // check for character
// //
@ -392,7 +392,7 @@ float Q_atof (char *str)
{ {
return sign * str[1]; return sign * str[1];
} }
// //
// assume decimal // assume decimal
// //
@ -419,7 +419,7 @@ float Q_atof (char *str)
val /= 10; val /= 10;
total--; total--;
} }
return val*sign; return val*sign;
} }
@ -479,8 +479,8 @@ float FloatSwap (float f)
float f; float f;
byte b[4]; byte b[4];
} dat1, dat2; } dat1, dat2;
dat1.f = f; dat1.f = f;
dat2.b[0] = dat1.b[3]; dat2.b[0] = dat1.b[3];
dat2.b[1] = dat1.b[2]; dat2.b[1] = dat1.b[2];
@ -510,7 +510,7 @@ Handles byte ordering and avoids alignment errors
void MSG_WriteChar (sizebuf_t *sb, int c) void MSG_WriteChar (sizebuf_t *sb, int c)
{ {
byte *buf; byte *buf;
#ifdef PARANOID #ifdef PARANOID
if (c < -128 || c > 127) if (c < -128 || c > 127)
Sys_Error ("MSG_WriteChar: range error"); Sys_Error ("MSG_WriteChar: range error");
@ -523,7 +523,7 @@ void MSG_WriteChar (sizebuf_t *sb, int c)
void MSG_WriteByte (sizebuf_t *sb, int c) void MSG_WriteByte (sizebuf_t *sb, int c)
{ {
byte *buf; byte *buf;
#ifdef PARANOID #ifdef PARANOID
if (c < 0 || c > 255) if (c < 0 || c > 255)
Sys_Error ("MSG_WriteByte: range error"); Sys_Error ("MSG_WriteByte: range error");
@ -536,7 +536,7 @@ void MSG_WriteByte (sizebuf_t *sb, int c)
void MSG_WriteShort (sizebuf_t *sb, int c) void MSG_WriteShort (sizebuf_t *sb, int c)
{ {
byte *buf; byte *buf;
#ifdef PARANOID #ifdef PARANOID
if (c < ((short)0x8000) || c > (short)0x7fff) if (c < ((short)0x8000) || c > (short)0x7fff)
Sys_Error ("MSG_WriteShort: range error"); Sys_Error ("MSG_WriteShort: range error");
@ -550,7 +550,7 @@ void MSG_WriteShort (sizebuf_t *sb, int c)
void MSG_WriteLong (sizebuf_t *sb, int c) void MSG_WriteLong (sizebuf_t *sb, int c)
{ {
byte *buf; byte *buf;
buf = SZ_GetSpace (sb, 4); buf = SZ_GetSpace (sb, 4);
buf[0] = c&0xff; buf[0] = c&0xff;
buf[1] = (c>>8)&0xff; buf[1] = (c>>8)&0xff;
@ -565,11 +565,11 @@ void MSG_WriteFloat (sizebuf_t *sb, float f)
float f; float f;
int l; int l;
} dat; } dat;
dat.f = f; dat.f = f;
dat.l = LittleLong (dat.l); dat.l = LittleLong (dat.l);
SZ_Write (sb, &dat.l, 4); SZ_Write (sb, &dat.l, 4);
} }
@ -607,70 +607,70 @@ void MSG_BeginReading (void)
int MSG_ReadChar (void) int MSG_ReadChar (void)
{ {
int c; int c;
if (msg_readcount+1 > net_message.cursize) if (msg_readcount+1 > net_message.cursize)
{ {
msg_badread = qtrue; msg_badread = qtrue;
return -1; return -1;
} }
c = (signed char)net_message.data[msg_readcount]; c = (signed char)net_message.data[msg_readcount];
msg_readcount++; msg_readcount++;
return c; return c;
} }
int MSG_ReadByte (void) int MSG_ReadByte (void)
{ {
int c; int c;
if (msg_readcount+1 > net_message.cursize) if (msg_readcount+1 > net_message.cursize)
{ {
msg_badread = qtrue; msg_badread = qtrue;
return -1; return -1;
} }
c = (unsigned char)net_message.data[msg_readcount]; c = (unsigned char)net_message.data[msg_readcount];
msg_readcount++; msg_readcount++;
return c; return c;
} }
int MSG_ReadShort (void) int MSG_ReadShort (void)
{ {
int c; int c;
if (msg_readcount+2 > net_message.cursize) if (msg_readcount+2 > net_message.cursize)
{ {
msg_badread = qtrue; msg_badread = qtrue;
return -1; return -1;
} }
c = (short)(net_message.data[msg_readcount] c = (short)(net_message.data[msg_readcount]
+ (net_message.data[msg_readcount+1]<<8)); + (net_message.data[msg_readcount+1]<<8));
msg_readcount += 2; msg_readcount += 2;
return c; return c;
} }
int MSG_ReadLong (void) int MSG_ReadLong (void)
{ {
int c; int c;
if (msg_readcount+4 > net_message.cursize) if (msg_readcount+4 > net_message.cursize)
{ {
msg_badread = qtrue; msg_badread = qtrue;
return -1; return -1;
} }
c = net_message.data[msg_readcount] c = net_message.data[msg_readcount]
+ (net_message.data[msg_readcount+1]<<8) + (net_message.data[msg_readcount+1]<<8)
+ (net_message.data[msg_readcount+2]<<16) + (net_message.data[msg_readcount+2]<<16)
+ (net_message.data[msg_readcount+3]<<24); + (net_message.data[msg_readcount+3]<<24);
msg_readcount += 4; msg_readcount += 4;
return c; return c;
} }
@ -682,23 +682,23 @@ float MSG_ReadFloat (void)
float f; float f;
int l; int l;
} dat; } dat;
dat.b[0] = net_message.data[msg_readcount]; dat.b[0] = net_message.data[msg_readcount];
dat.b[1] = net_message.data[msg_readcount+1]; dat.b[1] = net_message.data[msg_readcount+1];
dat.b[2] = net_message.data[msg_readcount+2]; dat.b[2] = net_message.data[msg_readcount+2];
dat.b[3] = net_message.data[msg_readcount+3]; dat.b[3] = net_message.data[msg_readcount+3];
msg_readcount += 4; msg_readcount += 4;
dat.l = LittleLong (dat.l); dat.l = LittleLong (dat.l);
return dat.f; return dat.f;
} }
char *MSG_ReadString (void) char *MSG_ReadString (void)
{ {
static char string[2048]; static char string[2048];
int l,c; int l,c;
l = 0; l = 0;
do do
{ {
@ -708,9 +708,9 @@ char *MSG_ReadString (void)
string[l] = c; string[l] = c;
l++; l++;
} while (l < sizeof(string)-1); } while (l < sizeof(string)-1);
string[l] = 0; string[l] = 0;
return string; return string;
} }
@ -754,35 +754,35 @@ void SZ_Clear (sizebuf_t *buf)
void *SZ_GetSpace (sizebuf_t *buf, int length) void *SZ_GetSpace (sizebuf_t *buf, int length)
{ {
void *data; void *data;
if (buf->cursize + length > buf->maxsize) if (buf->cursize + length > buf->maxsize)
{ {
if (!buf->allowoverflow) if (!buf->allowoverflow)
Sys_Error ("SZ_GetSpace: overflow without allowoverflow set"); Sys_Error ("SZ_GetSpace: overflow without allowoverflow set");
if (length > buf->maxsize) if (length > buf->maxsize)
Sys_Error ("SZ_GetSpace: %i is > full buffer size", length); Sys_Error ("SZ_GetSpace: %i is > full buffer size", length);
buf->overflowed = qtrue; buf->overflowed = qtrue;
Con_Printf ("SZ_GetSpace: overflow"); Con_Printf ("SZ_GetSpace: overflow");
SZ_Clear (buf); SZ_Clear (buf);
} }
data = buf->data + buf->cursize; data = buf->data + buf->cursize;
buf->cursize += length; buf->cursize += length;
return data; return data;
} }
void SZ_Write (sizebuf_t *buf, void *data, int length) void SZ_Write (sizebuf_t *buf, void *data, int length)
{ {
Q_memcpy (SZ_GetSpace(buf,length),data,length); Q_memcpy (SZ_GetSpace(buf,length),data,length);
} }
void SZ_Print (sizebuf_t *buf, char *data) void SZ_Print (sizebuf_t *buf, char *data)
{ {
int len; int len;
len = Q_strlen(data)+1; len = Q_strlen(data)+1;
// byte * cast to keep VC++ happy // byte * cast to keep VC++ happy
@ -804,7 +804,7 @@ COM_SkipPath
char *COM_SkipPath (char *pathname) char *COM_SkipPath (char *pathname)
{ {
char *last; char *last;
last = pathname; last = pathname;
while (*pathname) while (*pathname)
{ {
@ -856,15 +856,15 @@ COM_FileBase
void COM_FileBase (char *in, char *out) void COM_FileBase (char *in, char *out)
{ {
char *s, *s2; char *s, *s2;
s = in + strlen(in) - 1; s = in + strlen(in) - 1;
while (s != in && *s != '.') while (s != in && *s != '.')
s--; s--;
for (s2 = s ; *s2 && *s2 != '/' ; s2--) for (s2 = s ; *s2 && *s2 != '/' ; s2--)
; ;
if (s-s2 < 2) if (s-s2 < 2)
strcpy (out,"?model?"); strcpy (out,"?model?");
else else
@ -912,13 +912,13 @@ char *COM_Parse (char *data)
{ {
int c; int c;
int len; int len;
len = 0; len = 0;
com_token[0] = 0; com_token[0] = 0;
if (!data) if (!data)
return NULL; return NULL;
// skip whitespace // skip whitespace
skipwhite: skipwhite:
while ( (c = *data) <= ' ') while ( (c = *data) <= ' ')
@ -927,7 +927,7 @@ skipwhite:
return NULL; // end of file; return NULL; // end of file;
data++; data++;
} }
// skip // comments // skip // comments
if (c=='/' && data[1] == '/') if (c=='/' && data[1] == '/')
{ {
@ -935,7 +935,7 @@ skipwhite:
data++; data++;
goto skipwhite; goto skipwhite;
} }
// handle quoted strings specially // handle quoted strings specially
if (c == '\"') if (c == '\"')
@ -973,7 +973,7 @@ skipwhite:
if (c=='{' || c=='}'|| c==')'|| c=='(' || c=='\'' || c==':') if (c=='{' || c=='}'|| c==')'|| c=='(' || c=='\'' || c==':')
break; break;
} while (c>32); } while (c>32);
com_token[len] = 0; com_token[len] = 0;
return data; return data;
} }
@ -990,7 +990,7 @@ where the given parameter apears, or 0 if not present
int COM_CheckParm (char *parm) int COM_CheckParm (char *parm)
{ {
int i; int i;
for (i=1 ; i<com_argc ; i++) for (i=1 ; i<com_argc ; i++)
{ {
if (!com_argv[i]) if (!com_argv[i])
@ -998,7 +998,7 @@ int COM_CheckParm (char *parm)
if (!Q_strcmp (parm,com_argv[i])) if (!Q_strcmp (parm,com_argv[i]))
return i; return i;
} }
return 0; return 0;
} }
@ -1034,11 +1034,11 @@ void COM_CheckRegistered (void)
Sys_FileRead (h, check, sizeof(check)); Sys_FileRead (h, check, sizeof(check));
COM_CloseFile (h); COM_CloseFile (h);
for (i=0 ; i<128 ; i++) for (i=0 ; i<128 ; i++)
if (pop[i] != (unsigned short)BigShort (check[i])) if (pop[i] != (unsigned short)BigShort (check[i]))
Sys_Error ("Corrupted data file."); Sys_Error ("Corrupted data file.");
Cvar_Set ("cmdline", com_cmdline); Cvar_Set ("cmdline", com_cmdline);
Cvar_Set ("registered", "1"); Cvar_Set ("registered", "1");
static_registered = 1; static_registered = 1;
@ -1126,7 +1126,7 @@ void COM_Init (char *basedir)
{ {
byte swaptest[2] = {1,0}; byte swaptest[2] = {1,0};
// set the byte swapping variables in a portable manner // set the byte swapping variables in a portable manner
if ( *(short *)swaptest == 1) if ( *(short *)swaptest == 1)
{ {
bigendien = qfalse; bigendien = qfalse;
@ -1170,12 +1170,12 @@ char *va(char *format, ...)
{ {
va_list argptr; va_list argptr;
static char string[1024]; static char string[1024];
va_start (argptr, format); va_start (argptr, format);
vsprintf (string, format,argptr); vsprintf (string, format,argptr);
va_end (argptr); va_end (argptr);
return string; return string;
} }
@ -1183,7 +1183,7 @@ char *va(char *format, ...)
int memsearch (byte *start, int count, int search) int memsearch (byte *start, int count, int search)
{ {
int i; int i;
for (i=0 ; i<count ; i++) for (i=0 ; i<count ; i++)
if (start[i] == search) if (start[i] == search)
return i; return i;
@ -1258,7 +1258,7 @@ COM_Path_f
void COM_Path_f (void) void COM_Path_f (void)
{ {
searchpath_t *s; searchpath_t *s;
Con_Printf ("Current search path:\n"); Con_Printf ("Current search path:\n");
for (s=com_searchpaths ; s ; s=s->next) for (s=com_searchpaths ; s ; s=s->next)
{ {
@ -1282,7 +1282,7 @@ void COM_WriteFile (char *filename, void *data, int len)
{ {
int handle; int handle;
char name[MAX_OSPATH + 1]; char name[MAX_OSPATH + 1];
sprintf (name, "%s/%s", com_gamedir, filename); sprintf (name, "%s/%s", com_gamedir, filename);
handle = Sys_FileOpenWrite (name); handle = Sys_FileOpenWrite (name);
@ -1291,7 +1291,7 @@ void COM_WriteFile (char *filename, void *data, int len)
Sys_Printf ("COM_WriteFile: failed on %s\n", name); Sys_Printf ("COM_WriteFile: failed on %s\n", name);
return; return;
} }
Sys_Printf ("COM_WriteFile: %s\n", name); Sys_Printf ("COM_WriteFile: %s\n", name);
Sys_FileWrite (handle, data, len); Sys_FileWrite (handle, data, len);
Sys_FileClose (handle); Sys_FileClose (handle);
@ -1308,7 +1308,7 @@ Only used for CopyFile
void COM_CreatePath (char *path) void COM_CreatePath (char *path)
{ {
char *ofs; char *ofs;
for (ofs = path+1 ; *ofs ; ofs++) for (ofs = path+1 ; *ofs ; ofs++)
{ {
if (*ofs == '/') if (*ofs == '/')
@ -1334,11 +1334,11 @@ void COM_CopyFile (char *netpath, char *cachepath)
int in, out; int in, out;
int remaining, count; int remaining, count;
char buf[4096]; char buf[4096];
remaining = Sys_FileOpenRead (netpath, &in); remaining = Sys_FileOpenRead (netpath, &in);
COM_CreatePath (cachepath); // create directories up to the cache file COM_CreatePath (cachepath); // create directories up to the cache file
out = Sys_FileOpenWrite (cachepath); out = Sys_FileOpenWrite (cachepath);
while (remaining) while (remaining)
{ {
if (remaining < sizeof(buf)) if (remaining < sizeof(buf))
@ -1351,7 +1351,7 @@ void COM_CopyFile (char *netpath, char *cachepath)
} }
Sys_FileClose (in); Sys_FileClose (in);
Sys_FileClose (out); Sys_FileClose (out);
} }
/* /*
@ -1375,7 +1375,7 @@ int COM_FindFile (char *filename, int *handle, FILE **file)
Sys_Error ("COM_FindFile: both handle and file set"); Sys_Error ("COM_FindFile: both handle and file set");
if (!file && !handle) if (!file && !handle)
Sys_Error ("COM_FindFile: neither handle or file set"); Sys_Error ("COM_FindFile: neither handle or file set");
// //
// search through the path, one element at a time // search through the path, one element at a time
// //
@ -1413,25 +1413,25 @@ int COM_FindFile (char *filename, int *handle, FILE **file)
} }
} }
else else
{ {
// check a file in the directory tree // check a file in the directory tree
if (!static_registered) if (!static_registered)
{ // if not a registered version, don't ever go beyond base { // if not a registered version, don't ever go beyond base
if ( strchr (filename, '/') || strchr (filename,'\\')) if ( strchr (filename, '/') || strchr (filename,'\\'))
continue; continue;
} }
sprintf (netpath, "%s/%s",search->filename, filename); sprintf (netpath, "%s/%s",search->filename, filename);
findtime = Sys_FileTime (netpath); findtime = Sys_FileTime (netpath);
if (findtime == -1) if (findtime == -1)
continue; continue;
// see if the file needs to be updated in the cache // see if the file needs to be updated in the cache
if (!com_cachedir[0]) if (!com_cachedir[0])
strcpy (cachepath, netpath); strcpy (cachepath, netpath);
else else
{ {
#if defined(_WIN32) #if defined(_WIN32)
if ((strlen(netpath) < 2) || (netpath[1] != ':')) if ((strlen(netpath) < 2) || (netpath[1] != ':'))
sprintf (cachepath,"%s%s", com_cachedir, netpath); sprintf (cachepath,"%s%s", com_cachedir, netpath);
@ -1442,11 +1442,11 @@ int COM_FindFile (char *filename, int *handle, FILE **file)
#endif #endif
cachetime = Sys_FileTime (cachepath); cachetime = Sys_FileTime (cachepath);
if (cachetime < findtime) if (cachetime < findtime)
COM_CopyFile (netpath, cachepath); COM_CopyFile (netpath, cachepath);
strcpy (netpath, cachepath); strcpy (netpath, cachepath);
} }
Sys_Printf ("FindFile: %s\n",netpath); Sys_Printf ("FindFile: %s\n",netpath);
com_filesize = Sys_FileOpenRead (netpath, &i); com_filesize = Sys_FileOpenRead (netpath, &i);
@ -1459,11 +1459,11 @@ int COM_FindFile (char *filename, int *handle, FILE **file)
} }
return com_filesize; return com_filesize;
} }
} }
Sys_Printf ("FindFile: can't find %s\n", filename); Sys_Printf ("FindFile: can't find %s\n", filename);
if (handle) if (handle)
*handle = -1; *handle = -1;
else else
@ -1510,11 +1510,11 @@ If it is a pak file handle, don't really close it
void COM_CloseFile (int h) void COM_CloseFile (int h)
{ {
searchpath_t *s; searchpath_t *s;
for (s = com_searchpaths ; s ; s=s->next) for (s = com_searchpaths ; s ; s=s->next)
if (s->pack && s->pack->handle == h) if (s->pack && s->pack->handle == h)
return; return;
Sys_FileClose (h); Sys_FileClose (h);
} }
@ -1543,10 +1543,10 @@ byte *COM_LoadFile (char *path, int usehunk)
len = COM_OpenFile (path, &h); len = COM_OpenFile (path, &h);
if (h == -1) if (h == -1)
return NULL; return NULL;
// extract the filename base name for hunk tag // extract the filename base name for hunk tag
COM_FileBase (path, base); COM_FileBase (path, base);
if (usehunk == 1) if (usehunk == 1)
buf = Hunk_AllocName (len+1, base); buf = Hunk_AllocName (len+1, base);
else if (usehunk == 2) else if (usehunk == 2)
@ -1567,11 +1567,11 @@ byte *COM_LoadFile (char *path, int usehunk)
if (!buf) if (!buf)
Sys_Error ("COM_LoadFile: not enough space for %s", path); Sys_Error ("COM_LoadFile: not enough space for %s", path);
((byte *)buf)[len] = 0; ((byte *)buf)[len] = 0;
Draw_BeginDisc (); Draw_BeginDisc ();
Sys_FileRead (h, buf, len); Sys_FileRead (h, buf, len);
COM_CloseFile (h); COM_CloseFile (h);
Draw_EndDisc (); Draw_EndDisc ();
@ -1598,11 +1598,11 @@ void COM_LoadCacheFile (char *path, struct cache_user_s *cu)
byte *COM_LoadStackFile (char *path, void *buffer, int bufsize) byte *COM_LoadStackFile (char *path, void *buffer, int bufsize)
{ {
byte *buf; byte *buf;
loadbuf = (byte *)buffer; loadbuf = (byte *)buffer;
loadsize = bufsize; loadsize = bufsize;
buf = COM_LoadFile (path, 4); buf = COM_LoadFile (path, 4);
return buf; return buf;
} }
@ -1672,7 +1672,7 @@ pack_t *COM_LoadPackFile (char *packfile)
pack->handle = packhandle; pack->handle = packhandle;
pack->numfiles = numpackfiles; pack->numfiles = numpackfiles;
pack->files = newfiles; pack->files = newfiles;
Con_Printf ("Added packfile %s (%i files)\n", packfile, numpackfiles); Con_Printf ("Added packfile %s (%i files)\n", packfile, numpackfiles);
return pack; return pack;
} }
@ -1683,7 +1683,7 @@ pack_t *COM_LoadPackFile (char *packfile)
COM_AddGameDirectory COM_AddGameDirectory
Sets com_gamedir, adds the directory to the head of the path, Sets com_gamedir, adds the directory to the head of the path,
then loads and adds pak1.pak pak2.pak ... then loads and adds pak1.pak pak2.pak ...
================ ================
*/ */
void COM_AddGameDirectory (char *dir) void COM_AddGameDirectory (char *dir)
@ -1715,7 +1715,7 @@ void COM_AddGameDirectory (char *dir)
search = Hunk_Alloc (sizeof(searchpath_t)); search = Hunk_Alloc (sizeof(searchpath_t));
search->pack = pak; search->pack = pak;
search->next = com_searchpaths; search->next = com_searchpaths;
com_searchpaths = search; com_searchpaths = search;
} }
// //
@ -1774,8 +1774,11 @@ void COM_InitFilesystem (void)
// //
// start up with GAMENAME by default (id1) // start up with GAMENAME by default (id1)
// //
COM_AddGameDirectory (va("%s/"GAMENAME, basedir) ); #ifdef USE_KALLISTIOS
COM_AddGameDirectory ("/rd/");
#else
COM_AddGameDirectory (va("%s/"GAMENAME, basedir) );
#endif
if (COM_CheckParm ("-rogue")) if (COM_CheckParm ("-rogue"))
COM_AddGameDirectory (va("%s/rogue", basedir) ); COM_AddGameDirectory (va("%s/rogue", basedir) );
if (COM_CheckParm ("-hipnotic")) if (COM_CheckParm ("-hipnotic"))
@ -1805,7 +1808,7 @@ void COM_InitFilesystem (void)
{ {
if (!com_argv[i] || com_argv[i][0] == '+' || com_argv[i][0] == '-') if (!com_argv[i] || com_argv[i][0] == '+' || com_argv[i][0] == '-')
break; break;
search = Hunk_Alloc (sizeof(searchpath_t)); search = Hunk_Alloc (sizeof(searchpath_t));
if ( !strcmp(COM_FileExtension(com_argv[i]), "pak") ) if ( !strcmp(COM_FileExtension(com_argv[i]), "pak") )
{ {
@ -1823,5 +1826,3 @@ void COM_InitFilesystem (void)
if (COM_CheckParm ("-proghack")) if (COM_CheckParm ("-proghack"))
proghack = qtrue; proghack = qtrue;
} }

View file

@ -8,7 +8,7 @@ of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details. See the GNU General Public License for more details.
@ -74,13 +74,15 @@ int UDP_Init (void)
WSADATA wsa; WSADATA wsa;
WSAStartup(MAKEWORD(1, 1), &wsa); WSAStartup(MAKEWORD(1, 1), &wsa);
#endif #endif
if (COM_CheckParm ("-noudp")) if (COM_CheckParm ("-noudp"))
return -1; return -1;
// determine my name & address // determine my name & address
#ifdef _EE #ifdef _EE
strcpy(buff, "PS2"); strcpy(buff, "PS2");
#elif USE_KALLISTIOS
strcpy(buff, "DC");
#else #else
gethostname(buff, MAXHOSTNAMELEN); gethostname(buff, MAXHOSTNAMELEN);
#endif #endif
@ -157,7 +159,7 @@ int UDP_OpenSocket (int port)
if (ioctl (newsocket, FIONBIO, (u_long*)&_qtrue) == -1) if (ioctl (newsocket, FIONBIO, (u_long*)&_qtrue) == -1)
#elif defined(_PSP) || defined(__vita__) #elif defined(_PSP) || defined(__vita__)
if(setsockopt(newsocket, SOL_SOCKET, SO_NONBLOCK, (char*)_qtrue, sizeof(_qtrue)) == -1) if(setsockopt(newsocket, SOL_SOCKET, SO_NONBLOCK, (char*)_qtrue, sizeof(_qtrue)) == -1)
#elif defined(_EE) #elif defined(_EE) || defined(USE_KALLISTIOS)
#else #else
if (ioctl (newsocket, FIONBIO, (char *)&_qtrue) == -1) if (ioctl (newsocket, FIONBIO, (char *)&_qtrue) == -1)
#endif #endif
@ -204,7 +206,7 @@ static int PartialIPAddress (char *in, struct qsockaddr *hostaddr)
int mask; int mask;
int run; int run;
int port; int port;
buff[0] = '.'; buff[0] = '.';
b = buff; b = buff;
strcpy(buff+1, in); strcpy(buff+1, in);
@ -231,16 +233,16 @@ static int PartialIPAddress (char *in, struct qsockaddr *hostaddr)
mask<<=8; mask<<=8;
addr = (addr<<8) + num; addr = (addr<<8) + num;
} }
if (*b++ == ':') if (*b++ == ':')
port = Q_atoi(b); port = Q_atoi(b);
else else
port = net_hostport; port = net_hostport;
hostaddr->sa_family = AF_INET; hostaddr->sa_family = AF_INET;
((struct sockaddr_in *)hostaddr)->sin_port = htons((short)port); ((struct sockaddr_in *)hostaddr)->sin_port = htons((short)port);
((struct sockaddr_in *)hostaddr)->sin_addr.s_addr = (myAddr & htonl(mask)) | htonl(addr); ((struct sockaddr_in *)hostaddr)->sin_addr.s_addr = (myAddr & htonl(mask)) | htonl(addr);
return 0; return 0;
} }
//============================================================================= //=============================================================================
@ -259,7 +261,7 @@ int UDP_CheckNewConnections (void)
if (net_acceptsocket == -1) if (net_acceptsocket == -1)
return -1; return -1;
#if defined(_PSP) || defined(_EE) || defined(__vita__) #if defined(_PSP) || defined(_EE) || defined(__vita__) || defined(USE_KALLISTIOS)
#else #else
if (ioctl (net_acceptsocket, FIONREAD, &available) == -1) if (ioctl (net_acceptsocket, FIONREAD, &available) == -1)
Sys_Error ("UDP: ioctlsocket (FIONREAD) failed\n"); Sys_Error ("UDP: ioctlsocket (FIONREAD) failed\n");
@ -379,6 +381,10 @@ int UDP_GetNameFromAddr (struct qsockaddr *addr, char *name)
{ {
struct hostent *hostentry; struct hostent *hostentry;
#ifdef USE_KALLISTIOS
printf("UDP_GetNameFromAddr STUB");
#else
hostentry = gethostbyaddr ((char *)&((struct sockaddr_in *)addr)->sin_addr, sizeof(struct in_addr), AF_INET); hostentry = gethostbyaddr ((char *)&((struct sockaddr_in *)addr)->sin_addr, sizeof(struct in_addr), AF_INET);
if (hostentry) if (hostentry)
{ {
@ -387,6 +393,7 @@ int UDP_GetNameFromAddr (struct qsockaddr *addr, char *name)
} }
Q_strcpy (name, UDP_AddrToString (addr)); Q_strcpy (name, UDP_AddrToString (addr));
#endif
return 0; return 0;
} }
@ -398,13 +405,13 @@ int UDP_GetAddrFromName(char *name, struct qsockaddr *addr)
if (name[0] >= '0' && name[0] <= '9') if (name[0] >= '0' && name[0] <= '9')
return PartialIPAddress (name, addr); return PartialIPAddress (name, addr);
hostentry = gethostbyname (name); hostentry = gethostbyname (name);
if (!hostentry) if (!hostentry)
return -1; return -1;
addr->sa_family = AF_INET; addr->sa_family = AF_INET;
((struct sockaddr_in *)addr)->sin_port = htons(net_hostport); ((struct sockaddr_in *)addr)->sin_port = htons(net_hostport);
((struct sockaddr_in *)addr)->sin_addr.s_addr = *(int *)hostentry->h_addr_list[0]; ((struct sockaddr_in *)addr)->sin_addr.s_addr = *(int *)hostentry->h_addr_list[0];
return 0; return 0;

View file

@ -4,236 +4,295 @@
static MwWidget win = NULL; static MwWidget win = NULL;
static MwWidget opengl; static MwWidget opengl;
static int MilskoToQuakeKey(int key){ static int MilskoToQuakeKey(int key) {
if(key == MwKEY_ENTER) key = K_ENTER; if (key == MwKEY_ENTER)
if(key == MwKEY_ESCAPE) key = K_ESCAPE; key = K_ENTER;
if(key == MwKEY_BACKSPACE) key = K_BACKSPACE; if (key == MwKEY_ESCAPE)
if(key == MwKEY_LEFT) key = K_LEFTARROW; key = K_ESCAPE;
if(key == MwKEY_RIGHT) key = K_RIGHTARROW; if (key == MwKEY_BACKSPACE)
if(key == MwKEY_UP) key = K_UPARROW; key = K_BACKSPACE;
if(key == MwKEY_DOWN) key = K_DOWNARROW; if (key == MwKEY_LEFT)
if(key == MwKEY_LEFTSHIFT) key = K_SHIFT; key = K_LEFTARROW;
if(key == MwKEY_RIGHTSHIFT) key = K_SHIFT; if (key == MwKEY_RIGHT)
if(key == MwKEY_ALT) key = K_ALT; key = K_RIGHTARROW;
if(key == MwKEY_CONTROL) key = K_CTRL; if (key == MwKEY_UP)
key = K_UPARROW;
if (key == MwKEY_DOWN)
key = K_DOWNARROW;
if (key == MwKEY_LEFTSHIFT)
key = K_SHIFT;
if (key == MwKEY_RIGHTSHIFT)
key = K_SHIFT;
if (key == MwKEY_ALT)
key = K_ALT;
if (key == MwKEY_CONTROL)
key = K_CTRL;
if('A' <= key && key <= 'Z') return tolower(key); if ('A' <= key && key <= 'Z')
return tolower(key);
return key; return key;
} }
static int MilskoToQuakeMouse(int btn){ static int MilskoToQuakeMouse(int btn) {
int b = 0; int b = 0;
if(btn == MwMOUSE_LEFT) b = 0; if (btn == MwMOUSE_LEFT)
if(btn == MwMOUSE_MIDDLE) b = 2; b = 0;
if(btn == MwMOUSE_RIGHT) b = 1; if (btn == MwMOUSE_MIDDLE)
if(btn == MwMOUSE_WHEELUP) return K_MWHEELUP; b = 2;
if(btn == MwMOUSE_WHEELDOWN) return K_MWHEELDOWN; if (btn == MwMOUSE_RIGHT)
b = 1;
if (btn == MwMOUSE_WHEELUP)
return K_MWHEELUP;
if (btn == MwMOUSE_WHEELDOWN)
return K_MWHEELDOWN;
return K_MOUSE1 + b; return K_MOUSE1 + b;
} }
static void MWAPI mousemove(MwWidget handle, void* user, void* call) { static void MWAPI mousemove(MwWidget handle, void *user, void *call) {
MwPoint* p = call; MwPoint *p = call;
int vecX = p->x; int vecX = p->x;
int vecY = p->y; int vecY = p->y;
if (mouse_active) { if (mouse_active) {
mx += vecX * 2; mx += vecX * 2;
my += vecY * 2; my += vecY * 2;
} }
} }
static void MWAPI key(MwWidget handle, void* user, void* call){ static void MWAPI key(MwWidget handle, void *user, void *call) {
int k = *(int*)call; int k = *(int *)call;
k = MilskoToQuakeKey(k); k = MilskoToQuakeKey(k);
if(k == -0xdead) return; if (k == -0xdead)
if(k & MwKEY_FLAG) return; return;
Key_Event(k, 1); if (k & MwKEY_FLAG)
return;
Key_Event(k, 1);
} }
static void MWAPI keyrelease(MwWidget handle, void* user, void* call){ static void MWAPI keyrelease(MwWidget handle, void *user, void *call) {
int k = *(int*)call; int k = *(int *)call;
k = MilskoToQuakeKey(k); k = MilskoToQuakeKey(k);
if(k == -0xdead) return; if (k == -0xdead)
if(k & MwKEY_FLAG) return; return;
Key_Event(k, 0); if (k & MwKEY_FLAG)
return;
Key_Event(k, 0);
} }
static void MWAPI mousedown(MwWidget handle, void* user, void* call){ static void MWAPI mousedown(MwWidget handle, void *user, void *call) {
MwMouse* m = call; MwMouse *m = call;
Key_Event(MilskoToQuakeMouse(m->button), 1); Key_Event(MilskoToQuakeMouse(m->button), 1);
} }
static void MWAPI mouseup(MwWidget handle, void* user, void* call){ static void MWAPI mouseup(MwWidget handle, void *user, void *call) {
MwMouse* m = call; MwMouse *m = call;
Key_Event(MilskoToQuakeMouse(m->button), 0); Key_Event(MilskoToQuakeMouse(m->button), 0);
} }
static void MWAPI focusin(MwWidget handle, void* user, void* call){ static void MWAPI focusin(MwWidget handle, void *user, void *call) {
if(mouse_active){ if (mouse_active) {
MwGrabPointer(opengl, 0); MwGrabPointer(opengl, 0);
MwGrabPointer(opengl, 1); MwGrabPointer(opengl, 1);
} }
} }
static void MWAPI focusout(MwWidget handle, void* user, void* call){ static void MWAPI focusout(MwWidget handle, void *user, void *call) {
MwGrabPointer(opengl, 0); MwGrabPointer(opengl, 0);
} }
void Port_Init(int width, int height) {
MwSizeHints sh;
MwWidget label;
void Port_Init(int width, int height){ MwLibraryInit();
MwSizeHints sh;
MwWidget label;
MwLibraryInit(); win = MwVaCreateWidget(MwWindowClass, "Quake", NULL, MwDEFAULT, MwDEFAULT,
width, height + 24, MwNtitle, "Quake", NULL);
label = MwVaCreateWidget(MwLabelClass, "Label", win, 0, height, width, 24,
MwNtext, "Milsko Quake!", NULL);
opengl = MwCreateWidget(MwOpenGLClass, "OpenGL", win, 0, 0, width, height);
win = MwVaCreateWidget(MwWindowClass, "Quake", NULL, MwDEFAULT, MwDEFAULT, width, height + 24, sh.min_width = sh.max_width = width;
MwNtitle, "Quake", sh.min_height = sh.max_height = height + 24;
NULL); MwVaApply(win, MwNsizeHints, &sh, NULL);
label = MwVaCreateWidget(MwLabelClass, "Label", win, 0, height, width, 24,
MwNtext, "Milsko Quake!",
NULL);
opengl = MwCreateWidget(MwOpenGLClass, "OpenGL", win, 0, 0, width, height);
sh.min_width = sh.max_width = width; MwOpenGLMakeCurrent(opengl);
sh.min_height = sh.max_height = height + 24;
MwVaApply(win,
MwNsizeHints, &sh,
NULL);
MwOpenGLMakeCurrent(opengl); MwAddUserHandler(opengl, MwNmouseMoveHandler, mousemove, NULL);
MwAddUserHandler(opengl, MwNkeyHandler, key, NULL);
MwAddUserHandler(opengl, MwNkeyReleaseHandler, keyrelease, NULL);
MwAddUserHandler(opengl, MwNmouseDownHandler, mousedown, NULL);
MwAddUserHandler(opengl, MwNmouseUpHandler, mouseup, NULL);
MwAddUserHandler(opengl, MwNfocusInHandler, focusin, NULL);
MwAddUserHandler(opengl, MwNfocusOutHandler, focusout, NULL);
MwAddUserHandler(opengl, MwNmouseMoveHandler, mousemove, NULL); if (fullscreen) {
MwAddUserHandler(opengl, MwNkeyHandler, key, NULL); /* todo */
MwAddUserHandler(opengl, MwNkeyReleaseHandler, keyrelease, NULL); }
MwAddUserHandler(opengl, MwNmouseDownHandler, mousedown, NULL);
MwAddUserHandler(opengl, MwNmouseUpHandler, mouseup, NULL);
MwAddUserHandler(opengl, MwNfocusInHandler, focusin, NULL);
MwAddUserHandler(opengl, MwNfocusOutHandler, focusout, NULL);
if(fullscreen){
/* todo */
}
} }
void Port_Step(void){ void Port_Step(void) {
if(!win) return; if (!win)
return;
if(MwPending(win)) MwStep(win); if (MwPending(win))
MwStep(win);
} }
void Port_GrabPointer(int toggle){ void Port_GrabPointer(int toggle) {
if(!win) return; if (!win)
return;
if(toggle){ if (toggle) {
MwHideCursor(opengl); MwHideCursor(opengl);
MwGrabPointer(opengl, 1); MwGrabPointer(opengl, 1);
}else{ } else {
MwGrabPointer(opengl, 0); MwGrabPointer(opengl, 0);
} }
} }
void Port_Shutdown(void){ void Port_Shutdown(void) {
if (win) { if (win) {
MwDestroyWidget(win); MwDestroyWidget(win);
} }
win = NULL; win = NULL;
} }
void Port_SwapBuffer(void){ void Port_SwapBuffer(void) { MwOpenGLSwapBuffer(opengl); }
MwOpenGLSwapBuffer(opengl);
}
#endif #endif
#ifdef USE_SDL2 #ifdef USE_SDL2
static SDL_Window* win; static SDL_Window *win;
static SDL_GLContext context; static SDL_GLContext context;
void Port_Init(int width, int height){ void Port_Init(int width, int height) {
SDL_Init(SDL_INIT_VIDEO); SDL_Init(SDL_INIT_VIDEO);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
win = SDL_CreateWindow("Quake", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL); win =
context = SDL_GL_CreateContext(win); SDL_CreateWindow("Quake", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
width, height, SDL_WINDOW_OPENGL);
context = SDL_GL_CreateContext(win);
} }
void Port_Step(void){ void Port_Step(void) {
if(!win) return; if (!win)
return;
SDL_Event ev; SDL_Event ev;
while(SDL_PollEvent(&ev)){ while (SDL_PollEvent(&ev)) {
if(ev.type == SDL_MOUSEMOTION){ if (ev.type == SDL_MOUSEMOTION) {
if (mouse_active) { if (mouse_active) {
mx += ev.motion.xrel * 2; mx += ev.motion.xrel * 2;
my += ev.motion.yrel * 2; my += ev.motion.yrel * 2;
} }
}else if(ev.type == SDL_MOUSEBUTTONDOWN || ev.type == SDL_MOUSEBUTTONUP){ } else if (ev.type == SDL_MOUSEBUTTONDOWN || ev.type == SDL_MOUSEBUTTONUP) {
int b = 0; int b = 0;
int btn = ev.button.button; int btn = ev.button.button;
if(btn == SDL_BUTTON_LEFT) b = 0; if (btn == SDL_BUTTON_LEFT)
if(btn == SDL_BUTTON_MIDDLE) b = 2; b = 0;
if(btn == SDL_BUTTON_RIGHT) b = 1; if (btn == SDL_BUTTON_MIDDLE)
b = 2;
if (btn == SDL_BUTTON_RIGHT)
b = 1;
Key_Event(K_MOUSE1 + b, ev.type == SDL_MOUSEBUTTONDOWN); Key_Event(K_MOUSE1 + b, ev.type == SDL_MOUSEBUTTONDOWN);
}else if(ev.type == SDL_MOUSEWHEEL){ } else if (ev.type == SDL_MOUSEWHEEL) {
int k; int k;
if(ev.wheel.y > 0){ if (ev.wheel.y > 0) {
k = K_MWHEELUP; k = K_MWHEELUP;
}else if(ev.wheel.y < 0){ } else if (ev.wheel.y < 0) {
k = K_MWHEELDOWN; k = K_MWHEELDOWN;
} }
Key_Event(k, 1); Key_Event(k, 1);
Key_Event(k, 0); Key_Event(k, 0);
}else if(ev.type == SDL_KEYDOWN || ev.type == SDL_KEYUP){ } else if (ev.type == SDL_KEYDOWN || ev.type == SDL_KEYUP) {
int key = ev.key.keysym.sym; int key = ev.key.keysym.sym;
if(key == SDLK_RETURN) key = K_ENTER; if (key == SDLK_RETURN)
if(key == SDLK_ESCAPE) key = K_ESCAPE; key = K_ENTER;
if(key == SDLK_BACKSPACE) key = K_BACKSPACE; if (key == SDLK_ESCAPE)
if(key == SDLK_LEFT) key = K_LEFTARROW; key = K_ESCAPE;
if(key == SDLK_RIGHT) key = K_RIGHTARROW; if (key == SDLK_BACKSPACE)
if(key == SDLK_UP) key = K_UPARROW; key = K_BACKSPACE;
if(key == SDLK_DOWN) key = K_DOWNARROW; if (key == SDLK_LEFT)
if(key == SDLK_LSHIFT) key = K_SHIFT; key = K_LEFTARROW;
if(key == SDLK_RSHIFT) key = K_SHIFT; if (key == SDLK_RIGHT)
if(key == SDLK_LALT) key = K_ALT; key = K_RIGHTARROW;
if(key == SDLK_RALT) key = K_ALT; if (key == SDLK_UP)
if(key == SDLK_LCTRL) key = K_CTRL; key = K_UPARROW;
if(key == SDLK_RCTRL) key = K_CTRL; if (key == SDLK_DOWN)
if(key == SDLK_LGUI) key = K_SUPER; key = K_DOWNARROW;
if(key == SDLK_RGUI) key = K_SUPER; if (key == SDLK_LSHIFT)
if(SDLK_a <= key && key <= SDLK_z) key = key - SDLK_a + 'a'; key = K_SHIFT;
if(SDLK_0 <= key && key <= SDLK_9) key = key - SDLK_0 + '0'; if (key == SDLK_RSHIFT)
key = K_SHIFT;
if (key == SDLK_LALT)
key = K_ALT;
if (key == SDLK_RALT)
key = K_ALT;
if (key == SDLK_LCTRL)
key = K_CTRL;
if (key == SDLK_RCTRL)
key = K_CTRL;
if (key == SDLK_LGUI)
key = K_SUPER;
if (key == SDLK_RGUI)
key = K_SUPER;
if (SDLK_a <= key && key <= SDLK_z)
key = key - SDLK_a + 'a';
if (SDLK_0 <= key && key <= SDLK_9)
key = key - SDLK_0 + '0';
Key_Event(key, ev.type == SDL_KEYDOWN); Key_Event(key, ev.type == SDL_KEYDOWN);
} }
} }
} }
void Port_GrabPointer(int toggle){ void Port_GrabPointer(int toggle) {
if(toggle){ if (toggle) {
SDL_ShowCursor(0); SDL_ShowCursor(0);
} }
SDL_SetWindowMouseGrab(win, toggle); SDL_SetWindowMouseGrab(win, toggle);
SDL_SetWindowKeyboardGrab(win, toggle); SDL_SetWindowKeyboardGrab(win, toggle);
if(toggle){ if (toggle) {
SDL_SetRelativeMouseMode(SDL_TRUE); SDL_SetRelativeMouseMode(SDL_TRUE);
SDL_SetHint(SDL_HINT_MOUSE_RELATIVE_MODE_WARP, "0"); SDL_SetHint(SDL_HINT_MOUSE_RELATIVE_MODE_WARP, "0");
} }
} }
void Port_Shutdown(void) { SDL_Quit(); }
void Port_SwapBuffer(void) { SDL_GL_SwapWindow(win); }
#endif
#ifdef USE_KALLISTIOS
#include <kos.h>
KOS_INIT_FLAGS(INIT_DEFAULT);
#include <GL/glkos.h>
#include <stdio.h>
void Port_Init(int width, int height) {
glKosInit();
}
void Port_Step(void) {
}
void Port_GrabPointer(int toggle) {}
void Port_Shutdown(void) {}
void Port_SwapBuffer(void) {
glKosSwapBuffers();
}
void Port_Shutdown(void){
SDL_Quit();
}
void Port_SwapBuffer(void){
SDL_GL_SwapWindow(win);
}
#endif #endif

38
src/snd_dc.c Normal file
View file

@ -0,0 +1,38 @@
/*
Copyright (C) 1996-1997 Id Software, Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifdef USE_KALLISTIOS
#include "quakedef.h"
int snd_inited;
int total = 0;
#define BUFFER_SIZE 4096 * 4
unsigned char dma_buffer[BUFFER_SIZE];
qboolean SNDDMA_Init(void) { return 1; }
int SNDDMA_GetDMAPos(void) { return 0; }
int SNDDMA_GetSamples(void) { return total; }
void SNDDMA_Shutdown(void) {}
void SNDDMA_Submit(void) {}
#endif