[NEW PORT] games/quake2-source - Quake II game source

Quake II game source.

	This port installs the Quake II game source, together with
	BSD Makefiles, for building modifications. It can also
	install the Capture the Flag mod, Rogue and Xatrix game
	source.

PR:		ports/86737
Submitted by:	Alejandro Pulver <alejandro@varnet.biz>
This commit is contained in:
Edwin Groothuis 2005-10-16 05:58:42 +00:00
parent 385b4cf1e7
commit 7e4cbdf713
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=145520
14 changed files with 866 additions and 0 deletions

View file

@ -467,6 +467,7 @@
SUBDIR += quake-dpmod
SUBDIR += quake-reaper
SUBDIR += quake-source
SUBDIR += quake2-source
SUBDIR += quake2forge
SUBDIR += quake2lnx
SUBDIR += quakeforge

View file

@ -0,0 +1,86 @@
# New ports collection makefile for: quake2-source
# Date created: 29 Sep 2005
# Whom: Alejandro Pulver <alejandro@varnet.biz>
#
# $FreeBSD$
#
PORTNAME= source
PORTVERSION= 3.21
CATEGORIES= games
MASTER_SITES= http://www.icculus.org/quake2/files/:icc \
ftp://ftp.idsoftware.com/idstuff/quake2/source/:id
PKGNAMEPREFIX= quake2-
DISTNAME= quake2-r0.16.2
DISTFILES= ${DISTNAME}${EXTRACT_SUFX}:icc
DIST_SUBDIR= quake2lnx
EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX}
MAINTAINER= alejandro@varnet.biz
COMMENT= Quake II game source
NO_BUILD= yes
OPTIONS= CTF "Install Capture The Flag mod source" off \
ROGUE "Install Ground Zero (Rogue) mission pack source" off \
XATRIX "Install The Reckoning (Xatrix) mission pack source" off
LATEST_LINK= ${PKGNAMEPREFIX}${PORTNAME}
DATADIR= ${PREFIX}/share/${PKGNAMEPREFIX}${PORTNAME}
.include <bsd.port.pre.mk>
.if defined(WITH_CTF)
PLIST_SUB+= CTF=""
.else
PLIST_SUB+= CTF="@comment "
.endif
.if defined(WITH_ROGUE)
DISTFILES+= roguesrc320.shar.Z:id
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-src_rogue_g__local.h \
${FILESDIR}/extra-patch-src_rogue_q__shared.c
ROGUE_OFF= 454
PLIST_SUB+= ROGUE=""
.else
PLIST_SUB+= ROGUE="@comment "
.endif
.if defined(WITH_XATRIX)
DISTFILES+= xatrixsrc320.shar.Z:id
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-src_xatrix_q__shared.c
XATRIX_OFF= 441
PLIST_SUB+= XATRIX=""
.else
PLIST_SUB+= XATRIX="@comment "
.endif
post-extract:
.for f in rogue xatrix
. if defined(WITH_${f:U})
@${MKDIR} ${WRKSRC}/src/${f}
@(cd ${WRKSRC}/src/${f} && ${GUNZIP_CMD} -c \
${DISTDIR}/${DIST_SUBDIR}/${f}src320.shar.Z > \
${f}src320.shar && \
${TAIL} +${${f:U}_OFF} ${f}src320.shar | ${SH})
. endif
.endfor
pre-install:
@${FIND} -E ${WRKSRC} -type f \
-iregex "(Makefile|.*\.(def|dsp|orig|shar))" -print0 | \
${XARGS} -0 ${RM}
do-install:
@${MKDIR} ${DATADIR}
@${CP} -R ${WRKSRC}/src/game ${DATADIR}
@${INSTALL_DATA} ${FILESDIR}/Makefile.game ${DATADIR}/game/Makefile
.for f in ctf rogue xatrix
. if defined(WITH_${f:U})
@${CP} -R ${WRKSRC}/src/${f} ${DATADIR}
@${INSTALL_DATA} ${FILESDIR}/Makefile.${f} ${DATADIR}/${f}/Makefile
. endif
.endfor
.include <bsd.port.post.mk>

View file

@ -0,0 +1,6 @@
MD5 (quake2lnx/quake2-r0.16.2.tar.gz) = 872fee27fb13a2a4c8876d5973c3c691
SIZE (quake2lnx/quake2-r0.16.2.tar.gz) = 1496377
MD5 (quake2lnx/roguesrc320.shar.Z) = 7d5e052839c9e629bad0a6570aa70554
SIZE (quake2lnx/roguesrc320.shar.Z) = 626769
MD5 (quake2lnx/xatrixsrc320.shar.Z) = 41fc4ecc4f25c068e7d1f488bd4a1e1a
SIZE (quake2lnx/xatrixsrc320.shar.Z) = 455917

View file

@ -0,0 +1,32 @@
# BSD Makefile for Quake II: Capture The Flag game source
SHLIB_NAME= game.so
SRCS= g_ai.c \
g_chase.c \
g_cmds.c \
g_combat.c \
g_ctf.c \
g_func.c \
g_items.c \
g_main.c \
g_misc.c \
g_monster.c \
g_phys.c \
g_save.c \
g_spawn.c \
g_svcmds.c \
g_target.c \
g_trigger.c \
g_utils.c \
g_weapon.c \
m_move.c \
p_client.c \
p_hud.c \
p_menu.c \
p_trail.c \
p_view.c \
p_weapon.c \
q_shared.c
.include <bsd.lib.mk>

View file

@ -0,0 +1,54 @@
# BSD Makefile for Quake II game source
SHLIB_NAME= game.so
SRCS= g_ai.c \
g_chase.c \
g_cmds.c \
g_combat.c \
g_func.c \
g_items.c \
g_main.c \
g_misc.c \
g_monster.c \
g_phys.c \
g_save.c \
g_spawn.c \
g_svcmds.c \
g_target.c \
g_trigger.c \
g_turret.c \
g_utils.c \
g_weapon.c \
m_actor.c \
m_berserk.c \
m_boss2.c \
m_boss3.c \
m_boss31.c \
m_boss32.c \
m_brain.c \
m_chick.c \
m_flash.c \
m_flipper.c \
m_float.c \
m_flyer.c \
m_gladiator.c \
m_gunner.c \
m_hover.c \
m_infantry.c \
m_insane.c \
m_medic.c \
m_move.c \
m_mutant.c \
m_parasite.c \
m_soldier.c \
m_supertank.c \
m_tank.c \
p_client.c \
p_hud.c \
p_trail.c \
p_view.c \
p_weapon.c \
q_shared.c
.include <bsd.lib.mk>

View file

@ -0,0 +1,68 @@
# BSD Makefile for Quake II: Ground Zero (Rogue) game source
SHLIB_NAME= game.so
SRCS= dm_ball.c \
dm_tag.c \
g_ai.c \
g_chase.c \
g_cmds.c \
g_combat.c \
g_func.c \
g_items.c \
g_main.c \
g_misc.c \
g_monster.c \
g_newai.c \
g_newdm.c \
g_newfnc.c \
g_newtarg.c \
g_newtrig.c \
g_newweap.c \
g_phys.c \
g_save.c \
g_spawn.c \
g_sphere.c \
g_svcmds.c \
g_target.c \
g_trigger.c \
g_turret.c \
g_utils.c \
g_weapon.c \
m_actor.c \
m_berserk.c \
m_boss2.c \
m_boss3.c \
m_boss31.c \
m_boss32.c \
m_brain.c \
m_carrier.c \
m_chick.c \
m_flash.c \
m_flipper.c \
m_float.c \
m_flyer.c \
m_gladiator.c \
m_gunner.c \
m_hover.c \
m_infantry.c \
m_insane.c \
m_medic.c \
m_move.c \
m_mutant.c \
m_parasite.c \
m_soldier.c \
m_stalker.c \
m_supertank.c \
m_tank.c \
m_turret.c \
m_widow.c \
m_widow2.c \
p_client.c \
p_hud.c \
p_trail.c \
p_view.c \
p_weapon.c \
q_shared.c
.include <bsd.lib.mk>

View file

@ -0,0 +1,58 @@
# BSD Makefile for Quake II: The Reckoning (Xatrix) game source
SHLIB_NAME= game.so
SRCS= g_ai.c \
g_chase.c \
g_cmds.c \
g_combat.c \
g_func.c \
g_items.c \
g_main.c \
g_misc.c \
g_monster.c \
g_phys.c \
g_save.c \
g_spawn.c \
g_svcmds.c \
g_target.c \
g_trigger.c \
g_turret.c \
g_utils.c \
g_weapon.c \
m_actor.c \
m_berserk.c \
m_boss2.c \
m_boss3.c \
m_boss31.c \
m_boss32.c \
m_boss5.c \
m_brain.c \
m_chick.c \
m_fixbot.c \
m_flash.c \
m_flipper.c \
m_float.c \
m_flyer.c \
m_gekk.c \
m_gladb.c \
m_gladiator.c \
m_gunner.c \
m_hover.c \
m_infantry.c \
m_insane.c \
m_medic.c \
m_move.c \
m_mutant.c \
m_parasite.c \
m_soldier.c \
m_supertank.c \
m_tank.c \
p_client.c \
p_hud.c \
p_trail.c \
p_view.c \
p_weapon.c \
q_shared.c
.include <bsd.lib.mk>

View file

@ -0,0 +1,10 @@
--- src/rogue/g_local.h.orig Mon Nov 30 17:53:20 1998
+++ src/rogue/g_local.h Tue Sep 27 20:20:27 2005
@@ -22,7 +22,6 @@
//==================================================================
#ifndef _WIN32
-#include <nan.h>
#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) > (b) ? (a) : (b))
#ifdef __sun__

View file

@ -0,0 +1,11 @@
--- src/rogue/q_shared.c.orig Mon Nov 30 17:53:34 1998
+++ src/rogue/q_shared.c Tue Sep 27 20:03:24 2005
@@ -329,7 +329,7 @@
Returns 1, 2, or 1 + 2
==================
*/
-#if !id386 || defined __linux__
+#if !id386 || defined __linux__ || defined __FreeBSD__
int BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, struct cplane_s *p)
{
float dist1, dist2;

View file

@ -0,0 +1,11 @@
--- src/xatrix/q_shared.c.orig Mon Nov 30 17:55:36 1998
+++ src/xatrix/q_shared.c Tue Sep 27 20:04:53 2005
@@ -326,7 +326,7 @@
Returns 1, 2, or 1 + 2
==================
*/
-#if !id386 || defined __linux__
+#if !id386 || defined __linux__ || defined __FreeBSD__
int BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, struct cplane_s *p)
{
float dist1, dist2;

View file

@ -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());
}

View file

@ -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);

View file

@ -0,0 +1,5 @@
Quake II game source.
This port installs the Quake II game source, together with BSD Makefiles, for
building modifications. It can also install the Capture the Flag mod, Rogue
and Xatrix game source.

View file

@ -0,0 +1,306 @@
%%CTF%%%%DATADIR%%/ctf/docs/admin.gif
%%CTF%%%%DATADIR%%/ctf/docs/adminset.gif
%%CTF%%%%DATADIR%%/ctf/docs/automac.gif
%%CTF%%%%DATADIR%%/ctf/docs/ghost.jpg
%%CTF%%%%DATADIR%%/ctf/docs/grapple.jpg
%%CTF%%%%DATADIR%%/ctf/docs/layout.jpg
%%CTF%%%%DATADIR%%/ctf/docs/mainctf_back.jpg
%%CTF%%%%DATADIR%%/ctf/docs/menu.gif
%%CTF%%%%DATADIR%%/ctf/docs/q2ctf.html
%%CTF%%%%DATADIR%%/ctf/docs/say_team.gif
%%CTF%%%%DATADIR%%/ctf/docs/stats.jpg
%%CTF%%%%DATADIR%%/ctf/docs/tech1.gif
%%CTF%%%%DATADIR%%/ctf/docs/tech2.gif
%%CTF%%%%DATADIR%%/ctf/docs/tech3.gif
%%CTF%%%%DATADIR%%/ctf/docs/tech4.gif
%%CTF%%%%DATADIR%%/ctf/Makefile
%%CTF%%%%DATADIR%%/ctf/g_ai.c
%%CTF%%%%DATADIR%%/ctf/g_chase.c
%%CTF%%%%DATADIR%%/ctf/g_cmds.c
%%CTF%%%%DATADIR%%/ctf/g_combat.c
%%CTF%%%%DATADIR%%/ctf/g_ctf.c
%%CTF%%%%DATADIR%%/ctf/g_ctf.h
%%CTF%%%%DATADIR%%/ctf/g_func.c
%%CTF%%%%DATADIR%%/ctf/g_items.c
%%CTF%%%%DATADIR%%/ctf/g_local.h
%%CTF%%%%DATADIR%%/ctf/g_main.c
%%CTF%%%%DATADIR%%/ctf/g_misc.c
%%CTF%%%%DATADIR%%/ctf/g_monster.c
%%CTF%%%%DATADIR%%/ctf/g_phys.c
%%CTF%%%%DATADIR%%/ctf/g_save.c
%%CTF%%%%DATADIR%%/ctf/g_spawn.c
%%CTF%%%%DATADIR%%/ctf/g_svcmds.c
%%CTF%%%%DATADIR%%/ctf/g_target.c
%%CTF%%%%DATADIR%%/ctf/g_trigger.c
%%CTF%%%%DATADIR%%/ctf/g_utils.c
%%CTF%%%%DATADIR%%/ctf/g_weapon.c
%%CTF%%%%DATADIR%%/ctf/game.h
%%CTF%%%%DATADIR%%/ctf/m_move.c
%%CTF%%%%DATADIR%%/ctf/m_player.h
%%CTF%%%%DATADIR%%/ctf/p_client.c
%%CTF%%%%DATADIR%%/ctf/p_hud.c
%%CTF%%%%DATADIR%%/ctf/p_menu.c
%%CTF%%%%DATADIR%%/ctf/p_menu.h
%%CTF%%%%DATADIR%%/ctf/p_trail.c
%%CTF%%%%DATADIR%%/ctf/p_view.c
%%CTF%%%%DATADIR%%/ctf/p_weapon.c
%%CTF%%%%DATADIR%%/ctf/q_shared.c
%%CTF%%%%DATADIR%%/ctf/q_shared.h
%%DATADIR%%/game/Makefile
%%DATADIR%%/game/g_ai.c
%%DATADIR%%/game/g_chase.c
%%DATADIR%%/game/g_cmds.c
%%DATADIR%%/game/g_combat.c
%%DATADIR%%/game/g_func.c
%%DATADIR%%/game/g_items.c
%%DATADIR%%/game/g_local.h
%%DATADIR%%/game/g_main.c
%%DATADIR%%/game/g_misc.c
%%DATADIR%%/game/g_monster.c
%%DATADIR%%/game/g_phys.c
%%DATADIR%%/game/g_save.c
%%DATADIR%%/game/g_spawn.c
%%DATADIR%%/game/g_svcmds.c
%%DATADIR%%/game/g_target.c
%%DATADIR%%/game/g_trigger.c
%%DATADIR%%/game/g_turret.c
%%DATADIR%%/game/g_utils.c
%%DATADIR%%/game/g_weapon.c
%%DATADIR%%/game/game.h
%%DATADIR%%/game/m_actor.c
%%DATADIR%%/game/m_actor.h
%%DATADIR%%/game/m_berserk.c
%%DATADIR%%/game/m_berserk.h
%%DATADIR%%/game/m_boss2.c
%%DATADIR%%/game/m_boss2.h
%%DATADIR%%/game/m_boss3.c
%%DATADIR%%/game/m_boss31.c
%%DATADIR%%/game/m_boss31.h
%%DATADIR%%/game/m_boss32.c
%%DATADIR%%/game/m_boss32.h
%%DATADIR%%/game/m_brain.c
%%DATADIR%%/game/m_brain.h
%%DATADIR%%/game/m_chick.c
%%DATADIR%%/game/m_chick.h
%%DATADIR%%/game/m_flash.c
%%DATADIR%%/game/m_flipper.c
%%DATADIR%%/game/m_flipper.h
%%DATADIR%%/game/m_float.c
%%DATADIR%%/game/m_float.h
%%DATADIR%%/game/m_flyer.c
%%DATADIR%%/game/m_flyer.h
%%DATADIR%%/game/m_gladiator.c
%%DATADIR%%/game/m_gladiator.h
%%DATADIR%%/game/m_gunner.c
%%DATADIR%%/game/m_gunner.h
%%DATADIR%%/game/m_hover.c
%%DATADIR%%/game/m_hover.h
%%DATADIR%%/game/m_infantry.c
%%DATADIR%%/game/m_infantry.h
%%DATADIR%%/game/m_insane.c
%%DATADIR%%/game/m_insane.h
%%DATADIR%%/game/m_medic.c
%%DATADIR%%/game/m_medic.h
%%DATADIR%%/game/m_move.c
%%DATADIR%%/game/m_mutant.c
%%DATADIR%%/game/m_mutant.h
%%DATADIR%%/game/m_parasite.c
%%DATADIR%%/game/m_parasite.h
%%DATADIR%%/game/m_player.h
%%DATADIR%%/game/m_rider.h
%%DATADIR%%/game/m_soldier.c
%%DATADIR%%/game/m_soldier.h
%%DATADIR%%/game/m_supertank.c
%%DATADIR%%/game/m_supertank.h
%%DATADIR%%/game/m_tank.c
%%DATADIR%%/game/m_tank.h
%%DATADIR%%/game/p_client.c
%%DATADIR%%/game/p_hud.c
%%DATADIR%%/game/p_trail.c
%%DATADIR%%/game/p_view.c
%%DATADIR%%/game/p_weapon.c
%%DATADIR%%/game/q_shared.c
%%DATADIR%%/game/q_shared.h
%%ROGUE%%%%DATADIR%%/rogue/Makefile
%%ROGUE%%%%DATADIR%%/rogue/dm_ball.c
%%ROGUE%%%%DATADIR%%/rogue/dm_tag.c
%%ROGUE%%%%DATADIR%%/rogue/g_ai.c
%%ROGUE%%%%DATADIR%%/rogue/g_chase.c
%%ROGUE%%%%DATADIR%%/rogue/g_cmds.c
%%ROGUE%%%%DATADIR%%/rogue/g_combat.c
%%ROGUE%%%%DATADIR%%/rogue/g_func.c
%%ROGUE%%%%DATADIR%%/rogue/g_items.c
%%ROGUE%%%%DATADIR%%/rogue/g_local.h
%%ROGUE%%%%DATADIR%%/rogue/g_main.c
%%ROGUE%%%%DATADIR%%/rogue/g_misc.c
%%ROGUE%%%%DATADIR%%/rogue/g_monster.c
%%ROGUE%%%%DATADIR%%/rogue/g_newai.c
%%ROGUE%%%%DATADIR%%/rogue/g_newdm.c
%%ROGUE%%%%DATADIR%%/rogue/g_newfnc.c
%%ROGUE%%%%DATADIR%%/rogue/g_newtarg.c
%%ROGUE%%%%DATADIR%%/rogue/g_newtrig.c
%%ROGUE%%%%DATADIR%%/rogue/g_newweap.c
%%ROGUE%%%%DATADIR%%/rogue/g_phys.c
%%ROGUE%%%%DATADIR%%/rogue/g_save.c
%%ROGUE%%%%DATADIR%%/rogue/g_spawn.c
%%ROGUE%%%%DATADIR%%/rogue/g_sphere.c
%%ROGUE%%%%DATADIR%%/rogue/g_svcmds.c
%%ROGUE%%%%DATADIR%%/rogue/g_target.c
%%ROGUE%%%%DATADIR%%/rogue/g_trigger.c
%%ROGUE%%%%DATADIR%%/rogue/g_turret.c
%%ROGUE%%%%DATADIR%%/rogue/g_utils.c
%%ROGUE%%%%DATADIR%%/rogue/g_weapon.c
%%ROGUE%%%%DATADIR%%/rogue/game.h
%%ROGUE%%%%DATADIR%%/rogue/m_actor.c
%%ROGUE%%%%DATADIR%%/rogue/m_actor.h
%%ROGUE%%%%DATADIR%%/rogue/m_berserk.c
%%ROGUE%%%%DATADIR%%/rogue/m_berserk.h
%%ROGUE%%%%DATADIR%%/rogue/m_boss2.c
%%ROGUE%%%%DATADIR%%/rogue/m_boss2.h
%%ROGUE%%%%DATADIR%%/rogue/m_boss3.c
%%ROGUE%%%%DATADIR%%/rogue/m_boss31.c
%%ROGUE%%%%DATADIR%%/rogue/m_boss31.h
%%ROGUE%%%%DATADIR%%/rogue/m_boss32.c
%%ROGUE%%%%DATADIR%%/rogue/m_boss32.h
%%ROGUE%%%%DATADIR%%/rogue/m_brain.c
%%ROGUE%%%%DATADIR%%/rogue/m_brain.h
%%ROGUE%%%%DATADIR%%/rogue/m_carrier.c
%%ROGUE%%%%DATADIR%%/rogue/m_carrier.h
%%ROGUE%%%%DATADIR%%/rogue/m_chick.c
%%ROGUE%%%%DATADIR%%/rogue/m_chick.h
%%ROGUE%%%%DATADIR%%/rogue/m_flash.c
%%ROGUE%%%%DATADIR%%/rogue/m_flipper.c
%%ROGUE%%%%DATADIR%%/rogue/m_flipper.h
%%ROGUE%%%%DATADIR%%/rogue/m_float.c
%%ROGUE%%%%DATADIR%%/rogue/m_float.h
%%ROGUE%%%%DATADIR%%/rogue/m_flyer.c
%%ROGUE%%%%DATADIR%%/rogue/m_flyer.h
%%ROGUE%%%%DATADIR%%/rogue/m_gladiator.c
%%ROGUE%%%%DATADIR%%/rogue/m_gladiator.h
%%ROGUE%%%%DATADIR%%/rogue/m_gunner.c
%%ROGUE%%%%DATADIR%%/rogue/m_gunner.h
%%ROGUE%%%%DATADIR%%/rogue/m_hover.c
%%ROGUE%%%%DATADIR%%/rogue/m_hover.h
%%ROGUE%%%%DATADIR%%/rogue/m_infantry.c
%%ROGUE%%%%DATADIR%%/rogue/m_infantry.h
%%ROGUE%%%%DATADIR%%/rogue/m_insane.c
%%ROGUE%%%%DATADIR%%/rogue/m_insane.h
%%ROGUE%%%%DATADIR%%/rogue/m_medic.c
%%ROGUE%%%%DATADIR%%/rogue/m_medic.h
%%ROGUE%%%%DATADIR%%/rogue/m_move.c
%%ROGUE%%%%DATADIR%%/rogue/m_move2.c
%%ROGUE%%%%DATADIR%%/rogue/m_mutant.c
%%ROGUE%%%%DATADIR%%/rogue/m_mutant.h
%%ROGUE%%%%DATADIR%%/rogue/m_parasite.c
%%ROGUE%%%%DATADIR%%/rogue/m_parasite.h
%%ROGUE%%%%DATADIR%%/rogue/m_player.h
%%ROGUE%%%%DATADIR%%/rogue/m_rider.h
%%ROGUE%%%%DATADIR%%/rogue/m_soldier.c
%%ROGUE%%%%DATADIR%%/rogue/m_soldier.h
%%ROGUE%%%%DATADIR%%/rogue/m_stalker.c
%%ROGUE%%%%DATADIR%%/rogue/m_stalker.h
%%ROGUE%%%%DATADIR%%/rogue/m_supertank.c
%%ROGUE%%%%DATADIR%%/rogue/m_supertank.h
%%ROGUE%%%%DATADIR%%/rogue/m_tank.c
%%ROGUE%%%%DATADIR%%/rogue/m_tank.h
%%ROGUE%%%%DATADIR%%/rogue/m_turret.c
%%ROGUE%%%%DATADIR%%/rogue/m_turret.h
%%ROGUE%%%%DATADIR%%/rogue/m_widow.c
%%ROGUE%%%%DATADIR%%/rogue/m_widow.h
%%ROGUE%%%%DATADIR%%/rogue/m_widow2.c
%%ROGUE%%%%DATADIR%%/rogue/m_widow2.h
%%ROGUE%%%%DATADIR%%/rogue/p_client.c
%%ROGUE%%%%DATADIR%%/rogue/p_hud.c
%%ROGUE%%%%DATADIR%%/rogue/p_trail.c
%%ROGUE%%%%DATADIR%%/rogue/p_view.c
%%ROGUE%%%%DATADIR%%/rogue/p_weapon.c
%%ROGUE%%%%DATADIR%%/rogue/q_shared.c
%%ROGUE%%%%DATADIR%%/rogue/q_shared.h
%%XATRIX%%%%DATADIR%%/xatrix/Makefile
%%XATRIX%%%%DATADIR%%/xatrix/g_ai.c
%%XATRIX%%%%DATADIR%%/xatrix/g_chase.c
%%XATRIX%%%%DATADIR%%/xatrix/g_cmds.c
%%XATRIX%%%%DATADIR%%/xatrix/g_combat.c
%%XATRIX%%%%DATADIR%%/xatrix/g_func.c
%%XATRIX%%%%DATADIR%%/xatrix/g_items.c
%%XATRIX%%%%DATADIR%%/xatrix/g_local.h
%%XATRIX%%%%DATADIR%%/xatrix/g_main.c
%%XATRIX%%%%DATADIR%%/xatrix/g_misc.c
%%XATRIX%%%%DATADIR%%/xatrix/g_monster.c
%%XATRIX%%%%DATADIR%%/xatrix/g_phys.c
%%XATRIX%%%%DATADIR%%/xatrix/g_save.c
%%XATRIX%%%%DATADIR%%/xatrix/g_spawn.c
%%XATRIX%%%%DATADIR%%/xatrix/g_svcmds.c
%%XATRIX%%%%DATADIR%%/xatrix/g_target.c
%%XATRIX%%%%DATADIR%%/xatrix/g_trigger.c
%%XATRIX%%%%DATADIR%%/xatrix/g_turret.c
%%XATRIX%%%%DATADIR%%/xatrix/g_utils.c
%%XATRIX%%%%DATADIR%%/xatrix/g_weapon.c
%%XATRIX%%%%DATADIR%%/xatrix/game.h
%%XATRIX%%%%DATADIR%%/xatrix/m_actor.c
%%XATRIX%%%%DATADIR%%/xatrix/m_actor.h
%%XATRIX%%%%DATADIR%%/xatrix/m_berserk.c
%%XATRIX%%%%DATADIR%%/xatrix/m_berserk.h
%%XATRIX%%%%DATADIR%%/xatrix/m_boss2.c
%%XATRIX%%%%DATADIR%%/xatrix/m_boss2.h
%%XATRIX%%%%DATADIR%%/xatrix/m_boss3.c
%%XATRIX%%%%DATADIR%%/xatrix/m_boss31.c
%%XATRIX%%%%DATADIR%%/xatrix/m_boss31.h
%%XATRIX%%%%DATADIR%%/xatrix/m_boss32.c
%%XATRIX%%%%DATADIR%%/xatrix/m_boss32.h
%%XATRIX%%%%DATADIR%%/xatrix/m_boss5.c
%%XATRIX%%%%DATADIR%%/xatrix/m_brain.c
%%XATRIX%%%%DATADIR%%/xatrix/m_brain.h
%%XATRIX%%%%DATADIR%%/xatrix/m_chick.c
%%XATRIX%%%%DATADIR%%/xatrix/m_chick.h
%%XATRIX%%%%DATADIR%%/xatrix/m_fixbot.c
%%XATRIX%%%%DATADIR%%/xatrix/m_fixbot.h
%%XATRIX%%%%DATADIR%%/xatrix/m_flash.c
%%XATRIX%%%%DATADIR%%/xatrix/m_flipper.c
%%XATRIX%%%%DATADIR%%/xatrix/m_flipper.h
%%XATRIX%%%%DATADIR%%/xatrix/m_float.c
%%XATRIX%%%%DATADIR%%/xatrix/m_float.h
%%XATRIX%%%%DATADIR%%/xatrix/m_flyer.c
%%XATRIX%%%%DATADIR%%/xatrix/m_flyer.h
%%XATRIX%%%%DATADIR%%/xatrix/m_gekk.c
%%XATRIX%%%%DATADIR%%/xatrix/m_gekk.h
%%XATRIX%%%%DATADIR%%/xatrix/m_gladb.c
%%XATRIX%%%%DATADIR%%/xatrix/m_gladiator.c
%%XATRIX%%%%DATADIR%%/xatrix/m_gladiator.h
%%XATRIX%%%%DATADIR%%/xatrix/m_gunner.c
%%XATRIX%%%%DATADIR%%/xatrix/m_gunner.h
%%XATRIX%%%%DATADIR%%/xatrix/m_hover.c
%%XATRIX%%%%DATADIR%%/xatrix/m_hover.h
%%XATRIX%%%%DATADIR%%/xatrix/m_infantry.c
%%XATRIX%%%%DATADIR%%/xatrix/m_infantry.h
%%XATRIX%%%%DATADIR%%/xatrix/m_insane.c
%%XATRIX%%%%DATADIR%%/xatrix/m_insane.h
%%XATRIX%%%%DATADIR%%/xatrix/m_medic.c
%%XATRIX%%%%DATADIR%%/xatrix/m_medic.h
%%XATRIX%%%%DATADIR%%/xatrix/m_move.c
%%XATRIX%%%%DATADIR%%/xatrix/m_mutant.c
%%XATRIX%%%%DATADIR%%/xatrix/m_mutant.h
%%XATRIX%%%%DATADIR%%/xatrix/m_parasite.c
%%XATRIX%%%%DATADIR%%/xatrix/m_parasite.h
%%XATRIX%%%%DATADIR%%/xatrix/m_player.h
%%XATRIX%%%%DATADIR%%/xatrix/m_rider.h
%%XATRIX%%%%DATADIR%%/xatrix/m_soldier.c
%%XATRIX%%%%DATADIR%%/xatrix/m_soldier.h
%%XATRIX%%%%DATADIR%%/xatrix/m_soldierh.h
%%XATRIX%%%%DATADIR%%/xatrix/m_supertank.c
%%XATRIX%%%%DATADIR%%/xatrix/m_supertank.h
%%XATRIX%%%%DATADIR%%/xatrix/m_tank.c
%%XATRIX%%%%DATADIR%%/xatrix/m_tank.h
%%XATRIX%%%%DATADIR%%/xatrix/p_client.c
%%XATRIX%%%%DATADIR%%/xatrix/p_hud.c
%%XATRIX%%%%DATADIR%%/xatrix/p_trail.c
%%XATRIX%%%%DATADIR%%/xatrix/p_view.c
%%XATRIX%%%%DATADIR%%/xatrix/p_weapon.c
%%XATRIX%%%%DATADIR%%/xatrix/q_shared.c
%%XATRIX%%%%DATADIR%%/xatrix/q_shared.h
%%XATRIX%%@dirrm %%DATADIR%%/xatrix
%%ROGUE%%@dirrm %%DATADIR%%/rogue
@dirrm %%DATADIR%%/game
%%CTF%%@dirrm %%DATADIR%%/ctf/docs
%%CTF%%@dirrm %%DATADIR%%/ctf
@dirrm %%DATADIR%%