From b3822d03e21bf6fa2ad8cf7a5f2327b8ffad817c Mon Sep 17 00:00:00 2001 From: Thilo Schulz Date: Wed, 9 Apr 2008 23:43:30 +0000 Subject: [PATCH] Include #ifdef to make it easier to create a stand-alone binary. --- Makefile | 18 ++++++++++++++++-- README | 20 ++++++++++++++++++++ code/client/cl_main.c | 5 ++++- code/qcommon/files.c | 6 ++++++ code/qcommon/q_shared.h | 21 +++++++++++++-------- code/qcommon/qcommon.h | 13 ++++++++----- code/server/server.h | 2 ++ code/server/sv_ccmds.c | 6 ++++++ code/server/sv_client.c | 11 +++++++---- code/server/sv_main.c | 2 ++ 10 files changed, 84 insertions(+), 20 deletions(-) diff --git a/Makefile b/Makefile index 40b68d2f..bf188b6a 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 7cec4aa5..400812a3 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 0d373bb3..8df950b7 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 a1d3312f..32a24dac 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 81083d12..d1f8d2a4 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 d47bb210..1bd1c3d2 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 57a49f3a..6a7612b5 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 4e3c5925..18dcfbc8 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 8a85bdc1..5345b0e4 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 d0d7c651..0974c834 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")) {