aboutsummaryrefslogtreecommitdiff
path: root/games/quake2lnx
diff options
context:
space:
mode:
authorAlexey Dokuchaev <danfe@FreeBSD.org>2005-03-15 19:32:31 +0000
committerAlexey Dokuchaev <danfe@FreeBSD.org>2005-03-15 19:32:31 +0000
commitc3627b08c32776ee7bc7d642037bd87bb66faa60 (patch)
tree20c4a706461ecc7d648a7d0584d903cd89e45334 /games/quake2lnx
parenta2c0c5f5bf6e6abbd14a0859377858e502d3ef6b (diff)
downloadports-c3627b08c32776ee7bc7d642037bd87bb66faa60.tar.gz
ports-c3627b08c32776ee7bc7d642037bd87bb66faa60.zip
Long-awaited icculus.org's Quake2 project update:
- Most recent version, 0.16.2 - Security patch [1] - New knobs: WITH_RETEXTURE, WITH_REDBLUE, WITH_XATRIX, WITH_ROGUE, WITH_MANUAL Changes/bugfixes: - Improved GLX/DGA mouse support - Load more pakfiles - Load bigger PCX images - Railgun easter egg bug fixed - Preliminary AMD64 support - Red-blue 3D glasses support - Retexturing support - Improved joystick support - 16:10 widescreen resolutions support - ... and more! [1] VuXML ID: 2c25e762-6bb9-11d9-93db-000a95bc6fae
Notes
Notes: svn path=/head/; revision=131328
Diffstat (limited to 'games/quake2lnx')
-rw-r--r--games/quake2lnx/Makefile149
-rw-r--r--games/quake2lnx/distinfo34
-rw-r--r--games/quake2lnx/files/patch-Makefile124
-rw-r--r--games/quake2lnx/files/patch-security201
-rw-r--r--games/quake2lnx/files/patch-src::client::cl_fx.c11
-rw-r--r--games/quake2lnx/files/patch-src::client::cl_fxmax.c43
-rw-r--r--games/quake2lnx/files/patch-src::client::cl_newfx.c85
-rw-r--r--games/quake2lnx/files/patch-src::client::cl_view.c12
-rw-r--r--games/quake2lnx/files/patch-src::client::snd_mix.c20
-rw-r--r--games/quake2lnx/files/patch-src::game::g_phys.c17
-rw-r--r--games/quake2lnx/files/patch-src::linux::gl_glx.c225
-rw-r--r--games/quake2lnx/files/patch-src::linux::rw_aa.c30
-rw-r--r--games/quake2lnx/files/patch-src::linux::rw_in_aa.c19
-rw-r--r--games/quake2lnx/files/patch-src::linux::rw_in_svgalib.c222
-rw-r--r--games/quake2lnx/files/patch-src::linux::rw_linux.c13
-rw-r--r--games/quake2lnx/files/patch-src::linux::rw_sdl.c14
-rw-r--r--games/quake2lnx/files/patch-src::linux::rw_x11.c213
-rw-r--r--games/quake2lnx/files/patch-src::linux::sys_linux.c15
-rw-r--r--games/quake2lnx/files/patch-src::ref_candygl::gl_rmisc.c12
-rw-r--r--games/quake2lnx/pkg-message5
-rw-r--r--games/quake2lnx/pkg-plist295
21 files changed, 836 insertions, 923 deletions
diff --git a/games/quake2lnx/Makefile b/games/quake2lnx/Makefile
index 0e1865e489ce..1abbe9793d04 100644
--- a/games/quake2lnx/Makefile
+++ b/games/quake2lnx/Makefile
@@ -6,19 +6,29 @@
#
PORTNAME= quake2lnx
-PORTVERSION= 0.15
-PORTREVISION= 2
+PORTVERSION= 0.16.2
CATEGORIES= games
-MASTER_SITES= http://www.icculus.org/quake2/files/:src \
- http://freebsd.nsu.ru/distfiles/q2/:pak
+MASTER_SITES= http://www.icculus.org/quake2/files/:icc \
+ ftp://ftp.idsoftware.com/idstuff/quake2/:id
DISTNAME= quake2-r${PORTVERSION}
-DISTFILES= ${DISTNAME}${EXTRACT_SUFX}:src
+DISTFILES= ${DISTNAME}${EXTRACT_SUFX}:icc
.if defined(WITH_EYECANDY)
-DISTFILES+= maxpak.pak:pak
+DISTFILES+= maxpak.pak:icc
.endif
-.if defined(WITH_SHAREWARE_DATA)
-DISTFILES+= pak0.pak:pak \
- players.tgz:pak
+.if defined(WITH_RETEXTURE)
+. for i in 10 11 12 13 14 16 17 19
+DISTFILES+= pak${i}.pak:icc
+. endfor
+.endif
+.if defined(WITH_SHAREWARE_DATA) || defined(WITH_MANUAL)
+DISTFILES+= q2-314-demo-x86.exe:id
+EXTRACT_DEPENDS+= unzip:${PORTSDIR}/archivers/unzip
+.endif
+.if defined(WITH_XATRIX)
+DISTFILES+= source/xatrixsrc320.shar.Z:id
+.endif
+.if defined(WITH_ROGUE)
+DISTFILES+= source/roguesrc320.shar.Z:id
.endif
DIST_SUBDIR= ${PORTNAME}
EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX}
@@ -47,7 +57,7 @@ PLIST_SUB+= SVGA="@comment "
.endif
.if defined(WITH_SDLCLIENT) || defined(WITH_SDL) || defined(WITH_SDLGL) \
- || ${HAVE_SDL:Msdl}!=""
+ || ${HAVE_SDL:Msdl} != ""
. if !(defined(WITHOUT_SDLCLIENT) && defined(WITHOUT_SDL) \
&& defined(WITHOUT_SDLGL))
USE_SDL= sdl
@@ -142,6 +152,24 @@ PLIST_SUB+= GAME=""
PLIST_SUB+= GAME="@comment "
.endif
+.if defined(WITH_XATRIX)
+MAKE_ARGS+= BUILD_XATRIX=YES
+Q2MP+= xatrix
+IS_INTERACTIVE= yes
+PLIST_SUB+= XATRIX=""
+.else
+PLIST_SUB+= XATRIX="@comment "
+.endif
+
+.if defined(WITH_ROGUE)
+MAKE_ARGS+= BUILD_ROGUE=YES
+Q2MP+= rogue
+IS_INTERACTIVE= yes
+PLIST_SUB+= ROGUE=""
+.else
+PLIST_SUB+= ROGUE="@comment "
+.endif
+
.if defined(WITH_CTF)
MAKE_ARGS+= BUILD_CTFDLL=YES
PLIST_SUB+= CTF=""
@@ -159,6 +187,17 @@ PLIST_SUB+= SHAREWARE="@comment "
## MISCELLANEOUS TUNABLES ##
# ###
+.if defined(WITH_RETEXTURE)
+MAKE_ARGS+= BUILD_RETEXTURE=YES
+PLIST_SUB+= RETEX=""
+.else
+PLIST_SUB+= RETEX="@comment "
+.endif
+
+.if defined(WITH_REDBLUE)
+MAKE_ARGS+= BUILD_REDBLUE=YES
+.endif
+
.if defined(WITH_JOYSTICK)
MAKE_ARGS+= BUILD_JOYSTICK=YES
.endif
@@ -181,6 +220,12 @@ MAKE_ARGS+= OPTIMIZED_CFLAGS="-O9 -pipe -s -ffast-math -funroll-loops -fomit-fra
MAKE_ARGS+= NO_X86_ASM=YES
.endif
+.if defined(WITH_MANUAL)
+PLIST_SUB+= MANUAL=""
+.else
+PLIST_SUB+= MANUAL="@comment "
+.endif
+
### #
## END OF CONFIGURATION KNOBS ##
# ###
@@ -189,14 +234,14 @@ pre-everything::
.if ${ARCH} == "i386" && !(defined(WITH_SVGA) || exists(${LOCALBASE}/lib/libvga.so.1))
@${ECHO_MSG} "Define WITH_SVGA to build SVGA driver"
.endif
-.if !(defined(WITH_SDL) || ${HAVE_SDL:Msdl}!="")
+.if !(defined(WITH_SDL) || ${HAVE_SDL:Msdl} != "")
@${ECHO_MSG} "Define WITH_SDL to build SDL software driver"
.endif
-.if !(defined(WITH_SDLGL) || ${HAVE_SDL:Msdl}!="")
+.if !(defined(WITH_SDLGL) || ${HAVE_SDL:Msdl} != "")
@${ECHO_MSG} "Define WITH_SDLGL to build SDL OpenGL driver"
.endif
-.if !(defined(WITH_SDLCLIENT) || ${HAVE_SDL:Msdl}!="")
- @${ECHO_MSG} "Define WITH_SDLCLIENT to build executable that uses SDL for cdrom and sound"
+.if !(defined(WITH_SDLCLIENT) || ${HAVE_SDL:Msdl} != "")
+ @${ECHO_MSG} "Define WITH_SDLCLIENT to build executable that uses SDL for CDROM and sound"
.endif
.if !(defined(WITH_AA) || exists(${LOCALBASE}/lib/libaa.so.1))
@${ECHO_MSG} "Define WITH_AA to build ASCII software renderer"
@@ -222,9 +267,24 @@ pre-everything::
.if !defined(WITH_CTF)
@${ECHO_MSG} "Define WITH_CTF to build Capture The Flag mod"
.endif
+.if !defined(WITH_XATRIX)
+ @${ECHO_MSG} "Define WITH_XATRIX to install \"The Reckoning\" (Xatrix) mission pack .so"
+.endif
+.if !defined(WITH_ROGUE)
+ @${ECHO_MSG} "Define WITH_ROGUE to install the \"Ground Zero\" (Rogue) mission pack .so"
+.endif
.if !defined(WITH_SHAREWARE_DATA)
@${ECHO_MSG} "Define WITH_SHAREWARE_DATA to install demo version game data"
.endif
+.if !defined(WITH_MANUAL)
+ @${ECHO_MSG} "Define WITH_MANUAL to install the official Quake II HTML manual"
+.endif
+.if !defined(WITH_RETEXTURE)
+ @${ECHO_MSG} "Define WITH_RETEXTURE to enable support of retextured graphics"
+.endif
+.if !defined(WITH_REDBLUE)
+ @${ECHO_MSG} "Define WITH_REDBLUE to enable red-blue 3D glasses rendering"
+.endif
.if !defined(WITH_JOYSTICK)
@${ECHO_MSG} "Define WITH_JOYSTICK to enable joystick support"
.endif
@@ -241,15 +301,28 @@ pre-everything::
@${ECHO_MSG} "Define WITHOUT_X86_ASM to disable x86 assembly code"
.endif
+ALL_TARGET= build_release
TGTDIR= ${WRKSRC}/release${ARCH}
+post-extract:
+.if defined(WITH_XATRIX) || defined(WITH_ROGUE)
+. for mp in ${Q2MP}
+ @${MKDIR} ${WRKSRC}/src/${mp}
+ @(cd ${WRKSRC}/src/${mp} && ${GUNZIP_CMD} -c \
+ ${DISTDIR}/${DIST_SUBDIR}/source/${mp}src320.shar.Z > \
+ ${mp}src320.shar && ${SH} ./${mp}src320.shar)
+ @${REINPLACE_CMD} -e 's/__ $$/&|| defined __FreeBSD__/' \
+ ${WRKSRC}/src/${mp}/q_shared.c
+. endfor
+.endif
+.if defined(WITH_ROGUE)
+ @${REINPLACE_CMD} -e '/^#include <nan.h>/d' ${WRKSRC}/src/rogue/g_local.h
+.endif
+ @${REINPLACE_CMD} -e 's|/dev/js|/dev/joy|' ${WRKSRC}/src/linux/joystick.c
+
post-patch:
@${REINPLACE_CMD} -e 's|%%%%BASEDIR%%%%|${DATADIR}|' ${WRKSRC}/src/qcommon/files.c
-do-build:
- @(cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} ${GMAKE} \
- ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} build_release)
-
PLIST_SUB+= ARCH="${ARCH}"
do-install:
@@ -263,20 +336,54 @@ do-install:
.if !defined(WITHOUT_GAME)
${INSTALL_PROGRAM} ${TGTDIR}/game${ARCH}.so ${DATADIR}/baseq2
.endif
+.if defined(WITH_XATRIX) || defined(WITH_ROGUE)
+. for mp in ${Q2MP}
+ @${MKDIR} ${DATADIR}/${mp}
+ ${INSTALL_PROGRAM} ${TGTDIR}/${mp}/game${ARCH}.so ${DATADIR}/${mp}
+. endfor
+.endif
.if defined(WITH_CTF)
@${MKDIR} ${DATADIR}/ctf
${INSTALL_PROGRAM} ${TGTDIR}/ctf/game${ARCH}.so ${DATADIR}/ctf
.endif
.if defined(WITH_SHAREWARE_DATA)
- ${INSTALL_DATA} ${DISTDIR}/${PORTNAME}/pak0.pak ${DATADIR}/baseq2
- ${GUNZIP_CMD} -c ${DISTDIR}/${PORTNAME}/players.tgz | ${TAR} -C ${DATADIR}/baseq2 -xf -
+ @${MKDIR} ${DATADIR}/baseq2/players
+ ${UNZIP_CMD} -oj -d ${DATADIR}/baseq2/players/female \
+ ${DISTDIR}/${DIST_SUBDIR}/q2-314-demo-x86.exe \
+ Install/Data/baseq2/players/female/\*
+ ${UNZIP_CMD} -oj -d ${DATADIR}/baseq2/players/male \
+ ${DISTDIR}/${DIST_SUBDIR}/q2-314-demo-x86.exe \
+ Install/Data/baseq2/players/male/\*
+ ${UNZIP_CMD} -oj -d ${DATADIR}/baseq2 \
+ ${DISTDIR}/${DIST_SUBDIR}/q2-314-demo-x86.exe \
+ Install/Data/baseq2/pak0.pak
+.endif
+.if defined(WITH_RETEXTURE)
+. for i in 10 11 12 13 14 16 17 19
+ ${INSTALL_DATA} ${DISTDIR}/${DIST_SUBDIR}/pak${i}.pak ${DATADIR}/baseq2
+. endfor
.endif
.if defined(WITH_EYECANDY)
- ${INSTALL_DATA} ${DISTDIR}/${PORTNAME}/maxpak.pak ${DATADIR}/baseq2
+ ${INSTALL_DATA} ${DISTDIR}/${DIST_SUBDIR}/maxpak.pak ${DATADIR}/baseq2
.endif
.if !defined(NOPORTDOCS)
@${MKDIR} ${DOCSDIR}
${INSTALL_DATA} ${WRKSRC}/README ${DOCSDIR}
+ ${INSTALL_DATA} ${WRKSRC}/src/docs/README ${DOCSDIR}/README.320
+ ${INSTALL_DATA} ${WRKSRC}/src/docs/joystick.txt ${DOCSDIR}
+ ${INSTALL_DATA} ${WRKSRC}/src/docs/quake2.3dfxgl ${DOCSDIR}
+. if defined(WITH_MANUAL)
+ ${UNZIP_CMD} -oj -d ${DOCSDIR}/quake2_manual \
+ ${DISTDIR}/${DIST_SUBDIR}/q2-314-demo-x86.exe \
+ Install/Data/DOCS/quake2_manual/\* \
+ -x Install/Data/DOCS/quake2_manual/images\*
+ ${UNZIP_CMD} -oj -d ${DOCSDIR}/quake2_manual/images \
+ ${DISTDIR}/${DIST_SUBDIR}/q2-314-demo-x86.exe \
+ Install/Data/DOCS/quake2_manual/images\*
+ ${UNZIP_CMD} -oj -d ${DOCSDIR} \
+ ${DISTDIR}/${DIST_SUBDIR}/q2-314-demo-x86.exe \
+ Install/Data/DOCS/Manual.html
+. endif
.endif
post-install:
diff --git a/games/quake2lnx/distinfo b/games/quake2lnx/distinfo
index 561e684b7e00..33db03259c20 100644
--- a/games/quake2lnx/distinfo
+++ b/games/quake2lnx/distinfo
@@ -1,8 +1,26 @@
-MD5 (quake2lnx/quake2-r0.15.tar.gz) = 9e16f29db33715f2f9420b5bb31e6263
-SIZE (quake2lnx/quake2-r0.15.tar.gz) = 2660511
-MD5 (quake2lnx/maxpak.pak) = 5207a493edd1d359f5b7312fa028343b
-SIZE (quake2lnx/maxpak.pak) = 3365391
-MD5 (quake2lnx/pak0.pak) = 27d77240466ec4f3253256832b54db8a
-SIZE (quake2lnx/pak0.pak) = 49951322
-MD5 (quake2lnx/players.tgz) = c20ee0e8ee77fb615cae61ad5f8f5347
-SIZE (quake2lnx/players.tgz) = 1097559
+MD5 (quake2lnx/quake2-r0.16.2.tar.gz) = 872fee27fb13a2a4c8876d5973c3c691
+SIZE (quake2lnx/quake2-r0.16.2.tar.gz) = 1496377
+MD5 (quake2lnx/maxpak.pak) = 04d3f1fb7fb4dada7175a41f4595c7eb
+SIZE (quake2lnx/maxpak.pak) = 3282742
+MD5 (quake2lnx/pak10.pak) = fc2de3c33c23cca5f0e6fcec068ce616
+SIZE (quake2lnx/pak10.pak) = 16315845
+MD5 (quake2lnx/pak11.pak) = 221019679613a13c6d7e5f9e21701d85
+SIZE (quake2lnx/pak11.pak) = 1702702
+MD5 (quake2lnx/pak12.pak) = 0c8b49c303014e535394168aed9b668a
+SIZE (quake2lnx/pak12.pak) = 3629554
+MD5 (quake2lnx/pak13.pak) = 9628c82566535e48c59caaee5281b963
+SIZE (quake2lnx/pak13.pak) = 2198193
+MD5 (quake2lnx/pak14.pak) = 5d47605de09c458c7f1c69d8e6fea6a7
+SIZE (quake2lnx/pak14.pak) = 2397651
+MD5 (quake2lnx/pak16.pak) = 94b18e1f2d76fb7e7d0c5bd0ae8d7c69
+SIZE (quake2lnx/pak16.pak) = 2675893
+MD5 (quake2lnx/pak17.pak) = e24d79286ba3c1f3da1f9642a78c49af
+SIZE (quake2lnx/pak17.pak) = 1431798
+MD5 (quake2lnx/pak19.pak) = 070a4d00b93a2a427ca92adee2736000
+SIZE (quake2lnx/pak19.pak) = 648896
+MD5 (quake2lnx/q2-314-demo-x86.exe) = 4d1cd4618e80a38db59304132ea0856c
+SIZE (quake2lnx/q2-314-demo-x86.exe) = 39015499
+MD5 (quake2lnx/source/xatrixsrc320.shar.Z) = 41fc4ecc4f25c068e7d1f488bd4a1e1a
+SIZE (quake2lnx/source/xatrixsrc320.shar.Z) = 455917
+MD5 (quake2lnx/source/roguesrc320.shar.Z) = 7d5e052839c9e629bad0a6570aa70554
+SIZE (quake2lnx/source/roguesrc320.shar.Z) = 626769
diff --git a/games/quake2lnx/files/patch-Makefile b/games/quake2lnx/files/patch-Makefile
index d7d30abd19f8..2c19abb064ea 100644
--- a/games/quake2lnx/files/patch-Makefile
+++ b/games/quake2lnx/files/patch-Makefile
@@ -1,6 +1,6 @@
--- Makefile.orig Thu Oct 10 01:08:21 2002
+++ Makefile Tue Jun 17 22:23:11 2003
-@@ -12,28 +12,28 @@
+@@ -12,30 +12,30 @@
# (Note: not all options are available for all platforms).
# quake2 (uses OSS for sound, cdrom ioctls for cd audio) is automatically built.
# game$(ARCH).so is automatically built.
@@ -16,9 +16,12 @@
-BUILD_ROGUE=NO # game$(ARCH).so for rogue (see README.r for details)
-BUILD_JOYSTICK=YES # build in joystick support
-BUILD_ARTS=NO # build in support for libaRts sound.
+-BUILD_ALSA=NO # build in support for ALSA (default sound on 2.6)
-BUILD_DEDICATED=NO # build a dedicated quake2 server
--BUILD_AA=YES # build the ascii soft renderer.
--BUILD_QMAX=YES # build the fancier GL graphics
+-BUILD_AA=NO # build the ascii soft renderer.
+-BUILD_QMAX=NO # build the fancier GL graphics
+-BUILD_RETEXTURE=NO # build a version supporting retextured graphics
+-BUILD_REDBLUE=NO # build a red-blue 3d glasses renderer...
+#BUILD_SDLQUAKE2=YES # sdlquake2 executable (uses SDL for cdrom and sound)
+#BUILD_SVGA=NO # SVGAlib driver. Seems to work fine.
+#BUILD_X11=YES # X11 software driver. Works somewhat ok.
@@ -31,10 +34,12 @@
+#BUILD_ROGUE=NO # game$(ARCH).so for rogue (see README.r for details)
+#BUILD_JOYSTICK=YES # build in joystick support
+#BUILD_ARTS=NO # build in support for libaRts sound.
++#BUILD_ALSA=NO # build in support for ALSA (default sound on 2.6)
+#BUILD_DEDICATED=NO # build a dedicated quake2 server
-+#BUILD_AA=YES # build the ascii soft renderer.
-+#BUILD_QMAX=YES # build the fancier GL graphics
-
++#BUILD_AA=NO # build the ascii soft renderer.
++#BUILD_QMAX=NO # build the fancier GL graphics
++#BUILD_RETEXTURE=NO # build a version supporting retextured graphics
++#BUILD_REDBLUE=NO # build a red-blue 3d glasses renderer...
STATICSDL=NO
-SDLDIR=/usr/local/lib
+SDLDIR=${PREFIX}/lib
@@ -46,7 +51,7 @@
# (hopefully) end of configurable options
-@@ -50,47 +50,11 @@
+@@ -52,55 +52,11 @@
endif
endif
@@ -54,8 +59,9 @@
-# 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/)
-+RELEASE_CFLAGS= $(BASE_CFLAGS) $(OPTIMIZED_CFLAGS)
++RELEASE_CFLAGS=$(BASE_CFLAGS) $(OPTIMIZED_CFLAGS)
+-ifneq ($(ARCH),x86_64)
-ifneq ($(ARCH),i386)
-ifneq ($(ARCH),axp)
-ifneq ($(ARCH),ppc)
@@ -65,6 +71,7 @@
-endif
-endif
-endif
+-endif
-
-CC=gcc
-
@@ -84,29 +91,35 @@
-endif
-
-ifeq ($(ARCH),i386)
--RELEASE_CFLAGS=$(BASE_CFLAGS) -O2 -ffast-math -funroll-loops -malign-loops=2 \
-- -malign-jumps=2 -malign-functions=2 -g
+-RELEASE_CFLAGS=$(BASE_CFLAGS) -O2 -ffast-math -funroll-loops -falign-loops=2 \
+- -falign-jumps=2 -falign-functions=2 -fno-strict-aliasing
-# compiler bugs with gcc 2.96 and 3.0.1 can cause bad builds with heavy opts.
-#RELEASE_CFLAGS=$(BASE_CFLAGS) -O6 -m486 -ffast-math -funroll-loops \
-# -fomit-frame-pointer -fexpensive-optimizations -malign-loops=2 \
-# -malign-jumps=2 -malign-functions=2
-endif
-
--VERSION=3.21+rCVS
-+VERSION=3.21+r0.15
+-ifeq ($(ARCH),x86_64)
+-_LIB := 64
+-RELEASE_CFLAGS=$(BASE_CFLAGS) -O2 -ffast-math -funroll-loops \
+- -fomit-frame-pointer -fexpensive-optimizations -fno-strict-aliasing
+-endif
+-
+-VERSION=3.21+r0.16
++VERSION=3.21+r0.16.2
MOUNT_DIR=src
-@@ -108,7 +72,7 @@
+@@ -118,7 +74,7 @@
ROGUE_DIR=$(MOUNT_DIR)/rogue
NULL_DIR=$(MOUNT_DIR)/null
-BASE_CFLAGS=-Wall -pipe -Dstricmp=strcasecmp
+BASE_CFLAGS=-Wall -pipe -Dstricmp=strcasecmp $(CFLAGS)
ifeq ($(HAVE_IPV6),YES)
- BASE_CFLAGS+= -DHAVE_IPV6 -DHAVE_SIN6_LEN
- NET_UDP=net_udp6
-@@ -127,7 +91,13 @@
+ BASE_CFLAGS+= -DHAVE_IPV6
+ ifeq ($(OSTYPE),FreeBSD)
+@@ -144,7 +100,13 @@
BASE_CFLAGS+=$(shell artsc-config --cflags)
endif
@@ -121,16 +134,16 @@
BASE_CFLAGS+=-DC_ONLY
endif
-@@ -144,20 +114,22 @@
- LDFLAGS+=$(shell artsc-config --libs)
+@@ -166,20 +128,22 @@
endif
+
-SVGALDFLAGS=-lvga
+SVGALDFLAGS=-L${PREFIX}/lib -lvga
+SVGACFLAGS=-I${PREFIX}/include
-XCFLAGS=-I/usr/X11R6/include
--XLDFLAGS=-L/usr/X11R6/lib -lX11 -lXext -lXxf86dga -lXxf86vm
+-XLDFLAGS=-L/usr/X11R6/lib$(_LIB) -lX11 -lXext -lXxf86dga -lXxf86vm
-AALDFLAGS=-lm -laa
+XCFLAGS=-I${X11BASE}/include
+XLDFLAGS=-L${X11BASE}/lib -lX11 -lXext -lXxf86dga -lXxf86vm
@@ -140,8 +153,8 @@
-SDLCFLAGS=$(shell sdl-config --cflags)
+SDLCFLAGS=$(shell sdl11-config --cflags)
ifeq ($(strip $(STATICSDL)),YES)
-- SDLLDFLAGS += -L/usr/X11R6/lib -Wl,-Bstatic $(SDLDIR)/libSDL.a
-+ SDLLDFLAGS += -L${X11BASE}/lib -Wl,-Bstatic $(SDLDIR)/libSDL.a
+- SDLLDFLAGS += -L/usr/X11R6/lib$(_LIB) -Wl,-Bstatic $(SDLDIR)/libSDL.a
++ SDLLDFLAGS += -L${X11BASE}/lib$(_LIB) -Wl,-Bstatic $(SDLDIR)/libSDL.a
SDLLDFLAGS += $(SDLDIR)/libesd.a $(SDLDIR)/libartsc.a -Wl,-Bdynamic
SDLLDFLAGS += -lpthread -lX11 -lXext -lXxf86dga -lXxf86vm -lXv \
-lXinerama
@@ -151,14 +164,14 @@
endif
ifeq ($(strip $(BUILD_JOYSTICK)),YES)
-@@ -168,15 +140,16 @@
+@@ -190,15 +154,16 @@
FXGLLDFLAGS=-L/usr/local/glide/lib -L/usr/X11/lib -L/usr/local/lib \
-L/usr/X11R6/lib -lX11 -lXext -lGL -lvga
-GLXCFLAGS=-I/usr/X11R6/include -DOPENGL
--GLXLDFLAGS=-L/usr/X11R6/lib -lX11 -lXext -lXxf86dga -lXxf86vm
+-GLXLDFLAGS=-L/usr/X11R6/lib$(_LIB) -lX11 -lXext -lXxf86dga -lXxf86vm
+GLXCFLAGS=-I${X11BASE}/include -DOPENGL
-+GLXLDFLAGS=-L${X11BASE}/lib -lX11 -lXext -lXxf86dga -lXxf86vm
++GLXLDFLAGS=-L${X11BASE}/lib$(_LIB) -lX11 -lXext -lXxf86dga -lXxf86vm
SDLGLCFLAGS=$(SDLCFLAGS) -DOPENGL
SDLGLLDFLAGS=$(SDLLDFLAGS)
@@ -172,7 +185,7 @@
REF_GL_DIR = $(MOUNT_DIR)/ref_candygl
CL_FX = cl_fxmax.c
else
-@@ -192,7 +165,7 @@
+@@ -214,7 +179,7 @@
DO_DED_CC=$(CC) $(CFLAGS) -DDEDICATED_ONLY -o $@ -c $<
DO_DED_DEBUG_CC=$(CC) $(DEBUG_CFLAGS) -DDEDICATED_ONLY -o $@ -c $<
DO_SHLIB_CC=$(CC) $(CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
@@ -181,7 +194,7 @@
DO_AS=$(CC) $(CFLAGS) -DELF -x assembler-with-cpp -o $@ -c $<
DO_SHLIB_AS=$(CC) $(CFLAGS) $(SHLIBCFLAGS) -DELF -x assembler-with-cpp -o $@ -c $<
-@@ -202,10 +175,42 @@
+@@ -224,10 +189,42 @@
.PHONY : targets build_debug build_release clean clean-debug clean-release clean2
@@ -225,7 +238,7 @@
ifeq ($(strip $(BUILD_CTFDLL)),YES)
TARGETS += $(BUILDDIR)/ctf/game$(ARCH).$(SHLIBEXT)
endif
-@@ -218,126 +223,6 @@
+@@ -240,152 +237,6 @@
TARGETS += $(BUILDDIR)/rogue/game$(ARCH).$(SHLIBEXT)
endif
@@ -319,6 +332,32 @@
- endif
-endif # ARCH sparc
-
+-ifeq ($(ARCH),x86_64)
+- ifeq ($(strip $(BUILD_SDLQUAKE2)),YES)
+- TARGETS += $(BUILDDIR)/sdlquake2
+- endif
+-
+- ifeq ($(strip $(BUILD_SVGA)),YES)
+- $(warning Warning: SVGA not supported for $(ARCH))
+- endif
+-
+- ifeq ($(strip $(BUILD_SOFTX)),YES)
+- $(warning Warning: Software X Renderer not supported for $(ARCH))
+- endif
+-
+- ifeq ($(strip $(BUILD_GLX)),YES)
+- TARGETS += $(BUILDDIR)/ref_glx.$(SHLIBEXT)
+- endif
+-
+- ifeq ($(strip $(BUILD_FXGL)),YES)
+- $(warning Warning: FXGL not currently supported for $(ARCH))
+- endif
+-
+- ifeq ($(strip $(BUILD_SDLGL)),YES)
+- TARGETS += $(BUILDDIR)/ref_sdlgl.$(SHLIBEXT)
+- endif
+-endif # ARCH x86_64
+-
-ifeq ($(ARCH),i386)
- ifeq ($(strip $(BUILD_SDLQUAKE2)),YES)
- TARGETS += $(BUILDDIR)/sdlquake2
@@ -352,7 +391,7 @@
ifeq ($(strip $(BUILD_AA)),YES)
TARGETS += $(BUILDDIR)/ref_softaa.$(SHLIBEXT)
endif
-@@ -437,10 +322,11 @@
+@@ -493,10 +344,11 @@
$(BUILDDIR)/client/snd_sdl.o
ifeq ($(ARCH),i386)
@@ -365,34 +404,15 @@
endif
$(BUILDDIR)/quake2 : $(QUAKE2_OBJS) $(QUAKE2_LNX_OBJS) $(QUAKE2_AS_OBJS)
-@@ -626,7 +512,7 @@
- $(BUILDDIR)/ded/q_shlinux.o \
- $(BUILDDIR)/ded/sys_linux.o \
- $(BUILDDIR)/ded/glob.o \
-- $(BUILDDIR)/ded/net_udp.o \
-+ $(BUILDDIR)/ded/$(NET_UDP).o \
- $(BUILDDIR)/ded/q_shared.o \
- $(BUILDDIR)/ded/pmove.o \
- $(BUILDDIR)/ded/cl_null.o \
-@@ -701,6 +587,9 @@
- $(BUILDDIR)/ded/net_udp.o : $(LINUX_DIR)/net_udp.c
- $(DO_DED_CC)
-
-+$(BUILDDIR)/ded/net_udp6.o : $(LINUX_DIR)/net_udp6.c
-+ $(DO_DED_CC)
-+
- $(BUILDDIR)/ded/cd_null.o : $(NULL_DIR)/cd_null.c
- $(DO_DED_CC)
-
-@@ -1525,6 +1414,7 @@
- $(BUILDDIR)/ref_soft/glob.o
+@@ -1588,6 +1440,7 @@
+ endif
ifeq ($(ARCH),i386)
+ifneq ($(strip $(NO_X86_ASM)),YES)
REF_SOFT_OBJS += \
$(BUILDDIR)/ref_soft/r_aclipa.o \
$(BUILDDIR)/ref_soft/r_draw16.o \
-@@ -1538,6 +1428,7 @@
+@@ -1601,6 +1454,7 @@
$(BUILDDIR)/ref_soft/r_varsa.o \
$(BUILDDIR)/ref_soft/sys_dosa.o
endif
@@ -400,7 +420,7 @@
REF_SOFT_SVGA_OBJS = \
$(BUILDDIR)/ref_soft/rw_svgalib.o \
-@@ -1667,10 +1558,10 @@
+@@ -1732,10 +1586,10 @@
$(DO_SHLIB_AS)
$(BUILDDIR)/ref_soft/rw_svgalib.o : $(LINUX_DIR)/rw_svgalib.c
@@ -413,7 +433,7 @@
$(BUILDDIR)/ref_soft/rw_x11.o : $(LINUX_DIR)/rw_x11.c
$(DO_SHLIB_CC) $(XCFLAGS)
-@@ -1679,10 +1570,10 @@
+@@ -1750,10 +1604,10 @@
$(DO_SHLIB_CC) $(SDLCFLAGS)
$(BUILDDIR)/ref_soft/rw_aa.o : $(LINUX_DIR)/rw_aa.c
diff --git a/games/quake2lnx/files/patch-security b/games/quake2lnx/files/patch-security
new file mode 100644
index 000000000000..89934359d270
--- /dev/null
+++ b/games/quake2lnx/files/patch-security
@@ -0,0 +1,201 @@
+Index: client/cl_parse.c
+===================================================================
+RCS file: /cvs/cvsroot/quake2/src/client/cl_parse.c,v
+retrieving revision 1.3
+diff -u -r1.3 cl_parse.c
+--- src/client/cl_parse.c 24 Sep 2004 22:06:52 -0000 1.3
++++ src/client/cl_parse.c 29 Jan 2005 20:57:01 -0000
+@@ -397,6 +397,9 @@
+ strncpy(ci->cinfo, s, sizeof(ci->cinfo));
+ ci->cinfo[sizeof(ci->cinfo)-1] = 0;
+
++ // sku - avoid potentional buffer overflow vulnerability
++ s = ci->cinfo;
++
+ // isolate the player's name
+ strncpy(ci->name, s, sizeof(ci->name));
+ ci->name[sizeof(ci->name)-1] = 0;
+@@ -528,6 +531,7 @@
+ int i;
+ char *s;
+ char olds[MAX_QPATH];
++ int length;
+
+ i = MSG_ReadShort (&net_message);
+ if (i < 0 || i >= MAX_CONFIGSTRINGS)
+@@ -537,6 +541,12 @@
+ strncpy (olds, cl.configstrings[i], sizeof(olds));
+ olds[sizeof(olds) - 1] = 0;
+
++ // sku - avoid potentional buffer overflow vulnerability
++ length = strlen( s );
++ if( length > sizeof( cl.configstrings ) - sizeof( cl.configstrings[0] ) * i - 1 ) {
++ Com_Error( ERR_DROP, "CL_ParseConfigString: oversize configstring" );
++ }
++
+ strcpy (cl.configstrings[i], s);
+
+ // do something apropriate
+Index: qcommon/cmd.c
+===================================================================
+RCS file: /cvs/cvsroot/quake2/src/qcommon/cmd.c,v
+retrieving revision 1.2
+diff -u -r1.2 cmd.c
+--- src/qcommon/cmd.c 3 Jan 2002 05:10:14 -0000 1.2
++++ src/qcommon/cmd.c 29 Jan 2005 20:57:01 -0000
+@@ -215,8 +215,11 @@
+ if (text[i] == '\n')
+ break;
+ }
+-
+-
++
++ // sku - removed potentional buffer overflow vulnerability
++ if( i > sizeof( line ) - 1 ) {
++ i = sizeof( line ) - 1;
++ }
+ memcpy (line, text, i);
+ line[i] = 0;
+
+@@ -657,7 +660,8 @@
+ {
+ int l;
+
+- strcpy (cmd_args, text);
++ // sku - removed potentional buffer overflow vulnerability
++ strncpy( cmd_args, text, sizeof( cmd_args ) );
+
+ // strip off any trailing whitespace
+ l = strlen(cmd_args) - 1;
+Index: qcommon/common.c
+===================================================================
+RCS file: /cvs/cvsroot/quake2/src/qcommon/common.c,v
+retrieving revision 1.4
+diff -u -r1.4 common.c
+--- src/qcommon/common.c 30 Mar 2002 22:48:36 -0000 1.4
++++ src/qcommon/common.c 29 Jan 2005 20:57:02 -0000
+@@ -797,7 +797,9 @@
+ l = 0;
+ do
+ {
+- c = MSG_ReadChar (msg_read);
++ // sku - replaced MSG_ReadChar with MSG_ReadByte to avoid
++ // potentional vulnerability
++ c = MSG_ReadByte (msg_read);
+ if (c == -1 || c == 0)
+ break;
+ string[l] = c;
+@@ -817,7 +819,9 @@
+ l = 0;
+ do
+ {
+- c = MSG_ReadChar (msg_read);
++ // sku - replaced MSG_ReadChar with MSG_ReadByte to avoid
++ // potentional vulnerability
++ c = MSG_ReadByte (msg_read);
+ if (c == -1 || c == 0 || c == '\n')
+ break;
+ string[l] = c;
+Index: server/sv_main.c
+===================================================================
+RCS file: /cvs/cvsroot/quake2/src/server/sv_main.c,v
+retrieving revision 1.2
+diff -u -r1.2 sv_main.c
+--- src/server/sv_main.c 22 Mar 2002 00:24:37 -0000 1.2
++++ src/server/sv_main.c 29 Jan 2005 20:57:03 -0000
+@@ -293,8 +293,9 @@
+
+ challenge = atoi(Cmd_Argv(3));
+
+- strncpy (userinfo, Cmd_Argv(4), sizeof(userinfo)-1);
+- userinfo[sizeof(userinfo) - 1] = 0;
++ // sku - reserve 32 bytes for the IP address
++ strncpy (userinfo, Cmd_Argv(4), sizeof(userinfo)-32);
++ userinfo[sizeof(userinfo) - 32] = 0;
+
+ // force the IP key/value pair so the game can filter based on ip
+ Info_SetValueForKey (userinfo, "ip", NET_AdrToString(net_from));
+@@ -317,8 +318,11 @@
+ {
+ if (NET_CompareBaseAdr (net_from, svs.challenges[i].adr))
+ {
+- if (challenge == svs.challenges[i].challenge)
++ // sku - ignore zero challenges
++ if( svs.challenges[i].challenge && challenge == svs.challenges[i].challenge ) {
++ svs.challenges[i].challenge = 0;
+ break; // good
++ }
+ Netchan_OutOfBandPrint (NS_SERVER, adr, "print\nBad challenge.\n");
+ return;
+ }
+@@ -342,6 +346,11 @@
+ && ( cl->netchan.qport == qport
+ || adr.port == cl->netchan.remote_address.port ) )
+ {
++ // sku - avoid reusing slot of the client already connected
++ if( cl->state != cs_zombie ) {
++ Netchan_OutOfBandPrint( NS_SERVER, adr, "print\nConnected client from this IP is already present.\n" );
++ return;
++ }
+ if (!NET_IsLocalAddress (adr) && (svs.realtime - cl->lastconnect) < ((int)sv_reconnect_limit->value * 1000))
+ {
+ Com_DPrintf ("%s:reconnect rejected : too soon\n", NET_AdrToString (adr));
+Index: server/sv_user.c
+===================================================================
+RCS file: /cvs/cvsroot/quake2/src/server/sv_user.c,v
+retrieving revision 1.2
+diff -u -r1.2 sv_user.c
+--- src/server/sv_user.c 21 Mar 2002 04:44:46 -0000 1.2
++++ src/server/sv_user.c 29 Jan 2005 20:57:04 -0000
+@@ -142,6 +142,9 @@
+ }
+
+ start = atoi(Cmd_Argv(2));
++ if( start < 0 ) {
++ start = 0; // sku - catch negative offsets
++ }
+
+ // write a packet full of data
+
+@@ -150,9 +153,18 @@
+ {
+ if (sv.configstrings[start][0])
+ {
++ int length;
++
++ // sku - write configstrings that exceed MAX_QPATH in proper-sized chunks
++ length = strlen( sv.configstrings[start] );
++ if( length > MAX_QPATH ) {
++ length = MAX_QPATH;
++ }
++
+ MSG_WriteByte (&sv_client->netchan.message, svc_configstring);
+ MSG_WriteShort (&sv_client->netchan.message, start);
+- MSG_WriteString (&sv_client->netchan.message, sv.configstrings[start]);
++ SZ_Write (&sv_client->netchan.message, sv.configstrings[start], length);
++ MSG_WriteByte (&sv_client->netchan.message, 0);
+ }
+ start++;
+ }
+@@ -199,6 +211,9 @@
+ }
+
+ start = atoi(Cmd_Argv(2));
++ if( start < 0 ) {
++ start = 0;
++ }
+
+ memset (&nullstate, 0, sizeof(nullstate));
+
+@@ -398,7 +413,7 @@
+ */
+ void SV_ShowServerinfo_f (void)
+ {
+- Info_Print (Cvar_Serverinfo());
++// Info_Print (Cvar_Serverinfo());
+ }
+
+
+
+
+
diff --git a/games/quake2lnx/files/patch-src::client::cl_fx.c b/games/quake2lnx/files/patch-src::client::cl_fx.c
deleted file mode 100644
index a1da485a1ecc..000000000000
--- a/games/quake2lnx/files/patch-src::client::cl_fx.c
+++ /dev/null
@@ -1,11 +0,0 @@
---- src/client/cl_fx.c.orig Thu Jun 12 14:24:20 2003
-+++ src/client/cl_fx.c Thu Jun 12 14:24:42 2003
-@@ -1507,7 +1507,7 @@
- */
- #ifdef QMAX
- void CL_FlagTrail (vec3_t start, vec3_t end, boolean isred)
--#else)
-+#else
- void CL_FlagTrail (vec3_t start, vec3_t end, float color)
- #endif
- {
diff --git a/games/quake2lnx/files/patch-src::client::cl_fxmax.c b/games/quake2lnx/files/patch-src::client::cl_fxmax.c
deleted file mode 100644
index 574c30595f03..000000000000
--- a/games/quake2lnx/files/patch-src::client::cl_fxmax.c
+++ /dev/null
@@ -1,43 +0,0 @@
---- src/client/cl_fxmax.c.orig Thu Jun 12 14:32:17 2003
-+++ src/client/cl_fxmax.c Thu Jun 12 14:34:33 2003
-@@ -1733,7 +1733,6 @@
-
- void CL_Disruptor_Explosion_Particle (vec3_t org, float size)
- {
-- int i;
- float alphastart = 1,
- alphadecel = -5;
- cparticle_t *p;
-@@ -1817,7 +1816,7 @@
- {
- float length;
- int i;
-- vec3_t len, ang;
-+ vec3_t len;
-
- VectorSubtract(p->angle, org, len);
- {
-@@ -2194,7 +2193,6 @@
-
- void pSparksThink (cparticle_t *p, vec3_t org, vec3_t angle, float *alpha, float *size, int *image, float *time)
- {
-- vec3_t dir;
- int i;
-
- //setting up angle for sparks
-@@ -2523,7 +2521,6 @@
- #define pBlasterMaxSize 5
- void pBlasterThink (cparticle_t *p, vec3_t org, vec3_t angle, float *alpha, float *size, int *image, float *time)
- {
-- int i;
- vec3_t len;
- VectorSubtract(p->angle, org, len);
-
-@@ -3038,7 +3035,6 @@
- vec3_t vec, point;
- int i;
- float len;
-- float dec;
- vec3_t right, up;
- qboolean colored = (cl_railtype->value!=1);
-
diff --git a/games/quake2lnx/files/patch-src::client::cl_newfx.c b/games/quake2lnx/files/patch-src::client::cl_newfx.c
deleted file mode 100644
index d5628a3837c1..000000000000
--- a/games/quake2lnx/files/patch-src::client::cl_newfx.c
+++ /dev/null
@@ -1,85 +0,0 @@
---- src/client/cl_newfx.c.orig Thu Jun 12 14:36:30 2003
-+++ src/client/cl_newfx.c Thu Jun 12 14:58:25 2003
-@@ -143,7 +143,9 @@
- vec3_t vec;
- float len;
- // int j;
-+#ifndef QMAX
- cparticle_t *p;
-+#endif
- float dec;
- vec3_t right, up;
- // int i;
-@@ -266,11 +268,12 @@
- vec3_t vec;
- #ifdef QMAX
- vec3_t color = { color8red(color8), color8green(color8), color8blue(color8)};
-+#else
-+ int j;
-+ cparticle_t *p;
- #endif
-
- float len;
-- int j;
-- cparticle_t *p;
-
- VectorCopy (start, move);
- VectorSubtract (end, start, vec);
-@@ -448,8 +451,11 @@
- vec3_t move;
- vec3_t vec;
- float len;
-- int i, j;
-+ int i;
-+#ifndef QMAX
-+ int j;
- cparticle_t *p;
-+#endif
- float dec;
-
- VectorCopy (start, move);
-@@ -1062,7 +1068,9 @@
- vec3_t dir;
- int i;
- cparticle_t *p;
-+#ifndef QMAX
- static int colortable[4] = {2*8,13*8,21*8,18*8};
-+#endif
- float ratio;
-
- ratio = 1.0 - (((float)self->endtime - (float)cl.time)/2100.0);
-@@ -1099,7 +1107,9 @@
- vec3_t dir;
- int i;
- cparticle_t *p;
-+#ifndef QMAX
- static int colortable[4] = {110, 112, 114, 116};
-+#endif
- float ratio;
-
- ratio = 1.0 - (((float)self->endtime - (float)cl.time)/1000.0);
-@@ -1133,7 +1143,9 @@
-
- void CL_WidowSplash (vec3_t org)
- {
-+#ifndef QMAX
- static int colortable[4] = {2*8,13*8,21*8,18*8};
-+#endif
- int i;
- cparticle_t *p;
- vec3_t dir;
-@@ -1260,10 +1272,12 @@
- */
- void CL_ColorExplosionParticles (vec3_t org, int color8, int run)
- {
-- int i, j;
-- cparticle_t *p;
-+ int i;
- #ifdef QMAX
- vec3_t color = { color8red(color8), color8green(color8), color8blue(color8)};
-+#else
-+ int j;
-+ cparticle_t *p;
- #endif
- for (i=0 ; i<128 ; i++)
- {
diff --git a/games/quake2lnx/files/patch-src::client::cl_view.c b/games/quake2lnx/files/patch-src::client::cl_view.c
deleted file mode 100644
index 937fff2d4cef..000000000000
--- a/games/quake2lnx/files/patch-src::client::cl_view.c
+++ /dev/null
@@ -1,12 +0,0 @@
---- src/client/cl_view.c.orig Thu Jun 12 14:25:46 2003
-+++ src/client/cl_view.c Thu Jun 12 14:26:07 2003
-@@ -470,7 +470,9 @@
- */
- void SCR_DrawCrosshair (void)
- {
-+#ifdef QMAX
- float scale;
-+#endif
- if (!crosshair->value)
- return;
-
diff --git a/games/quake2lnx/files/patch-src::client::snd_mix.c b/games/quake2lnx/files/patch-src::client::snd_mix.c
deleted file mode 100644
index c295644afe3a..000000000000
--- a/games/quake2lnx/files/patch-src::client::snd_mix.c
+++ /dev/null
@@ -1,20 +0,0 @@
---- src/client/snd_mix.c.orig Wed Oct 9 03:54:25 2002
-+++ src/client/snd_mix.c Thu Jun 12 15:16:54 2003
-@@ -30,7 +30,7 @@
-
- void S_WriteLinearBlastStereo16 (void);
-
--#if !((defined __linux__ || defined __FreeBSD__) && defined __i386__)
-+#if !((defined __linux__ || defined __FreeBSD__) && defined __i386__) || defined C_ONLY
- #if !id386
-
- void S_WriteLinearBlastStereo16 (void)
-@@ -362,7 +362,7 @@
- }
-
-
--#if !((defined __linux__ || __FreeBSD__) && defined __i386__)
-+#if !((defined __linux__ || __FreeBSD__) && defined __i386__) || defined C_ONLY
- #if !id386
-
- void S_PaintChannelFrom8 (channel_t *ch, sfxcache_t *sc, int count, int offset)
diff --git a/games/quake2lnx/files/patch-src::game::g_phys.c b/games/quake2lnx/files/patch-src::game::g_phys.c
new file mode 100644
index 000000000000..d6684b01e770
--- /dev/null
+++ b/games/quake2lnx/files/patch-src::game::g_phys.c
@@ -0,0 +1,17 @@
+--- src/game/g_phys.c.orig Tue Mar 15 22:15:11 2005
++++ src/game/g_phys.c Tue Mar 15 22:16:41 2005
+@@ -356,7 +356,13 @@
+ mask = MASK_SOLID;
+
+ trace = gi.trace (start, ent->mins, ent->maxs, end, ent, mask);
+-
++
++ if (trace.startsolid || trace.allsolid)
++ {
++ mask ^= CONTENTS_DEADMONSTER;
++ trace = gi.trace (start, ent->mins, ent->maxs, end, ent, mask);
++ }
++
+ VectorCopy (trace.endpos, ent->s.origin);
+ gi.linkentity (ent);
+
diff --git a/games/quake2lnx/files/patch-src::linux::gl_glx.c b/games/quake2lnx/files/patch-src::linux::gl_glx.c
index fbbfbea08fb9..16b252319b98 100644
--- a/games/quake2lnx/files/patch-src::linux::gl_glx.c
+++ b/games/quake2lnx/files/patch-src::linux::gl_glx.c
@@ -1,183 +1,100 @@
--- src/linux/gl_glx.c.orig Thu Oct 10 01:29:47 2002
+++ src/linux/gl_glx.c Mon Jun 16 23:19:21 2003
-@@ -40,7 +40,6 @@
- #include <signal.h>
- #include <dlfcn.h>
- #ifdef Joystick
--#include <sys/stat.h>
- #include <fcntl.h>
- #endif
- #include "../ref_gl/gl_local.h"
-@@ -58,7 +57,11 @@
- #include <X11/extensions/xf86dga.h>
- #include <X11/extensions/xf86vmode.h>
- #ifdef Joystick
--#include <linux/joystick.h>
-+# if defined(__linux__)
-+# include <linux/joystick.h>
-+# elif defined(__FreeBSD__)
-+# include <sys/joystick.h>
-+# endif
- #include <glob.h>
- #endif
- #include <GL/glx.h>
-@@ -87,18 +90,19 @@
- #ifdef Joystick
- static cvar_t *in_joystick;
- static qboolean joystick_avail = false;
--static int joy_fd, jx, jy, jt;
-+static int joy_fd, jx, jy, center_jx, center_jy;
- static cvar_t *j_invert_y;
-+static cvar_t *j_sensitivity;
- #endif
-
- #ifdef Joystick
- void InitJoystick() {
+@@ -475,6 +475,10 @@
+ in_state->Key_Event_fp (K_MWHEELUP, 1);
+ else if (event.xbutton.button == 5)
+ in_state->Key_Event_fp (K_MWHEELDOWN, 1);
++ else if (event.xbutton.button == 6)
++ in_state->Key_Event_fp (K_MOUSE4, 1);
++ else if (event.xbutton.button == 7)
++ in_state->Key_Event_fp (K_MOUSE5, 1);
+ if (b>=0 && in_state && in_state->Key_Event_fp)
+ in_state->Key_Event_fp (K_MOUSE1 + b, true);
+ if (b>=0)
+@@ -493,6 +497,10 @@
+ in_state->Key_Event_fp (K_MWHEELUP, 0);
+ else if (event.xbutton.button == 5)
+ in_state->Key_Event_fp (K_MWHEELDOWN, 0);
++ else if (event.xbutton.button == 6)
++ in_state->Key_Event_fp (K_MOUSE4, 0);
++ else if (event.xbutton.button == 7)
++ in_state->Key_Event_fp (K_MOUSE5, 0);
+ if (b>=0 && in_state && in_state->Key_Event_fp)
+ in_state->Key_Event_fp (K_MOUSE1 + b, false);
+ if (b>=0)
+@@ -1015,7 +1023,7 @@
+ qboolean OpenJoystick(cvar_t *joy_dev) {
int i, err;
glob_t pglob;
- struct js_event e;
+ struct joystick j;
- joystick_avail = false;
-- err = glob("/dev/js*", 0, NULL, &pglob);
-+ err = glob("/dev/joy*", 0, NULL, &pglob);
-
- if (err) {
- switch (err) {
-@@ -111,7 +115,7 @@
+ err = glob(joy_dev->string, 0, NULL, &pglob);
+
+@@ -1030,7 +1038,7 @@
default:
ri.Con_Printf(PRINT_ALL, "Error #%d while looking for joysticks\n",err);
}
-- return;
+- return false;
+ goto out;
}
for (i=0;i<pglob.gl_pathc;i++) {
-@@ -121,15 +125,14 @@
+@@ -1039,38 +1047,36 @@
+ if (joy_fd == -1) {
ri.Con_Printf(PRINT_ALL, "Error opening joystick dev %s\n",
pglob.gl_pathv[i]);
+- return false;
++ goto out;
}
- else {
- while (read(joy_fd, &e, sizeof(struct js_event))!=-1 &&
- (e.type & JS_EVENT_INIT))
- ri.Con_Printf(PRINT_ALL, "Read init event\n");
-- ri.Con_Printf(PRINT_ALL, "Using joystick dev %s\n", pglob.gl_pathv[i]);
+ else if (read(joy_fd, &j, sizeof(struct joystick)) != -1) {
-+ ri.Con_Printf(PRINT_ALL, "Using joystick dev %s\n", pglob.gl_pathv[i]);
- joystick_avail = true;
-- return;
-+ center_jx = j.x; center_jy = j.y;
-+ break;
+ ri.Con_Printf(PRINT_ALL, "Using joystick dev %s\n", pglob.gl_pathv[i]);
+ return true;
}
}
+out:
globfree(&pglob);
+ return false;
}
- #endif
-@@ -288,6 +291,7 @@
- #ifdef Joystick
- in_joystick = ri.Cvar_Get ("in_joystick", "1", CVAR_ARCHIVE);
- j_invert_y = ri.Cvar_Get ("j_invert_y", "1", CVAR_ARCHIVE);
-+ j_sensitivity = ri.Cvar_Get ("j_sensitivity", "3", 0);
- #endif
- // mouse variables
-@@ -342,8 +346,7 @@
- {
- int i;
- #ifdef Joystick
-- struct js_event e;
-- int key_index;
-+ struct joystick j;
- #endif
- if (mouse_avail) {
- for (i=0 ; i<3 ; i++) {
-@@ -356,31 +359,18 @@
- mouse_oldbuttonstate = mouse_buttonstate;
- }
- #ifdef Joystick
-+ /* FreeBSD does not fully support multi-buttoned joysticks */
- if (joystick_avail) {
-- while (read(joy_fd, &e, sizeof(struct js_event))!=-1) {
-- if (JS_EVENT_BUTTON & e.type) {
-- key_index = (e.number < 4) ? K_JOY1 : K_AUX1;
-- if (e.value) {
-- in_state->Key_Event_fp (key_index + e.number, true);
-- }
-- else {
-- in_state->Key_Event_fp (key_index + e.number, false);
-- }
-- //joy_oldbuttonstate = e.number;
-- }
-- else if (JS_EVENT_AXIS & e.type) {
-- switch (e.number) {
-- case 0:
-- jx = e.value;
-- break;
-- case 1:
-- jy = e.value;
-- break;
-- case 3:
-- jt = e.value;
-- break;
-- }
-- }
-+ if (read(joy_fd, &j, sizeof(struct joystick)) != -1) {
-+ if (j.b1)
-+ in_state->Key_Event_fp (K_JOY1, true);
-+ else
-+ in_state->Key_Event_fp (K_JOY1, false);
-+ if (j.b2)
-+ in_state->Key_Event_fp (K_JOY2, true);
-+ else
-+ in_state->Key_Event_fp (K_JOY2, false);
-+ jx = j.x; jy = j.y;
- }
- }
- #endif
-@@ -393,7 +383,11 @@
- */
- void RW_IN_Move (usercmd_t *cmd)
- {
-- if (!mouse_avail)
-+ if (!mouse_avail
-+#ifdef Joystick
-+ && !joystick_avail
-+#endif
-+ )
- return;
-
- if (m_filter->value)
-@@ -429,25 +423,26 @@
-
- #ifdef Joystick
- if (joystick_avail) {
-+ int djx = (jx - center_jx) * j_sensitivity->value / 10,
-+ djy = (jy - center_jy) * j_sensitivity->value / 10;
- // add joy X/Y movement to cmd
- if ( (*in_state->in_strafe_state & 1) ||
- (lookstrafe->value && mlooking ))
-- cmd->sidemove += m_side->value * (jx/100);
-+ cmd->sidemove += m_side->value * djx;
- else
-- in_state->viewangles[YAW] -= m_yaw->value * (jx/100);
-+ in_state->viewangles[YAW] -= m_yaw->value * djx;
-
- if ( (mlooking || freelook->value) &&
- !(*in_state->in_strafe_state & 1))
- {
- if (j_invert_y)
-- in_state->viewangles[PITCH] -= m_pitch->value * (jy/100);
-+ in_state->viewangles[PITCH] -= m_pitch->value * djy;
- else
-- in_state->viewangles[PITCH] += m_pitch->value * (jy/100);
-- cmd->forwardmove -= m_forward->value * (jt/100);
-+ in_state->viewangles[PITCH] += m_pitch->value * djy;
- }
- else
- {
-- cmd->forwardmove -= m_forward->value * (jy/100);
-+ cmd->forwardmove -= m_forward->value * djy;
- }
+ void PlatformJoyCommands(int *axis_vals, int *axis_map) {
+- struct js_event e;
+- int key_index;
++ struct joystick j;
+ in_state_t *in_state = getState();
+-
+- while (read(joy_fd, &e, sizeof(struct js_event))!=-1) {
+- if (JS_EVENT_BUTTON & e.type) {
+- key_index = (e.number < 4) ? K_JOY1 : K_AUX1;
+- if (e.value) {
+- in_state->Key_Event_fp (key_index + e.number, true);
+- }
+- else {
+- in_state->Key_Event_fp (key_index + e.number, false);
+- }
+- }
+- else if (JS_EVENT_AXIS & e.type) {
+- axis_vals[axis_map[e.number]] = e.value;
+- }
++
++ /*
++ * FreeBSD does not fully support multi-buttoned joysticks.
++ */
++ if (read(joy_fd, &j, sizeof(struct joystick)) != -1) {
++ if (j.b1)
++ in_state->Key_Event_fp (K_JOY1, true);
++ else
++ in_state->Key_Event_fp (K_JOY1, false);
++ if (j.b2)
++ in_state->Key_Event_fp (K_JOY2, true);
++ else
++ in_state->Key_Event_fp (K_JOY2, false);
++ axis_vals[axis_map[0]] = j.x;
++ axis_vals[axis_map[1]] = j.y;
}
- #endif
+ }
+
diff --git a/games/quake2lnx/files/patch-src::linux::rw_aa.c b/games/quake2lnx/files/patch-src::linux::rw_aa.c
deleted file mode 100644
index 9e3db53af38d..000000000000
--- a/games/quake2lnx/files/patch-src::linux::rw_aa.c
+++ /dev/null
@@ -1,30 +0,0 @@
---- src/linux/rw_aa.c.orig Thu Jun 12 18:26:51 2003
-+++ src/linux/rw_aa.c Thu Jun 12 18:30:59 2003
-@@ -53,15 +53,18 @@
- */
-
- #include <termios.h>
-+#include <unistd.h>
- #include <sys/ioctl.h>
- #include <sys/stat.h>
--#include <sys/vt.h>
- #include <stdarg.h>
- #include <stdio.h>
- #include <signal.h>
- #include <sys/mman.h>
- #include <dlfcn.h>
-+#ifdef __linux__
-+#include <sys/vt.h>
- #include <asm/io.h>
-+#endif
-
- #include <aalib.h>
-
-@@ -240,7 +243,6 @@
- */
- void SWimp_SetPalette( const unsigned char *palette )
- {
-- static int tmppal[256*3];
- const unsigned char *pal;
- int i;
-
diff --git a/games/quake2lnx/files/patch-src::linux::rw_in_aa.c b/games/quake2lnx/files/patch-src::linux::rw_in_aa.c
deleted file mode 100644
index dfc466519b5c..000000000000
--- a/games/quake2lnx/files/patch-src::linux::rw_in_aa.c
+++ /dev/null
@@ -1,19 +0,0 @@
---- src/linux/rw_in_aa.c.orig Thu Jun 12 18:31:47 2003
-+++ src/linux/rw_in_aa.c Thu Jun 12 18:32:19 2003
-@@ -40,13 +40,14 @@
- #include <termios.h>
- #include <sys/ioctl.h>
- #include <sys/stat.h>
--#include <sys/vt.h>
- #include <stdarg.h>
- #include <stdio.h>
- #include <signal.h>
- #include <sys/mman.h>
--
-+#ifdef __linux__
-+#include <sys/vt.h>
- #include <asm/io.h>
-+#endif
-
- #include <aalib.h>
-
diff --git a/games/quake2lnx/files/patch-src::linux::rw_in_svgalib.c b/games/quake2lnx/files/patch-src::linux::rw_in_svgalib.c
index 255532e3b1d6..f5502683e86f 100644
--- a/games/quake2lnx/files/patch-src::linux::rw_in_svgalib.c
+++ b/games/quake2lnx/files/patch-src::linux::rw_in_svgalib.c
@@ -1,6 +1,6 @@
--- src/linux/rw_in_svgalib.c.orig Wed Oct 9 03:54:25 2002
+++ src/linux/rw_in_svgalib.c Mon Jun 16 23:00:10 2003
-@@ -20,11 +20,23 @@
+@@ -20,7 +20,9 @@
#include <termios.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
@@ -10,21 +10,7 @@
#include <stdarg.h>
#include <stdio.h>
#include <signal.h>
- #include <sys/mman.h>
-+#ifdef Joystick
-+# if defined(__linux__)
-+# include <linux/joystick.h>
-+# elif defined(__FreeBSD__)
-+# include <sys/joystick.h>
-+# endif
-+#include <fcntl.h>
-+#include <glob.h>
-+#include <unistd.h>
-+#endif
-
- #include "vga.h"
- #include "vgakeyboard.h"
-@@ -145,26 +157,22 @@
+@@ -145,26 +147,22 @@
// 84 to 86 not used
scantokey[ 87] = K_F11;
scantokey[ 88] = K_F12;
@@ -67,207 +53,3 @@
if (keyboard_init())
Sys_Error("keyboard_init() failed");
-@@ -184,7 +192,7 @@
- }
-
- /*****************************************************************************/
--/* MOUSE */
-+/* MOUSE AND JOYSTICK */
- /*****************************************************************************/
-
- // this is inside the renderer shared lib, so these are called from vid_so
-@@ -207,6 +215,14 @@
- static cvar_t *mdev;
- static cvar_t *mrate;
-
-+#ifdef Joystick
-+static cvar_t *in_joystick;
-+static qboolean joystick_avail = false;
-+static int joy_fd, jx, jy, center_jx, center_jy;
-+static cvar_t *j_invert_y;
-+static cvar_t *j_sensitivity;
-+#endif
-+
- static qboolean mlooking;
-
- // state struct passed in Init
-@@ -254,6 +270,49 @@
- }
- #endif
-
-+#ifdef Joystick
-+void
-+InitJoystick()
-+{
-+ int i, err;
-+ glob_t pglob;
-+ struct joystick j;
-+
-+ err = glob("/dev/joy*", 0, NULL, &pglob);
-+
-+ if (err) {
-+ switch (err) {
-+ case GLOB_NOSPACE:
-+ ri.Con_Printf(PRINT_ALL, "Error, out of memory while looking for joysticks\n");
-+ break;
-+ case GLOB_NOMATCH:
-+ ri.Con_Printf(PRINT_ALL, "No joysticks found\n");
-+ break;
-+ default:
-+ ri.Con_Printf(PRINT_ALL, "Error #%d while looking for joysticks\n", err);
-+ }
-+ goto out;
-+ }
-+
-+ for (i = 0; i < pglob.gl_pathc; i++) {
-+ ri.Con_Printf(PRINT_ALL, "Trying joystick dev %s\n", pglob.gl_pathv[i]);
-+ joy_fd = open(pglob.gl_pathv[i], O_RDONLY | O_NONBLOCK);
-+ if (joy_fd == -1) {
-+ ri.Con_Printf(PRINT_ALL, "Error opening joystick dev %s\n",
-+ pglob.gl_pathv[i]);
-+ }
-+ else if (read(joy_fd, &j, sizeof(struct joystick)) != -1) {
-+ ri.Con_Printf(PRINT_ALL, "Using joystick dev %s\n", pglob.gl_pathv[i]);
-+ joystick_avail = true;
-+ center_jx = j.x; center_jy = j.y;
-+ break;
-+ }
-+ }
-+out:
-+ globfree(&pglob);
-+}
-+#endif
-+
- void RW_IN_Init(in_state_t *in_state_p)
- {
- int mtype;
-@@ -262,7 +321,12 @@
-
- // mouse variables
- m_filter = ri.Cvar_Get ("m_filter", "0", 0);
-- in_mouse = ri.Cvar_Get ("in_mouse", "1", CVAR_ARCHIVE);
-+ in_mouse = ri.Cvar_Get ("in_mouse", "1", CVAR_ARCHIVE);
-+#ifdef Joystick
-+ in_joystick = ri.Cvar_Get ("in_joystick", "1", CVAR_ARCHIVE);
-+ j_invert_y = ri.Cvar_Get ("j_invert_y", "1", CVAR_ARCHIVE);
-+ j_sensitivity = ri.Cvar_Get ("j_sensitivity", "3", 0);
-+#endif
- freelook = ri.Cvar_Get( "freelook", "0", 0 );
- lookstrafe = ri.Cvar_Get ("lookstrafe", "0", 0);
- sensitivity = ri.Cvar_Get ("sensitivity", "3", 0);
-@@ -293,11 +357,20 @@
- }
- else
- mouse_seteventhandler(mousehandler);
-+#ifdef Joystick
-+ if (in_joystick)
-+ InitJoystick();
-+#endif
- }
-
- void RW_IN_Shutdown(void)
- {
- mouse_close();
-+#ifdef Joystick
-+ if (joystick_avail)
-+ if (close(joy_fd))
-+ ri.Con_Printf(PRINT_ALL, "Error, problem closing joystick\n");
-+#endif
- }
-
- /*
-@@ -307,7 +380,14 @@
- */
- void RW_IN_Commands (void)
- {
-- if (!UseMouse)
-+#ifdef Joystick
-+ struct joystick j;
-+#endif
-+ if (!UseMouse
-+#ifdef Joystick
-+ && !joystick_avail
-+#endif
-+ )
- return;
-
- // poll mouse values
-@@ -346,6 +426,23 @@
- in_state->Key_Event_fp (K_MWHEELDOWN, false);
- }
- mwheel = 0;
-+
-+#ifdef Joystick
-+ /* FreeBSD does not fully support multi-buttoned joysticks */
-+ if (joystick_avail) {
-+ if (read(joy_fd, &j, sizeof(struct joystick)) != -1) {
-+ if (j.b1)
-+ in_state->Key_Event_fp (K_JOY1, true);
-+ else
-+ in_state->Key_Event_fp (K_JOY1, false);
-+ if (j.b2)
-+ in_state->Key_Event_fp (K_JOY2, true);
-+ else
-+ in_state->Key_Event_fp (K_JOY2, false);
-+ jx = j.x; jy = j.y;
-+ }
-+ }
-+#endif
- }
-
- /*
-@@ -355,7 +452,11 @@
- */
- void RW_IN_Move (usercmd_t *cmd)
- {
-- if (!UseMouse)
-+ if (!UseMouse
-+#ifdef Joystick
-+ && !joystick_avail
-+#endif
-+ )
- return;
-
- // poll mouse values
-@@ -374,7 +475,11 @@
- old_mouse_x = mx;
- old_mouse_y = my;
-
-- if (!mx && !my)
-+ if (!mx && !my
-+#ifdef Joystick
-+ && !joystick_avail
-+#endif
-+ )
- return;
-
- mx = my = 0; // clear for next update
-@@ -398,6 +503,28 @@
- {
- cmd->forwardmove -= m_forward->value * mouse_y;
- }
-+
-+#ifdef Joystick
-+ if (joystick_avail) {
-+ int djx = (jx - center_jx) * j_sensitivity->value / 10,
-+ djy = (jy - center_jy) * j_sensitivity->value / 10;
-+// add joy X/Y movement to cmd
-+ if ((*in_state->in_strafe_state & 1) ||
-+ (lookstrafe->value && mlooking))
-+ cmd->sidemove += m_side->value * djx;
-+ else
-+ in_state->viewangles[YAW] -= m_yaw->value * djx;
-+
-+ if ((mlooking || freelook->value) &&
-+ !(*in_state->in_strafe_state & 1)) {
-+ if (j_invert_y)
-+ in_state->viewangles[PITCH] -= m_pitch->value * djy;
-+ else
-+ in_state->viewangles[PITCH] += m_pitch->value * djy;
-+ }
-+ else cmd->forwardmove -= m_forward->value * djy;
-+ }
-+#endif
- }
-
- void RW_IN_Frame (void)
diff --git a/games/quake2lnx/files/patch-src::linux::rw_linux.c b/games/quake2lnx/files/patch-src::linux::rw_linux.c
new file mode 100644
index 000000000000..2ad83894da85
--- /dev/null
+++ b/games/quake2lnx/files/patch-src::linux::rw_linux.c
@@ -0,0 +1,13 @@
+--- src/linux/rw_linux.c.orig Sun Jan 2 09:46:35 2005
++++ src/linux/rw_linux.c Wed Mar 9 17:40:28 2005
+@@ -31,6 +31,10 @@
+ static int mouse_buttonstate;
+ static int mouse_oldbuttonstate;
+
++#ifdef OPENGL
++static cvar_t *use_stencil;
++#endif
++
+ in_state_t *getState() {
+ return in_state;
+ }
diff --git a/games/quake2lnx/files/patch-src::linux::rw_sdl.c b/games/quake2lnx/files/patch-src::linux::rw_sdl.c
deleted file mode 100644
index 7b3989bd2da8..000000000000
--- a/games/quake2lnx/files/patch-src::linux::rw_sdl.c
+++ /dev/null
@@ -1,14 +0,0 @@
---- src/linux/rw_sdl.c.orig Wed Jun 18 08:01:40 2003
-+++ src/linux/rw_sdl.c Wed Jun 18 08:02:13 2003
-@@ -190,7 +190,10 @@
- */
- void RW_IN_Commands (void)
- {
-- int i, key_index;
-+ int i;
-+#ifdef Joystick
-+ int key_index;
-+#endif
-
- if (mouse_avail) {
- for (i=0 ; i<3 ; i++) {
diff --git a/games/quake2lnx/files/patch-src::linux::rw_x11.c b/games/quake2lnx/files/patch-src::linux::rw_x11.c
index 3472cb66844e..72144026f5a4 100644
--- a/games/quake2lnx/files/patch-src::linux::rw_x11.c
+++ b/games/quake2lnx/files/patch-src::linux::rw_x11.c
@@ -1,171 +1,102 @@
--- src/linux/rw_x11.c.orig Wed Oct 9 03:54:25 2002
+++ src/linux/rw_x11.c Mon Jun 16 23:19:40 2003
-@@ -36,7 +36,6 @@
- #include <sys/time.h>
- #include <sys/types.h>
- #ifdef Joystick
--#include <sys/stat.h>
- #include <fcntl.h>
- #endif
- #include <unistd.h>
-@@ -58,7 +57,11 @@
- #include <X11/extensions/xf86vmode.h>
- #endif
- #ifdef Joystick
--#include <linux/joystick.h>
-+# if defined(__linux__)
-+# include <linux/joystick.h>
-+# elif defined(__FreeBSD__)
-+# include <sys/joystick.h>
-+# endif
- #include <glob.h>
- #endif
-
-@@ -317,8 +320,9 @@
- #ifdef Joystick
- static cvar_t *in_joystick;
- static qboolean joystick_avail = false;
--static int joy_fd, jx, jy, jt;
-+static int joy_fd, jx, jy, center_jx, center_jy;
- static cvar_t *j_invert_y;
-+static cvar_t *j_sensitivity;
- #endif
-
- static qboolean mlooking;
-@@ -357,10 +361,10 @@
- void InitJoystick() {
+@@ -446,7 +446,7 @@
+ qboolean OpenJoystick(cvar_t *joy_dev) {
int i, err;
glob_t pglob;
- struct js_event e;
+ struct joystick j;
- joystick_avail = false;
-- err = glob("/dev/js*", 0, NULL, &pglob);
-+ err = glob("/dev/joy*", 0, NULL, &pglob);
-
- if (err) {
- switch (err) {
-@@ -373,7 +377,7 @@
+ err = glob(joy_dev->string, 0, NULL, &pglob);
+
+@@ -461,7 +461,7 @@
default:
ri.Con_Printf(PRINT_ALL, "Error #%d while looking for joysticks\n",err);
}
-- return;
+- return false;
+ goto out;
}
for (i=0;i<pglob.gl_pathc;i++) {
-@@ -383,15 +387,14 @@
+@@ -470,16 +470,14 @@
+ if (joy_fd == -1) {
ri.Con_Printf(PRINT_ALL, "Error opening joystick dev %s\n",
pglob.gl_pathv[i]);
+- return false;
++ goto out;
}
- else {
- while (read(joy_fd, &e, sizeof(struct js_event))!=-1 &&
- (e.type & JS_EVENT_INIT))
- ri.Con_Printf(PRINT_ALL, "Read init event\n");
-- ri.Con_Printf(PRINT_ALL, "Using joystick dev %s\n", pglob.gl_pathv[i]);
+ else if (read(joy_fd, &j, sizeof(struct joystick)) != -1) {
-+ ri.Con_Printf(PRINT_ALL, "Using joystick dev %s\n", pglob.gl_pathv[i]);
- joystick_avail = true;
-- return;
-+ center_jx = j.x; center_jy = j.y;
-+ break;
+ ri.Con_Printf(PRINT_ALL, "Using joystick dev %s\n", pglob.gl_pathv[i]);
+ return true;
}
}
+out:
globfree(&pglob);
+ return false;
}
- #endif
-@@ -407,6 +410,7 @@
- #ifdef Joystick
- in_joystick = ri.Cvar_Get ("in_joystick", "1", CVAR_ARCHIVE);
- j_invert_y = ri.Cvar_Get ("j_invert_y", "1", CVAR_ARCHIVE);
-+ j_sensitivity = ri.Cvar_Get ("j_sensitivity", "3", 0);
- #endif
- freelook = ri.Cvar_Get( "freelook", "0", 0 );
- lookstrafe = ri.Cvar_Get ("lookstrafe", "0", 0);
-@@ -442,8 +446,7 @@
- {
- int i;
- #ifdef Joystick
-- struct js_event e;
-- int key_index;
-+ struct joystick j;
- #endif
- if (mouse_avail) {
- for (i=0 ; i<3 ; i++) {
-@@ -456,31 +459,18 @@
- mouse_oldbuttonstate = mouse_buttonstate;
- }
- #ifdef Joystick
-+ /* FreeBSD does not fully support multi-buttoned joysticks */
- if (joystick_avail) {
-- while (read(joy_fd, &e, sizeof(struct js_event))!=-1) {
-- if (JS_EVENT_BUTTON & e.type) {
-- key_index = (e.number < 4) ? K_JOY1 : K_AUX1;
-- if (e.value) {
-- in_state->Key_Event_fp (key_index + e.number, true);
-- }
-- else {
-- in_state->Key_Event_fp (key_index + e.number, false);
-- }
-- //joy_oldbuttonstate = e.number;
-- }
-- else if (JS_EVENT_AXIS & e.type) {
-- switch (e.number) {
-- case 0:
-- jx = e.value;
-- break;
-- case 1:
-- jy = e.value;
-- break;
-- case 3:
-- jt = e.value;
-- break;
-- }
-- }
-+ if (read(joy_fd, &j, sizeof(struct joystick)) != -1) {
-+ if (j.b1)
-+ in_state->Key_Event_fp (K_JOY1, true);
-+ else
-+ in_state->Key_Event_fp (K_JOY1, false);
-+ if (j.b2)
-+ in_state->Key_Event_fp (K_JOY2, true);
-+ else
-+ in_state->Key_Event_fp (K_JOY2, false);
-+ jx = j.x; jy = j.y;
- }
- }
- #endif
-@@ -542,25 +532,26 @@
- }
+@@ -1014,6 +1012,10 @@
+ in_state->Key_Event_fp (K_MWHEELUP, 1);
+ else if (event.xbutton.button == 5)
+ in_state->Key_Event_fp (K_MWHEELDOWN, 1);
++ else if (event.xbutton.button == 6)
++ in_state->Key_Event_fp (K_MOUSE4, 1);
++ else if (event.xbutton.button == 7)
++ in_state->Key_Event_fp (K_MOUSE5, 1);
+ if (b>=0)
+ mouse_buttonstate |= 1<<b;
+ break;
+@@ -1030,6 +1032,10 @@
+ in_state->Key_Event_fp (K_MWHEELUP, 0);
+ else if (event.xbutton.button == 5)
+ in_state->Key_Event_fp (K_MWHEELDOWN, 0);
++ else if (event.xbutton.button == 6)
++ in_state->Key_Event_fp (K_MOUSE4, 0);
++ else if (event.xbutton.button == 7)
++ in_state->Key_Event_fp (K_MOUSE5, 0);
+ if (b>=0)
+ mouse_buttonstate &= ~(1<<b);
+ break;
+@@ -1969,23 +1975,23 @@
+
#ifdef Joystick
- if (joystick_avail) {
-+ int djx = (jx - center_jx) * j_sensitivity->value / 10,
-+ djy = (jy - center_jy) * j_sensitivity->value / 10;
- // add joy X/Y movement to cmd
- if ( (*in_state->in_strafe_state & 1) ||
- (lookstrafe->value && mlooking ))
-- cmd->sidemove += m_side->value * (jx/100);
-+ cmd->sidemove += m_side->value * djx;
- else
-- in_state->viewangles[YAW] -= m_yaw->value * (jx/100);
-+ in_state->viewangles[YAW] -= m_yaw->value * djx;
-
- if ( (mlooking || freelook->value) &&
- !(*in_state->in_strafe_state & 1))
- {
- if (j_invert_y)
-- in_state->viewangles[PITCH] -= m_pitch->value * (jy/100);
-+ in_state->viewangles[PITCH] -= m_pitch->value * djy;
- else
-- in_state->viewangles[PITCH] += m_pitch->value * (jy/100);
-- cmd->forwardmove -= m_forward->value * (jt/100);
-+ in_state->viewangles[PITCH] += m_pitch->value * djy;
- }
- else
- {
-- cmd->forwardmove -= m_forward->value * (jy/100);
-+ cmd->forwardmove -= m_forward->value * djy;
- }
+ void PlatformJoyCommands(int *axis_vals, int *axis_map) {
+- struct js_event e;
+- int key_index;
++ struct joystick j;
+ in_state_t *in_state = getState();
+-
+- while (read(joy_fd, &e, sizeof(struct js_event))!=-1) {
+- if (JS_EVENT_BUTTON & e.type) {
+- key_index = (e.number < 4) ? K_JOY1 : K_AUX1;
+- if (e.value) {
+- in_state->Key_Event_fp (key_index + e.number, true);
+- }
+- else {
+- in_state->Key_Event_fp (key_index + e.number, false);
+- }
+- }
+- else if (JS_EVENT_AXIS & e.type) {
+- axis_vals[axis_map[e.number]] = e.value;
+- }
++
++ /*
++ * FreeBSD does not fully support multi-buttoned joysticks.
++ */
++ if (read(joy_fd, &j, sizeof(struct joystick)) != -1) {
++ if (j.b1)
++ in_state->Key_Event_fp (K_JOY1, true);
++ else
++ in_state->Key_Event_fp (K_JOY1, false);
++ if (j.b2)
++ in_state->Key_Event_fp (K_JOY2, true);
++ else
++ in_state->Key_Event_fp (K_JOY2, false);
++ axis_vals[axis_map[0]] = j.x;
++ axis_vals[axis_map[1]] = j.y;
}
+ }
#endif
diff --git a/games/quake2lnx/files/patch-src::linux::sys_linux.c b/games/quake2lnx/files/patch-src::linux::sys_linux.c
index 6b7a327a19b6..f8937490018d 100644
--- a/games/quake2lnx/files/patch-src::linux::sys_linux.c
+++ b/games/quake2lnx/files/patch-src::linux::sys_linux.c
@@ -1,11 +1,20 @@
--- src/linux/sys_linux.c.orig Sun Feb 1 19:06:29 2004
+++ src/linux/sys_linux.c Sun Feb 1 19:18:07 2004
-@@ -223,6 +223,10 @@
+@@ -217,14 +217,16 @@
+ char *str_p;
+ #if defined __i386__
+ const char *gamename = "gamei386.so";
+-#elif defined __x86_64__
+- const char *gamename = "gamex86_64.so";
++#elif defined __amd64__
++ const char *gamename = "gameamd64.so";
+ #elif defined __alpha__
+- const char *gamename = "gameaxp.so";
++ const char *gamename = "gamealpha.so";
+ #elif defined __powerpc__
const char *gamename = "gameppc.so";
#elif defined __sparc__
const char *gamename = "gamesparc.so";
-+#elif defined __amd64__
-+ const char *gamename = "gameamd64.so";
+#elif defined __ia64__
+ const char *gamename = "gameia64.so";
#else
diff --git a/games/quake2lnx/files/patch-src::ref_candygl::gl_rmisc.c b/games/quake2lnx/files/patch-src::ref_candygl::gl_rmisc.c
deleted file mode 100644
index 5579805c15ac..000000000000
--- a/games/quake2lnx/files/patch-src::ref_candygl::gl_rmisc.c
+++ /dev/null
@@ -1,12 +0,0 @@
---- src/ref_candygl/gl_rmisc.c.orig Thu Jun 12 18:05:46 2003
-+++ src/ref_candygl/gl_rmisc.c Thu Jun 12 18:08:56 2003
-@@ -100,9 +100,6 @@
- int x,y;
- byte data[8][8][4];
-
-- byte *pic, *palette;
-- int width, height;
--
- partscale = (float)((int)gl_partscale->value)*0.01;
- if (partscale>1)
- partscale=1;
diff --git a/games/quake2lnx/pkg-message b/games/quake2lnx/pkg-message
index 3b8e61e983ef..9a80d8668d2d 100644
--- a/games/quake2lnx/pkg-message
+++ b/games/quake2lnx/pkg-message
@@ -9,4 +9,9 @@
sion data files. Note that you do not need
full version to run dedicated server.
+ If you decide to build Xatrix/Rogue mission
+ packs, you'll need to copy their data files
+ to ${DATADIR}/xatrix|rogue/
+ directory from installation CD.
+
===================================================
diff --git a/games/quake2lnx/pkg-plist b/games/quake2lnx/pkg-plist
index b441f950b3a2..066afc155f83 100644
--- a/games/quake2lnx/pkg-plist
+++ b/games/quake2lnx/pkg-plist
@@ -2,83 +2,222 @@
%%CLIENT%%bin/quake2
%%SDLCLIENT%%bin/sdlquake2
%%SERVER%%bin/q2ded
-@comment === DOCS ===
-%%PORTDOCS%%share/doc/quake2lnx/README
-%%PORTDOCS%%@dirrm share/doc/quake2lnx
@comment === RENDERERS ===
-%%SVGA%%share/quake2lnx/ref_soft.so
-%%SDL%%share/quake2lnx/ref_softsdl.so
-%%SDLGL%%share/quake2lnx/ref_sdlgl.so
-%%X11%%share/quake2lnx/ref_softx.so
-%%GLX%%share/quake2lnx/ref_glx.so
-%%AA%%share/quake2lnx/ref_softaa.so
+%%SVGA%%%%DATADIR%%/ref_soft.so
+%%SDL%%%%DATADIR%%/ref_softsdl.so
+%%SDLGL%%%%DATADIR%%/ref_sdlgl.so
+%%X11%%%%DATADIR%%/ref_softx.so
+%%GLX%%%%DATADIR%%/ref_glx.so
+%%AA%%%%DATADIR%%/ref_softaa.so
@comment === DATA ===
-%%GAME%%share/quake2lnx/baseq2/game%%ARCH%%.so
-%%QMAX%%share/quake2lnx/baseq2/maxpak.pak
-%%SHAREWARE%%share/quake2lnx/baseq2/pak0.pak
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/athena.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/athena_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/brianna.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/brianna_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/cobalt.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/cobalt_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/doomgal.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/doomgal_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/ensign.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/ensign_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/jezebel.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/jezebel_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/jungle.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/jungle_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/lotus.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/lotus_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/stiletto.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/stiletto_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/tris.md2
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/venus.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/venus_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/voodoo.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/voodoo_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/weapon.md2
-%%SHAREWARE%%share/quake2lnx/baseq2/players/female/weapon.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/cipher.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/cipher_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/claymore.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/claymore_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/flak.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/flak_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/grunt.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/grunt_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/howitzer.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/howitzer_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/major.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/major_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/nightops.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/nightops_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/pointman.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/pointman_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/psycho.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/psycho_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/rampage.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/rampage_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/razor.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/razor_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/recon.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/recon_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/scout.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/scout_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/skin.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/sniper.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/sniper_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/tris.md2
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/viper.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/viper_i.pcx
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/weapon.md2
-%%SHAREWARE%%share/quake2lnx/baseq2/players/male/weapon.pcx
-%%SHAREWARE%%@dirrm share/quake2lnx/baseq2/players/male
-%%SHAREWARE%%@dirrm share/quake2lnx/baseq2/players/female
-%%SHAREWARE%%@dirrm share/quake2lnx/baseq2/players
-%%CTF%%share/quake2lnx/ctf/game%%ARCH%%.so
-%%CTF%%@dirrm share/quake2lnx/ctf
-@dirrm share/quake2lnx/baseq2
-@dirrm share/quake2lnx
+%%GAME%%%%DATADIR%%/baseq2/game%%ARCH%%.so
+%%QMAX%%%%DATADIR%%/baseq2/maxpak.pak
+%%RETEX%%%%DATADIR%%/baseq2/pak10.pak
+%%RETEX%%%%DATADIR%%/baseq2/pak11.pak
+%%RETEX%%%%DATADIR%%/baseq2/pak12.pak
+%%RETEX%%%%DATADIR%%/baseq2/pak13.pak
+%%RETEX%%%%DATADIR%%/baseq2/pak14.pak
+%%RETEX%%%%DATADIR%%/baseq2/pak16.pak
+%%RETEX%%%%DATADIR%%/baseq2/pak17.pak
+%%RETEX%%%%DATADIR%%/baseq2/pak19.pak
+%%SHAREWARE%%%%DATADIR%%/baseq2/pak0.pak
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/athena.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/athena_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/brianna.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/brianna_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/cobalt.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/cobalt_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/doomgal.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/doomgal_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/ensign.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/ensign_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/jezebel.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/jezebel_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/jungle.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/jungle_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/lotus.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/lotus_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/stiletto.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/stiletto_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/tris.md2
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/venus.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/venus_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/voodoo.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/voodoo_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/weapon.md2
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/female/weapon.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/cipher.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/cipher_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/claymore.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/claymore_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/flak.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/flak_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/grunt.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/grunt_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/howitzer.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/howitzer_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/major.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/major_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/nightops.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/nightops_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/pointman.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/pointman_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/psycho.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/psycho_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/rampage.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/rampage_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/razor.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/razor_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/recon.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/recon_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/scout.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/scout_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/skin.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/sniper.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/sniper_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/tris.md2
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/viper.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/viper_i.pcx
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/weapon.md2
+%%SHAREWARE%%%%DATADIR%%/baseq2/players/male/weapon.pcx
+%%SHAREWARE%%@dirrm %%DATADIR%%/baseq2/players/male
+%%SHAREWARE%%@dirrm %%DATADIR%%/baseq2/players/female
+%%SHAREWARE%%@dirrm %%DATADIR%%/baseq2/players
+@dirrm %%DATADIR%%/baseq2
+%%CTF%%%%DATADIR%%/ctf/game%%ARCH%%.so
+%%CTF%%@dirrm %%DATADIR%%/ctf
+%%XATRIX%%%%DATADIR%%/xatrix/game%%ARCH%%.so
+%%XATRIX%%@dirrm %%DATADIR%%/xatrix
+%%ROGUE%%%%DATADIR%%/rogue/game%%ARCH%%.so
+%%ROGUE%%@dirrm %%DATADIR%%/rogue
+@dirrm %%DATADIR%%
+@comment === DOCS ===
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/bottom.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/credits.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/customer_support.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/enemy_barracuda_shark.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/enemy_berserker.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/enemy_brains.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/enemy_enforcer.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/enemy_flyer.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/enemy_gladiator.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/enemy_gunner.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/enemy_icarus.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/enemy_iron_maiden.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/enemy_light_guard.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/enemy_machinegun_guard.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/enemy_medic.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/enemy_mutant.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/adrenaline.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/amor_body.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/armor_combat.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/armor_jacket.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/armor_shard.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/bandoleer.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/barracuda_shark.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/berserker.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/bfg.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/blaster.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/bluekey.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/bottom_id_link_transparent.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/brains.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/breather.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/bullets.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/buttons.jpg
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/cells.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/chaingun.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/commandant_james.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/credits_main.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/door.jpg
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/elevator_base_exit_sign.jpg
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/enemy_groupshot.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/energy_armour.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/enforcer.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/envirosuit.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/explosive_barrels.jpg
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/first_aid.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/flyer.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/gladiator.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/grenades.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/grenade_launcher.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/gunner.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/hand_grenade.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/heavy_pack.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/hyper_blaster.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/icarus.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/invulnerability.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/iron_maiden.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/lava.jpg
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/lever.jpg
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/light_guard.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/machinegun.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/machinegun_guard.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/main_cover_image.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/manual_back.jpg
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/manual_bottom.jpg
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/manual_cover_image.jpg
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/manual_top.jpg
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/medic.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/medkit.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/mega_health.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/menu.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/multiplayer_main.jpg
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/multiplayer_menu1.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/multiplayer_screen1.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/mutant.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/no_data.jpg
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/options_menu.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/parasite.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/player_properties_screen1.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/quad_damage.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/rail_gun.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/rockets.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/rocket_launcher.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/secret_door.jpg
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/shells.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/shotgun.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/shotgun_guard.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/silencer.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/slime.jpg
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/start_network_server_screen1.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/stimpack.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/story_main.jpg
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/strogg_environ_1.jpg
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/strogg_environ_2.jpg
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/strogg_environ_3.jpg
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/supershotgun.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/tank.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/tank_commander.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/technician.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/top_nav_imagemap.gif
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/unit_exit_door.jpg
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/images/water.jpg
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/enemy_parasite.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/enemy_shotgun_guard.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/enemy_tank.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/enemy_tank_commander.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/enemy_technician.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/intel_brief.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/intel_brief2.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/intel_brief3.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/intel_brief4.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/intel_brief5.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/intel_brief6.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/intel_brief7.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/intel_brief8.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/intel_brief_enemy.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/main.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/multiplayer.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/page_index.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/story.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/setup_controls_screenmenus.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/technical_information.html
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/quake2_manual/top_nav.html
+%%PORTDOCS%%%%MANUAL%%@dirrm %%DOCSDIR%%/quake2_manual/images
+%%PORTDOCS%%%%MANUAL%%@dirrm %%DOCSDIR%%/quake2_manual
+%%PORTDOCS%%%%MANUAL%%%%DOCSDIR%%/Manual.html
+%%PORTDOCS%%%%DOCSDIR%%/README
+%%PORTDOCS%%%%DOCSDIR%%/README.320
+%%PORTDOCS%%%%DOCSDIR%%/joystick.txt
+%%PORTDOCS%%%%DOCSDIR%%/quake2.3dfxgl
+%%PORTDOCS%%@dirrm %%DOCSDIR%%