aboutsummaryrefslogtreecommitdiff
path: root/games/joequake
diff options
context:
space:
mode:
authorAlejandro Pulver <alepulver@FreeBSD.org>2006-05-07 16:12:44 +0000
committerAlejandro Pulver <alepulver@FreeBSD.org>2006-05-07 16:12:44 +0000
commit92ee4ebd700be76fc209258e144f0d2f69ba0fad (patch)
tree8b68ff951a0998478b0fe8b3fb8e62de2f550b49 /games/joequake
parent9834ff02ed7642721dd6eddf3909bde4baa30288 (diff)
downloadports-92ee4ebd700be76fc209258e144f0d2f69ba0fad.tar.gz
ports-92ee4ebd700be76fc209258e144f0d2f69ba0fad.zip
Notes
Diffstat (limited to 'games/joequake')
-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
20 files changed, 1097 insertions, 0 deletions
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%%