aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile18
-rw-r--r--README20
-rw-r--r--code/client/cl_main.c5
-rw-r--r--code/qcommon/files.c6
-rw-r--r--code/qcommon/q_shared.h21
-rw-r--r--code/qcommon/qcommon.h13
-rw-r--r--code/server/server.h2
-rw-r--r--code/server/sv_ccmds.c6
-rw-r--r--code/server/sv_client.c11
-rw-r--r--code/server/sv_main.c2
10 files changed, 84 insertions, 20 deletions
diff --git a/Makefile b/Makefile
index 40b68d2..bf188b6 100644
--- a/Makefile
+++ b/Makefile
@@ -23,6 +23,9 @@ ifeq ($(COMPILE_PLATFORM),mingw32)
endif
endif
+ifndef BUILD_STANDALONE
+ BUILD_STANDALONE =
+endif
ifndef BUILD_CLIENT
BUILD_CLIENT =
endif
@@ -151,8 +154,15 @@ LIBSDIR=$(MOUNT_DIR)/libs
TEMPDIR=/tmp
# extract version info
-VERSION=$(shell grep "\#define *PRODUCT_VERSION" $(CMDIR)/q_shared.h | \
- sed -e 's/[^"]*"\(.*\)"/\1/')
+# echo $(BUILD_CLIENT)
+
+ifeq ($(BUILD_STANDALONE),1)
+ VERSION=$(shell grep "\#define *PRODUCT_VERSION" $(CMDIR)/q_shared.h | head -n 1 | \
+ sed -e 's/[^"]*"\(.*\)"/\1/')
+else
+ VERSION=$(shell grep "\#define *PRODUCT_VERSION" $(CMDIR)/q_shared.h | tail -n 1 | \
+ sed -e 's/[^"]*"\(.*\)"/\1/')
+endif
USE_SVN=
ifeq ($(wildcard .svn),.svn)
@@ -760,6 +770,10 @@ ifeq ($(USE_LOCAL_HEADERS),1)
BASE_CFLAGS += -DUSE_LOCAL_HEADERS
endif
+ifeq ($(BUILD_STANDALONE),1)
+ BASE_CFLAGS += -DSTANDALONE
+endif
+
ifeq ($(GENERATE_DEPENDENCIES),1)
DEPEND_CFLAGS = -MMD
else
diff --git a/README b/README
index 7cec4aa..400812a 100644
--- a/README
+++ b/README
@@ -83,6 +83,7 @@ Makefile.local:
BUILD_CLIENT_SMP - build the 'ioquake3-smp' client binary
BUILD_GAME_SO - build the game shared libraries
BUILD_GAME_QVM - build the game qvms
+ BUILD_STANDALONE - build binaries suited for stand-alone games
USE_OPENAL - use OpenAL where available
USE_OPENAL_DLOPEN - link with OpenAL at runtime
USE_CURL - use libcurl for http/ftp download support
@@ -193,6 +194,25 @@ Creating mods compatible with Q3 1.32b
compiler. See http://www.quakesrc.org/forums/viewtopic.php?t=5665 (if it
still exists when you read this) for more details.
+Creating stand-alone games
+ As ioquake3 is meant to be a reliable and stable code base, this engine is
+ ideal for your stand-alone game project. We made it easier for you to get a
+ binary that does not look for the original quake3 assets. The auth server
+ specific parts are disabled, too.
+ Just run make with the option BUILD_STANDALONE=1
+ Don't forget to edit the PRODUCT_NAME and subsequent #defines in
+ qcommon/q_shared.h and fill in your project info!
+ While a lot of work has been put into the ioquake3 that you can benefit from
+ free of charge, it does not mean that you have no obligations to fulfill.
+ Be aware that as soon as you start distributing your game with an engine
+ based on our sources we expect you to fully comply with the requirements
+ as stated in the GPL. That includes making sources and modifications you made
+ to the ioquake3 engine as well as the game-code used to compile the .qvm
+ files for the game logic freely available to everyone.
+ This does NOT mean that you cannot market this game commercially. All assets
+ (e.g. textures, sounds, maps) created by yourself are your property and can
+ be sold like every other game you find in stores.
+
cl_guid Support
cl_guid is a cvar which is part of the client's USERINFO string. Its value
is a 32 character string made up of [a-f] and [0-9] characters. This
diff --git a/code/client/cl_main.c b/code/client/cl_main.c
index 0d373bb..8df950b 100644
--- a/code/client/cl_main.c
+++ b/code/client/cl_main.c
@@ -1004,6 +1004,7 @@ If no response is received from the authorize server after two tries, the client
in anyway.
===================
*/
+#ifndef STANDALONE
void CL_RequestAuthorization( void ) {
char nums[64];
int i, j, l;
@@ -1047,7 +1048,7 @@ void CL_RequestAuthorization( void ) {
NET_OutOfBandPrint(NS_CLIENT, cls.authorizeServer, "getKeyAuthorize %i %s", fs->integer, nums );
}
-
+#endif
/*
======================================================================
@@ -1710,9 +1711,11 @@ void CL_CheckForResend( void ) {
switch ( cls.state ) {
case CA_CONNECTING:
// requesting a challenge .. IPv6 users always get in as authorize server supports no ipv6.
+#ifndef STANDALONE
if ( clc.serverAddress.type == NA_IP && !Sys_IsLANAddress( clc.serverAddress ) ) {
CL_RequestAuthorization();
}
+#endif
NET_OutOfBandPrint(NS_CLIENT, clc.serverAddress, "getchallenge");
break;
diff --git a/code/qcommon/files.c b/code/qcommon/files.c
index a1d3312..32a24da 100644
--- a/code/qcommon/files.c
+++ b/code/qcommon/files.c
@@ -2795,6 +2795,7 @@ static void FS_Startup( const char *gameName )
Com_Printf( "%d files in pk3 files\n", fs_packFiles );
}
+#ifndef STANDALONE
/*
===================
FS_CheckPak0
@@ -2891,6 +2892,7 @@ static void FS_CheckPak0( void )
Com_Error(ERR_FATAL, "You need to install Quake III Arena in order to play");
}
}
+#endif
/*
=====================
@@ -3262,7 +3264,9 @@ void FS_InitFilesystem( void ) {
// try to start up normally
FS_Startup( BASEGAME );
+#ifndef STANDALONE
FS_CheckPak0( );
+#endif
// if we can't find default.cfg, assume that the paths are
// busted and error out now, rather than getting an unreadable
@@ -3295,7 +3299,9 @@ void FS_Restart( int checksumFeed ) {
// try to start up normally
FS_Startup( BASEGAME );
+#ifndef STANDALONE
FS_CheckPak0( );
+#endif
// if we can't find default.cfg, assume that the paths are
// busted and error out now, rather than getting an unreadable
diff --git a/code/qcommon/q_shared.h b/code/qcommon/q_shared.h
index 81083d1..d1f8d2a 100644
--- a/code/qcommon/q_shared.h
+++ b/code/qcommon/q_shared.h
@@ -26,8 +26,19 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
// q_shared.h -- included first by ALL program modules.
// A user mod should never modify this file
-#define PRODUCT_NAME "ioq3"
-#define PRODUCT_VERSION "1.35"
+#ifdef STANDALONE
+ #define PRODUCT_NAME "iofoo3"
+ #define PRODUCT_VERSION "-1"
+ #define BASEGAME "foobar"
+ #define CLIENT_WINDOW_TITLE "changeme"
+ #define CLIENT_WINDOW_MIN_TITLE "changeme2"
+#else
+ #define PRODUCT_NAME "ioq3"
+ #define PRODUCT_VERSION "1.35"
+ #define BASEGAME "baseq3"
+ #define CLIENT_WINDOW_TITLE "ioquake3"
+ #define CLIENT_WINDOW_MIN_TITLE "ioq3"
+#endif
#ifdef SVN_VERSION
# define Q3_VERSION PRODUCT_NAME " " SVN_VERSION
@@ -35,12 +46,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# define Q3_VERSION PRODUCT_NAME " " PRODUCT_VERSION
#endif
-#define CLIENT_WINDOW_TITLE "ioquake3"
-#define CLIENT_WINDOW_MIN_TITLE "ioq3"
-// 1.32 released 7-10-2002
-
-#define BASEGAME "baseq3"
-
#define MAX_TEAMNAME 32
#ifdef _MSC_VER
diff --git a/code/qcommon/qcommon.h b/code/qcommon/qcommon.h
index d47bb21..1bd1c3d 100644
--- a/code/qcommon/qcommon.h
+++ b/code/qcommon/qcommon.h
@@ -243,15 +243,18 @@ extern int demo_protocols[];
#ifndef MASTER_SERVER_NAME
#define MASTER_SERVER_NAME "master.quake3arena.com"
#endif
-#ifndef AUTHORIZE_SERVER_NAME
-#define AUTHORIZE_SERVER_NAME "authorize.quake3arena.com"
+
+#ifndef STANDALONE
+ #ifndef AUTHORIZE_SERVER_NAME
+ #define AUTHORIZE_SERVER_NAME "authorize.quake3arena.com"
+ #endif
+ #ifndef PORT_AUTHORIZE
+ #define PORT_AUTHORIZE 27952
+ #endif
#endif
#define PORT_MASTER 27950
#define PORT_UPDATE 27951
-#ifndef PORT_AUTHORIZE
-#define PORT_AUTHORIZE 27952
-#endif
#define PORT_SERVER 27960
#define NUM_SERVER_PORTS 4 // broadcast scan this many ports after
// PORT_SERVER so a single machine can
diff --git a/code/server/server.h b/code/server/server.h
index 57a49f3..6a7612b 100644
--- a/code/server/server.h
+++ b/code/server/server.h
@@ -290,7 +290,9 @@ void SV_GetChallenge( netadr_t from );
void SV_DirectConnect( netadr_t from );
+#ifndef STANDALONE
void SV_AuthorizeIpPacket( netadr_t from );
+#endif
void SV_ExecuteClientMessage( client_t *cl, msg_t *msg );
void SV_UserinfoChanged( client_t *cl );
diff --git a/code/server/sv_ccmds.c b/code/server/sv_ccmds.c
index 4e3c592..18dcfbc 100644
--- a/code/server/sv_ccmds.c
+++ b/code/server/sv_ccmds.c
@@ -397,6 +397,9 @@ static void SV_Kick_f( void ) {
cl->lastPacketTime = svs.time; // in case there is a funny zombie
}
+#ifndef STANDALONE
+// these functions require the auth server which of course is not available anymore for stand-alone games.
+
/*
==================
SV_Ban_f
@@ -506,6 +509,7 @@ static void SV_BanNum_f( void ) {
Com_Printf("%s was banned from coming back\n", cl->name);
}
}
+#endif
/*
==================
@@ -735,8 +739,10 @@ void SV_AddOperatorCommands( void ) {
Cmd_AddCommand ("heartbeat", SV_Heartbeat_f);
Cmd_AddCommand ("kick", SV_Kick_f);
+#ifndef STANDALONE
Cmd_AddCommand ("banUser", SV_Ban_f);
Cmd_AddCommand ("banClient", SV_BanNum_f);
+#endif
Cmd_AddCommand ("clientkick", SV_KickNum_f);
Cmd_AddCommand ("status", SV_Status_f);
Cmd_AddCommand ("serverinfo", SV_Serverinfo_f);
diff --git a/code/server/sv_client.c b/code/server/sv_client.c
index 8a85bdc..5345b0e 100644
--- a/code/server/sv_client.c
+++ b/code/server/sv_client.c
@@ -81,6 +81,10 @@ void SV_GetChallenge( netadr_t from ) {
i = oldest;
}
+#ifdef STANDALONE
+ challenge->pingTime = svs.time;
+ NET_OutOfBandPrint( NS_SERVER, from, "challengeResponse %i", challenge->challenge );
+#else
// if they are on a lan address, send the challengeResponse immediately
if ( Sys_IsLANAddress( from ) ) {
challenge->pingTime = svs.time;
@@ -144,8 +148,10 @@ void SV_GetChallenge( netadr_t from ) {
NET_OutOfBandPrint( NS_SERVER, challenge->adr,
"challengeResponse %i", challenge->challenge );
}
+#endif
}
+#ifndef STANDALONE
/*
====================
SV_AuthorizeIpPacket
@@ -216,6 +222,7 @@ void SV_AuthorizeIpPacket( netadr_t from ) {
// clear the challenge record so it won't timeout and let them through
Com_Memset( &svs.challenges[i], 0, sizeof( svs.challenges[i] ) );
}
+#endif
/*
==================
@@ -225,10 +232,6 @@ A "connect" OOB command has been received
==================
*/
-#define PB_MESSAGE "PunkBuster Anti-Cheat software must be installed " \
- "and Enabled in order to join this server. An updated game patch can be downloaded from " \
- "www.idsoftware.com"
-
void SV_DirectConnect( netadr_t from ) {
char userinfo[MAX_INFO_STRING];
int i;
diff --git a/code/server/sv_main.c b/code/server/sv_main.c
index d0d7c65..0974c83 100644
--- a/code/server/sv_main.c
+++ b/code/server/sv_main.c
@@ -534,8 +534,10 @@ void SV_ConnectionlessPacket( netadr_t from, msg_t *msg ) {
SV_GetChallenge( from );
} else if (!Q_stricmp(c, "connect")) {
SV_DirectConnect( from );
+#ifndef STANDALONE
} else if (!Q_stricmp(c, "ipAuthorize")) {
SV_AuthorizeIpPacket( from );
+#endif
} else if (!Q_stricmp(c, "rcon")) {
SVC_RemoteCommand( from, msg );
} else if (!Q_stricmp(c, "disconnect")) {