aboutsummaryrefslogtreecommitdiffstats
path: root/games
diff options
context:
space:
mode:
authoralepulver <alepulver@FreeBSD.org>2006-05-08 00:12:44 +0800
committeralepulver <alepulver@FreeBSD.org>2006-05-08 00:12:44 +0800
commit99ca6795c2893a1055a623c96008186bb5c3773b (patch)
tree044fa80130ca071bcf3a5b27f0c305683e03788d /games
parent54fdf41074acdec35ce9733108ce7a0a1f88fc0d (diff)
downloadfreebsd-ports-gnome-99ca6795c2893a1055a623c96008186bb5c3773b.tar.gz
freebsd-ports-gnome-99ca6795c2893a1055a623c96008186bb5c3773b.tar.zst
freebsd-ports-gnome-99ca6795c2893a1055a623c96008186bb5c3773b.zip
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)
Diffstat (limited to 'games')
-rw-r--r--games/Makefile1
-rw-r--r--games/joequake/Makefile118
-rw-r--r--games/joequake/distinfo12
-rw-r--r--games/joequake/files/patch-Makefile.linux151
-rw-r--r--games/joequake/files/patch-cd_linux.c254
-rw-r--r--games/joequake/files/patch-cl_slist.c34
-rw-r--r--games/joequake/files/patch-common.c47
-rw-r--r--games/joequake/files/patch-console.c15
-rw-r--r--games/joequake/files/patch-gl_screen.c31
-rw-r--r--games/joequake/files/patch-host.c20
-rw-r--r--games/joequake/files/patch-image.c46
-rw-r--r--games/joequake/files/patch-keys.c17
-rw-r--r--games/joequake/files/patch-net.h11
-rw-r--r--games/joequake/files/patch-r_part.c11
-rw-r--r--games/joequake/files/patch-r_screen.c22
-rw-r--r--games/joequake/files/patch-snd_linux.c84
-rw-r--r--games/joequake/files/patch-vid_glx.c12
-rw-r--r--games/joequake/files/patch-vid_x11.c16
-rw-r--r--games/joequake/pkg-descr6
-rw-r--r--games/joequake/pkg-message19
-rw-r--r--games/joequake/pkg-plist171
21 files changed, 1098 insertions, 0 deletions
diff --git a/games/Makefile b/games/Makefile
index ee977d698c2e..253fd7c8969c 100644
--- a/games/Makefile
+++ b/games/Makefile
@@ -311,6 +311,7 @@
SUBDIR += jetpack
SUBDIR += jfduke3d
SUBDIR += jfk
+ SUBDIR += joequake
SUBDIR += jools
SUBDIR += jtans
SUBDIR += jumpnbump
diff --git a/games/joequake/Makefile b/games/joequake/Makefile
new file mode 100644
index 000000000000..709e96cbc93a
--- /dev/null
+++ b/games/joequake/Makefile
@@ -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>
diff --git a/games/joequake/distinfo b/games/joequake/distinfo
new file mode 100644
index 000000000000..af93da3873fd
--- /dev/null
+++ b/games/joequake/distinfo
@@ -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
diff --git a/games/joequake/files/patch-Makefile.linux b/games/joequake/files/patch-Makefile.linux
new file mode 100644
index 000000000000..65edd59322c8
--- /dev/null
+++ b/games/joequake/files/patch-Makefile.linux
@@ -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)
diff --git a/games/joequake/files/patch-cd_linux.c b/games/joequake/files/patch-cd_linux.c
new file mode 100644
index 000000000000..674381f50c6c
--- /dev/null
+++ b/games/joequake/files/patch-cd_linux.c
@@ -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
+ }
+ }
+
diff --git a/games/joequake/files/patch-cl_slist.c b/games/joequake/files/patch-cl_slist.c
new file mode 100644
index 000000000000..3a1aaa1d55df
--- /dev/null
+++ b/games/joequake/files/patch-cl_slist.c
@@ -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;
diff --git a/games/joequake/files/patch-common.c b/games/joequake/files/patch-common.c
new file mode 100644
index 000000000000..cb61c32b334b
--- /dev/null
+++ b/games/joequake/files/patch-common.c
@@ -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);
++ }
+ }
diff --git a/games/joequake/files/patch-console.c b/games/joequake/files/patch-console.c
new file mode 100644
index 000000000000..30c44b957140
--- /dev/null
+++ b/games/joequake/files/patch-console.c
@@ -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);
diff --git a/games/joequake/files/patch-gl_screen.c b/games/joequake/files/patch-gl_screen.c
new file mode 100644
index 000000000000..884de6a5e404
--- /dev/null
+++ b/games/joequake/files/patch-gl_screen.c
@@ -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);
+ }
+
diff --git a/games/joequake/files/patch-host.c b/games/joequake/files/patch-host.c
new file mode 100644
index 000000000000..3bc894cfa4c0
--- /dev/null
+++ b/games/joequake/files/patch-host.c
@@ -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++)
diff --git a/games/joequake/files/patch-image.c b/games/joequake/files/patch-image.c
new file mode 100644
index 000000000000..76a95bc5361d
--- /dev/null
+++ b/games/joequake/files/patch-image.c
@@ -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")))
+ {
diff --git a/games/joequake/files/patch-keys.c b/games/joequake/files/patch-keys.c
new file mode 100644
index 000000000000..f4476c489606
--- /dev/null
+++ b/games/joequake/files/patch-keys.c
@@ -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);
diff --git a/games/joequake/files/patch-net.h b/games/joequake/files/patch-net.h
new file mode 100644
index 000000000000..0a10eace4110
--- /dev/null
+++ b/games/joequake/files/patch-net.h
@@ -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
diff --git a/games/joequake/files/patch-r_part.c b/games/joequake/files/patch-r_part.c
new file mode 100644
index 000000000000..8c898863ca11
--- /dev/null
+++ b/games/joequake/files/patch-r_part.c
@@ -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)
+
+ /*
+ ==============
diff --git a/games/joequake/files/patch-r_screen.c b/games/joequake/files/patch-r_screen.c
new file mode 100644
index 000000000000..562ec987be6e
--- /dev/null
+++ b/games/joequake/files/patch-r_screen.c
@@ -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
+ }
+
diff --git a/games/joequake/files/patch-snd_linux.c b/games/joequake/files/patch-snd_linux.c
new file mode 100644
index 000000000000..34aaa04641b0
--- /dev/null
+++ b/games/joequake/files/patch-snd_linux.c
@@ -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;
diff --git a/games/joequake/files/patch-vid_glx.c b/games/joequake/files/patch-vid_glx.c
new file mode 100644
index 000000000000..76db8a6a6a1c
--- /dev/null
+++ b/games/joequake/files/patch-vid_glx.c
@@ -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>
diff --git a/games/joequake/files/patch-vid_x11.c b/games/joequake/files/patch-vid_x11.c
new file mode 100644
index 000000000000..367e3c0b992e
--- /dev/null
+++ b/games/joequake/files/patch-vid_x11.c
@@ -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
diff --git a/games/joequake/pkg-descr b/games/joequake/pkg-descr
new file mode 100644
index 000000000000..73546d3af7ab
--- /dev/null
+++ b/games/joequake/pkg-descr
@@ -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/
diff --git a/games/joequake/pkg-message b/games/joequake/pkg-message
new file mode 100644
index 000000000000..48891a839637
--- /dev/null
+++ b/games/joequake/pkg-message
@@ -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.
+
+==============================================================================
diff --git a/games/joequake/pkg-plist b/games/joequake/pkg-plist
new file mode 100644
index 000000000000..1ad03156949d
--- /dev/null
+++ b/games/joequake/pkg-plist
@@ -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%%