mirror of
https://github.com/ioquake/ioq3.git
synced 2024-11-10 07:11:46 +00:00
Include #ifdef to make it easier to create a stand-alone binary.
This commit is contained in:
parent
ca5fabe8c6
commit
b3822d03e2
10 changed files with 84 additions and 20 deletions
16
Makefile
16
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 | \
|
||||
# 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
|
||||
|
|
20
README
20
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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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")) {
|
||||
|
|
Loading…
Reference in a new issue