JoeQuake is an improved NQ engine with plenty of ZQuake and FuhQuake graphical

effects included. JoeQuake's main aim is to provide pleasant demo watching for
.dem files. JoeQuake also supports better graphical quality including 32bit
textures, colored lights, smoother animations, etc.

WWW: http://runecentral.com/joequake/

PR:		ports/91890
Submitted by:	Alejandro Pulver <alejandro@varnet.biz>
Approved by:	garga (mentor)
This commit is contained in:
Alejandro Pulver 2006-05-07 16:12:44 +00:00
parent 9834ff02ed
commit 92ee4ebd70
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=161615
21 changed files with 1098 additions and 0 deletions

View file

@ -311,6 +311,7 @@
SUBDIR += jetpack
SUBDIR += jfduke3d
SUBDIR += jfk
SUBDIR += joequake
SUBDIR += jools
SUBDIR += jtans
SUBDIR += jumpnbump

118
games/joequake/Makefile Normal file
View file

@ -0,0 +1,118 @@
# New ports collection makefile for: joequake
# Date created: 5 May 2006
# Whom: alepulver
#
# $FreeBSD$
#
PORTNAME= joequake
PORTVERSION= 0.15b1329
CATEGORIES= games
MASTER_SITES= http://runecentral.com/joequake/
DISTNAME= ${PORTNAME}-v${PORTVERSION}-source
DISTFILES= ${DISTNAME}${EXTRACT_SUFX} \
${PORTNAME}-v0.15b1146-linux${EXTRACT_SUFX}
DIST_SUBDIR= ${PORTNAME}
MAINTAINER= alepulver@FreeBSD.org
COMMENT= Improved NQ engine with ZQuake and FuhQuake graphical effects
LIB_DEPENDS= png.5:${PORTSDIR}/graphics/png
WRKSRC= ${WRKDIR}/src
USE_GCC= 3.2+
USE_GMAKE= yes
USE_ZIP= yes
MAKEFILE= Makefile.linux
OPTIONS= GLX "Build GLX client" on \
HUD "High quality HUD images (for OpenGL)" off \
HUD_SA "Same for Scourge of Armagon (hipnotic)" off \
OPTIMIZED_CFLAGS "Enable compilation optimizations" on \
X11 "Build X11 client" on \
X86_ASM "Enable x86 assembly code" on
DATADIR= ${Q1DIR}
MAKE_ENV= DATADIR="${DATADIR}"
.include "${.CURDIR}/../quake-data/Makefile.include"
.include <bsd.port.pre.mk>
.if defined(WITHOUT_GLX) && defined(WITHOUT_X11)
IGNORE= needs at least one interface (GLX or X11)
.endif
.if !defined(WITHOUT_GLX)
USE_GL= yes
LIB_DEPENDS+= jpeg.9:${PORTSDIR}/graphics/jpeg
ALL_TARGET+= glx
PLIST_SUB+= GLX=""
.else
PLIST_SUB+= GLX="@comment "
.endif
.if defined(WITH_HUD)
DISTFILES+= joequake_wad${EXTRACT_SUFX}
PLIST_SUB+= HUD=""
.else
PLIST_SUB+= HUD="@comment "
.endif
.if defined(WITH_HUD_SA)
DISTFILES+= hipnotic_wad${EXTRACT_SUFX}
PLIST_SUB+= HUD_SA=""
.else
PLIST_SUB+= HUD_SA="@comment "
.endif
.if defined(WITH_HUD) || defined(WITH_HUD_SA)
PLIST_SUB+= HUD_DIR=""
.else
PLIST_SUB+= HUD_DIR="@comment "
.endif
.for f in OPTIMIZED_CFLAGS X86_ASM
. if !defined(WITHOUT_${f})
MAKE_ENV+= USE_${f}=YES
. else
MAKE_ENV+= USE_${f}=NO
. endif
.endfor
.if !defined(WITHOUT_X11)
USE_XLIB= yes
ALL_TARGET+= x11
PLIST_SUB+= X11=""
.else
PLIST_SUB+= X11="@comment "
.endif
do-install:
${MKDIR} ${DATADIR}/${PORTNAME}
${INSTALL_DATA} ${WRKDIR}/${PORTNAME}/pak0.pak ${DATADIR}/${PORTNAME}
.if !defined(WITHOUT_GLX)
${INSTALL_PROGRAM} ${WRKSRC}/release_glx/joequake-gl.glx \
${PREFIX}/bin/joequake-glx
.endif
.if defined(WITH_HUD) || defined(WITH_HUD_SA)
${MKDIR} ${DATADIR}/${PORTNAME}/textures/wad
${INSTALL_DATA} ${WRKDIR}/wad/* ${DATADIR}/${PORTNAME}/textures/wad
.endif
.if !defined(WITHOUT_X11)
${INSTALL_PROGRAM} ${WRKSRC}/release_x11/joequake.x11 \
${PREFIX}/bin/joequake-x11
.endif
.if !defined(NOPORTDOCS)
${MKDIR} ${DOCSDIR}
${INSTALL_DATA} ${WRKDIR}/${PORTNAME}/doc/*.txt ${DOCSDIR}
.endif
post-install:
@${ECHO_CMD}
@${CAT} ${PKGMESSAGE}
@${ECHO_CMD}
.include <bsd.port.post.mk>

12
games/joequake/distinfo Normal file
View file

@ -0,0 +1,12 @@
MD5 (joequake/joequake-v0.15b1329-source.zip) = 6b3125f1abb490f4e11956b692746488
SHA256 (joequake/joequake-v0.15b1329-source.zip) = 4be0fc0210859746a931982687328c7c24b2c7169c66d7ae5f2c3e34cce2c518
SIZE (joequake/joequake-v0.15b1329-source.zip) = 1327427
MD5 (joequake/joequake-v0.15b1146-linux.zip) = 7288c2ad0b2859ac1fe7f4ae1f3e6e31
SHA256 (joequake/joequake-v0.15b1146-linux.zip) = 7b478afd56f083065e0e306b77abbad91676b634395e947fd1615d4c1a7c2b96
SIZE (joequake/joequake-v0.15b1146-linux.zip) = 4848059
MD5 (joequake/joequake_wad.zip) = 33219a7615c8265845948099c9c86b80
SHA256 (joequake/joequake_wad.zip) = 754f4b0990777f509987c7a4f5382cf98cd063c7f2e4a3df3e757ddfb3af9191
SIZE (joequake/joequake_wad.zip) = 1053818
MD5 (joequake/hipnotic_wad.zip) = b517d91207f39edc4f096f704dcc89dc
SHA256 (joequake/hipnotic_wad.zip) = 267e354c20c35f414513c5d73c536aff9a431a1271f125c450c40f08963c3189
SIZE (joequake/hipnotic_wad.zip) = 272279

View file

@ -0,0 +1,151 @@
--- Makefile.linux.orig Wed Sep 7 20:11:50 2005
+++ Makefile.linux Sun Jan 15 01:54:54 2006
@@ -4,14 +4,25 @@
# by Slawomir Mazurek <homer13@o2.pl>
#
-CC := gcc
-_E := @
+# this nice line comes from the linux kernel makefile
+ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc/ -e s/sparc64/sparc/ -e s/arm.*/arm/ -e s/sa110/arm/ -e s/alpha/axp/)
+OSTYPE := $(shell uname -s)
+
+CC ?= gcc
+#_E := @
+LOCALBASE ?= /usr/local
+X11BASE ?= /usr/X11R6
+USE_OPTIMIZE ?= YES
+
+ifeq ($(ARCH),i386)
+USE_X86_ASM ?= YES
+else
+USE_X86_ASM ?= NO
+endif
################
-default_target: glx
-
-all: glx x11 svga
+all:
################################
# Directories for object files #
@@ -43,11 +54,12 @@
$(GLX_DIR) $(X11_DIR) $(SVGA_DIR):
$(MKDIR)
-CFLAGS += -Did386 -funsigned-char -O6 \
- -D__linux__ -march=pentiumpro -Wall \
- -funroll-loops -fomit-frame-pointer -DNDEBUG \
- -ffast-math -fno-strength-reduce -fexpensive-optimizations \
- -I/usr/include
+CFLAGS += -DNDEBUG -DDATADIR='"$(DATADIR)"'
+
+ifeq ($(strip $(USE_OPTIMIZE)),YES)
+CFLAGS += -O1 -funsigned-char -funroll-loops -fomit-frame-pointer \
+ -ffast-math -fno-strength-reduce -fexpensive-optimizations
+endif
LDFLAGS := -lm
@@ -75,19 +87,25 @@
image version security iplog \
slist
+ifeq ($(strip $(USE_X86_ASM)),YES)
GLX_S_FILES := \
math snd_mixa sys_x86
+endif
GLX_C_OBJS := $(addprefix $(GLX_DIR)/, $(addsuffix .o, $(GLX_C_FILES)))
GLX_S_OBJS := $(addprefix $(GLX_DIR)/, $(addsuffix .o, $(GLX_S_FILES)))
GLX_CFLAGS := $(CFLAGS) \
- -DGLQUAKE -I/usr/X11R6/include
+ -DGLQUAKE -I$(X11BASE)/include
+
+ifeq ($(strip $(USE_X86_ASM)),YES)
+GLX_CFLAGS += -Did386
+endif
GLX_LDFLAGS := $(LDFLAGS) \
- -lGL -L/usr/X11R6/lib -lX11 \
- -lXext -lXxf86dga -lXxf86vm \
- -lpng -ljpeg
+ -L$(X11BASE)/lib -lGL -lX11 \
+ -lXext -lXxf86dga -lXxf86vm \
+ -L$(LOCALBASE)/lib -lpng -ljpeg
glx: _DIR := $(GLX_DIR)
glx: _OBJS := $(GLX_C_OBJS) $(GLX_S_OBJS)
@@ -138,27 +156,37 @@
snd_linux image version security \
iplog slist
+ifeq ($(strip $(USE_X86_ASM)),YES)
X11_S_FILES := \
d_copy d_draw d_draw16 d_parta \
d_polysa d_scana d_spr8 d_varsa \
math r_aclipa r_aliasa r_drawa \
r_edgea r_varsa snd_mixa surf8 \
sys_x86
+endif
X11_C_OBJS := $(addprefix $(X11_DIR)/, $(addsuffix .o, $(X11_C_FILES)))
X11_S_OBJS := $(addprefix $(X11_DIR)/, $(addsuffix .o, $(X11_S_FILES)))
-X11_CFLAGS := $(CFLAGS)
+X11_CFLAGS := $(CFLAGS) -I$(X11BASE)/include
+
+ifeq ($(strip $(USE_X86_ASM)),YES)
+X11_CFLAGS += -Did386
+endif
X11_LDFLAGS := $(LDFLAGS) \
- -L/usr/X11R6/lib -lX11 -lXext \
- -lpng
+ -L$(X11BASE)/lib -lX11 -lXext \
+ -L$(LOCALBASE)/lib -lpng
+ifeq ($(ARCH),i386)
x11: _DIR := $(X11_DIR)
x11: _OBJS := $(X11_C_OBJS) $(X11_S_OBJS)
x11: _LDFLAGS := $(X11_LDFLAGS)
x11: _CFLAGS := $(X11_CFLAGS)
x11: $(X11_TARGET)
+else
+x11:
+endif
$(X11_TARGET): $(X11_DIR) $(X11_C_OBJS) $(X11_S_OBJS)
$(BUILD)
@@ -213,17 +241,25 @@
SVGA_C_OBJS := $(addprefix $(SVGA_DIR)/, $(addsuffix .o, $(SVGA_C_FILES)))
SVGA_S_OBJS := $(addprefix $(SVGA_DIR)/, $(addsuffix .o, $(SVGA_S_FILES)))
-SVGA_CFLAGS := $(CFLAGS)
+SVGA_CFLAGS := $(CFLAGS) -Did386 -I$(LOCALBASE)/include
SVGA_LDFLAGS := $(LDFLAGS) \
- -L/usr/X11R6/lib -lX11 -lpthread \
- -lvga -lpng
+ -L$(X11BASE)/lib -lX11 -lpthread \
+ -L$(LOCALBASE)/lib -lvga -lpng
+ifeq ($(OSTYPE),Linux)
+ ifeq ($(ARCH),i386)
svga: _DIR := $(SVGA_DIR)
svga: _OBJS := $(SVGA_C_OBJS) $(SVGA_S_OBJS)
svga: _LDFLAGS := $(SVGA_LDFLAGS)
svga: _CFLAGS := $(SVGA_CFLAGS)
svga: $(SVGA_TARGET)
+ else
+svga:
+ endif
+else
+svga:
+endif
$(SVGA_TARGET): $(SVGA_DIR) $(SVGA_C_OBJS) $(SVGA_S_OBJS)
$(BUILD)

View file

@ -0,0 +1,254 @@
--- cd_linux.c.orig Sun Aug 14 10:09:04 2005
+++ cd_linux.c Wed Dec 7 17:22:17 2005
@@ -31,7 +31,11 @@
#include <time.h>
#include <errno.h>
+#ifdef __FreeBSD__
+#include <sys/cdio.h>
+#else
#include <linux/cdrom.h>
+#endif
#include "quakedef.h"
@@ -54,8 +58,13 @@
if (cdfile == -1 || !enabled)
return; // no cd init'd
+#ifdef __FreeBSD__
+ if (ioctl(cdfile, CDIOCEJECT) == -1)
+ Con_DPrintf ("ioctl cdioceject failed\n");
+#else
if (ioctl(cdfile, CDROMEJECT) == -1)
Con_DPrintf ("ioctl cdromeject failed\n");
+#endif
}
static void CDAudio_CloseDoor (void)
@@ -63,38 +72,67 @@
if (cdfile == -1 || !enabled)
return; // no cd init'd
+#ifdef __FreeBSD__
+ if (ioctl(cdfile, CDIOCCLOSE) == -1)
+ Con_DPrintf ("ioctl cdiocclose failed\n");
+#else
if (ioctl(cdfile, CDROMCLOSETRAY) == -1)
Con_DPrintf ("ioctl cdromclosetray failed\n");
+#endif
}
static int CDAudio_GetAudioDiskInfo (void)
{
+#ifdef __FreeBSD__
+ struct ioc_toc_header tochdr;
+#else
struct cdrom_tochdr tochdr;
+#endif
cdValid = false;
+#ifdef __FreeBSD__
+ if (ioctl(cdfile, CDIOREADTOCHEADER, &tochdr) == -1)
+ {
+ Con_DPrintf ("ioctl cdioreadtocheader failed\n");
+#else
if (ioctl(cdfile, CDROMREADTOCHDR, &tochdr) == -1)
{
Con_DPrintf ("ioctl cdromreadtochdr failed\n");
+#endif
return -1;
}
+#ifdef __FreeBSD__
+ if (tochdr.starting_track < 1)
+#else
if (tochdr.cdth_trk0 < 1)
+#endif
{
Con_DPrintf ("CDAudio: no music tracks\n");
return -1;
}
cdValid = true;
+#ifdef __FreeBSD__
+ maxTrack = tochdr.ending_track;
+#else
maxTrack = tochdr.cdth_trk1;
+#endif
return 0;
}
void CDAudio_Play (byte track, qboolean looping)
{
+#ifdef __FreeBSD__
+ struct ioc_read_toc_entry entry;
+ struct cd_toc_entry toc_buffer;
+ struct ioc_play_track ti;
+#else
struct cdrom_tocentry entry;
struct cdrom_ti ti;
+#endif
if (cdfile == -1 || !enabled)
return;
@@ -114,6 +152,21 @@
return;
}
+#ifdef __FreeBSD__
+ #define CDROM_DATA_TRACK 4
+ bzero((char *)&toc_buffer, sizeof(toc_buffer));
+ entry.data_len = sizeof(toc_buffer);
+ entry.data = &toc_buffer;
+ // don't try to play a non-audio track
+ entry.starting_track = track;
+ entry.address_format = CD_MSF_FORMAT;
+ if ( ioctl(cdfile, CDIOREADTOCENTRYS, &entry) == -1 )
+ {
+ Con_DPrintf("ioctl cdromreadtocentry failed\n");
+ return;
+ }
+ if (toc_buffer.control == CDROM_DATA_TRACK)
+#else
// don't try to play a non-audio track
entry.cdte_track = track;
entry.cdte_format = CDROM_MSF;
@@ -123,6 +176,7 @@
return;
}
if (entry.cdte_ctrl == CDROM_DATA_TRACK)
+#endif
{
Con_Printf ("CDAudio: track %i is not audio\n", track);
return;
@@ -135,19 +189,37 @@
CDAudio_Stop ();
}
+#ifdef __FreeBSD__
+ ti.start_track = track;
+ ti.end_track = track;
+ ti.start_index = 1;
+ ti.end_index = 99;
+#else
ti.cdti_trk0 = track;
ti.cdti_trk1 = track;
ti.cdti_ind0 = 1;
ti.cdti_ind1 = 99;
+#endif
+#ifdef __FreeBSD__
+ if (ioctl(cdfile, CDIOCPLAYTRACKS, &ti) == -1)
+ {
+ Con_DPrintf ("ioctl cdiocplaytracks failed\n");
+#else
if (ioctl(cdfile, CDROMPLAYTRKIND, &ti) == -1)
{
Con_DPrintf ("ioctl cdromplaytrkind failed\n");
+#endif
return;
}
+#ifdef __FreeBSD__
+ if (ioctl(cdfile, CDIOCRESUME) == -1)
+ Con_DPrintf ("ioctl cdiocresume failed\n");
+#else
if (ioctl(cdfile, CDROMRESUME) == -1)
Con_DPrintf ("ioctl cdromresume failed\n");
+#endif
playLooping = looping;
playTrack = track;
@@ -165,8 +237,13 @@
if (!playing)
return;
+#ifdef __FreeBSD__
+ if (ioctl(cdfile, CDIOCSTOP) == -1)
+ Con_DPrintf ("ioctl cdiocstop failed (%d)\n", errno);
+#else
if (ioctl(cdfile, CDROMSTOP) == -1)
Con_DPrintf ("ioctl cdromstop failed (%d)\n", errno);
+#endif
wasPlaying = false;
playing = false;
@@ -180,8 +257,13 @@
if (!playing)
return;
+#ifdef __FreeBSD__
+ if (ioctl(cdfile, CDIOCPAUSE) == -1)
+ Con_DPrintf ("ioctl cdiocpause failed\n");
+#else
if (ioctl(cdfile, CDROMPAUSE) == -1)
Con_DPrintf ("ioctl cdrompause failed\n");
+#endif
wasPlaying = playing;
playing = false;
@@ -197,9 +279,14 @@
if (!wasPlaying)
return;
-
+
+#ifdef __FreeBSD__
+ if (ioctl(cdfile, CDIOCRESUME) == -1)
+ Con_DPrintf ("ioctl cdiocresume failed\n");
+#else
if (ioctl(cdfile, CDROMRESUME) == -1)
Con_DPrintf ("ioctl cdromresume failed\n");
+#endif
playing = true;
}
@@ -322,7 +409,12 @@
void CDAudio_Update (void)
{
+#ifdef __FreeBSD__
+ struct ioc_read_subchannel subchnl;
+ struct cd_sub_channel_info data;
+#else
struct cdrom_subchnl subchnl;
+#endif
static time_t lastchk;
if (!enabled)
@@ -347,6 +439,24 @@
if (playing && lastchk < time(NULL))
{
lastchk = time(NULL) + 2; // two seconds between chks
+#if defined(__FreeBSD__)
+ subchnl.address_format = CD_MSF_FORMAT;
+ subchnl.data_format = CD_CURRENT_POSITION;
+ subchnl.data_len = sizeof(data);
+ subchnl.track = playTrack;
+ subchnl.data = &data;
+ if (ioctl(cdfile, CDIOCREADSUBCHANNEL, &subchnl) == -1 ) {
+ Con_DPrintf("ioctl cdiocreadsubchannel failed\n");
+ playing = false;
+ return;
+ }
+ if (subchnl.data->header.audio_status != CD_AS_PLAY_IN_PROGRESS &&
+ subchnl.data->header.audio_status != CD_AS_PLAY_PAUSED) {
+ playing = false;
+ if (playLooping)
+ CDAudio_Play(playTrack, true);
+ }
+#else
subchnl.cdsc_format = CDROM_MSF;
if (ioctl(cdfile, CDROMSUBCHNL, &subchnl) == -1)
{
@@ -360,6 +470,7 @@
if (playLooping)
CDAudio_Play (playTrack, true);
}
+#endif
}
}

View file

@ -0,0 +1,34 @@
--- cl_slist.c.orig Sat Apr 22 13:34:10 2006
+++ cl_slist.c Thu May 4 22:03:17 2006
@@ -21,10 +21,13 @@
#include "quakedef.h"
+char slfile[MAX_OSPATH];
server_entry_t slist[MAX_SERVER_LIST];
void SList_Init (void)
{
+ Q_strncpyz(slfile, com_gamedir, sizeof(slfile));
+ strncat(slfile, "/servers.lst", sizeof(slfile)-strlen(slfile)-1);
memset (&slist, 0, sizeof(slist));
}
@@ -36,7 +39,7 @@
if (!slist[0].server)
return;
- if (!(f = fopen("servers.lst", "wt")))
+ if (!(f = fopen(slfile, "wt")))
{
Con_DPrintf ("Couldn't open servers.lst\n");
return;
@@ -115,7 +118,7 @@
char line[128], *desc, *addr;
FILE *f;
- if (!(f = fopen("servers.lst", "rt")))
+ if (!(f = fopen(slfile, "rt")))
return;
count = len = 0;

View file

@ -0,0 +1,47 @@
--- common.c.orig Sat Dec 3 19:45:26 2005
+++ common.c Tue Jan 31 15:03:09 2006
@@ -1634,14 +1634,18 @@
*/
void COM_InitFilesystem (void)
{
+ char *home;
+ char homepath[MAX_OSPATH];
int i;
+ home = getenv("HOME");
+
// -basedir <path>
// Overrides the system supplied base directory (under GAMENAME)
if ((i = COM_CheckParm("-basedir")) && i + 1 < com_argc)
Q_strncpyz (com_basedir, com_argv[i+1], sizeof(com_basedir));
else
- Q_strncpyz (com_basedir, host_parms.basedir, sizeof(com_basedir));
+ Q_strncpyz (com_basedir, DATADIR, sizeof(com_basedir));
for (i=0 ; i < strlen(com_basedir) ; i++)
if (com_basedir[i] == '\\')
@@ -1653,6 +1657,12 @@
// start up with GAMENAME by default (id1)
COM_AddGameDirectory (va("%s/"GAMENAME, com_basedir));
+
+ if (home != NULL) {
+ Q_snprintfz(homepath, sizeof(homepath), "%s/.joequake/"GAMENAME, home);
+ COM_AddGameDirectory(homepath);
+ }
+
COM_AddGameDirectory (va("%s/joequake", com_basedir));
if (COM_CheckParm("-rogue"))
@@ -1675,4 +1685,11 @@
// Adds basedir/gamedir as an override game
if ((i = COM_CheckParm("-game")) && i + 1 < com_argc)
COM_AddGameDirectory (va("%s/%s", com_basedir, com_argv[i+1]));
+
+ if (home != NULL) {
+ Q_snprintfz(homepath, sizeof(homepath), "%s/.joequake/%s", home, com_gamedirname);
+ COM_CreatePath(homepath);
+ Sys_mkdir(homepath);
+ COM_AddGameDirectory(homepath);
+ }
}

View file

@ -0,0 +1,15 @@
--- console.c.orig Sun Aug 14 09:38:36 2005
+++ console.c Mon Jan 16 18:54:47 2006
@@ -205,8 +205,11 @@
*/
void Con_Init (void)
{
+ char qclog_path[MAX_OSPATH];
+
+ snprintf(qclog_path, sizeof(qclog_path), "%s/qconsole.log", com_gamedir);
if (COM_CheckParm("-condebug"))
- qconsole_log = fopen (va("%s/joequake/qconsole.log", com_basedir), "a");
+ qconsole_log = fopen (qclog_path, "a");
con_text = Hunk_AllocName (CON_TEXTSIZE, "context");
memset (con_text, ' ', CON_TEXTSIZE);

View file

@ -0,0 +1,31 @@
--- gl_screen.c.orig Wed Sep 7 11:10:32 2005
+++ gl_screen.c Mon Jan 16 20:20:05 2006
@@ -734,8 +734,9 @@
void SCR_ScreenShot_f (void)
{
int i, success;
- char name[MAX_OSPATH], ext[4], *sshot_dir = "joequake/shots";
+ char name[MAX_OSPATH], ext[4], sshot_dir[MAX_OSPATH];
+ snprintf(sshot_dir, sizeof(sshot_dir), "%s/shots", com_gamedir);
if (Cmd_Argc() == 2)
{
Q_strncpyz (name, Cmd_Argv(1), sizeof(name));
@@ -753,7 +754,7 @@
for (i=0 ; i<999 ; i++)
{
Q_snprintfz (name, sizeof(name), "joequake%03i.%s", i, ext);
- if (Sys_FileTime(va("%s/%s/%s", com_basedir, sshot_dir, name)) == -1)
+ if (Sys_FileTime(va("%s/%s", sshot_dir, name)) == -1)
break; // file doesn't exist
}
@@ -769,7 +770,7 @@
return;
}
- success = SCR_ScreenShot (va("%s/%s", sshot_dir, name));
+ success = SCR_ScreenShot(va("%s/%s", sshot_dir, name));
Con_Printf ("%s %s\n", success ? "Wrote" : "Couldn't write", name);
}

View file

@ -0,0 +1,20 @@
--- host.c.orig Wed Oct 26 10:21:22 2005
+++ host.c Mon Jan 16 18:45:46 2006
@@ -969,6 +969,7 @@
*/
void Host_Shutdown (void)
{
+ char cmdhist_path[MAX_OSPATH];
int i, j;
FILE *cmdhist;
cmdhistory_t cmdhistory;
@@ -989,7 +990,8 @@
Host_WriteConfiguration ();
IPLog_WriteLog ();
- if (con_initialized && (cmdhist = fopen("joequake/cmdhist.dat", "wb")))
+ snprintf(cmdhist_path, sizeof(cmdhist_path), "%s/cmdhist.dat", com_gamedir);
+ if (con_initialized && (cmdhist = fopen(cmdhist_path, "wb")))
{
for (i=0 ; i<64 ; i++)
for (j=0 ; j<MAXCMDLINE ; j++)

View file

@ -0,0 +1,46 @@
--- image.c.orig Sun Oct 16 21:47:00 2005
+++ image.c Mon Jan 16 20:18:54 2006
@@ -422,6 +422,7 @@
buffer[i+2] = temp;
}
+ COM_CreatePath(filename);
if (!COM_WriteFile(filename, buffer, size + 18))
retval = false;
free (buffer);
@@ -585,17 +586,14 @@
Image_WritePNG
=============
*/
-int Image_WritePNG (char *filename, int compression, byte *pixels, int width, int height)
+int Image_WritePNG (char *name, int compression, byte *pixels, int width, int height)
{
- char name[MAX_OSPATH];
int i, bpp = 3, pngformat, width_sign;
FILE *fp;
png_structp png_ptr;
png_infop info_ptr;
png_byte **rowpointers;
- Q_snprintfz (name, MAX_OSPATH, "%s/%s", com_basedir, filename);
-
width_sign = (width < 0) ? -1 : 1;
width = abs(width);
@@ -816,15 +814,12 @@
Image_WriteJPEG
=============
*/
-int Image_WriteJPEG (char *filename, int compression, byte *pixels, int width, int height)
+int Image_WriteJPEG (char *name, int compression, byte *pixels, int width, int height)
{
- char name[MAX_OSPATH];
byte *scanline;
FILE *fout;
struct jpeg_compress_struct cinfo;
struct jpeg_error_mgr jerr;
-
- Q_snprintfz (name, MAX_OSPATH, "%s/%s", com_basedir, filename);
if (!(fout = fopen(name, "wb")))
{

View file

@ -0,0 +1,17 @@
--- keys.c.orig Fri Oct 21 18:30:06 2005
+++ keys.c Mon Jan 16 18:47:12 2006
@@ -783,11 +783,13 @@
void Key_Init (void)
{
// joe: added stuff from [sons]Quake
+ char cmdhist_path[MAX_OSPATH];
int i, j;
FILE *cmdhist;
cmdhistory_t cmdhistory;
- if ((cmdhist = fopen("joequake/cmdhist.dat", "rb")))
+ snprintf(cmdhist_path, sizeof(cmdhist_path), "%s/cmdhist.dat", com_gamedir);
+ if ((cmdhist = fopen(cmdhist_path, "rb")))
{
fread (&cmdhistory, sizeof(cmdhistory_t), 1, cmdhist);
fclose (cmdhist);

View file

@ -0,0 +1,11 @@
--- net.h.orig Thu Jul 21 12:00:04 2005
+++ net.h Mon Dec 5 21:11:16 2005
@@ -258,7 +258,7 @@
extern int hostCacheCount;
extern hostcache_t hostcache[HOSTCACHESIZE];
-#if !defined(_WIN32 ) && !defined (__linux__)
+#if !defined(_WIN32 ) && !defined (__linux__) && !defined(__FreeBSD__)
#ifndef htonl
extern unsigned long htonl (unsigned long hostlong);
#endif

View file

@ -0,0 +1,11 @@
--- r_part.c.orig Fri Aug 26 15:02:44 2005
+++ r_part.c Sun Jan 15 02:00:02 2006
@@ -59,7 +59,7 @@
vec3_t r_pright, r_pup, r_ppn;
-#if !id386
+#if !id386 && !defined(GLQUAKE)
/*
==============

View file

@ -0,0 +1,22 @@
--- r_screen.c.orig Sat Oct 15 11:42:06 2005
+++ r_screen.c Mon Jan 16 20:20:08 2006
@@ -556,8 +556,9 @@
void SCR_ScreenShot_f (void)
{
int i, success;
- char name[MAX_OSPATH], ext[4], *sshot_dir = "joequake/shots";
+ char name[MAX_OSPATH], ext[4], sshot_dir[MAX_OSPATH];
+ snprintf(sshot_dir, sizeof(sshot_dir), "%s/shots", com_gamedir);
if (Cmd_Argc() == 2)
{
Q_strncpyz (name, Cmd_Argv(1), sizeof(name));
@@ -573,7 +574,7 @@
for (i=0 ; i<999 ; i++)
{
Q_snprintfz (name, sizeof(name), "joequake%03i.%s", i, ext);
- if (Sys_FileTime(va("%s/%s/%s", com_basedir, sshot_dir, name)) == -1)
+ if (Sys_FileTime(va("%s/%s", sshot_dir, name)) == -1)
break; // file doesn't exist
}

View file

@ -0,0 +1,84 @@
--- snd_linux.c.orig Fri Sep 10 12:22:32 2004
+++ snd_linux.c Mon Dec 5 20:05:40 2005
@@ -25,7 +25,11 @@
#include <sys/mman.h>
#include <sys/shm.h>
#include <sys/wait.h>
+#ifdef __FreeBSD__
+#include <sys/soundcard.h>
+#else
#include <linux/soundcard.h>
+#endif
#include <stdio.h>
#include "quakedef.h"
@@ -74,7 +78,8 @@
close (audio_fd);
return 0;
}
-
+//QuDos-
+/* //Moved later thx Quake3
if (ioctl(audio_fd, SNDCTL_DSP_GETOSPACE, &info) == -1)
{
perror ("GETOSPACE");
@@ -82,7 +87,8 @@
close (audio_fd);
return 0;
}
-
+*/
+//-QuDos
shm = &sn;
shm->splitbuffer = 0;
@@ -125,7 +131,8 @@
shm->channels = 2;
else
shm->channels = 2;
-
+//QuDos-
+/* //Call mmap later thx Quake3
shm->samples = info.fragstotal * info.fragsize / (shm->samplebits / 8);
shm->submission_chunk = 1;
@@ -138,6 +145,8 @@
close (audio_fd);
return 0;
}
+*/
+//-QuDos
tmp = 0;
if (shm->channels == 2)
@@ -196,6 +205,30 @@
close (audio_fd);
return 0;
}
+
+//QuDos-
+//Moved from above thx Quake3
+ if (ioctl(audio_fd, SNDCTL_DSP_GETOSPACE, &info) == -1)
+ {
+ perror ("GETOSPACE");
+ Con_Printf ("Um, can't do GETOSPACE?\n");
+ close (audio_fd);
+ return 0;
+ }
+ shm->samples = info.fragstotal * info.fragsize / (shm->samplebits / 8);
+ shm->submission_chunk = 1;
+
+// memory map the dma buffer
+ shm->buffer = (unsigned char *)mmap (NULL, info.fragstotal * info.fragsize, PROT_WRITE, MAP_FILE|MAP_SHARED, audio_fd, 0);
+ if (!shm->buffer || shm->buffer == (unsigned char *)-1)
+ {
+ perror ("/dev/dsp");
+ Con_Printf ("Could not mmap /dev/dsp\n");
+ close (audio_fd);
+ return 0;
+ }
+//end Quake3 sound fix by calling mmap later
+//-QuDos
// toggle the trigger & start her up
tmp = 0;

View file

@ -0,0 +1,12 @@
--- vid_glx.c.orig Sun Oct 16 17:40:58 2005
+++ vid_glx.c Mon Dec 5 21:10:31 2005
@@ -22,7 +22,9 @@
#include <termios.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
+#ifdef __linux__
#include <sys/vt.h>
+#endif
#include <stdarg.h>
#include <stdio.h>
#include <signal.h>

View file

@ -0,0 +1,16 @@
--- vid_x11.c.orig Mon Oct 17 10:08:06 2005
+++ vid_x11.c Sun Jan 15 01:55:33 2006
@@ -1052,3 +1052,13 @@
void VID_UnlockBuffer (void)
{
}
+
+#if !id386
+void R_Surf8Patch ()
+{
+}
+
+void R_SurfacePatch (void)
+{
+}
+#endif

6
games/joequake/pkg-descr Normal file
View file

@ -0,0 +1,6 @@
JoeQuake is an improved NQ engine with plenty of ZQuake and FuhQuake graphical
effects included. JoeQuake's main aim is to provide pleasant demo watching for
.dem files. JoeQuake also supports better graphical quality including 32bit
textures, colored lights, smoother animations, etc.
WWW: http://runecentral.com/joequake/

View file

@ -0,0 +1,19 @@
==============================================================================
JoeQuake has been installed.
To start it in full-screen mode you can run it with the "-fullscreen"
parameter.
If you have mouse problems you can try running it with the "-nomdga"
parameter (this will make the mouse work fine when the DGA X11 extension is
disabled).
If you hace sound problems try running it with the parameter
"-sndspeed <speed>", where "<speed>" could be 22050 or 44100 for example.
If you enable water alpha ("r_wateralpha" or from the menu), set "r_novis" to
"1" or you will have problems with water/lava. Note that the value of
"r_novis" will be saved in the configuration file.
==============================================================================

171
games/joequake/pkg-plist Normal file
View file

@ -0,0 +1,171 @@
%%GLX%%bin/joequake-glx
%%X11%%bin/joequake-x11
%%DATADIR%%/joequake/pak0.pak
%%HUD%%%%DATADIR%%/joequake/textures/wad/face_inv2.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/face_invis.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/face_invul2.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/face_p1.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/face_p2.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/face_p3.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/face_p4.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/face_p5.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/face_quad.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/face1.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/face2.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/face3.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/face4.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/face5.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/sb_cells.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/sb_nails.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/sb_rocket.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/sb_shells.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/sb_sigil1.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/sb_sigil2.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/sb_sigil3.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/sb_sigil4.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/anum_0.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/anum_1.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/anum_2.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/anum_3.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/anum_4.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/anum_5.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/anum_6.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/anum_7.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/anum_8.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/anum_9.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/anum_minus.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/backtile.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/disc.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/ibar.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/NET.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/num_0.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/num_1.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/num_2.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/num_3.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/num_4.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/num_5.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/num_6.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/num_7.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/num_8.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/num_9.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/num_colon.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/num_minus.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/num_slash.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inv_lightng.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inv_nailgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inv_rlaunch.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inv_shotgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inv_snailgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inv_srlaunch.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inv_sshotgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inv2_lightng.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inv2_nailgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inv2_rlaunch.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inv2_shotgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inv2_snailgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inv2_srlaunch.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inv2_sshotgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva1_lightng.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva1_nailgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva1_rlaunch.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva1_shotgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva1_snailgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva1_srlaunch.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva1_sshotgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva2_lightng.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva2_nailgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva2_rlaunch.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva2_shotgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva2_snailgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva2_srlaunch.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva2_sshotgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva3_lightng.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva3_nailgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva3_rlaunch.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva3_shotgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva3_snailgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva3_srlaunch.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva3_sshotgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva4_lightng.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva4_nailgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva4_rlaunch.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva4_shotgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva4_snailgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva4_srlaunch.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva4_sshotgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva5_lightng.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva5_nailgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva5_rlaunch.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva5_shotgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva5_snailgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva5_srlaunch.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/inva5_sshotgun.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/RAM.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/sb_invis.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/sb_invuln.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/sb_key1.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/sb_key2.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/sb_quad.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/sb_suit.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/sbar.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/scorebar.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/sb_armor1.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/sb_armor2.png
%%HUD%%%%DATADIR%%/joequake/textures/wad/sb_armor3.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inv_prox_gren.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inv_prox.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inv2_prox.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inv2_prox_gren.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inv_gren_prox.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inv2_gren_prox.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inv_laser.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inv2_laser.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inv_mjolnir.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inv2_mjolnir.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inv2_lightng.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inv_lightng.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inv_rlaunch.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inv2_rlaunch.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/sb_key2.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva1_laser.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/sb_key1.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva2_laser.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva3_laser.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva4_laser.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva5_laser.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva1_mjolnir.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva2_mjolnir.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva3_mjolnir.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva4_mjolnir.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva5_mjolnir.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva1_gren_prox.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva2_gren_prox.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva3_gren_prox.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva4_gren_prox.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva5_gren_prox.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva1_lightng.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva2_lightng.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva3_lightng.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva4_lightng.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva5_lightng.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva1_prox.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva2_prox.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva3_prox.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva4_prox.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva5_prox.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva1_prox_gren.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva2_prox_gren.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva3_prox_gren.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva4_prox_gren.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva5_prox_gren.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva1_rlaunch.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva2_rlaunch.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva3_rlaunch.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva4_rlaunch.png
%%HUD_SA%%%%DATADIR%%/joequake/textures/wad/inva5_rlaunch.png
%%HUD_DIR%%@dirrm %%DATADIR%%/joequake/textures/wad
%%HUD_DIR%%@dirrm %%DATADIR%%/joequake/textures
%%PORTDOCS%%%%DOCSDIR%%/joequake.txt
%%PORTDOCS%%%%DOCSDIR%%/whatsnew.txt
@dirrm %%DATADIR%%/joequake
@dirrm %%DOCSDIR%%