diff --git a/Makefile b/Makefile index 3875fa12d2..6eb57f7f0c 100644 --- a/Makefile +++ b/Makefile @@ -138,6 +138,10 @@ ifndef SERVERBIN endif endif +ifndef RENDERER_PREFIX +RENDERER_PREFIX=renderer_ +endif + ifndef BASEGAME BASEGAME=baseq3 endif @@ -1008,9 +1012,10 @@ endif ifneq ($(BUILD_CLIENT),0) ifneq ($(USE_RENDERER_DLOPEN),0) - TARGETS += $(B)/$(CLIENTBIN)$(FULLBINEXT) $(B)/renderer_opengl1_$(SHLIBNAME) + CLIENT_CFLAGS += -DRENDERER_PREFIX='\"'$(RENDERER_PREFIX)'\"' + TARGETS += $(B)/$(CLIENTBIN)$(FULLBINEXT) $(B)/$(RENDERER_PREFIX)opengl1_$(SHLIBNAME) ifneq ($(BUILD_RENDERER_OPENGL2),0) - TARGETS += $(B)/renderer_opengl2_$(SHLIBNAME) + TARGETS += $(B)/$(RENDERER_PREFIX)opengl2_$(SHLIBNAME) endif else TARGETS += $(B)/$(CLIENTBIN)$(FULLBINEXT) @@ -2255,12 +2260,12 @@ $(B)/$(CLIENTBIN)$(FULLBINEXT): $(Q3OBJ) $(LIBSDLMAIN) -o $@ $(Q3OBJ) \ $(LIBSDLMAIN) $(CLIENT_LIBS) $(LIBS) -$(B)/renderer_opengl1_$(SHLIBNAME): $(Q3ROBJ) $(JPGOBJ) +$(B)/$(RENDERER_PREFIX)opengl1_$(SHLIBNAME): $(Q3ROBJ) $(JPGOBJ) $(echo_cmd) "LD $@" $(Q)$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(Q3ROBJ) $(JPGOBJ) \ $(THREAD_LIBS) $(LIBSDLMAIN) $(RENDERER_LIBS) $(LIBS) -$(B)/renderer_opengl2_$(SHLIBNAME): $(Q3R2OBJ) $(Q3R2STRINGOBJ) $(JPGOBJ) +$(B)/$(RENDERER_PREFIX)opengl2_$(SHLIBNAME): $(Q3R2OBJ) $(Q3R2STRINGOBJ) $(JPGOBJ) $(echo_cmd) "LD $@" $(Q)$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(Q3R2OBJ) $(Q3R2STRINGOBJ) $(JPGOBJ) \ $(THREAD_LIBS) $(LIBSDLMAIN) $(RENDERER_LIBS) $(LIBS) @@ -2943,9 +2948,9 @@ endif ifneq ($(BUILD_CLIENT),0) $(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/$(CLIENTBIN)$(FULLBINEXT) $(COPYBINDIR)/$(CLIENTBIN)$(FULLBINEXT) ifneq ($(USE_RENDERER_DLOPEN),0) - $(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/renderer_opengl1_$(SHLIBNAME) $(COPYBINDIR)/renderer_opengl1_$(SHLIBNAME) + $(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/$(RENDERER_PREFIX)opengl1_$(SHLIBNAME) $(COPYBINDIR)/$(RENDERER_PREFIX)opengl1_$(SHLIBNAME) ifneq ($(BUILD_RENDERER_OPENGL2),0) - $(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/renderer_opengl2_$(SHLIBNAME) $(COPYBINDIR)/renderer_opengl2_$(SHLIBNAME) + $(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/$(RENDERER_PREFIX)opengl2_$(SHLIBNAME) $(COPYBINDIR)/$(RENDERER_PREFIX)opengl2_$(SHLIBNAME) endif else ifneq ($(BUILD_RENDERER_OPENGL2),0) diff --git a/code/client/cl_main.c b/code/client/cl_main.c index e24c8337b7..9526d7ad1e 100644 --- a/code/client/cl_main.c +++ b/code/client/cl_main.c @@ -3311,14 +3311,14 @@ void CL_InitRef( void ) { #ifdef USE_RENDERER_DLOPEN cl_renderer = Cvar_Get("cl_renderer", "opengl2", CVAR_ARCHIVE | CVAR_LATCH); - Com_sprintf(dllName, sizeof(dllName), "renderer_%s_" ARCH_STRING DLL_EXT, cl_renderer->string); + Com_sprintf(dllName, sizeof(dllName), RENDERER_PREFIX "%s_" ARCH_STRING DLL_EXT, cl_renderer->string); if(!(rendererLib = Sys_LoadDll(dllName, qfalse)) && strcmp(cl_renderer->string, cl_renderer->resetString)) { Com_Printf("failed:\n\"%s\"\n", Sys_LibraryError()); Cvar_ForceReset("cl_renderer"); - Com_sprintf(dllName, sizeof(dllName), "renderer_opengl2_" ARCH_STRING DLL_EXT); + Com_sprintf(dllName, sizeof(dllName), RENDERER_PREFIX "opengl2_" ARCH_STRING DLL_EXT); rendererLib = Sys_LoadDll(dllName, qfalse); } diff --git a/code/qcommon/common.c b/code/qcommon/common.c index c7028280db..d0e7559606 100644 --- a/code/qcommon/common.c +++ b/code/qcommon/common.c @@ -2784,7 +2784,13 @@ void Com_Init( char *commandLine ) { com_standalone = Cvar_Get("com_standalone", "0", CVAR_ROM); com_basegame = Cvar_Get("com_basegame", BASEGAME, CVAR_INIT); - com_homepath = Cvar_Get("com_homepath", "", CVAR_INIT|CVAR_PROTECTED); + com_homepath = Cvar_Get("com_homepath", HOMEPATH_NAME, CVAR_INIT|CVAR_PROTECTED); + if ( !com_homepath->string[0] ) { + Cvar_ForceReset( "com_homepath" ); + } + + if(!com_basegame->string[0]) + Cvar_ForceReset("com_basegame"); FS_InitFilesystem (); diff --git a/code/qcommon/q_shared.h b/code/qcommon/q_shared.h index 097d217788..9ba71b0761 100644 --- a/code/qcommon/q_shared.h +++ b/code/qcommon/q_shared.h @@ -27,51 +27,58 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // A user mod should never modify this file #ifdef STANDALONE - #define PRODUCT_NAME "iofoo3" - #define BASEGAME "foobar" - #define CLIENT_WINDOW_TITLE "changeme" - #define CLIENT_WINDOW_MIN_TITLE "changeme2" - #define HOMEPATH_NAME_UNIX ".foo" - #define HOMEPATH_NAME_WIN "FooBar" - #define HOMEPATH_NAME_MACOSX HOMEPATH_NAME_WIN + #define PRODUCT_NAME "iofoo3" + #define BASEGAME "foobar" + #define CLIENT_WINDOW_TITLE "changeme" + #define CLIENT_WINDOW_MIN_TITLE "changeme2" + + // GNU/Linux: $HOME/.local/share/homepath-name (lower case and spaces replaced with hyphens) + // MacOS: $HOME/Library/Application Support/Homepath Name + // Windows: %APPDATA%\Homepath Name + #define HOMEPATH_NAME "FooBar" + // #define STEAMPATH_NAME "Foo Bar" // #define STEAMPATH_APPID "" #define GAMENAME_FOR_MASTER "foobar" // must NOT contain whitespace #define CINEMATICS_LOGO "foologo.roq" #define CINEMATICS_INTRO "intro.roq" // #define LEGACY_PROTOCOL // You probably don't need this for your standalone game +#elif defined ELITEFORCE + #define PRODUCT_NAME "Lilium Voyager HM" + #define BASEGAME "baseEF" + #define CLIENT_WINDOW_TITLE "Lilium Voyager Holomatch" + #define CLIENT_WINDOW_MIN_TITLE "liliumvoy" + + // GNU/Linux: $HOME/.local/share/homepath-name (lower case and spaces replaced with hyphens) + // MacOS: $HOME/Library/Application Support/Homepath Name + // Windows: %APPDATA%\Homepath Name + #define HOMEPATH_NAME "Lilium Voyager" + + //#define STEAMPATH_NAME "Quake 3 Arena" + //#define STEAMPATH_APPID "2200" + //#define GOGPATH_ID "1441704920" + #define GAMENAME_FOR_MASTER "EliteForce" + //#define CINEMATICS_LOGO "eflogo.bik" + //#define CINEMATICS_INTRO "intro.bik" + #define LEGACY_PROTOCOL #else - #ifdef ELITEFORCE - #define PRODUCT_NAME "Lilium Voyager HM" - #define BASEGAME "baseEF" - #define CLIENT_WINDOW_TITLE "Lilium Voyager Holomatch" - #define CLIENT_WINDOW_MIN_TITLE "liliumvoy" - #define HOMEPATH_NAME_UNIX ".stvef" - #define HOMEPATH_NAME_WIN "STVEF" - #define HOMEPATH_NAME_MACOSX HOMEPATH_NAME_WIN - //#define STEAMPATH_NAME "Quake 3 Arena" - //#define STEAMPATH_APPID "2200" - //#define GOGPATH_ID "1441704920" - #define GAMENAME_FOR_MASTER "EliteForce" - //#define CINEMATICS_LOGO "eflogo.bik" - //#define CINEMATICS_INTRO "intro.bik" - #define LEGACY_PROTOCOL - #else - #define PRODUCT_NAME "ioq3" - #define BASEGAME "baseq3" - #define CLIENT_WINDOW_TITLE "ioquake3" - #define CLIENT_WINDOW_MIN_TITLE "ioq3" - #define HOMEPATH_NAME_UNIX ".q3a" - #define HOMEPATH_NAME_WIN "Quake3" - #define HOMEPATH_NAME_MACOSX HOMEPATH_NAME_WIN - #define STEAMPATH_NAME "Quake 3 Arena" - #define STEAMPATH_APPID "2200" - #define GOGPATH_ID "1441704920" - #define GAMENAME_FOR_MASTER "Quake3Arena" - #define CINEMATICS_LOGO "idlogo.RoQ" - #define CINEMATICS_INTRO "intro.RoQ" - #define LEGACY_PROTOCOL - #endif + #define PRODUCT_NAME "ioq3" + #define BASEGAME "baseq3" + #define CLIENT_WINDOW_TITLE "ioquake3" + #define CLIENT_WINDOW_MIN_TITLE "ioq3" + + // GNU/Linux: $HOME/.local/share/homepath-name (lower case and spaces replaced with hyphens) + // MacOS: $HOME/Library/Application Support/Homepath Name + // Windows: %APPDATA%\Homepath Name + #define HOMEPATH_NAME "Lilium Quake3" + + #define STEAMPATH_NAME "Quake 3 Arena" + #define STEAMPATH_APPID "2200" + #define GOGPATH_ID "1441704920" + #define GAMENAME_FOR_MASTER "Quake3Arena" + #define CINEMATICS_LOGO "idlogo.RoQ" + #define CINEMATICS_INTRO "intro.RoQ" + #define LEGACY_PROTOCOL #endif // Heartbeat for dpmaster protocol. You shouldn't change this unless you know what you're doing @@ -89,6 +96,10 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define BASETA "missionpack" +#ifndef RENDERER_PREFIX + #define RENDERER_PREFIX "renderer_" +#endif + #ifndef PRODUCT_VERSION #ifdef ELITEFORCE #define PRODUCT_VERSION "1.39" diff --git a/code/sys/sys_unix.c b/code/sys/sys_unix.c index ebba37e8da..d7159317b0 100644 --- a/code/sys/sys_unix.c +++ b/code/sys/sys_unix.c @@ -61,23 +61,46 @@ char *Sys_DefaultHomePath(void) if( !*homePath && com_homepath != NULL ) { - if( ( p = getenv( "HOME" ) ) != NULL ) - { - Com_sprintf(homePath, sizeof(homePath), "%s%c", p, PATH_SEP); #ifdef __APPLE__ - Q_strcat(homePath, sizeof(homePath), - "Library/Application Support/"); - - if(com_homepath->string[0]) - Q_strcat(homePath, sizeof(homePath), com_homepath->string); - else - Q_strcat(homePath, sizeof(homePath), HOMEPATH_NAME_MACOSX); + if( ( p = getenv( "HOME" ) ) != NULL && *p != '\0' ) + { + Com_sprintf(homePath, sizeof(homePath), "%s%cLibrary%cApplication Support%c%s", p, PATH_SEP, PATH_SEP, PATH_SEP, com_homepath->string); + } #else - if(com_homepath->string[0]) - Q_strcat(homePath, sizeof(homePath), com_homepath->string); + char directory[MAX_OSPATH]; + char *s; + + Q_strncpyz( directory, com_homepath->string, sizeof(directory) ); + + // convert home directory name to lower case and replace spaces with hyphens + s = directory; + while( *s ) + { + if( *s == ' ' ) + { + *s = '-'; + } else - Q_strcat(homePath, sizeof(homePath), HOMEPATH_NAME_UNIX); + { + *s = tolower(*s); + } + s++; + } + + if( ( p = getenv( "XDG_DATA_HOME" ) ) != NULL && *p != '\0' ) + { + Com_sprintf(homePath, sizeof(homePath), "%s%c%s", p, PATH_SEP, directory); + } + else if( ( p = getenv( "HOME" ) ) != NULL && *p != '\0' ) + { + Com_sprintf(homePath, sizeof(homePath), "%s%c.local%cshare%c%s", p, PATH_SEP, PATH_SEP, PATH_SEP, directory); + } #endif + + if( !*homePath ) + { + Com_Printf("Unable to detect home path\n"); + return NULL; } } diff --git a/code/sys/sys_win32.c b/code/sys/sys_win32.c index ee026bd849..15a39cab10 100644 --- a/code/sys/sys_win32.c +++ b/code/sys/sys_win32.c @@ -124,12 +124,7 @@ char *Sys_DefaultHomePath( void ) return NULL; } - Com_sprintf(homePath, sizeof(homePath), "%s%c", szPath, PATH_SEP); - - if(com_homepath->string[0]) - Q_strcat(homePath, sizeof(homePath), com_homepath->string); - else - Q_strcat(homePath, sizeof(homePath), HOMEPATH_NAME_WIN); + Com_sprintf(homePath, sizeof(homePath), "%s%c%s", szPath, PATH_SEP, com_homepath->string); } FreeLibrary(shfolder); diff --git a/make-macosx-app.sh b/make-macosx-app.sh index 00a92f022d..969e121d90 100755 --- a/make-macosx-app.sh +++ b/make-macosx-app.sh @@ -130,6 +130,7 @@ fi AVAILABLE_ARCHS="" IOQ3_VERSION=`grep '^VERSION=' Makefile | sed -e 's/.*=\(.*\)/\1/'` +IOQ3_RENDERER_PREFIX=`grep '^RENDERER_PREFIX=' Makefile | sed -e 's/.*=\(.*\)/\1/'` IOQ3_CLIENT_ARCHS="" IOQ3_SERVER_ARCHS="" IOQ3_RENDERER_GL1_ARCHS="" @@ -148,8 +149,9 @@ CGAME="cgame" GAME="qagame" UI="ui" -RENDERER_OPENGL="renderer_opengl" +RENDERER_OPENGL="${IOQ3_RENDERER_PREFIX}opengl" +EXECUTABLE_NAME="ioquake3" DEDICATED_NAME="ioq3ded" CGAME_NAME="${CGAME}.dylib" @@ -160,18 +162,17 @@ RENDERER_OPENGL1_NAME="${RENDERER_OPENGL}1.dylib" RENDERER_OPENGL2_NAME="${RENDERER_OPENGL}2.dylib" ICNSDIR="misc" -ICNS="quake3_flat.icns" -PKGINFO="APPLIOQ3" +ICNS="lilium.icns" +PKGINFO="APPL????" OBJROOT="build" #BUILT_PRODUCTS_DIR="${OBJROOT}/${TARGET_NAME}-darwin-${CURRENT_ARCH}" -PRODUCT_NAME="ioquake3" +PRODUCT_NAME="Lilium Quake3" WRAPPER_EXTENSION="app" WRAPPER_NAME="${PRODUCT_NAME}.${WRAPPER_EXTENSION}" CONTENTS_FOLDER_PATH="${WRAPPER_NAME}/Contents" UNLOCALIZED_RESOURCES_FOLDER_PATH="${CONTENTS_FOLDER_PATH}/Resources" EXECUTABLE_FOLDER_PATH="${CONTENTS_FOLDER_PATH}/MacOS" -EXECUTABLE_NAME="${PRODUCT_NAME}" # loop through the architectures to build string lists for each universal binary for ARCH in $SEARCH_ARCHS; do @@ -292,9 +293,9 @@ echo " CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile - quake3_flat + lilium CFBundleIdentifier - org.ioquake.${PRODUCT_NAME} + moe.clover.${PRODUCT_NAME} CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -312,7 +313,7 @@ echo " LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} NSHumanReadableCopyright - QUAKE III ARENA Copyright © 1999-2000 id Software, Inc. All rights reserved. + ${PRODUCT_NAME} Copyright © 1999-2005 id Software, 2005-2018 ioquake3 contributors. NSPrincipalClass NSApplication diff --git a/misc/lilium.icns b/misc/lilium.icns new file mode 100644 index 0000000000..fc70c08023 Binary files /dev/null and b/misc/lilium.icns differ