mirror of
https://github.com/UberGames/ioef.git
synced 2025-01-18 23:21:37 +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
18
Makefile
18
Makefile
|
@ -23,6 +23,9 @@ ifeq ($(COMPILE_PLATFORM),mingw32)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifndef BUILD_STANDALONE
|
||||||
|
BUILD_STANDALONE =
|
||||||
|
endif
|
||||||
ifndef BUILD_CLIENT
|
ifndef BUILD_CLIENT
|
||||||
BUILD_CLIENT =
|
BUILD_CLIENT =
|
||||||
endif
|
endif
|
||||||
|
@ -151,8 +154,15 @@ LIBSDIR=$(MOUNT_DIR)/libs
|
||||||
TEMPDIR=/tmp
|
TEMPDIR=/tmp
|
||||||
|
|
||||||
# extract version info
|
# extract version info
|
||||||
VERSION=$(shell grep "\#define *PRODUCT_VERSION" $(CMDIR)/q_shared.h | \
|
# echo $(BUILD_CLIENT)
|
||||||
sed -e 's/[^"]*"\(.*\)"/\1/')
|
|
||||||
|
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=
|
USE_SVN=
|
||||||
ifeq ($(wildcard .svn),.svn)
|
ifeq ($(wildcard .svn),.svn)
|
||||||
|
@ -760,6 +770,10 @@ ifeq ($(USE_LOCAL_HEADERS),1)
|
||||||
BASE_CFLAGS += -DUSE_LOCAL_HEADERS
|
BASE_CFLAGS += -DUSE_LOCAL_HEADERS
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(BUILD_STANDALONE),1)
|
||||||
|
BASE_CFLAGS += -DSTANDALONE
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(GENERATE_DEPENDENCIES),1)
|
ifeq ($(GENERATE_DEPENDENCIES),1)
|
||||||
DEPEND_CFLAGS = -MMD
|
DEPEND_CFLAGS = -MMD
|
||||||
else
|
else
|
||||||
|
|
20
README
20
README
|
@ -83,6 +83,7 @@ Makefile.local:
|
||||||
BUILD_CLIENT_SMP - build the 'ioquake3-smp' client binary
|
BUILD_CLIENT_SMP - build the 'ioquake3-smp' client binary
|
||||||
BUILD_GAME_SO - build the game shared libraries
|
BUILD_GAME_SO - build the game shared libraries
|
||||||
BUILD_GAME_QVM - build the game qvms
|
BUILD_GAME_QVM - build the game qvms
|
||||||
|
BUILD_STANDALONE - build binaries suited for stand-alone games
|
||||||
USE_OPENAL - use OpenAL where available
|
USE_OPENAL - use OpenAL where available
|
||||||
USE_OPENAL_DLOPEN - link with OpenAL at runtime
|
USE_OPENAL_DLOPEN - link with OpenAL at runtime
|
||||||
USE_CURL - use libcurl for http/ftp download support
|
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
|
compiler. See http://www.quakesrc.org/forums/viewtopic.php?t=5665 (if it
|
||||||
still exists when you read this) for more details.
|
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 Support
|
||||||
cl_guid is a cvar which is part of the client's USERINFO string. Its value
|
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
|
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.
|
in anyway.
|
||||||
===================
|
===================
|
||||||
*/
|
*/
|
||||||
|
#ifndef STANDALONE
|
||||||
void CL_RequestAuthorization( void ) {
|
void CL_RequestAuthorization( void ) {
|
||||||
char nums[64];
|
char nums[64];
|
||||||
int i, j, l;
|
int i, j, l;
|
||||||
|
@ -1047,7 +1048,7 @@ void CL_RequestAuthorization( void ) {
|
||||||
|
|
||||||
NET_OutOfBandPrint(NS_CLIENT, cls.authorizeServer, "getKeyAuthorize %i %s", fs->integer, nums );
|
NET_OutOfBandPrint(NS_CLIENT, cls.authorizeServer, "getKeyAuthorize %i %s", fs->integer, nums );
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
/*
|
/*
|
||||||
======================================================================
|
======================================================================
|
||||||
|
|
||||||
|
@ -1710,9 +1711,11 @@ void CL_CheckForResend( void ) {
|
||||||
switch ( cls.state ) {
|
switch ( cls.state ) {
|
||||||
case CA_CONNECTING:
|
case CA_CONNECTING:
|
||||||
// requesting a challenge .. IPv6 users always get in as authorize server supports no ipv6.
|
// 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 ) ) {
|
if ( clc.serverAddress.type == NA_IP && !Sys_IsLANAddress( clc.serverAddress ) ) {
|
||||||
CL_RequestAuthorization();
|
CL_RequestAuthorization();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
NET_OutOfBandPrint(NS_CLIENT, clc.serverAddress, "getchallenge");
|
NET_OutOfBandPrint(NS_CLIENT, clc.serverAddress, "getchallenge");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -2795,6 +2795,7 @@ static void FS_Startup( const char *gameName )
|
||||||
Com_Printf( "%d files in pk3 files\n", fs_packFiles );
|
Com_Printf( "%d files in pk3 files\n", fs_packFiles );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef STANDALONE
|
||||||
/*
|
/*
|
||||||
===================
|
===================
|
||||||
FS_CheckPak0
|
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");
|
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
|
// try to start up normally
|
||||||
FS_Startup( BASEGAME );
|
FS_Startup( BASEGAME );
|
||||||
|
|
||||||
|
#ifndef STANDALONE
|
||||||
FS_CheckPak0( );
|
FS_CheckPak0( );
|
||||||
|
#endif
|
||||||
|
|
||||||
// if we can't find default.cfg, assume that the paths are
|
// if we can't find default.cfg, assume that the paths are
|
||||||
// busted and error out now, rather than getting an unreadable
|
// busted and error out now, rather than getting an unreadable
|
||||||
|
@ -3295,7 +3299,9 @@ void FS_Restart( int checksumFeed ) {
|
||||||
// try to start up normally
|
// try to start up normally
|
||||||
FS_Startup( BASEGAME );
|
FS_Startup( BASEGAME );
|
||||||
|
|
||||||
|
#ifndef STANDALONE
|
||||||
FS_CheckPak0( );
|
FS_CheckPak0( );
|
||||||
|
#endif
|
||||||
|
|
||||||
// if we can't find default.cfg, assume that the paths are
|
// if we can't find default.cfg, assume that the paths are
|
||||||
// busted and error out now, rather than getting an unreadable
|
// 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.
|
// q_shared.h -- included first by ALL program modules.
|
||||||
// A user mod should never modify this file
|
// A user mod should never modify this file
|
||||||
|
|
||||||
#define PRODUCT_NAME "ioq3"
|
#ifdef STANDALONE
|
||||||
#define PRODUCT_VERSION "1.35"
|
#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
|
#ifdef SVN_VERSION
|
||||||
# define Q3_VERSION PRODUCT_NAME " " 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
|
# define Q3_VERSION PRODUCT_NAME " " PRODUCT_VERSION
|
||||||
#endif
|
#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
|
#define MAX_TEAMNAME 32
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
|
|
|
@ -243,15 +243,18 @@ extern int demo_protocols[];
|
||||||
#ifndef MASTER_SERVER_NAME
|
#ifndef MASTER_SERVER_NAME
|
||||||
#define MASTER_SERVER_NAME "master.quake3arena.com"
|
#define MASTER_SERVER_NAME "master.quake3arena.com"
|
||||||
#endif
|
#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
|
#endif
|
||||||
|
|
||||||
#define PORT_MASTER 27950
|
#define PORT_MASTER 27950
|
||||||
#define PORT_UPDATE 27951
|
#define PORT_UPDATE 27951
|
||||||
#ifndef PORT_AUTHORIZE
|
|
||||||
#define PORT_AUTHORIZE 27952
|
|
||||||
#endif
|
|
||||||
#define PORT_SERVER 27960
|
#define PORT_SERVER 27960
|
||||||
#define NUM_SERVER_PORTS 4 // broadcast scan this many ports after
|
#define NUM_SERVER_PORTS 4 // broadcast scan this many ports after
|
||||||
// PORT_SERVER so a single machine can
|
// PORT_SERVER so a single machine can
|
||||||
|
|
|
@ -290,7 +290,9 @@ void SV_GetChallenge( netadr_t from );
|
||||||
|
|
||||||
void SV_DirectConnect( netadr_t from );
|
void SV_DirectConnect( netadr_t from );
|
||||||
|
|
||||||
|
#ifndef STANDALONE
|
||||||
void SV_AuthorizeIpPacket( netadr_t from );
|
void SV_AuthorizeIpPacket( netadr_t from );
|
||||||
|
#endif
|
||||||
|
|
||||||
void SV_ExecuteClientMessage( client_t *cl, msg_t *msg );
|
void SV_ExecuteClientMessage( client_t *cl, msg_t *msg );
|
||||||
void SV_UserinfoChanged( client_t *cl );
|
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
|
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
|
SV_Ban_f
|
||||||
|
@ -506,6 +509,7 @@ static void SV_BanNum_f( void ) {
|
||||||
Com_Printf("%s was banned from coming back\n", cl->name);
|
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 ("heartbeat", SV_Heartbeat_f);
|
||||||
Cmd_AddCommand ("kick", SV_Kick_f);
|
Cmd_AddCommand ("kick", SV_Kick_f);
|
||||||
|
#ifndef STANDALONE
|
||||||
Cmd_AddCommand ("banUser", SV_Ban_f);
|
Cmd_AddCommand ("banUser", SV_Ban_f);
|
||||||
Cmd_AddCommand ("banClient", SV_BanNum_f);
|
Cmd_AddCommand ("banClient", SV_BanNum_f);
|
||||||
|
#endif
|
||||||
Cmd_AddCommand ("clientkick", SV_KickNum_f);
|
Cmd_AddCommand ("clientkick", SV_KickNum_f);
|
||||||
Cmd_AddCommand ("status", SV_Status_f);
|
Cmd_AddCommand ("status", SV_Status_f);
|
||||||
Cmd_AddCommand ("serverinfo", SV_Serverinfo_f);
|
Cmd_AddCommand ("serverinfo", SV_Serverinfo_f);
|
||||||
|
|
|
@ -81,6 +81,10 @@ void SV_GetChallenge( netadr_t from ) {
|
||||||
i = oldest;
|
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 they are on a lan address, send the challengeResponse immediately
|
||||||
if ( Sys_IsLANAddress( from ) ) {
|
if ( Sys_IsLANAddress( from ) ) {
|
||||||
challenge->pingTime = svs.time;
|
challenge->pingTime = svs.time;
|
||||||
|
@ -144,8 +148,10 @@ void SV_GetChallenge( netadr_t from ) {
|
||||||
NET_OutOfBandPrint( NS_SERVER, challenge->adr,
|
NET_OutOfBandPrint( NS_SERVER, challenge->adr,
|
||||||
"challengeResponse %i", challenge->challenge );
|
"challengeResponse %i", challenge->challenge );
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef STANDALONE
|
||||||
/*
|
/*
|
||||||
====================
|
====================
|
||||||
SV_AuthorizeIpPacket
|
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
|
// clear the challenge record so it won't timeout and let them through
|
||||||
Com_Memset( &svs.challenges[i], 0, sizeof( svs.challenges[i] ) );
|
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 ) {
|
void SV_DirectConnect( netadr_t from ) {
|
||||||
char userinfo[MAX_INFO_STRING];
|
char userinfo[MAX_INFO_STRING];
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -534,8 +534,10 @@ void SV_ConnectionlessPacket( netadr_t from, msg_t *msg ) {
|
||||||
SV_GetChallenge( from );
|
SV_GetChallenge( from );
|
||||||
} else if (!Q_stricmp(c, "connect")) {
|
} else if (!Q_stricmp(c, "connect")) {
|
||||||
SV_DirectConnect( from );
|
SV_DirectConnect( from );
|
||||||
|
#ifndef STANDALONE
|
||||||
} else if (!Q_stricmp(c, "ipAuthorize")) {
|
} else if (!Q_stricmp(c, "ipAuthorize")) {
|
||||||
SV_AuthorizeIpPacket( from );
|
SV_AuthorizeIpPacket( from );
|
||||||
|
#endif
|
||||||
} else if (!Q_stricmp(c, "rcon")) {
|
} else if (!Q_stricmp(c, "rcon")) {
|
||||||
SVC_RemoteCommand( from, msg );
|
SVC_RemoteCommand( from, msg );
|
||||||
} else if (!Q_stricmp(c, "disconnect")) {
|
} else if (!Q_stricmp(c, "disconnect")) {
|
||||||
|
|
Loading…
Reference in a new issue