diff --git a/gameinfo.conf.template b/gameinfo.conf.template new file mode 100644 index 0000000000..ed4d26ecd3 --- /dev/null +++ b/gameinfo.conf.template @@ -0,0 +1,7 @@ +NAME GameName +VERSION 0.0 +DEFAULT_BASEPAK mybasepak +MASTERSERVER1 master.example.net +MASTERSERVER2 master.template.net +WWW_BASEURL dl.example.net/pkg +GAMENAME_STRING abc diff --git a/src.cmake b/src.cmake index 4b2c47b594..b468878969 100644 --- a/src.cmake +++ b/src.cmake @@ -274,6 +274,8 @@ set(ENGINELIST ${ENGINE_DIR}/sys/con_common.h ${ENGINE_DIR}/sys/con_common.cpp ${ENGINE_DIR}/sys/sys_events.h + ${ENGINE_DIR}/qcommon/gameinfo.h + ${ENGINE_DIR}/qcommon/gameinfo.cpp ) if (WIN32) diff --git a/src/common/Defs.h b/src/common/Defs.h index 12455e5378..a13f0a17b6 100644 --- a/src/common/Defs.h +++ b/src/common/Defs.h @@ -31,30 +31,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef COMMON_DEFS_H_ #define COMMON_DEFS_H_ -#define PRODUCT_NAME "Unvanquished" -/** Case, No spaces */ -#define PRODUCT_NAME_UPPER "UNVANQUISHED" -/** No case, No spaces */ -#define PRODUCT_NAME_LOWER "unvanquished" - -#define PRODUCT_VERSION "0.51" - -/** Default base package */ -#define DEFAULT_BASE_PAK PRODUCT_NAME_LOWER - -/** URI scheme and server browser filter */ -#define GAMENAME_STRING "unv" -#define GAMENAME_FOR_MASTER PRODUCT_NAME_UPPER - #define MAX_MASTER_SERVERS 5 -#define MASTER1_SERVER_NAME "master.unvanquished.net" -#define MASTER2_SERVER_NAME "master2.unvanquished.net" -#define MASTER3_SERVER_NAME "" -#define MASTER4_SERVER_NAME "" -#define MASTER5_SERVER_NAME "" - -#define WWW_BASEURL "dl.unvanquished.net/pkg" - #define AUTOEXEC_NAME "autoexec.cfg" #define CONFIG_NAME "autogen.cfg" @@ -63,7 +40,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define SERVERCONFIG_NAME "autogen_server.cfg" #define UNNAMED_PLAYER "UnnamedPlayer" -#define UNNAMED_SERVER PRODUCT_NAME " " PRODUCT_VERSION " Server" /** file containing our RSA public and private keys */ #define RSAKEY_FILE "pubkey" diff --git a/src/common/FileSystem.cpp b/src/common/FileSystem.cpp index 806766cfb9..8b2907fea1 100644 --- a/src/common/FileSystem.cpp +++ b/src/common/FileSystem.cpp @@ -2171,19 +2171,19 @@ std::string DefaultHomePath() wchar_t buffer[MAX_PATH]; if (!SUCCEEDED(SHGetFolderPathW(nullptr, CSIDL_PERSONAL, nullptr, SHGFP_TYPE_CURRENT, buffer))) return ""; - return Str::UTF16To8(buffer) + "\\My Games\\" PRODUCT_NAME; + return Str::UTF16To8(buffer) + "\\My Games\\" + Gameinfo::getInstance().name(); #else const char* home = getenv("HOME"); if (!home) return ""; #ifdef __APPLE__ - return std::string(home) + "/Library/Application Support/" PRODUCT_NAME; + return std::string(home) + "/Library/Application Support/" + Gameinfo::getInstance().name(); #else const char* _xdgDataHome = getenv("XDG_DATA_HOME"); std::string xdgDataHome = _xdgDataHome == nullptr ? Path::Build(Path::Build(std::string(home), ".local") ,"share") : std::string(_xdgDataHome); std::string xdgHomePath; - xdgHomePath = Path::Build(xdgDataHome, PRODUCT_NAME_LOWER); + xdgHomePath = Path::Build(xdgDataHome, Gameinfo::getInstance().name_lower()); return xdgHomePath; #endif diff --git a/src/engine/client/ClientApplication.cpp b/src/engine/client/ClientApplication.cpp index 5c5fe3a20b..cbf4b66b4e 100644 --- a/src/engine/client/ClientApplication.cpp +++ b/src/engine/client/ClientApplication.cpp @@ -96,7 +96,7 @@ class ClientApplication : public Application { void Shutdown(bool error, Str::StringRef message) override { #if defined(_WIN32) || defined(BUILD_GRAPHICAL_CLIENT) if (error) { - SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, PRODUCT_NAME, message.c_str(), nullptr); + SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, ENGINE_NAME, message.c_str(), nullptr); } #endif diff --git a/src/engine/client/cl_main.cpp b/src/engine/client/cl_main.cpp index 004ec57990..dfef27c820 100644 --- a/src/engine/client/cl_main.cpp +++ b/src/engine/client/cl_main.cpp @@ -2918,7 +2918,7 @@ void CL_Init() p_team = Cvar_Get("p_team", "0", CVAR_ROM ); - cl_gamename = Cvar_Get( "cl_gamename", GAMENAME_FOR_MASTER, CVAR_TEMP ); + cl_gamename = Cvar_Get( "cl_gamename", Gameinfo::getInstance().name_upper().c_str(), CVAR_TEMP ); cl_altTab = Cvar_Get( "cl_altTab", "1", 0 ); //bani @@ -3130,7 +3130,7 @@ void CL_ServerInfoPacket( netadr_t from, msg_t *msg ) // Arnout: if this isn't the correct game, ignore it gameName = Info_ValueForKey( infoString, "gamename" ); - if ( !gameName[ 0 ] || Q_stricmp( gameName, GAMENAME_STRING ) ) + if ( !gameName[ 0 ] || Q_stricmp( gameName, Gameinfo::getInstance().gamename_string().c_str() ) ) { Log::Debug( "Different game info packet: %s", infoString ); return; diff --git a/src/engine/client/dl_main.cpp b/src/engine/client/dl_main.cpp index 59c5a68b3c..dd0e1862ec 100644 --- a/src/engine/client/dl_main.cpp +++ b/src/engine/client/dl_main.cpp @@ -165,7 +165,7 @@ if (curl_easy_setopt(request_, option, value) != CURLE_OK) { \ return false; \ } - SETOPT( CURLOPT_USERAGENT, Str::Format( "%s %s", PRODUCT_NAME "/" PRODUCT_VERSION, curl_version() ).c_str() ) + SETOPT( CURLOPT_USERAGENT, Str::Format( "%s %s", ENGINE_NAME "/" ENGINE_VERSION, curl_version() ).c_str() ) SETOPT( CURLOPT_REFERER, Str::Format("%s%s", URI_SCHEME, Cvar::GetValue("cl_currentServerIP")).c_str() ) SETOPT( CURLOPT_URL, url.c_str() ) SETOPT( CURLOPT_PROTOCOLS, long(CURLPROTO_HTTP) ) diff --git a/src/engine/framework/System.cpp b/src/engine/framework/System.cpp index a6edfe188b..25c0156053 100644 --- a/src/engine/framework/System.cpp +++ b/src/engine/framework/System.cpp @@ -71,12 +71,12 @@ std::string GetSingletonSocketPath() char homePathHash[33] = ""; Com_MD5Buffer(homePath.data(), homePath.size(), homePathHash, sizeof(homePathHash)); #ifdef _WIN32 - return std::string("\\\\.\\pipe\\" PRODUCT_NAME) + suffix + "-" + homePathHash; + return std::string("\\\\.\\pipe\\") + Gameinfo::getInstance().name() + suffix + "-" + homePathHash; #else // We use a temporary directory rather that using the homepath because // socket paths are limited to about 100 characters. This also avoids issues // when the homepath is on a network filesystem. - return std::string("/tmp/." PRODUCT_NAME_LOWER) + suffix + "-" + homePathHash + "/socket"; + return std::string("/tmp/.") + Gameinfo::getInstance().name_lower() + suffix + "-" + homePathHash + "/socket"; #endif } @@ -394,7 +394,7 @@ static void StartSignalThread() // Command line arguments struct cmdlineArgs_t { cmdlineArgs_t() - : homePath(FS::DefaultHomePath()), libPath(FS::DefaultBasePath()), reset_config(false), use_curses(Application::GetTraits().useCurses) {} + : homePath(""), libPath(FS::DefaultBasePath()), reset_config(false), use_curses(Application::GetTraits().useCurses) {} std::string homePath; std::string libPath; @@ -453,7 +453,7 @@ static void ParseCmdline(int argc, char** argv, cmdlineArgs_t& cmdlineArgs) } if (!strcmp(argv[i], "--help") || !strcmp(argv[i], "-help")) { - std::string helpUrl = Application::GetTraits().supportsUri ? " | -connect " URI_SCHEME "ADDRESS[:PORT]" : ""; + std::string helpUrl = Application::GetTraits().supportsUri ? " [" URI_SCHEME "ADDRESS[:PORT]]" : ""; printf("Usage: %s [-OPTION]... [+COMMAND...%s]\n", argv[0], helpUrl.c_str()); printf("Possible options are:\n" " -homepath set the path used for user-specific configuration files and downloaded dpk files\n" @@ -468,7 +468,7 @@ static void ParseCmdline(int argc, char** argv, cmdlineArgs_t& cmdlineArgs) ); OSExit(0); } else if (!strcmp(argv[i], "--version") || !strcmp(argv[i], "-version")) { - printf(PRODUCT_NAME " " PRODUCT_VERSION "\n"); + printf(ENGINE_NAME " " ENGINE_VERSION "\n"); OSExit(0); } else if (!strcmp(argv[i], "-set")) { if (i >= argc - 2) { @@ -535,16 +535,20 @@ static void Init(int argc, char** argv) #endif // Print a banner and a copy of the command-line arguments - Log::Notice(Q3_VERSION " " PLATFORM_STRING " " ARCH_STRING " " __DATE__); std::string argsString = "cmdline:"; for (int i = 1; i < argc; i++) { argsString.push_back(' '); argsString.append(argv[i]); } - Log::Notice(argsString); Sys::SetupCrashHandler(); // If Breakpad is enabled, this handler will soon be replaced. Sys::ParseCmdline(argc, argv, cmdlineArgs); + Gameinfo::getInstance().parse(FS::Path::Build(cmdlineArgs.libPath, "gameinfo.conf")); + Log::Notice("%s %s", Q3_VERSION, PLATFORM_STRING " " ARCH_STRING " " __DATE__); + Log::Notice(argsString); + if (cmdlineArgs.homePath.empty()) { + cmdlineArgs.homePath = FS::DefaultHomePath(); + } // Platform-specific initialization #ifdef _WIN32 diff --git a/src/engine/qcommon/common.cpp b/src/engine/qcommon/common.cpp index fe1ec1625e..540bd706c9 100644 --- a/src/engine/qcommon/common.cpp +++ b/src/engine/qcommon/common.cpp @@ -715,7 +715,7 @@ void Com_WriteConfigToFile( const char *filename, void (*writeConfig)( fileHandl return; } - FS_Printf( f, "// generated by " PRODUCT_NAME ", do not modify\n" ); + FS_Printf( f, "// generated by %s, do not modify\n", Gameinfo::getInstance().name().c_str() ); writeConfig( f ); FS_FCloseFile( f ); } diff --git a/src/engine/qcommon/files.cpp b/src/engine/qcommon/files.cpp index e699b11f14..edfcde7fe1 100644 --- a/src/engine/qcommon/files.cpp +++ b/src/engine/qcommon/files.cpp @@ -34,7 +34,7 @@ constexpr FS::offset_t MAX_FILE_LENGTH = 1000 * 1000 * 1000; const char TEMP_SUFFIX[] = ".tmp"; // Cvars to select the base and extra packages to use -static Cvar::Cvar fs_basepak("fs_basepak", "base pak to load", 0, DEFAULT_BASE_PAK); +static Cvar::Cvar fs_basepak( "fs_basepak", "base pak to load", 0, "" ); static Cvar::Cvar fs_extrapaks("fs_extrapaks", "space-seperated list of paks to load in addition to the base pak", 0, ""); struct handleData_t { @@ -626,8 +626,9 @@ void FS_LoadBasePak() if (!FS_LoadPak(fs_basepak.Get().c_str())) { Log::Notice("Could not load base pak '%s', falling back to default\n", fs_basepak.Get().c_str()); - if (!FS_LoadPak(DEFAULT_BASE_PAK)) - Sys::Error("Could not load default base pak '%s'", DEFAULT_BASE_PAK); + if (!FS_LoadPak(Gameinfo::getInstance().default_basepak().c_str())) + Com_Error(errorParm_t::ERR_FATAL, "Could not load default base pak '%s'", + Gameinfo::getInstance().default_basepak().c_str()); } } diff --git a/src/engine/qcommon/gameinfo.cpp b/src/engine/qcommon/gameinfo.cpp new file mode 100644 index 0000000000..a4c306d82a --- /dev/null +++ b/src/engine/qcommon/gameinfo.cpp @@ -0,0 +1,169 @@ +/* +=========================================================================== + +Daemon GPL Source Code +Copyright (C) 2017, Daemon Developers + +This file is part of the Daemon GPL Source Code (Daemon Source Code). + +Daemon Source Code is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Daemon Source Code is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Daemon Source Code. If not, see . + +=========================================================================== +*/ + +#include +#include + +#include "gameinfo.h" +#include "common/FileSystem.h" + + +Gameinfo& Gameinfo::getInstance() +{ + static Gameinfo instance; + return instance; +} + +void Gameinfo::parse(std::string fname) +{ + if (!FS::RawPath::FileExists(fname)) + { + Sys::Error("GAMEINFO: No gameinfo.conf found in libpath"); + } + FS::File f = FS::RawPath::OpenRead(fname); + std::string content = f.ReadAll(); + f.Close(); + Cmd::Args a(content); + if (a.Argc() & 1) + { + Sys::Error("GAMEINFO: Invalid gaminfo.conf"); + } + std::vector argvec = a.ArgVector(); + for (int i = 0; i < argvec.size(); i += 2) + { + if(argvec[i] == "NAME") + { + _name = argvec[i+1]; + } + else if(argvec[i] == "VERSION") + { + _version = argvec[i+1]; + } + else if(argvec[i] == "DEFAULT_BASEPAK") + { + _default_basepak = argvec[i+1]; + } + else if(argvec[i] == "MASTERSERVER1") + { + _masterserver1 = argvec[i+1]; + } + else if(argvec[i] == "MASTERSERVER2") + { + _masterserver2 = argvec[i+1]; + } + else if(argvec[i] == "MASTERSERVER3") + { + _masterserver3 = argvec[i+1]; + } + else if(argvec[i] == "MASTERSERVER4") + { + _masterserver4 = argvec[i+1]; + } + else if(argvec[i] == "MASTERSERVER5") + { + _masterserver5 = argvec[i+1]; + } + else if(argvec[i] == "WWW_BASEURL") + { + _www_baseurl = argvec[i+1]; + } + else if(argvec[i] == "GAMENAME_STRING") + { + _gamename_string = argvec[i+1]; + } + else + { + Log::Warn("GAMEINFO: Unrecognized field '%s' in gameinfo.conf", argvec[i]); + } + } +} + +std::string Gameinfo::name() const +{ + return _name; +} + +std::string Gameinfo::name_lower() const +{ + std::string temp = _name; + std::transform(temp.begin(), temp.end(), temp.begin(), ::tolower); + return temp; +} + +std::string Gameinfo::name_upper() const +{ + std::string temp = _name; + std::transform(temp.begin(), temp.end(), temp.begin(), ::toupper); + return temp; +} + +std::string Gameinfo::version() const +{ + return _version; +} + +std::string Gameinfo::default_basepak() const +{ + return _default_basepak; +} + +std::string Gameinfo::masterserver1() const +{ + return _masterserver1; +} + +std::string Gameinfo::masterserver2() const +{ + return _masterserver2; +} + +std::string Gameinfo::masterserver3() const +{ + return _masterserver3; +} + +std::string Gameinfo::masterserver4() const +{ + return _masterserver4; +} + +std::string Gameinfo::masterserver5() const +{ + return _masterserver5; +} + +std::string Gameinfo::www_baseurl() const +{ + return _www_baseurl; +} + +std::string Gameinfo::unnamed_server() const +{ + return _name + " " + _version + " Server"; +} + +std::string Gameinfo::gamename_string() const +{ + return _gamename_string; +} diff --git a/src/engine/qcommon/gameinfo.h b/src/engine/qcommon/gameinfo.h new file mode 100644 index 0000000000..75ac9da6fa --- /dev/null +++ b/src/engine/qcommon/gameinfo.h @@ -0,0 +1,63 @@ +/* +=========================================================================== + +Daemon GPL Source Code +Copyright (C) 2017, Daemon Developers + +This file is part of the Daemon GPL Source Code (Daemon Source Code). + +Daemon Source Code is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Daemon Source Code is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Daemon Source Code. If not, see . + +=========================================================================== +*/ + +#ifndef GAMEINFO_H_ +#define GAMEINFO_H_ + +#include + + +class Gameinfo +{ +public: + static Gameinfo& getInstance(); + void parse(std::string fname); + std::string name() const; + std::string name_lower() const; + std::string name_upper() const; + std::string version() const; + std::string default_basepak() const; + std::string masterserver1() const; + std::string masterserver2() const; + std::string masterserver3() const; + std::string masterserver4() const; + std::string masterserver5() const; + std::string www_baseurl() const; + std::string unnamed_server() const; + std::string gamename_string() const; +private: + Gameinfo() : _name("MISSING_NAME"), _version("UNKNOWN") {}; + std::string _name; + std::string _version; + std::string _default_basepak; + std::string _masterserver1; + std::string _masterserver2; + std::string _masterserver3; + std::string _masterserver4; + std::string _masterserver5; + std::string _www_baseurl; + std::string _gamename_string; +}; + +#endif // GAMEINFO_H_ diff --git a/src/engine/qcommon/q_shared.h b/src/engine/qcommon/q_shared.h index b86c2751af..0de5c3f155 100644 --- a/src/engine/qcommon/q_shared.h +++ b/src/engine/qcommon/q_shared.h @@ -36,6 +36,7 @@ Maryland 20850 USA. #define Q_SHARED_H_ #include "common/Defs.h" +#include "gameinfo.h" // math.h/cmath uses _USE_MATH_DEFINES to decide if to define M_PI etc or not. // So define _USE_MATH_DEFINES early before including math.h/cmath @@ -49,19 +50,20 @@ Maryland 20850 USA. // A user mod should never modify this file #define ENGINE_NAME "Daemon Engine" -#define ENGINE_VERSION PRODUCT_VERSION #ifdef REVISION -# define Q3_VERSION PRODUCT_NAME " " PRODUCT_VERSION " " REVISION +#define ENGINE_VERSION REVISION +#define Q3_VERSION va("%s %s %s", Gameinfo::getInstance().name().c_str(), Gameinfo::getInstance().version().c_str(), REVISION) #else -# define Q3_VERSION PRODUCT_NAME " " PRODUCT_VERSION +#define ENGINE_VERSION "UNKNOWN" +#define Q3_VERSION va("%s %s", Gameinfo::getInstance().name().c_str(), Gameinfo::getInstance().version().c_str()) #endif #define Q3_ENGINE ENGINE_NAME " " ENGINE_VERSION #define Q3_ENGINE_DATE __DATE__ -#define CLIENT_WINDOW_TITLE PRODUCT_NAME -#define CLIENT_WINDOW_MIN_TITLE PRODUCT_NAME_LOWER +#define CLIENT_WINDOW_TITLE Gameinfo::getInstance().name().c_str() +#define CLIENT_WINDOW_MIN_TITLE Gameinfo::getInstance().name_lower().c_str() #define Q_UNUSED(x) (void)(x) diff --git a/src/engine/qcommon/qcommon.h b/src/engine/qcommon/qcommon.h index 731d9cc5b3..5df7a1eb66 100644 --- a/src/engine/qcommon/qcommon.h +++ b/src/engine/qcommon/qcommon.h @@ -40,6 +40,9 @@ Maryland 20850 USA. #include "cvar.h" #include "common/Defs.h" #include "net_types.h" +#ifndef BUILD_VM +#include "gameinfo.h" +#endif //============================================================================ @@ -239,7 +242,7 @@ You or the server may be running older versions of the game." #define PROTOCOL_VERSION 86 -#define URI_SCHEME GAMENAME_STRING "://" +#define URI_SCHEME "dgp://" #define URI_SCHEME_LENGTH ( ARRAY_LEN( URI_SCHEME ) - 1 ) #define PORT_MASTER 27950 diff --git a/src/engine/renderer/tr_init.cpp b/src/engine/renderer/tr_init.cpp index ecbb294e56..60ad3e54ff 100644 --- a/src/engine/renderer/tr_init.cpp +++ b/src/engine/renderer/tr_init.cpp @@ -690,7 +690,8 @@ class ScreenshotCmd : public Cmd::StaticCmd { std::string fileName; if ( args.Argc() == 2 ) { - fileName = Str::Format( "screenshots/" PRODUCT_NAME_LOWER "-%s.%s", args.Argv(1), fileExtension ); + fileName = Str::Format("screenshots/%s-%s.%s", Gameinfo::getInstance().name_lower(), + args.Argv(1), fileExtension ); } else { @@ -701,8 +702,9 @@ class ScreenshotCmd : public Cmd::StaticCmd { int lastNumber; for ( lastNumber = 0; lastNumber <= 999; lastNumber++ ) { - fileName = Str::Format( "screenshots/" PRODUCT_NAME_LOWER "_%04d-%02d-%02d_%02d%02d%02d_%03d.%s", - 1900 + t.tm_year, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec, lastNumber, fileExtension ); + fileName = Str::Format( "screenshots/%s_%04d-%02d-%02d_%02d%02d%02d_%03d.%s", + Gameinfo::getInstance().name_lower(), 1900 + t.tm_year, t.tm_mon + 1, + t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec, lastNumber, fileExtension ); if ( !ri.FS_FileExists( fileName.c_str() ) ) { diff --git a/src/engine/server/sv_ccmds.cpp b/src/engine/server/sv_ccmds.cpp index b43c3d638e..20bb1b1371 100644 --- a/src/engine/server/sv_ccmds.cpp +++ b/src/engine/server/sv_ccmds.cpp @@ -269,7 +269,7 @@ class StatusCmd: public Cmd::StaticCmd Print( "(begin server status)\n" - "hostname: %s\n" + "hostname: %s on %s\n" "version: %s\n" "protocol: %d\n" "cpu: %.0f%%\n" @@ -279,7 +279,8 @@ class StatusCmd: public Cmd::StaticCmd "num score connection address port name\n" "--- ----- ---------- ---------------------- ------ ----", sv_hostname->string, - Q3_VERSION " on " Q3_ENGINE, + Q3_VERSION, + Q3_ENGINE, PROTOCOL_VERSION, cpu, time_string, diff --git a/src/engine/server/sv_init.cpp b/src/engine/server/sv_init.cpp index 316339ec7c..4207df2ebf 100644 --- a/src/engine/server/sv_init.cpp +++ b/src/engine/server/sv_init.cpp @@ -612,7 +612,8 @@ void SV_Init() Cvar_Get( "pakname", "", CVAR_SERVERINFO | CVAR_ROM ); Cvar_Get( "layout", "", CVAR_SERVERINFO | CVAR_ROM ); Cvar_Get( "g_layouts", "", 0 ); // FIXME - sv_hostname = Cvar_Get( "sv_hostname", UNNAMED_SERVER, CVAR_SERVERINFO ); + sv_hostname = Cvar_Get( "sv_hostname", Gameinfo::getInstance().unnamed_server().c_str(), CVAR_SERVERINFO ); + sv_hostname = Cvar_Get( "sv_hostname", Gameinfo::getInstance().unnamed_server().c_str(), CVAR_SERVERINFO ); sv_maxclients = Cvar_Get( "sv_maxclients", "20", CVAR_SERVERINFO | CVAR_LATCH ); // NERVE - SMF - changed to 20 from 8 sv_maxRate = Cvar_Get( "sv_maxRate", "0", CVAR_SERVERINFO ); sv_floodProtect = Cvar_Get( "sv_floodProtect", "0", CVAR_SERVERINFO ); @@ -637,11 +638,11 @@ void SV_Init() sv_zombietime = Cvar_Get( "sv_zombietime", "2", CVAR_TEMP ); sv_allowDownload = Cvar_Get( "sv_allowDownload", "1", 0 ); - sv_master[ 0 ] = Cvar_Get( "sv_master1", MASTER1_SERVER_NAME, 0 ); - sv_master[ 1 ] = Cvar_Get( "sv_master2", MASTER2_SERVER_NAME, 0 ); - sv_master[ 2 ] = Cvar_Get( "sv_master3", MASTER3_SERVER_NAME, 0 ); - sv_master[ 3 ] = Cvar_Get( "sv_master4", MASTER4_SERVER_NAME, 0 ); - sv_master[ 4 ] = Cvar_Get( "sv_master5", MASTER5_SERVER_NAME, 0 ); + sv_master[ 0 ] = Cvar_Get( "sv_master1", Gameinfo::getInstance().masterserver1().c_str(), 0 ); + sv_master[ 1 ] = Cvar_Get( "sv_master2", Gameinfo::getInstance().masterserver2().c_str(), 0 ); + sv_master[ 2 ] = Cvar_Get( "sv_master3", Gameinfo::getInstance().masterserver3().c_str(), 0 ); + sv_master[ 3 ] = Cvar_Get( "sv_master4", Gameinfo::getInstance().masterserver4().c_str(), 0 ); + sv_master[ 4 ] = Cvar_Get( "sv_master5", Gameinfo::getInstance().masterserver5().c_str(), 0 ); sv_reconnectlimit = Cvar_Get( "sv_reconnectlimit", "3", 0 ); sv_padPackets = Cvar_Get( "sv_padPackets", "0", 0 ); sv_killserver = Cvar_Get( "sv_killserver", "0", 0 ); @@ -654,7 +655,7 @@ void SV_Init() sv_dl_maxRate = Cvar_Get( "sv_dl_maxRate", "42000", 0 ); sv_wwwDownload = Cvar_Get( "sv_wwwDownload", "0", 0 ); - sv_wwwBaseURL = Cvar_Get( "sv_wwwBaseURL", WWW_BASEURL, 0 ); + sv_wwwBaseURL = Cvar_Get( "sv_wwwBaseURL", Gameinfo::getInstance().www_baseurl().c_str(), 0 ); sv_wwwFallbackURL = Cvar_Get( "sv_wwwFallbackURL", "", 0 ); //bani diff --git a/src/engine/server/sv_main.cpp b/src/engine/server/sv_main.cpp index d20cb462bb..cebdb29215 100644 --- a/src/engine/server/sv_main.cpp +++ b/src/engine/server/sv_main.cpp @@ -390,8 +390,8 @@ but not on every player enter or exit. ================ */ static const int HEARTBEAT_MSEC = (300 * 1000); -#define HEARTBEAT_GAME PRODUCT_NAME -#define HEARTBEAT_DEAD PRODUCT_NAME "-dead" +#define HEARTBEAT_GAME ENGINE_NAME +#define HEARTBEAT_DEAD HEARTBEAT_GAME "-dead" void SV_MasterHeartbeat( const char *hbname ) { @@ -603,7 +603,7 @@ void SVC_Info( netadr_t from, const Cmd::Args& args ) info_map["stats"] = sv_statsURL->string; } - info_map["gamename"] = GAMENAME_STRING; // Arnout: to be able to filter out Quake servers + info_map["gamename"] = Gameinfo::getInstance().name_upper(); // Arnout: to be able to filter out Quake servers Net::OutOfBandPrint( netsrc_t::NS_SERVER, from, "infoResponse\n%s", InfoMapToString( info_map ) ); } diff --git a/src/engine/sys/con_curses.cpp b/src/engine/sys/con_curses.cpp index a87148bb61..d6faa6cc8a 100644 --- a/src/engine/sys/con_curses.cpp +++ b/src/engine/sys/con_curses.cpp @@ -32,9 +32,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include #ifdef BUILD_SERVER -#define TITLE "^2[ ^3" CLIENT_WINDOW_TITLE " Server Console ^2]" +#define TITLE va("^2[ ^3%s Server Console ^2]", CLIENT_WINDOW_TITLE) #else -#define TITLE "^2[ ^3" CLIENT_WINDOW_TITLE " Console ^2]" +#define TITLE va("^2[ ^3%s Console ^2]", CLIENT_WINDOW_TITLE) #endif #define PROMPT "^3-> " static const int LOG_SCROLL = 5;