From b19e5333f192a4d56b147a62d167ddce39393c12 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Fri, 31 Mar 2023 23:22:01 -0400 Subject: [PATCH 01/39] Remove unmaintained build files. --- core/Makefile | 183 --- core/msvc10/mm_core.sln | 50 - core/msvc10/mm_core.vcxproj | 1296 -------------------- core/msvc10/mm_core.vcxproj.filters | 189 --- core/msvc9/mm_core.sln | 56 - core/msvc9/mm_core.vcproj | 1461 ----------------------- loader/Makefile | 90 -- loader/msvc10/mm_loader.sln | 20 - loader/msvc10/mm_loader.vcxproj | 129 -- loader/msvc10/mm_loader.vcxproj.filters | 56 - loader/msvc9/mm_loader.sln | 20 - loader/msvc9/mm_loader.vcproj | 239 ---- msvc10/MMSource.sln | 290 ----- 13 files changed, 4079 deletions(-) delete mode 100644 core/Makefile delete mode 100644 core/msvc10/mm_core.sln delete mode 100644 core/msvc10/mm_core.vcxproj delete mode 100644 core/msvc10/mm_core.vcxproj.filters delete mode 100644 core/msvc9/mm_core.sln delete mode 100644 core/msvc9/mm_core.vcproj delete mode 100644 loader/Makefile delete mode 100644 loader/msvc10/mm_loader.sln delete mode 100644 loader/msvc10/mm_loader.vcxproj delete mode 100644 loader/msvc10/mm_loader.vcxproj.filters delete mode 100644 loader/msvc9/mm_loader.sln delete mode 100644 loader/msvc9/mm_loader.vcproj delete mode 100644 msvc10/MMSource.sln diff --git a/core/Makefile b/core/Makefile deleted file mode 100644 index 3c89eb1a..00000000 --- a/core/Makefile +++ /dev/null @@ -1,183 +0,0 @@ -# (C)2004-2010 SourceMod Development Team -# Makefile written by David "BAILOPAN" Anderson - -HL2SDK_OB = ../../hl2sdk-ob -HL2SDK_CSS = ../../hl2sdk-css -HL2SDK_OB_VALVE = ../../hl2sdk-ob-valve -HL2SDK_L4D = ../../hl2sdk-l4d -HL2SDK_L4D2 = ../../hl2sdk-l4d2 -HL2SDK_CSGO = ../../hl2sdk-csgo - -##################################### -### EDIT BELOW FOR OTHER PROJECTS ### -##################################### - -OBJECTS = metamod.cpp \ - metamod_util.cpp \ - metamod_console.cpp \ - metamod_oslink.cpp \ - metamod_plugins.cpp \ - sourcehook/sourcehook.cpp \ - sourcehook/sourcehook_hookmangen.cpp \ - sourcehook/sourcehook_impl_chookidman.cpp \ - sourcehook/sourcehook_impl_chookmaninfo.cpp \ - sourcehook/sourcehook_impl_cproto.cpp \ - sourcehook/sourcehook_impl_cvfnptr.cpp \ - provider/console.cpp \ - provider/provider_ep2.cpp \ - vsp_bridge.cpp \ - gamedll_bridge.cpp - -############################################## -### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### -############################################## - -C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -pipe -fno-strict-aliasing -C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 -C_GCC4_FLAGS = -fvisibility=hidden -CPP_GCC4_FLAGS = -fvisibility-inlines-hidden -CPP = gcc - -override ENGSET = false -ifeq "$(ENGINE)" "orangebox" - HL2SDK = $(HL2SDK_OB) - HL2PUB = $(HL2SDK)/public - HL2LIB = $(HL2SDK)/lib/linux - CFLAGS += -DSOURCE_ENGINE=3 - INCLUDE += -I$(HL2SDK)/public/game/server - BINARY = metamod.2.ep2.so - LIB_SUFFIX = _i486.so - override ENGSET = true -endif -ifeq "$(ENGINE)" "css" - HL2SDK = $(HL2SDK_CSS) - HL2PUB = $(HL2SDK)/public - HL2LIB = $(HL2SDK)/lib/linux - CFLAGS += -DSOURCE_ENGINE=6 - INCLUDE += -I$(HL2SDK)/public/game/server - BINARY = metamod.2.css.so - LIB_PREFIX = lib - LIB_SUFFIX = _srv.so - override ENGSET = true -endif -ifeq "$(ENGINE)" "orangeboxvalve" - HL2SDK = $(HL2SDK_OB_VALVE) - HL2PUB = $(HL2SDK)/public - HL2LIB = $(HL2SDK)/lib/linux - CFLAGS += -DSOURCE_ENGINE=7 - INCLUDE += -I$(HL2SDK)/public/game/server - BINARY = metamod.2.ep2v.so - LIB_PREFIX = lib - LIB_SUFFIX = _srv.so - override ENGSET = true -endif -ifeq "$(ENGINE)" "left4dead" - HL2SDK = $(HL2SDK_L4D) - HL2PUB = $(HL2SDK)/public - HL2LIB = $(HL2SDK)/lib/linux - CFLAGS += -DSOURCE_ENGINE=8 - INCLUDE += -I$(HL2SDK)/public/game/server - BINARY = metamod.2.l4d.so - LIB_PREFIX = lib - LIB_SUFFIX = .so - override ENGSET = true -endif -ifeq "$(ENGINE)" "left4dead2" - HL2SDK = $(HL2SDK_L4D2) - HL2PUB = $(HL2SDK)/public - HL2LIB = $(HL2SDK)/lib/linux - CFLAGS += -DSOURCE_ENGINE=9 - INCLUDE += -I$(HL2SDK)/public/game/server - BINARY = metamod.2.l4d2.so - LIB_PREFIX = lib - LIB_SUFFIX = _srv.so - override ENGSET = true -endif -ifeq "$(ENGINE)" "csgo" - HL2SDK = $(HL2SDK_CSGO) - HL2PUB = $(HL2SDK)/public - HL2LIB = $(HL2SDK)/lib/linux - CFLAGS += -DSOURCE_ENGINE=12 - INCLUDE += -I$(HL2SDK)/public/game/server - BINARY = metamod.2.csgo.so - LIB_PREFIX = lib - LIB_SUFFIX = .so - override ENGSET = true -endif - -CFLAGS += -DSE_EPISODEONE=1 -DSE_DARKMESSIAH=2 -DSE_ORANGEBOX=3 -DSE_BLOODYGOODTIME=4 -DSE_EYE=5 \ - -DSE_CSS=6 -DSE_ORANGEBOXVALVE=7 -DSE_LEFT4DEAD=8 -DSE_LEFT4DEAD2=9 -DSE_ALIENSWARM=10 \ - -DSE_PORTAL2=11 -DSE_CSGO=12 - -ifeq "$(ENGINE)" "csgo" - LINK += $(HL2LIB)/interfaces_i486.a -endif - -LINK += $(HL2LIB)/tier1_i486.a $(LIB_PREFIX)vstdlib$(LIB_SUFFIX) $(LIB_PREFIX)tier0$(LIB_SUFFIX) \ - -static-libgcc - -INCLUDE += -I. -I.. -I../public -I$(HL2PUB) -I$(HL2PUB)/engine -I$(HL2PUB)/mathlib -I$(HL2PUB)/vstdlib \ - -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 -I. -Isourcehook -I../loader - -CFLAGS += -D_LINUX -DPOSIX -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ - -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \ - -Dstrcmpi=strcasecmp -Wall -Werror -Wno-uninitialized -mfpmath=sse -msse -DHAVE_STDINT_H -m32 \ - -DCOMPILER_GCC -CPPFLAGS += -Wno-non-virtual-dtor -fno-exceptions -fno-rtti - -################################################ -### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### -################################################ - -ifeq "$(DEBUG)" "true" - BIN_DIR = Debug.$(ENGINE) - CFLAGS += $(C_DEBUG_FLAGS) -else - BIN_DIR = Release.$(ENGINE) - CFLAGS += $(C_OPT_FLAGS) -endif - -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) -ifeq "$(GCC_VERSION)" "4" - CFLAGS += $(C_GCC4_FLAGS) - CPPFLAGS += $(CPP_GCC4_FLAGS) -endif - -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) -OBJ_LINUX := $(OBJ_LINUX:%.c=$(BIN_DIR)/%.o) - -$(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< - -$(BIN_DIR)/%.o: %.c - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< - -all: check - mkdir -p $(BIN_DIR) - mkdir -p $(BIN_DIR)/provider - mkdir -p $(BIN_DIR)/sourcehook - ln -sf $(HL2LIB)/$(LIB_PREFIX)vstdlib$(LIB_SUFFIX) - ln -sf $(HL2LIB)/$(LIB_PREFIX)tier0$(LIB_SUFFIX) - $(MAKE) -f Makefile metamod - -check: - if [ "$(ENGSET)" = "false" ]; then \ - echo "You must supply one of the following values for ENGINE:"; \ - echo "csgo, left4dead2, left4dead, orangeboxvalve, css or orangebox"; \ - exit 1; \ - fi - -metamod: check $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) - -debug: - $(MAKE) -f Makefile all DEBUG=true - -default: all - -clean: check - rm -rf $(BIN_DIR)/*.o - rm -rf $(BIN_DIR)/sourcehook/*.o - rm -rf $(BIN_DIR)/provider/*.o - rm -rf $(BIN_DIR)/$(BINARY) - diff --git a/core/msvc10/mm_core.sln b/core/msvc10/mm_core.sln deleted file mode 100644 index dbd54f74..00000000 --- a/core/msvc10/mm_core.sln +++ /dev/null @@ -1,50 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mm_core", "mm_core.vcxproj", "{F7D47743-73B3-49B5-9D76-2333C5DFD565}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug - CS GO|Win32 = Debug - CS GO|Win32 - Debug - Dark Messiah|Win32 = Debug - Dark Messiah|Win32 - Debug - Left 4 Dead 2|Win32 = Debug - Left 4 Dead 2|Win32 - Debug - Left 4 Dead|Win32 = Debug - Left 4 Dead|Win32 - Debug - Orange Box Valve|Win32 = Debug - Orange Box Valve|Win32 - Debug - Orange Box|Win32 = Debug - Orange Box|Win32 - Release - CS GO|Win32 = Release - CS GO|Win32 - Release - Dark Messiah|Win32 = Release - Dark Messiah|Win32 - Release - Left 4 Dead 2|Win32 = Release - Left 4 Dead 2|Win32 - Release - Left 4 Dead|Win32 = Release - Left 4 Dead|Win32 - Release - Orange Box Valve|Win32 = Release - Orange Box Valve|Win32 - Release - Orange Box|Win32 = Release - Orange Box|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - CS GO|Win32.ActiveCfg = Debug - CS GO|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - CS GO|Win32.Build.0 = Debug - CS GO|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Dark Messiah|Win32.ActiveCfg = Debug - Dark Messiah|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Dark Messiah|Win32.Build.0 = Debug - Dark Messiah|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Left 4 Dead 2|Win32.ActiveCfg = Debug - Left 4 Dead 2|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Left 4 Dead 2|Win32.Build.0 = Debug - Left 4 Dead 2|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Left 4 Dead|Win32.ActiveCfg = Debug - Left 4 Dead|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Left 4 Dead|Win32.Build.0 = Debug - Left 4 Dead|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Orange Box Valve|Win32.ActiveCfg = Debug - Orange Box Valve|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Orange Box Valve|Win32.Build.0 = Debug - Orange Box Valve|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - CS GO|Win32.ActiveCfg = Release - CS GO|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - CS GO|Win32.Build.0 = Release - CS GO|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Dark Messiah|Win32.ActiveCfg = Release - Dark Messiah|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Dark Messiah|Win32.Build.0 = Release - Dark Messiah|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Left 4 Dead 2|Win32.ActiveCfg = Release - Left 4 Dead 2|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Left 4 Dead 2|Win32.Build.0 = Release - Left 4 Dead 2|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Left 4 Dead|Win32.ActiveCfg = Release - Left 4 Dead|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Left 4 Dead|Win32.Build.0 = Release - Left 4 Dead|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Orange Box Valve|Win32.ActiveCfg = Release - Orange Box Valve|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Orange Box Valve|Win32.Build.0 = Release - Orange Box Valve|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/core/msvc10/mm_core.vcxproj b/core/msvc10/mm_core.vcxproj deleted file mode 100644 index b581115a..00000000 --- a/core/msvc10/mm_core.vcxproj +++ /dev/null @@ -1,1296 +0,0 @@ - - - - - Debug - Alien Swarm - Win32 - - - Debug - Bloody Good Time - Win32 - - - Debug - CS GO - Win32 - - - Debug - CSS - Win32 - - - Debug - Dark Messiah - Win32 - - - Debug - EYE - Win32 - - - Debug - Left 4 Dead 2 - Win32 - - - Debug - Left 4 Dead - Win32 - - - Debug - Orange Box Valve - Win32 - - - Debug - Orange Box - Win32 - - - Debug - Portal 2 - Win32 - - - Release - Alien Swarm - Win32 - - - Release - Bloody Good Time - Win32 - - - Release - CS GO - Win32 - - - Release - CSS - Win32 - - - Release - Dark Messiah - Win32 - - - Release - EYE - Win32 - - - Release - Left 4 Dead 2 - Win32 - - - Release - Left 4 Dead - Win32 - - - Release - Orange Box Valve - Win32 - - - Release - Orange Box - Win32 - - - Release - Portal 2 - Win32 - - - - {F7D47743-73B3-49B5-9D76-2333C5DFD565} - mm_core - Win32Proj - - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.40219.1 - $(Configuration)\ - $(Configuration)\ - true - $(Configuration)\ - $(Configuration)\ - false - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - true - true - true - true - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - false - false - false - false - $(Configuration)\ - $(Configuration)\ - true - $(Configuration)\ - $(Configuration)\ - false - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - true - true - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - false - false - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - true - true - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - false - false - $(Configuration)\ - $(Configuration)\ - true - $(Configuration)\ - $(Configuration)\ - false - - - metamod.2.csgo - - - metamod.2.portal2 - - - metamod.2.darkm - - - metamod.2.l4d - - - metamod.2.l4d2 - - - metamod.2.swarm - - - metamod.2.ep2 - - - metamod.2.ep2v - - - metamod.2.css - - - metamod.2.eye - - - metamod.2.bgt - - - metamod.2.csgo - - - metamod.2.portal2 - - - metamod.2.darkm - - - metamod.2.l4d - - - metamod.2.l4d2 - - - metamod.2.swarm - - - metamod.2.ep2 - - - metamod.2.ep2v - - - metamod.2.css - - - metamod.2.eye - - - metamod.2.bgt - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Disabled - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDKOB)\public;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\game\server;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCE_ENGINE=3;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - false - - - Level3 - EditAndContinue - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDKOB)\lib\public\tier0.lib;$(HL2SDKOB)\lib\public\tier1.lib;$(HL2SDKOB)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries) - true - $(OutDir)sourcemm.pdb - Windows - false - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Full - Speed - true - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDKOB)\public;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\game\server;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCE_ENGINE=3;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - false - false - - - Level3 - ProgramDatabase - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDKOB)\lib\public\tier0.lib;$(HL2SDKOB)\lib\public\tier1.lib;$(HL2SDKOB)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmtd.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Disabled - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDKOBVALVE)\public;$(HL2SDKOBVALVE)\public\engine;$(HL2SDKOBVALVE)\public\game\server;$(HL2SDKOBVALVE)\public\tier0;$(HL2SDKOBVALVE)\public\tier1;$(HL2SDKOBVALVE)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCE_ENGINE=7;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - false - - - Level3 - EditAndContinue - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDKOBVALVE)\lib\public\tier0.lib;$(HL2SDKOBVALVE)\lib\public\tier1.lib;$(HL2SDKOBVALVE)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries) - true - $(OutDir)sourcemm.pdb - Windows - false - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Disabled - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDKCSS)\public;$(HL2SDKCSS)\public\engine;$(HL2SDKCSS)\public\game\server;$(HL2SDKCSS)\public\tier0;$(HL2SDKCSS)\public\tier1;$(HL2SDKCSS)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCE_ENGINE=6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - false - - - Level3 - EditAndContinue - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDKCSS)\lib\public\tier0.lib;$(HL2SDKCSS)\lib\public\tier1.lib;$(HL2SDKCSS)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries) - true - $(OutDir)sourcemm.pdb - Windows - false - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Disabled - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDK-EYE)\public;$(HL2SDK-EYE)\public\engine;$(HL2SDK-EYE)\public\game\server;$(HL2SDK-EYE)\public\tier0;$(HL2SDK-EYE)\public\tier1;$(HL2SDK-EYE)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCE_ENGINE=5;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - false - - - Level3 - EditAndContinue - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDK-EYE)\lib\public\tier0.lib;$(HL2SDK-EYE)\lib\public\tier1.lib;$(HL2SDK-EYE)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries) - true - $(OutDir)sourcemm.pdb - Windows - false - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Disabled - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDK-BGT)\public;$(HL2SDK-BGT)\public\engine;$(HL2SDK-BGT)\public\game\server;$(HL2SDK-BGT)\public\tier0;$(HL2SDK-BGT)\public\tier1;$(HL2SDK-BGT)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCE_ENGINE=4;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - false - - - Level3 - EditAndContinue - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDK-BGT)\lib\public\tier0.lib;$(HL2SDK-BGT)\lib\public\tier1.lib;$(HL2SDK-BGT)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries) - true - $(OutDir)sourcemm.pdb - Windows - false - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Full - Speed - true - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDKOBVALVE)\public;$(HL2SDKOBVALVE)\public\engine;$(HL2SDKOBVALVE)\public\game\server;$(HL2SDKOBVALVE)\public\tier0;$(HL2SDKOBVALVE)\public\tier1;$(HL2SDKOBVALVE)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCE_ENGINE=7;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - false - false - - - Level3 - ProgramDatabase - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDKOBVALVE)\lib\public\tier0.lib;$(HL2SDKOBVALVE)\lib\public\tier1.lib;$(HL2SDKOBVALVE)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmtd.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Full - Speed - true - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDKCSS)\public;$(HL2SDKCSS)\public\engine;$(HL2SDKCSS)\public\game\server;$(HL2SDKCSS)\public\tier0;$(HL2SDKCSS)\public\tier1;$(HL2SDKCSS)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCE_ENGINE=6;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - false - false - - - Level3 - ProgramDatabase - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDKCSS)\lib\public\tier0.lib;$(HL2SDKCSS)\lib\public\tier1.lib;$(HL2SDKCSS)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmtd.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Full - Speed - true - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDK-EYE)\public;$(HL2SDK-EYE)\public\engine;$(HL2SDK-EYE)\public\game\server;$(HL2SDK-EYE)\public\tier0;$(HL2SDK-EYE)\public\tier1;$(HL2SDK-EYE)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCE_ENGINE=5;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - false - false - - - Level3 - ProgramDatabase - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDK-EYE)\lib\public\tier0.lib;$(HL2SDK-EYE)\lib\public\tier1.lib;$(HL2SDK-EYE)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmtd.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Full - Speed - true - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDK-BGT)\public;$(HL2SDK-BGT)\public\engine;$(HL2SDK-BGT)\public\game\server;$(HL2SDK-BGT)\public\tier0;$(HL2SDK-BGT)\public\tier1;$(HL2SDK-BGT)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCE_ENGINE=4;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - false - false - - - Level3 - ProgramDatabase - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDK-BGT)\lib\public\tier0.lib;$(HL2SDK-BGT)\lib\public\tier1.lib;$(HL2SDK-BGT)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmtd.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Disabled - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDKL4D)\public;$(HL2SDKL4D)\public\engine;$(HL2SDKL4D)\public\game\server;$(HL2SDKL4D)\public\tier0;$(HL2SDKL4D)\public\tier1;$(HL2SDKL4D)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCE_ENGINE=8;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - false - - - Level3 - EditAndContinue - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDKL4D)\lib\public\tier0.lib;$(HL2SDKL4D)\lib\public\tier1.lib;$(HL2SDKL4D)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries) - true - $(OutDir)sourcemm.pdb - Windows - false - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Full - Speed - true - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDKL4D)\public;$(HL2SDKL4D)\public\engine;$(HL2SDKL4D)\public\game\server;$(HL2SDKL4D)\public\tier0;$(HL2SDKL4D)\public\tier1;$(HL2SDKL4D)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCE_ENGINE=8;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - false - false - - - Level3 - ProgramDatabase - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDKL4D)\lib\public\tier0.lib;$(HL2SDKL4D)\lib\public\tier1.lib;$(HL2SDKL4D)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmtd.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Disabled - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDKL4D2)\public;$(HL2SDKL4D2)\public\engine;$(HL2SDKL4D2)\public\game\server;$(HL2SDKL4D2)\public\tier0;$(HL2SDKL4D2)\public\tier1;$(HL2SDKL4D2)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCE_ENGINE=9;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - false - - - Level3 - EditAndContinue - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDKL4D2)\lib\public\tier0.lib;$(HL2SDKL4D2)\lib\public\tier1.lib;$(HL2SDKL4D2)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries) - true - $(OutDir)sourcemm.pdb - Windows - false - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Disabled - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDK-SWARM)\public;$(HL2SDK-SWARM)\public\engine;$(HL2SDK-SWARM)\public\game\server;$(HL2SDK-SWARM)\public\tier0;$(HL2SDK-SWARM)\public\tier1;$(HL2SDK-SWARM)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=10;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - false - - - Level3 - EditAndContinue - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDK-SWARM)\lib\public\interfaces.lib;$(HL2SDK-SWARM)\lib\public\tier0.lib;$(HL2SDK-SWARM)\lib\public\tier1.lib;$(HL2SDK-SWARM)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries) - true - $(OutDir)sourcemm.pdb - Windows - false - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Full - Speed - true - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDKL4D2)\public;$(HL2SDKL4D2)\public\engine;$(HL2SDKL4D2)\public\game\server;$(HL2SDKL4D2)\public\tier0;$(HL2SDKL4D2)\public\tier1;$(HL2SDKL4D2)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCE_ENGINE=9;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - false - false - - - Level3 - ProgramDatabase - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDKL4D2)\lib\public\tier0.lib;$(HL2SDKL4D2)\lib\public\tier1.lib;$(HL2SDKL4D2)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmtd.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Full - Speed - true - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDK-SWARM)\public;$(HL2SDK-SWARM)\public\engine;$(HL2SDK-SWARM)\public\game\server;$(HL2SDK-SWARM)\public\tier0;$(HL2SDK-SWARM)\public\tier1;$(HL2SDK-SWARM)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=10;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - false - false - - - Level3 - ProgramDatabase - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDK-SWARM)\lib\public\interfaces.lib;$(HL2SDK-SWARM)\lib\public\tier0.lib;$(HL2SDK-SWARM)\lib\public\tier1.lib;$(HL2SDK-SWARM)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmtd.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Disabled - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDKCSGO)\public;$(HL2SDKCSGO)\public\engine;$(HL2SDKCSGO)\public\game\server;$(HL2SDKCSGO)\public\tier0;$(HL2SDKCSGO)\public\tier1;$(HL2SDKCSGO)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=12;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - false - - - Level3 - EditAndContinue - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDKCSGO)\lib\public\tier0.lib;$(HL2SDKCSGO)\lib\public\tier1.lib;$(HL2SDKCSGO)\lib\public\vstdlib.lib;$(HL2SDKCSGO)\lib\public\interfaces.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries) - true - $(OutDir)sourcemm.pdb - Windows - false - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Disabled - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDKPORTAL2)\public;$(HL2SDKPORTAL2)\public\engine;$(HL2SDKPORTAL2)\public\game\server;$(HL2SDKPORTAL2)\public\tier0;$(HL2SDKPORTAL2)\public\tier1;$(HL2SDKPORTAL2)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=11;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - false - - - Level3 - EditAndContinue - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDKPORTAL2)\lib\public\tier0.lib;$(HL2SDKPORTAL2)\lib\public\tier1.lib;$(HL2SDKPORTAL2)\lib\public\vstdlib.lib;$(HL2SDKPORTAL2)\lib\public\interfaces.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries) - true - $(OutDir)sourcemm.pdb - Windows - false - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Full - Speed - true - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDKCSGO)\public;$(HL2SDKCSGO)\public\engine;$(HL2SDKCSGO)\public\game\server;$(HL2SDKCSGO)\public\tier0;$(HL2SDKCSGO)\public\tier1;$(HL2SDKCSGO)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=12;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - false - false - - - Level3 - ProgramDatabase - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDKCSGO)\lib\public\tier0.lib;$(HL2SDKCSGO)\lib\public\tier1.lib;$(HL2SDKCSGO)\lib\public\vstdlib.lib;$(HL2SDKCSGO)\lib\public\interfaces.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmtd.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Full - Speed - true - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDKPORTAL2)\public;$(HL2SDKPORTAL2)\public\engine;$(HL2SDKPORTAL2)\public\game\server;$(HL2SDKPORTAL2)\public\tier0;$(HL2SDKPORTAL2)\public\tier1;$(HL2SDKPORTAL2)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=11;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - false - false - - - Level3 - ProgramDatabase - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDKPORTAL2)\lib\public\tier0.lib;$(HL2SDKPORTAL2)\lib\public\tier1.lib;$(HL2SDKPORTAL2)\lib\public\vstdlib.lib;$(HL2SDKPORTAL2)\lib\public\interfaces.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmtd.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Disabled - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDK-DARKM)\public;$(HL2SDK-DARKM)\public\engine;$(HL2SDK-DARKM)\public\dlls;$(HL2SDK-DARKM)\public\tier0;$(HL2SDK-DARKM)\public\tier1;$(HL2SDK-DARKM)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCE_ENGINE=2;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - false - - - Level3 - EditAndContinue - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDK-DARKM)\lib\public\tier0.lib;$(HL2SDK-DARKM)\lib\public\tier1.lib;$(HL2SDK-DARKM)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries) - true - $(OutDir)sourcemm.pdb - Windows - false - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 - Full - Speed - true - ..;..\..\public;..\..\loader;..\sourcehook;$(HL2SDK-DARKM)\public;$(HL2SDK-DARKM)\public\engine;$(HL2SDK-DARKM)\public\dlls;$(HL2SDK-DARKM)\public\tier0;$(HL2SDK-DARKM)\public\tier1;$(HL2SDK-DARKM)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SOURCEMM_EXPORTS;_CRT_SECURE_NO_DEPRECATE;SOURCE_ENGINE=2;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - false - false - - - Level3 - ProgramDatabase - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(HL2SDK-DARKM)\lib\public\tier0.lib;$(HL2SDK-DARKM)\lib\public\tier1.lib;$(HL2SDK-DARKM)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)$(TargetFileName) - libc.lib;libcd.lib;libcmtd.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - $(OutDir)sourcemm.lib - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/core/msvc10/mm_core.vcxproj.filters b/core/msvc10/mm_core.vcxproj.filters deleted file mode 100644 index 13445da3..00000000 --- a/core/msvc10/mm_core.vcxproj.filters +++ /dev/null @@ -1,189 +0,0 @@ - - - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx - - - {164581e9-afc3-4834-9fb9-b75638df6014} - - - {c5bf4755-d61f-4ec8-a807-bdd63b58c01c} - - - {5692b9dd-f21e-452e-bacd-e7e31277755b} - - - {72668373-0466-495c-8b9e-683af0cccf47} - - - {e1e87a63-9709-4c3b-a5c3-ed636b36c6ce} - - - {8258f77b-cb2f-4d79-a05e-9930ff1cb44d} - - - {cf9ff2d7-b5eb-46f0-8d52-e797194bfefd} - - - {14df2031-ed46-4e12-8456-bdffada2d706} - - - {2f387549-7fe6-4d64-bc34-14a32bc70cf3} - - - {188ed842-cd55-4ce7-a33b-60d426730a63} - - - - - Resource Files - - - - - Interfaces - - - Interfaces - - - Interfaces - - - Interfaces - - - Metamod\Header Files - - - Metamod\Header Files - - - Metamod\Header Files - - - Metamod\Header Files - - - Metamod\Header Files - - - Metamod\Header Files - - - Provider\Header Files - - - Provider\Header Files - - - SourceHook\Header Files - - - SourceHook\Header Files - - - SourceHook\Header Files - - - SourceHook\Header Files - - - SourceHook\Header Files - - - SourceHook\Header Files - - - SourceHook\Header Files - - - SourceHook\Header Files - - - SourceHook\Header Files - - - SourceHook\Header Files - - - SourceHook\Header Files - - - SourceHook\Header Files - - - SourceHook\Header Files - - - SourceHook\Header Files - - - SourceHook\Header Files - - - SourceHook\Header Files - - - SourceHook\Header Files - - - SourceHook\Header Files - - - SourceHook\Header Files - - - SourceHook\Header Files - - - - - Metamod\Source Files - - - Metamod\Source Files - - - Metamod\Source Files - - - Metamod\Source Files - - - Metamod\Source Files - - - Metamod\Source Files - - - Metamod\Source Files - - - Provider\Source Files - - - Provider\Source Files - - - SourceHook\Source Files - - - SourceHook\Source Files - - - SourceHook\Source Files - - - SourceHook\Source Files - - - SourceHook\Source Files - - - SourceHook\Source Files - - - \ No newline at end of file diff --git a/core/msvc9/mm_core.sln b/core/msvc9/mm_core.sln deleted file mode 100644 index 9052d816..00000000 --- a/core/msvc9/mm_core.sln +++ /dev/null @@ -1,56 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mm_core", "mm_core.vcproj", "{F7D47743-73B3-49B5-9D76-2333C5DFD565}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug - CS GO|Win32 = Debug - CS GO|Win32 - Debug - CSS|Win32 = Debug - CSS|Win32 - Debug - Dark Messiah|Win32 = Debug - Dark Messiah|Win32 - Debug - Left 4 Dead 2|Win32 = Debug - Left 4 Dead 2|Win32 - Debug - Left 4 Dead|Win32 = Debug - Left 4 Dead|Win32 - Debug - Orange Box|Win32 = Debug - Orange Box|Win32 - Debug - Orange Box Valve|Win32 = Debug - Orange Box Valve|Win32 - Release - CS GO|Win32 = Release - CS GO|Win32 - Release - CSS|Win32 = Release - CSS|Win32 - Release - Dark Messiah|Win32 = Release - Dark Messiah|Win32 - Release - Left 4 Dead 2|Win32 = Release - Left 4 Dead 2|Win32 - Release - Left 4 Dead|Win32 = Release - Left 4 Dead|Win32 - Release - Orange Box|Win32 = Release - Orange Box|Win32 - Release - Orange Box Valve|Win32 = Release - Orange Box Valve|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - CS GO|Win32.ActiveCfg = Debug - CS GO|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - CS GO|Win32.Build.0 = Debug - CS GO|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - CSS|Win32.ActiveCfg = Debug - CSS|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - CSS|Win32.Build.0 = Debug - CSS|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Dark Messiah|Win32.ActiveCfg = Debug - Dark Messiah|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Dark Messiah|Win32.Build.0 = Debug - Dark Messiah|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Left 4 Dead 2|Win32.ActiveCfg = Debug - Left 4 Dead 2|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Left 4 Dead 2|Win32.Build.0 = Debug - Left 4 Dead 2|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Left 4 Dead|Win32.ActiveCfg = Debug - Left 4 Dead|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Left 4 Dead|Win32.Build.0 = Debug - Left 4 Dead|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Orange Box Valve|Win32.ActiveCfg = Debug - Orange Box Valve|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Orange Box Valve|Win32.Build.0 = Debug - Orange Box Valve|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - CS GO|Win32.ActiveCfg = Release - CS GO|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - CS GO|Win32.Build.0 = Release - CS GO|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - CSS|Win32.ActiveCfg = Release - CSS|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - CSS|Win32.Build.0 = Release - CSS|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Dark Messiah|Win32.ActiveCfg = Release - Dark Messiah|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Dark Messiah|Win32.Build.0 = Release - Dark Messiah|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Left 4 Dead 2|Win32.ActiveCfg = Release - Left 4 Dead 2|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Left 4 Dead 2|Win32.Build.0 = Release - Left 4 Dead 2|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Left 4 Dead|Win32.ActiveCfg = Release - Left 4 Dead|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Left 4 Dead|Win32.Build.0 = Release - Left 4 Dead|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Orange Box Valve|Win32.ActiveCfg = Release - Orange Box Valve|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Orange Box Valve|Win32.Build.0 = Release - Orange Box Valve|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/core/msvc9/mm_core.vcproj b/core/msvc9/mm_core.vcproj deleted file mode 100644 index 392fedc0..00000000 --- a/core/msvc9/mm_core.vcproj +++ /dev/null @@ -1,1461 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/loader/Makefile b/loader/Makefile deleted file mode 100644 index 97484f8c..00000000 --- a/loader/Makefile +++ /dev/null @@ -1,90 +0,0 @@ -# (C)2004-2009 SourceMod Development Team -# Makefile written by David "BAILOPAN" Anderson - -##################################### -### EDIT BELOW FOR OTHER PROJECTS ### -##################################### - -OBJECTS = loader.cpp \ - utility.cpp \ - serverplugin.cpp \ - gamedll.cpp - -############################################## -### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### -############################################## - -C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -pipe -fno-strict-aliasing -C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 -C_GCC4_FLAGS = -fvisibility=hidden -CPP_GCC4_FLAGS = -fvisibility-inlines-hidden -CPP = gcc-4.1 - -ifneq (,$(filter left4dead2 csgo,$(ENGINE))) - BINARY = server.so - CFLAGS += -DLIB_PREFIX=\"lib\" -DLIB_SUFFIX=\".so\" -else - BINARY = server_i486.so - CFLAGS += -DLIB_PREFIX=\"\" -DLIB_SUFFIX=\"_i486.so\" -endif - -LINK += -static-libgcc - -INCLUDE += -I. -I../core/sourcehook - -CFLAGS += -D_LINUX -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ - -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \ - -Dstrcmpi=strcasecmp -Wall -Werror -Wno-uninitialized -mfpmath=sse -msse -DHAVE_STDINT_H -m32 -CPPFLAGS += -Wno-non-virtual-dtor -fno-exceptions -fno-rtti - -################################################ -### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### -################################################ - -ifeq "$(DEBUG)" "true" - ifeq "$(ENGINE)" "" - BIN_DIR = Debug - else - BIN_DIR = Debug.$(ENGINE) - endif - CFLAGS += $(C_DEBUG_FLAGS) -else - ifeq "$(ENGINE)" "" - BIN_DIR = Release - else - BIN_DIR = Release.$(ENGINE) - endif - CFLAGS += $(C_OPT_FLAGS) -endif - -GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) -ifeq "$(GCC_VERSION)" "4" - CFLAGS += $(C_GCC4_FLAGS) - CPPFLAGS += $(CPP_GCC4_FLAGS) -endif - -OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) -OBJ_LINUX := $(OBJ_LINUX:%.c=$(BIN_DIR)/%.o) - -$(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< - -$(BIN_DIR)/%.o: %.c - $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< - -all: - mkdir -p $(BIN_DIR) - $(MAKE) -f Makefile metamod - -metamod: $(OBJ_LINUX) - $(CPP) $(INCLUDE) $(OBJ_LINUX) $(LINK) -m32 -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) - -debug: - $(MAKE) -f Makefile all DEBUG=true - -default: all - -clean: - rm -rf $(BIN_DIR)/*.o - rm -rf $(BIN_DIR)/$(BINARY) - diff --git a/loader/msvc10/mm_loader.sln b/loader/msvc10/mm_loader.sln deleted file mode 100644 index 126879f6..00000000 --- a/loader/msvc10/mm_loader.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mm_loader", "mm_loader.vcxproj", "{B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug|Win32.ActiveCfg = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug|Win32.Build.0 = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release|Win32.ActiveCfg = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/loader/msvc10/mm_loader.vcxproj b/loader/msvc10/mm_loader.vcxproj deleted file mode 100644 index f74354b1..00000000 --- a/loader/msvc10/mm_loader.vcxproj +++ /dev/null @@ -1,129 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90} - mm_loader - Win32Proj - - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - - - - - - - - - - - - - <_ProjectFileVersion>10.0.40219.1 - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - true - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - false - - - server - - - server - - - - Disabled - ..\..\core\sourcehook;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;LOADER_EXPORTS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(OutDir)$(TargetFileName) - true - Windows - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - MaxSpeed - true - ..\..\core\sourcehook;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;LOADER_EXPORTS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - BINARY_NAME="\"$(TargetFileName)\"";%(PreprocessorDefinitions) - ..\..\public;%(AdditionalIncludeDirectories) - - - $(OutDir)$(TargetFileName) - true - Windows - true - true - MachineX86 - - - IF NOT "%MMSOUTDIR%"=="" copy /Y "$(TargetDir)$(TargetFileName)" "%MMSOUTDIR%\bin" - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/loader/msvc10/mm_loader.vcxproj.filters b/loader/msvc10/mm_loader.vcxproj.filters deleted file mode 100644 index e851b2d8..00000000 --- a/loader/msvc10/mm_loader.vcxproj.filters +++ /dev/null @@ -1,56 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Resource Files - - - \ No newline at end of file diff --git a/loader/msvc9/mm_loader.sln b/loader/msvc9/mm_loader.sln deleted file mode 100644 index b1ffb3a4..00000000 --- a/loader/msvc9/mm_loader.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mm_loader", "mm_loader.vcproj", "{B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug|Win32.ActiveCfg = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug|Win32.Build.0 = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release|Win32.ActiveCfg = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/loader/msvc9/mm_loader.vcproj b/loader/msvc9/mm_loader.vcproj deleted file mode 100644 index 79df3501..00000000 --- a/loader/msvc9/mm_loader.vcproj +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/msvc10/MMSource.sln b/msvc10/MMSource.sln deleted file mode 100644 index cb834330..00000000 --- a/msvc10/MMSource.sln +++ /dev/null @@ -1,290 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mm_core", "..\core\msvc10\mm_core.vcxproj", "{F7D47743-73B3-49B5-9D76-2333C5DFD565}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mm_core-legacy", "..\core-legacy\msvc10\mm_core-legacy.vcxproj", "{03B77DF1-F59B-4A86-AD80-8A60BDA3F491}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mm_loader", "..\loader\msvc10\mm_loader.vcxproj", "{B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample_mm", "..\sample_mm\msvc10\sample_mm.vcxproj", "{E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stub_mm", "..\stub_mm\msvc10\stub_mm.vcxproj", "{EA8E7106-8D09-46A1-881B-FFBC4B8532F2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sample Plugins", "Sample Plugins", "{0F80E7CA-E38A-4E25-805A-65B0F60BC9AD}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug - Alien Swarm|Win32 = Debug - Alien Swarm|Win32 - Debug - Bloody Good Time|Win32 = Debug - Bloody Good Time|Win32 - Debug - CS GO|Win32 = Debug - CS GO|Win32 - Debug - CSS|Win32 = Debug - CSS|Win32 - Debug - Dark Messiah|Win32 = Debug - Dark Messiah|Win32 - Debug - EYE|Win32 = Debug - EYE|Win32 - Debug - Left 4 Dead 2|Win32 = Debug - Left 4 Dead 2|Win32 - Debug - Left 4 Dead|Win32 = Debug - Left 4 Dead|Win32 - Debug - Orange Box Valve|Win32 = Debug - Orange Box Valve|Win32 - Debug - Orange Box|Win32 = Debug - Orange Box|Win32 - Debug - Original|Win32 = Debug - Original|Win32 - Debug - Portal 2|Win32 = Debug - Portal 2|Win32 - Debug|Win32 = Debug|Win32 - Release - Alien Swarm|Win32 = Release - Alien Swarm|Win32 - Release - Bloody Good Time|Win32 = Release - Bloody Good Time|Win32 - Release - CS GO|Win32 = Release - CS GO|Win32 - Release - CSS|Win32 = Release - CSS|Win32 - Release - Dark Messiah|Win32 = Release - Dark Messiah|Win32 - Release - EYE|Win32 = Release - EYE|Win32 - Release - Left 4 Dead 2|Win32 = Release - Left 4 Dead 2|Win32 - Release - Left 4 Dead|Win32 = Release - Left 4 Dead|Win32 - Release - Orange Box Valve|Win32 = Release - Orange Box Valve|Win32 - Release - Orange Box|Win32 = Release - Orange Box|Win32 - Release - Original|Win32 = Release - Original|Win32 - Release - Portal 2|Win32 = Release - Portal 2|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Debug - Alien Swarm|Win32.ActiveCfg = Debug|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Debug - Bloody Good Time|Win32.ActiveCfg = Debug|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Debug - CS GO|Win32.ActiveCfg = Debug|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Debug - CSS|Win32.ActiveCfg = Release|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Debug - Dark Messiah|Win32.ActiveCfg = Debug|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Debug - EYE|Win32.ActiveCfg = Debug|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Debug - Left 4 Dead 2|Win32.ActiveCfg = Debug|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Debug - Left 4 Dead|Win32.ActiveCfg = Debug|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Debug - Orange Box Valve|Win32.ActiveCfg = Debug|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Debug - Orange Box|Win32.ActiveCfg = Debug|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Debug - Original|Win32.ActiveCfg = Debug|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Debug - Original|Win32.Build.0 = Debug|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Debug - Portal 2|Win32.ActiveCfg = Debug|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Debug|Win32.ActiveCfg = Debug|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Debug|Win32.Build.0 = Debug|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Release - Alien Swarm|Win32.ActiveCfg = Release|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Release - Bloody Good Time|Win32.ActiveCfg = Release|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Release - CS GO|Win32.ActiveCfg = Release|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Release - CSS|Win32.ActiveCfg = Release|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Release - Dark Messiah|Win32.ActiveCfg = Release|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Release - EYE|Win32.ActiveCfg = Release|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Release - Left 4 Dead 2|Win32.ActiveCfg = Release|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Release - Left 4 Dead|Win32.ActiveCfg = Release|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Release - Orange Box Valve|Win32.ActiveCfg = Release|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Release - Orange Box|Win32.ActiveCfg = Release|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Release - Original|Win32.ActiveCfg = Release|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Release - Original|Win32.Build.0 = Release|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Release - Portal 2|Win32.ActiveCfg = Release|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Release|Win32.ActiveCfg = Release|Win32 - {03B77DF1-F59B-4A86-AD80-8A60BDA3F491}.Release|Win32.Build.0 = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - Alien Swarm|Win32.ActiveCfg = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - Alien Swarm|Win32.Build.0 = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - Bloody Good Time|Win32.ActiveCfg = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - Bloody Good Time|Win32.Build.0 = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - CS GO|Win32.ActiveCfg = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - CS GO|Win32.Build.0 = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - CSS|Win32.ActiveCfg = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - CSS|Win32.Build.0 = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - Dark Messiah|Win32.ActiveCfg = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - Dark Messiah|Win32.Build.0 = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - EYE|Win32.ActiveCfg = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - EYE|Win32.Build.0 = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - Left 4 Dead 2|Win32.ActiveCfg = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - Left 4 Dead 2|Win32.Build.0 = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - Left 4 Dead|Win32.ActiveCfg = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - Left 4 Dead|Win32.Build.0 = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - Orange Box Valve|Win32.ActiveCfg = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - Orange Box Valve|Win32.Build.0 = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - Orange Box|Win32.ActiveCfg = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - Orange Box|Win32.Build.0 = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - Original|Win32.ActiveCfg = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - Original|Win32.Build.0 = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - Portal 2|Win32.ActiveCfg = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug - Portal 2|Win32.Build.0 = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug|Win32.ActiveCfg = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Debug|Win32.Build.0 = Debug|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - Alien Swarm|Win32.ActiveCfg = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - Alien Swarm|Win32.Build.0 = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - Bloody Good Time|Win32.ActiveCfg = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - Bloody Good Time|Win32.Build.0 = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - CS GO|Win32.ActiveCfg = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - CS GO|Win32.Build.0 = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - CSS|Win32.ActiveCfg = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - CSS|Win32.Build.0 = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - Dark Messiah|Win32.ActiveCfg = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - Dark Messiah|Win32.Build.0 = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - EYE|Win32.ActiveCfg = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - EYE|Win32.Build.0 = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - Left 4 Dead 2|Win32.ActiveCfg = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - Left 4 Dead 2|Win32.Build.0 = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - Left 4 Dead|Win32.ActiveCfg = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - Left 4 Dead|Win32.Build.0 = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - Orange Box Valve|Win32.ActiveCfg = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - Orange Box Valve|Win32.Build.0 = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - Orange Box|Win32.ActiveCfg = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - Orange Box|Win32.Build.0 = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - Original|Win32.ActiveCfg = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - Original|Win32.Build.0 = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - Portal 2|Win32.ActiveCfg = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release - Portal 2|Win32.Build.0 = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release|Win32.ActiveCfg = Release|Win32 - {B8EBE5D8-739A-4ED4-83F7-E68CDED09F90}.Release|Win32.Build.0 = Release|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.ActiveCfg = Debug - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.Build.0 = Debug - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Bloody Good Time|Win32.ActiveCfg = Debug - Bloody Good Time|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Bloody Good Time|Win32.Build.0 = Debug - Bloody Good Time|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - CS GO|Win32.ActiveCfg = Debug - CS GO|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - CS GO|Win32.Build.0 = Debug - CS GO|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - CSS|Win32.ActiveCfg = Debug - CSS|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - CSS|Win32.Build.0 = Debug - CSS|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.ActiveCfg = Debug - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.Build.0 = Debug - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - EYE|Win32.ActiveCfg = Debug - EYE|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - EYE|Win32.Build.0 = Debug - EYE|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.ActiveCfg = Debug - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.Build.0 = Debug - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.ActiveCfg = Debug - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.Build.0 = Debug - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.ActiveCfg = Debug - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.Build.0 = Debug - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.ActiveCfg = Debug - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.Build.0 = Debug - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Portal 2|Win32.ActiveCfg = Debug - Portal 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Portal 2|Win32.Build.0 = Debug - Portal 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug|Win32.ActiveCfg = Debug - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug|Win32.Build.0 = Debug - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.ActiveCfg = Release - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.Build.0 = Release - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Bloody Good Time|Win32.ActiveCfg = Release - Bloody Good Time|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Bloody Good Time|Win32.Build.0 = Release - Bloody Good Time|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - CS GO|Win32.ActiveCfg = Release - CS GO|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - CS GO|Win32.Build.0 = Release - CS GO|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - CSS|Win32.ActiveCfg = Release - CSS|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - CSS|Win32.Build.0 = Release - CSS|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.ActiveCfg = Release - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.Build.0 = Release - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - EYE|Win32.ActiveCfg = Release - EYE|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - EYE|Win32.Build.0 = Release - EYE|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.ActiveCfg = Release - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.Build.0 = Release - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.ActiveCfg = Release - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.Build.0 = Release - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.ActiveCfg = Release - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.Build.0 = Release - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.ActiveCfg = Release - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.Build.0 = Release - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Portal 2|Win32.ActiveCfg = Release - Portal 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Portal 2|Win32.Build.0 = Release - Portal 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release|Win32.ActiveCfg = Release - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release|Win32.Build.0 = Release - Original|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - Alien Swarm|Win32.ActiveCfg = Debug - Alien Swarm|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - Alien Swarm|Win32.Build.0 = Debug - Alien Swarm|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - Bloody Good Time|Win32.ActiveCfg = Debug - Bloody Good Time|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - Bloody Good Time|Win32.Build.0 = Debug - Bloody Good Time|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - CS GO|Win32.ActiveCfg = Debug - CS GO|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - CS GO|Win32.Build.0 = Debug - CS GO|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - CSS|Win32.ActiveCfg = Debug - CSS|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - CSS|Win32.Build.0 = Debug - CSS|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - Dark Messiah|Win32.ActiveCfg = Debug - Dark Messiah|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - Dark Messiah|Win32.Build.0 = Debug - Dark Messiah|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - EYE|Win32.ActiveCfg = Debug - EYE|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - EYE|Win32.Build.0 = Debug - EYE|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - Left 4 Dead 2|Win32.ActiveCfg = Debug - Left 4 Dead 2|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - Left 4 Dead 2|Win32.Build.0 = Debug - Left 4 Dead 2|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - Left 4 Dead|Win32.ActiveCfg = Debug - Left 4 Dead|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - Left 4 Dead|Win32.Build.0 = Debug - Left 4 Dead|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - Orange Box Valve|Win32.ActiveCfg = Debug - Orange Box Valve|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - Orange Box Valve|Win32.Build.0 = Debug - Orange Box Valve|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - Original|Win32.ActiveCfg = Debug - Original|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - Original|Win32.Build.0 = Debug - Original|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - Portal 2|Win32.ActiveCfg = Debug - Portal 2|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug - Portal 2|Win32.Build.0 = Debug - Portal 2|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug|Win32.ActiveCfg = Debug - Left 4 Dead|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Debug|Win32.Build.0 = Debug - Left 4 Dead|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - Alien Swarm|Win32.ActiveCfg = Release - Alien Swarm|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - Alien Swarm|Win32.Build.0 = Release - Alien Swarm|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - Bloody Good Time|Win32.ActiveCfg = Release - Bloody Good Time|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - Bloody Good Time|Win32.Build.0 = Release - Bloody Good Time|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - CS GO|Win32.ActiveCfg = Release - CS GO|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - CS GO|Win32.Build.0 = Release - CS GO|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - CSS|Win32.ActiveCfg = Release - CSS|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - CSS|Win32.Build.0 = Release - CSS|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - Dark Messiah|Win32.ActiveCfg = Release - Dark Messiah|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - Dark Messiah|Win32.Build.0 = Release - Dark Messiah|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - EYE|Win32.ActiveCfg = Release - EYE|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - EYE|Win32.Build.0 = Release - EYE|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - Left 4 Dead 2|Win32.ActiveCfg = Release - Left 4 Dead 2|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - Left 4 Dead 2|Win32.Build.0 = Release - Left 4 Dead 2|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - Left 4 Dead|Win32.ActiveCfg = Release - Left 4 Dead|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - Left 4 Dead|Win32.Build.0 = Release - Left 4 Dead|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - Orange Box Valve|Win32.ActiveCfg = Release - Orange Box Valve|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - Orange Box Valve|Win32.Build.0 = Release - Orange Box Valve|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - Original|Win32.ActiveCfg = Release - Original|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - Original|Win32.Build.0 = Release - Original|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - Portal 2|Win32.ActiveCfg = Release - Portal 2|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release - Portal 2|Win32.Build.0 = Release - Portal 2|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release|Win32.ActiveCfg = Release - Orange Box|Win32 - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2}.Release|Win32.Build.0 = Release - Orange Box|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Alien Swarm|Win32.ActiveCfg = Debug - Alien Swarm|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Alien Swarm|Win32.Build.0 = Debug - Alien Swarm|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Bloody Good Time|Win32.ActiveCfg = Debug - Bloody Good Time|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Bloody Good Time|Win32.Build.0 = Debug - Bloody Good Time|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - CS GO|Win32.ActiveCfg = Debug - CS GO|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - CS GO|Win32.Build.0 = Debug - CS GO|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - CSS|Win32.ActiveCfg = Debug - CSS|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - CSS|Win32.Build.0 = Debug - CSS|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Dark Messiah|Win32.ActiveCfg = Debug - Dark Messiah|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Dark Messiah|Win32.Build.0 = Debug - Dark Messiah|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - EYE|Win32.ActiveCfg = Debug - EYE|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - EYE|Win32.Build.0 = Debug - EYE|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Left 4 Dead 2|Win32.ActiveCfg = Debug - Left 4 Dead 2|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Left 4 Dead 2|Win32.Build.0 = Debug - Left 4 Dead 2|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Left 4 Dead|Win32.ActiveCfg = Debug - Left 4 Dead|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Left 4 Dead|Win32.Build.0 = Debug - Left 4 Dead|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Orange Box Valve|Win32.ActiveCfg = Debug - Orange Box Valve|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Orange Box Valve|Win32.Build.0 = Debug - Orange Box Valve|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Original|Win32.ActiveCfg = Debug - Orange Box|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Portal 2|Win32.ActiveCfg = Debug - Portal 2|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug - Portal 2|Win32.Build.0 = Debug - Portal 2|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug|Win32.ActiveCfg = Debug - Orange Box|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Debug|Win32.Build.0 = Debug - Orange Box|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Alien Swarm|Win32.ActiveCfg = Release - Alien Swarm|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Alien Swarm|Win32.Build.0 = Release - Alien Swarm|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Bloody Good Time|Win32.ActiveCfg = Release - Bloody Good Time|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Bloody Good Time|Win32.Build.0 = Release - Bloody Good Time|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - CS GO|Win32.ActiveCfg = Release - CS GO|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - CS GO|Win32.Build.0 = Release - CS GO|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - CSS|Win32.ActiveCfg = Release - CSS|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - CSS|Win32.Build.0 = Release - CSS|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Dark Messiah|Win32.ActiveCfg = Release - Dark Messiah|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Dark Messiah|Win32.Build.0 = Release - Dark Messiah|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - EYE|Win32.ActiveCfg = Release - EYE|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - EYE|Win32.Build.0 = Release - EYE|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Left 4 Dead 2|Win32.ActiveCfg = Release - Left 4 Dead 2|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Left 4 Dead 2|Win32.Build.0 = Release - Left 4 Dead 2|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Left 4 Dead|Win32.ActiveCfg = Release - Left 4 Dead|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Left 4 Dead|Win32.Build.0 = Release - Left 4 Dead|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Orange Box Valve|Win32.ActiveCfg = Release - Orange Box Valve|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Orange Box Valve|Win32.Build.0 = Release - Orange Box Valve|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Original|Win32.ActiveCfg = Release - Orange Box|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Portal 2|Win32.ActiveCfg = Release - Portal 2|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release - Portal 2|Win32.Build.0 = Release - Portal 2|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release|Win32.ActiveCfg = Release - Orange Box|Win32 - {F7D47743-73B3-49B5-9D76-2333C5DFD565}.Release|Win32.Build.0 = Release - Orange Box|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9} = {0F80E7CA-E38A-4E25-805A-65B0F60BC9AD} - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2} = {0F80E7CA-E38A-4E25-805A-65B0F60BC9AD} - EndGlobalSection -EndGlobal From 6bbcc152c3388afceed036fb15269f06184d7d36 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Fri, 31 Mar 2023 23:32:21 -0400 Subject: [PATCH 02/39] Rename provider_ep2 -> provider_base --- core/AMBuilder | 2 +- core/gamedll_bridge.cpp | 2 +- core/metamod.cpp | 2 +- core/provider/console.cpp | 2 +- core/provider/{provider_ep2.cpp => provider_base.cpp} | 2 +- core/provider/{provider_ep2.h => provider_base.h} | 0 core/vsp_bridge.cpp | 2 +- 7 files changed, 6 insertions(+), 6 deletions(-) rename core/provider/{provider_ep2.cpp => provider_base.cpp} (99%) rename core/provider/{provider_ep2.h => provider_base.h} (100%) diff --git a/core/AMBuilder b/core/AMBuilder index 4114524b..5c68cc00 100644 --- a/core/AMBuilder +++ b/core/AMBuilder @@ -18,7 +18,7 @@ for sdk_name in MMS.sdks: 'metamod_plugins.cpp', 'metamod_util.cpp', 'provider/console.cpp', - 'provider/provider_ep2.cpp', + 'provider/provider_base.cpp', 'sourcehook/sourcehook.cpp', 'sourcehook/sourcehook_impl_chookidman.cpp', 'sourcehook/sourcehook_impl_chookmaninfo.cpp', diff --git a/core/gamedll_bridge.cpp b/core/gamedll_bridge.cpp index 9c8c34b1..2c6f5758 100644 --- a/core/gamedll_bridge.cpp +++ b/core/gamedll_bridge.cpp @@ -28,7 +28,7 @@ #include "metamod_plugins.h" #include "metamod_util.h" #include -#include "provider/provider_ep2.h" +#include "provider/provider_base.h" using namespace SourceMM; diff --git a/core/metamod.cpp b/core/metamod.cpp index 94466cf6..f8fe0176 100644 --- a/core/metamod.cpp +++ b/core/metamod.cpp @@ -33,7 +33,7 @@ #include "metamod_plugins.h" #include "metamod_util.h" #include "metamod_console.h" -#include "provider/provider_ep2.h" +#include "provider/provider_base.h" #include #if SOURCE_ENGINE == SE_DOTA #include diff --git a/core/provider/console.cpp b/core/provider/console.cpp index 7d665b7e..f75a0815 100644 --- a/core/provider/console.cpp +++ b/core/provider/console.cpp @@ -26,7 +26,7 @@ */ #include "console.h" -#include "provider_ep2.h" +#include "provider_base.h" #include "metamod_util.h" using namespace SourceHook; diff --git a/core/provider/provider_ep2.cpp b/core/provider/provider_base.cpp similarity index 99% rename from core/provider/provider_ep2.cpp rename to core/provider/provider_base.cpp index db08ad90..2998f803 100644 --- a/core/provider/provider_ep2.cpp +++ b/core/provider/provider_base.cpp @@ -33,7 +33,7 @@ #include #include #include "../metamod_util.h" -#include "provider_ep2.h" +#include "provider_base.h" #include "console.h" #include "metamod_console.h" #include diff --git a/core/provider/provider_ep2.h b/core/provider/provider_base.h similarity index 100% rename from core/provider/provider_ep2.h rename to core/provider/provider_base.h diff --git a/core/vsp_bridge.cpp b/core/vsp_bridge.cpp index ab24824c..06c696b8 100644 --- a/core/vsp_bridge.cpp +++ b/core/vsp_bridge.cpp @@ -32,7 +32,7 @@ #include #include #include -#include "provider/provider_ep2.h" +#include "provider/provider_base.h" #if SOURCE_ENGINE == SE_DOTA SH_DECL_HOOK2_void(ConCommand, Dispatch, SH_NOATTRIB, false, const CCommandContext &, const CCommand &); From 4da281d957508b387651ab896056e950785f0d76 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sat, 1 Apr 2023 00:00:20 -0400 Subject: [PATCH 03/39] Remove x86 from Source2 build targets --- AMBuildScript | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AMBuildScript b/AMBuildScript index d75b1b22..9f0654e1 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -34,7 +34,7 @@ CSGO = { 'mac': ['x86_64'] } Source2 = { - 'windows': ['x86', 'x86_64'], + 'windows': ['x86_64'], 'linux': ['x86_64'], } Insurgency = { From 035717c694c9ff6c8429c61307bb10802ecb8d3f Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sat, 1 Apr 2023 00:01:26 -0400 Subject: [PATCH 04/39] Re-enable Dota 2 build --- AMBuildScript | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AMBuildScript b/AMBuildScript index 9f0654e1..f89822b3 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -69,7 +69,6 @@ PossibleSDKs = { 'eye': SDK('HL2SDK-EYE', '2.eye', '5', 'EYE', WinOnly, 'eye'), 'mcv': SDK('HL2SDKMCV', '2.mcv', '22', 'MCV', WinOnly, 'mcv'), 'csgo': SDK('HL2SDKCSGO', '2.csgo', '23', 'CSGO', CSGO, 'csgo'), - 'dota': SDK('HL2SDKDOTA', '2.dota', '24', 'DOTA', [], 'dota'), 'portal2': SDK('HL2SDKPORTAL2', '2.portal2', '18', 'PORTAL2', [], 'portal2'), 'blade': SDK('HL2SDKBLADE', '2.blade', '19', 'BLADE', Blade, 'blade'), 'insurgency': SDK('HL2SDKINSURGENCY', '2.insurgency', '20', 'INSURGENCY', Insurgency, 'insurgency'), @@ -78,6 +77,7 @@ PossibleSDKs = { 'bms': SDK('HL2SDKBMS', '2.bms', '11', 'BMS', WinLinux, 'bms'), 'mock': SDK('HL2SDK-MOCK', '2.mock', '999', 'MOCK', Mock, 'mock'), 'pvkii': SDK('HL2SDKPVKII', '2.pvkii', '10', 'PVKII', WinLinux, 'pvkii'), + 'dota': SDK('HL2SDKDOTA', '2.dota', '24', 'DOTA', Source2, 'dota'), } def ResolveEnvPath(env, folder): From f9f75133993bbdac3c37f7bef07991d807dbd667 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sat, 1 Apr 2023 00:02:45 -0400 Subject: [PATCH 05/39] Create initial provider split between Source and Source 2. --- core/AMBuilder | 5 +++ core/provider/provider_base.cpp | 2 +- core/provider/source/provider_source.cpp | 30 +++++++++++++++++ core/provider/source/provider_source.h | 38 ++++++++++++++++++++++ core/provider/source2/provider_source2.cpp | 30 +++++++++++++++++ core/provider/source2/provider_source2.h | 38 ++++++++++++++++++++++ 6 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 core/provider/source/provider_source.cpp create mode 100644 core/provider/source/provider_source.h create mode 100644 core/provider/source2/provider_source2.cpp create mode 100644 core/provider/source2/provider_source2.h diff --git a/core/AMBuilder b/core/AMBuilder index 5c68cc00..db21466c 100644 --- a/core/AMBuilder +++ b/core/AMBuilder @@ -28,6 +28,11 @@ for sdk_name in MMS.sdks: 'vsp_bridge.cpp' ] + if sdk_name in ['dota']: + binary.sources += ['provider/source2/provider_source2.cpp'] + else: + binary.sources += ['provider/source/provider_source.cpp'] + # Source2 hack. TODO: check this more deterministically, "are we doing an x64 build?" if binary.compiler.target.arch == 'x86': binary.sources += ['sourcehook/sourcehook_hookmangen.cpp'] diff --git a/core/provider/provider_base.cpp b/core/provider/provider_base.cpp index 2998f803..a33bd2cd 100644 --- a/core/provider/provider_base.cpp +++ b/core/provider/provider_base.cpp @@ -109,7 +109,7 @@ IEngineServiceMgr *enginesvcmgr = NULL; IVEngineServer *engine = NULL; IServerGameClients *gameclients = NULL; CGlobalVars *gpGlobals = NULL; -IMetamodSourceProvider *provider = &g_Ep1Provider; + ConCommand meta_local_cmd("meta", LocalCommand_Meta, "Metamod:Source control options"); #if SOURCE_ENGINE == SE_DOTA diff --git a/core/provider/source/provider_source.cpp b/core/provider/source/provider_source.cpp new file mode 100644 index 00000000..8a2d0db7 --- /dev/null +++ b/core/provider/source/provider_source.cpp @@ -0,0 +1,30 @@ +/** + * vim: set ts=4 sw=4 tw=99 noet : + * ====================================================== + * Metamod:Source + * Copyright (C) 2004-2023 AlliedModders LLC and authors. + * All rights reserved. + * ====================================================== + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software in a + * product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +#include "provider_source.h" + +static SourceProvider g_SourceProvider; + +IMetamodSourceProvider* provider = &g_SourceProvider; \ No newline at end of file diff --git a/core/provider/source/provider_source.h b/core/provider/source/provider_source.h new file mode 100644 index 00000000..6ce682e2 --- /dev/null +++ b/core/provider/source/provider_source.h @@ -0,0 +1,38 @@ +/** + * vim: set ts=4 : + * ====================================================== + * Metamod:Source + * Copyright (C) 2004-2023 AlliedModders LLC and authors. + * All rights reserved. + * ====================================================== + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software in a + * product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + * Version: $Id$ + */ + +#ifndef _INCLUDE_METAMOD_SOURCE_SOURCE1_PROVIDER_H_ +#define _INCLUDE_METAMOD_SOURCE_SOURCE1_PROVIDER_H_ + +#include "../provider_base.h" + +class SourceProvider : public BaseProvider +{ + +}; + +#endif diff --git a/core/provider/source2/provider_source2.cpp b/core/provider/source2/provider_source2.cpp new file mode 100644 index 00000000..237868df --- /dev/null +++ b/core/provider/source2/provider_source2.cpp @@ -0,0 +1,30 @@ +/** + * vim: set ts=4 sw=4 tw=99 noet : + * ====================================================== + * Metamod:Source + * Copyright (C) 2004-2023 AlliedModders LLC and authors. + * All rights reserved. + * ====================================================== + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software in a + * product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +#include "provider_source2.h" + +static Source2Provider g_Source2Provider; + +IMetamodSourceProvider* provider = &g_Source2Provider; \ No newline at end of file diff --git a/core/provider/source2/provider_source2.h b/core/provider/source2/provider_source2.h new file mode 100644 index 00000000..f623762e --- /dev/null +++ b/core/provider/source2/provider_source2.h @@ -0,0 +1,38 @@ +/** + * vim: set ts=4 : + * ====================================================== + * Metamod:Source + * Copyright (C) 2004-2023 AlliedModders LLC and authors. + * All rights reserved. + * ====================================================== + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software in a + * product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + * Version: $Id$ + */ + +#ifndef _INCLUDE_METAMOD_SOURCE_SOURCE2_PROVIDER_H_ +#define _INCLUDE_METAMOD_SOURCE_SOURCE2_PROVIDER_H_ + +#include "../provider_base.h" + +class Source2Provider : public BaseProvider +{ + +}; + +#endif From 82cd23bc10a16b357c83c599711d4c7a13710b9f Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sat, 1 Apr 2023 00:19:34 -0400 Subject: [PATCH 06/39] Add cs2 build. (No targets for now) --- AMBuildScript | 1 + core/AMBuilder | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/AMBuildScript b/AMBuildScript index f89822b3..a7a0a4b3 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -78,6 +78,7 @@ PossibleSDKs = { 'mock': SDK('HL2SDK-MOCK', '2.mock', '999', 'MOCK', Mock, 'mock'), 'pvkii': SDK('HL2SDKPVKII', '2.pvkii', '10', 'PVKII', WinLinux, 'pvkii'), 'dota': SDK('HL2SDKDOTA', '2.dota', '24', 'DOTA', Source2, 'dota'), + 'cs2': SDK('HL2SDKCS2', '2.cs2', '25', 'CS2', [], 'cs2'), } def ResolveEnvPath(env, folder): diff --git a/core/AMBuilder b/core/AMBuilder index db21466c..a956833f 100644 --- a/core/AMBuilder +++ b/core/AMBuilder @@ -28,7 +28,7 @@ for sdk_name in MMS.sdks: 'vsp_bridge.cpp' ] - if sdk_name in ['dota']: + if sdk_name in ['dota', 'cs2']: binary.sources += ['provider/source2/provider_source2.cpp'] else: binary.sources += ['provider/source/provider_source.cpp'] From 2d74e15a4c3bf5f170522f1b78270e5d183ce1b9 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sat, 1 Apr 2023 00:20:04 -0400 Subject: [PATCH 07/39] Don't link vstdlib on Source 2. It doesn't exist --- AMBuildScript | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/AMBuildScript b/AMBuildScript index a7a0a4b3..00418a19 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -493,7 +493,9 @@ class MMSConfig(object): elif compiler.target.arch == 'x86_64' and sdk.name in ['csgo', 'mock']: dynamic_libs = ['libtier0_client.so', 'libvstdlib_client.so'] elif sdk.name in ['l4d', 'blade', 'insurgency', 'doi', 'csgo', 'dota', 'pvkii']: - dynamic_libs = ['libtier0.so', 'libvstdlib.so'] + dynamic_libs = ['libtier0.so'] + if sdk.name not in ['dota', 'cs2']: + dynamic_libs += ['libvstdlib.so'] else: dynamic_libs = ['tier0_i486.so', 'vstdlib_i486.so'] if sdk.name in ['csgo', 'blade']: @@ -502,7 +504,9 @@ class MMSConfig(object): binary.compiler.linkflags.append('-liconv') dynamic_libs = ['libtier0.dylib', 'libvstdlib.dylib'] elif compiler.target.platform == 'windows': - libs = ['tier0', 'tier1', 'vstdlib'] + libs = ['tier0', 'tier1'] + if sdk.name not in ['dota', 'cs2']: + libs += ['vstdlib'] if sdk.name in ['swarm', 'blade', 'insurgency', 'doi', 'mcv', 'csgo', 'dota']: libs.append('interfaces') if sdk.name == 'bms': From 0c426d9bf3efa9950baf95f272ee99ff476b7684 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sat, 1 Apr 2023 00:20:46 -0400 Subject: [PATCH 08/39] Make provider overrides explicit --- core/provider/provider_base.h | 58 +++++++++++++++++------------------ 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/core/provider/provider_base.h b/core/provider/provider_base.h index 59f79d20..d888c939 100644 --- a/core/provider/provider_base.h +++ b/core/provider/provider_base.h @@ -2,7 +2,7 @@ * vim: set ts=4 sw=4 tw=99 noet : * ====================================================== * Metamod:Source - * Copyright (C) 2004-2009 AlliedModders LLC and authors. + * Copyright (C) 2004-2023 AlliedModders LLC and authors. * All rights reserved. * ====================================================== * @@ -51,37 +51,37 @@ class INetworkGameServer; class BaseProvider : public IMetamodSourceProvider { public: - virtual bool IsSourceEngineBuildCompatible(int build); - virtual bool GetHookInfo(ProvidedHooks hook, SourceHook::MemFuncInfo *pInfo); - virtual bool LogMessage(const char *buffer); - virtual const char *GetCommandLineValue(const char *key, const char *defval); - virtual void ConsolePrint(const char *msg); - virtual bool IsRemotePrintingAvailable(); - virtual void ClientConsolePrint(edict_t *client, const char *msg); - virtual void DisplayError(const char *fmt, ...); - virtual void DisplayWarning(const char *fmt, ...); - virtual int TryServerGameDLL(const char *iface); - virtual void Notify_DLLInit_Pre(CreateInterfaceFn engineFactory, CreateInterfaceFn serverFactory); - void Notify_DLLShutdown_Pre(); - virtual void ServerCommand(const char *cmd); + virtual bool IsSourceEngineBuildCompatible(int build) override; + virtual bool GetHookInfo(ProvidedHooks hook, SourceHook::MemFuncInfo *pInfo) override; + virtual bool LogMessage(const char *buffer) override; + virtual const char *GetCommandLineValue(const char *key, const char *defval) override; + virtual void ConsolePrint(const char *msg) override; + virtual bool IsRemotePrintingAvailable() override; + virtual void ClientConsolePrint(edict_t *client, const char *msg) override; + virtual void DisplayError(const char *fmt, ...) override; + virtual void DisplayWarning(const char *fmt, ...) override; + virtual int TryServerGameDLL(const char *iface) override; + virtual void Notify_DLLInit_Pre(CreateInterfaceFn engineFactory, CreateInterfaceFn serverFactory) override; + void Notify_DLLShutdown_Pre() override; + virtual void ServerCommand(const char *cmd) override; virtual ConVar *CreateConVar(const char *name, const char *defval, const char *help, - int flags); - virtual const char *GetConVarString(ConVar *convar); - virtual void SetConVarString(ConVar *convar, const char *str); - virtual void GetGamePath(char *pszBuffer, int len); - virtual const char *GetGameDescription(); - virtual IConCommandBaseAccessor *GetConCommandBaseAccessor(); - virtual bool RegisterConCommandBase(ConCommandBase *pCommand); - virtual void UnregisterConCommandBase(ConCommandBase *pCommand); - virtual bool IsConCommandBaseACommand(ConCommandBase *pCommand); - virtual int GetUserMessageCount(); - virtual int FindUserMessage(const char *name, int *size=NULL); - virtual const char *GetUserMessage(int index, int *size=NULL); - virtual int DetermineSourceEngine(); - virtual bool ProcessVDF(const char *file, char path[], size_t path_len, char alias[], size_t alias_len); - virtual const char *GetEngineDescription() const; + int flags) override; + virtual const char *GetConVarString(ConVar *convar) override; + virtual void SetConVarString(ConVar *convar, const char *str) override; + virtual void GetGamePath(char *pszBuffer, int len) override; + virtual const char *GetGameDescription() override; + virtual IConCommandBaseAccessor *GetConCommandBaseAccessor() override; + virtual bool RegisterConCommandBase(ConCommandBase *pCommand) override; + virtual void UnregisterConCommandBase(ConCommandBase *pCommand) override; + virtual bool IsConCommandBaseACommand(ConCommandBase *pCommand) override; + virtual int GetUserMessageCount() override; + virtual int FindUserMessage(const char *name, int *size=NULL) override; + virtual const char *GetUserMessage(int index, int *size=NULL) override; + virtual int DetermineSourceEngine() override; + virtual bool ProcessVDF(const char *file, char path[], size_t path_len, char alias[], size_t alias_len) override; + virtual const char *GetEngineDescription() const override; #if SOURCE_ENGINE == SE_DOTA && defined( _WIN32 ) bool AllowDedicatedServers(EUniverse universe) const; #endif From 3704e2f3c192f8d4e4d2b9272a4b87076fe966b8 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sat, 1 Apr 2023 10:34:52 -0400 Subject: [PATCH 09/39] Add SOURCE_ENGINE_CS2 --- core/ISmmPluginExt.h | 1 + 1 file changed, 1 insertion(+) diff --git a/core/ISmmPluginExt.h b/core/ISmmPluginExt.h index 8fb222c0..968ed665 100644 --- a/core/ISmmPluginExt.h +++ b/core/ISmmPluginExt.h @@ -63,6 +63,7 @@ #define SOURCE_ENGINE_MOCK 25 /**< Mock source engine */ #define SOURCE_ENGINE_PVKII 26 /**< Pirates, Vikings, and Knights II */ #define SOURCE_ENGINE_MCV 27 /**< Military Conflict: Vietnam */ +#define SOURCE_ENGINE_CS2 28 /**< Counter-Strike 2 */ #define METAMOD_PLAPI_VERSION 16 /**< Version of this header file */ #define METAMOD_PLAPI_NAME "ISmmPlugin" /**< Name of the plugin interface */ From e5f5a8ce6f2e80ed91105c3f7f4104749e167a9b Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sat, 1 Apr 2023 15:07:59 -0400 Subject: [PATCH 10/39] Round 1 of base provider split. (Only compilation has been tested) --- core/metamod.cpp | 321 ++------- core/metamod_provider.h | 52 +- core/provider/provider_base.cpp | 738 +-------------------- core/provider/provider_base.h | 62 +- core/provider/source/provider_source.cpp | 619 +++++++++++++++++ core/provider/source/provider_source.h | 65 +- core/provider/source2/provider_source2.cpp | 395 +++++++++++ core/provider/source2/provider_source2.h | 46 +- 8 files changed, 1275 insertions(+), 1023 deletions(-) diff --git a/core/metamod.cpp b/core/metamod.cpp index f8fe0176..f383f0cf 100644 --- a/core/metamod.cpp +++ b/core/metamod.cpp @@ -35,9 +35,6 @@ #include "metamod_console.h" #include "provider/provider_base.h" #include -#if SOURCE_ENGINE == SE_DOTA -#include -#endif #define X64_SUFFIX ".x64" @@ -50,49 +47,11 @@ using namespace SourceHook::Impl; * @file sourcemm.cpp */ -#if SOURCE_ENGINE == SE_DOTA -// Hack to make hook decl compile when only having forward decl in header. -// (we have class structure but it requires protobuf which we don't want to include here) -class GameSessionConfiguration_t { }; - -SH_DECL_MANUALHOOK3_void(SGD_StartupServer, 0, 0, 0, const GameSessionConfiguration_t &, ISource2WorldSession *, const char *); -SH_DECL_MANUALHOOK2_void(SGD_Init, 0, 0, 0, GameSessionConfiguration_t *, const char *); -SH_DECL_MANUALHOOK3(SGD_StartChangeLevel, 0, 0, 0, CUtlVector *, const char *, const char *, void *); -SH_DECL_MANUALHOOK5_void(SGD_SwitchToLoop, 0, 0, 0, const char *, KeyValues *, uint32, const char *, bool); - -static void -Handler_SwitchToLoop(const char *, KeyValues *, uint32, const char *, bool); - -static void -Handler_StartupServer_Post(const GameSessionConfiguration_t &, ISource2WorldSession *, const char *); - -static void -Handler_Init(GameSessionConfiguration_t *, const char *); - -static CUtlVector * -Handler_StartChangeLevel(const char *, const char *, void *); -#else -SH_DECL_MANUALHOOK0(SGD_GameInit, 0, 0, 0, bool); -SH_DECL_MANUALHOOK6(SGD_LevelInit, 0, 0, 0, bool, const char *, const char *, const char *, const char *, bool, bool); -SH_DECL_MANUALHOOK0_void(SGD_LevelShutdown, 0, 0, 0); - static void -Handler_LevelShutdown(); - -static bool -Handler_LevelInit(char const *pMapName, - char const *pMapEntities, - char const *pOldLevel, - char const *pLandmarkName, - bool loadGame, - bool background); - -static bool -Handler_GameInit(); -#endif +InitializeVSP(); static void -InitializeVSP(); +DoInitialPluginLoads(); static int LoadPluginsFromFile(const char *filepath, int &skipped); @@ -170,6 +129,73 @@ SourceMM::ISmmAPI *g_pMetamod = &g_Metamod; } \ } +static class ProviderCallbacks : public IMetamodSourceProviderCallbacks +{ + virtual void OnGameInit() override + { + if (is_game_init) + return; + + provider->DisplayDevMsg("MMS: OnGameInit\n"); + + if (vsp_load_requested) + InitializeVSP(); + + if (g_bIsVspBridged && !were_plugins_loaded) + { + DoInitialPluginLoads(); + g_PluginMngr.SetAllLoaded(); + were_plugins_loaded = true; + } + + is_game_init = true; + } + + virtual void OnLevelInit(char const* pMapName, char const* pMapEntities, char const* pOldLevel, + char const* pLandmarkName, bool loadGame, bool background) override + { + provider->DisplayDevMsg("MMS: LevelInit\n"); + + ITER_EVENT(OnLevelInit, (pMapName, pMapEntities, pOldLevel, pLandmarkName, loadGame, background)); + } + + virtual void OnLevelShutdown() override + { + provider->DisplayDevMsg("MMS: LevelShutdown\n"); + + if (g_bIsVspBridged && !were_plugins_loaded) + { + DoInitialPluginLoads(); + g_PluginMngr.SetAllLoaded(); + were_plugins_loaded = true; + in_first_level = true; + } + + if (!in_first_level) + { + char filepath[PATH_SIZE], vdfpath[PATH_SIZE]; + + g_Metamod.PathFormat(filepath, + sizeof(filepath), + "%s/%s", + mod_path.c_str(), + provider->GetConVarString(mm_pluginsfile)); + g_Metamod.PathFormat(vdfpath, + sizeof(vdfpath), + "%s/%s", + mod_path.c_str(), + provider->GetConVarString(mm_basedir)); + mm_LoadPlugins(filepath, vdfpath); + } + else + { + in_first_level = false; + } + + ITER_EVENT(OnLevelShutdown, ()); + } +} s_ProviderCallbacks; + /* Initialize everything here */ void mm_InitializeForLoad() @@ -184,46 +210,7 @@ mm_InitializeForLoad() */ in_first_level = true; -#if SOURCE_ENGINE == SE_DOTA - SourceHook::MemFuncInfo info; - - if (!provider->GetHookInfo(ProvidedHook_StartupServer, &info)) - { - provider->DisplayError("Metamod:Source could not find a valid hook for INetworkServerService::StartupServer"); - } - SH_MANUALHOOK_RECONFIGURE(SGD_StartupServer, info.vtblindex, info.vtbloffs, info.thisptroffs); - SH_ADD_MANUALHOOK(SGD_StartupServer, netservice, SH_STATIC(Handler_StartupServer_Post), true); - - if (!provider->GetHookInfo(ProvidedHook_SwitchToLoop, &info)) - { - provider->DisplayError("Metamod:Source could not find a valid hook for IEngineServiceMgr::SwitchToLoop"); - } - SH_MANUALHOOK_RECONFIGURE(SGD_SwitchToLoop, info.vtblindex, info.vtbloffs, info.thisptroffs); - SH_ADD_MANUALHOOK(SGD_SwitchToLoop, enginesvcmgr, SH_STATIC(Handler_SwitchToLoop), false); -#else - SourceHook::MemFuncInfo info; - - if (!provider->GetHookInfo(ProvidedHook_GameInit, &info)) - { - provider->DisplayError("Metamod:Source could not find a valid hook for IServerGameDLL::GameInit"); - } - SH_MANUALHOOK_RECONFIGURE(SGD_GameInit, info.vtblindex, info.vtbloffs, info.thisptroffs); - SH_ADD_MANUALHOOK_STATICFUNC(SGD_GameInit, server, Handler_GameInit, false); - - if (!provider->GetHookInfo(ProvidedHook_LevelInit, &info)) - { - provider->DisplayError("Metamod:Source could not find a valid hook for IServerGameDLL::LevelInit"); - } - SH_MANUALHOOK_RECONFIGURE(SGD_LevelInit, info.vtblindex, info.vtbloffs, info.thisptroffs); - SH_ADD_MANUALHOOK_STATICFUNC(SGD_LevelInit, server, Handler_LevelInit, true); - - if (!provider->GetHookInfo(ProvidedHook_LevelShutdown, &info)) - { - provider->DisplayError("Metamod:Source could not find a valid hook for IServerGameDLL::LevelShutdown"); - } - SH_MANUALHOOK_RECONFIGURE(SGD_LevelShutdown, info.vtblindex, info.vtbloffs, info.thisptroffs); - SH_ADD_MANUALHOOK_STATICFUNC(SGD_LevelShutdown, server, Handler_LevelShutdown, true); -#endif + provider->SetCallbacks(&s_ProviderCallbacks); } bool @@ -531,174 +518,6 @@ mm_UnloadMetamod() g_SourceHook.CompleteShutdown(); } -static void -mm_HandleGameInit() -{ - if (is_game_init) - return; - -#if SOURCE_ENGINE == SE_DOTA - DevMsg("MMS: GameInit\n"); -#endif - - if (vsp_load_requested) - InitializeVSP(); - - if (g_bIsVspBridged && !were_plugins_loaded) - { - DoInitialPluginLoads(); - g_PluginMngr.SetAllLoaded(); - were_plugins_loaded = true; - } - - is_game_init = true; -} - -static void -mm_HandleLevelShutdown() -{ -#if SOURCE_ENGINE == SE_DOTA - DevMsg("MMS: LevelShutdown\n"); -#endif - - if (g_bIsVspBridged && !were_plugins_loaded) - { - DoInitialPluginLoads(); - g_PluginMngr.SetAllLoaded(); - were_plugins_loaded = true; - in_first_level = true; - } - - if (!in_first_level) - { - char filepath[PATH_SIZE], vdfpath[PATH_SIZE]; - - g_Metamod.PathFormat(filepath, - sizeof(filepath), - "%s/%s", - mod_path.c_str(), - provider->GetConVarString(mm_pluginsfile)); - g_Metamod.PathFormat(vdfpath, - sizeof(vdfpath), - "%s/%s", - mod_path.c_str(), - provider->GetConVarString(mm_basedir)); - mm_LoadPlugins(filepath, vdfpath); - } - else - { - in_first_level = false; - } - - ITER_EVENT(OnLevelShutdown, ()); -} - -static void -mm_HandleLevelInit(char const *pMapName, -char const *pMapEntities, -char const *pOldLevel, -char const *pLandmarkName, -bool loadGame, -bool background) -{ -#if SOURCE_ENGINE == SE_DOTA - DevMsg("MMS: LevelInit\n"); -#endif - - ITER_EVENT(OnLevelInit, (pMapName, pMapEntities, pOldLevel, pLandmarkName, loadGame, background)); -} -#include -#if SOURCE_ENGINE == SE_DOTA -static void -Handler_SwitchToLoop(const char *pszLoopName, KeyValues *pKV, uint32 nId, const char *pszUnk, bool bUnk) -{ - if (strcmp(pszLoopName, "levelload") == 0) - { - mm_HandleGameInit(); - } - - RETURN_META(MRES_IGNORED); -} - -static void -Handler_StartupServer_Post(const GameSessionConfiguration_t &config, ISource2WorldSession *, const char *) -{ - static bool bGameServerHooked = false; - if (!bGameServerHooked) - { - INetworkGameServer *netserver = (META_IFACEPTR(INetworkServerService))->GetIGameServer(); - - SourceHook::MemFuncInfo info; - if (!provider->GetHookInfo(ProvidedHook_Init, &info)) - { - provider->DisplayError("Metamod:Source could not find a valid hook for INetworkGameServer::Init"); - } - SH_MANUALHOOK_RECONFIGURE(SGD_Init, info.vtblindex, info.vtbloffs, info.thisptroffs); - SH_ADD_MANUALVPHOOK(SGD_Init, netserver, SH_STATIC(Handler_Init), false); - - if (!provider->GetHookInfo(ProvidedHook_StartChangeLevel, &info)) - { - provider->DisplayError("Metamod:Source could not find a valid hook for INetworkGameServer::StartChangeLevel"); - } - SH_MANUALHOOK_RECONFIGURE(SGD_StartChangeLevel, info.vtblindex, info.vtbloffs, info.thisptroffs); - SH_ADD_MANUALVPHOOK(SGD_StartChangeLevel, netserver, SH_STATIC(Handler_StartChangeLevel), false); - - bGameServerHooked = true; - } - - RETURN_META(MRES_IGNORED); -} - -static void -Handler_Init(GameSessionConfiguration_t *pConfig, const char *pszMapName) -{ - static char szLastMap[260] = ""; - mm_HandleLevelInit(pszMapName, "", szLastMap, "", false, false); - UTIL_Format(szLastMap, sizeof(szLastMap), "%s", pszMapName); - - RETURN_META(MRES_IGNORED); -} - -static CUtlVector * -Handler_StartChangeLevel(const char *, const char *, void *) -{ - mm_HandleLevelShutdown(); - - RETURN_META_VALUE(MRES_IGNORED, nullptr); -} - -#else - -static bool -Handler_GameInit() -{ - mm_HandleGameInit(); - - RETURN_META_VALUE(MRES_IGNORED, true); -} - -static void -Handler_LevelShutdown(void) -{ - mm_HandleLevelShutdown(); - - RETURN_META(MRES_IGNORED); -} - -static bool -Handler_LevelInit(char const *pMapName, - char const *pMapEntities, - char const *pOldLevel, - char const *pLandmarkName, - bool loadGame, - bool background) -{ - ITER_EVENT(OnLevelInit, (pMapName, pMapEntities, pOldLevel, pLandmarkName, loadGame, background)); - - RETURN_META_VALUE(MRES_IGNORED, false); -} -#endif - void MetamodSource::LogMsg(ISmmPlugin *pl, const char *msg, ...) { va_list ap; diff --git a/core/metamod_provider.h b/core/metamod_provider.h index 2451625b..30cefc16 100644 --- a/core/metamod_provider.h +++ b/core/metamod_provider.h @@ -49,6 +49,29 @@ namespace SourceMM #endif }; + /** + * @brief Interface for Metamod:Source to provide callbacks to the + * provider. + */ + class IMetamodSourceProviderCallbacks + { + public: + /** + * @brief Called before the server DLL handles game initialization. + */ + virtual void OnGameInit() = 0; + + /** + * @brief Called after the server DLL has completed handling level/map initialization. + */ + virtual void OnLevelInit(char const* pMapName, char const* pMapEntities, char const* pOldLevel, char const* pLandmarkName, bool loadGame, bool background) = 0; + + /** + * @brief Called after the server DLL has completed handling level/map shut down. + */ + virtual void OnLevelShutdown() = 0; + }; + /** * @brief Abstracts command information, since the new engine fixes the * re-entrancy problems in the tokenization system. @@ -83,6 +106,13 @@ namespace SourceMM class IMetamodSourceProvider { public: + /** + * @brief Set the callback interface for the provider to call into. + * + * @param pCallbacks Pointer to callback interface implementation. + */ + virtual void SetCallbacks(IMetamodSourceProviderCallbacks* pCallbacks) = 0; + /** * @brief Returns whether source engine build is compatible. * @@ -91,18 +121,6 @@ namespace SourceMM */ virtual bool IsSourceEngineBuildCompatible(int build) =0; - /** - * @brief Retrieves hook information for each callback. Each hook - * must be implemented. - * - * @param hook Hook information to provide. - * @param pInfo Non-NULL pointer to fill with information - * about the hook's virtual location. - * @return True if supported, false to fail, which - * will cause Metamod:Source to fail. - */ - virtual bool GetHookInfo(ProvidedHooks hook, SourceHook::MemFuncInfo *pInfo) =0; - /** * @brief Logs a message via IVEngineServer::LogPrint. * @@ -167,6 +185,16 @@ namespace SourceMM */ virtual void DisplayWarning(const char *fmt, ...) =0; + /** + * @brief Sends the server a developer message. + * + * No newline is appended. + * + * @param fmt Formatted message string. + * @param ... Format parameters. + */ + virtual void DisplayDevMsg(const char* fmt, ...) = 0; + /** * @brief Attempts to notify the provider of the gamedll version being * used. diff --git a/core/provider/provider_base.cpp b/core/provider/provider_base.cpp index a33bd2cd..1631bee9 100644 --- a/core/provider/provider_base.cpp +++ b/core/provider/provider_base.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 sw=4 tw=99 noet : * ====================================================== * Metamod:Source - * Copyright (C) 2004-2009 AlliedModders LLC and authors. + * Copyright (C) 2004-2023 AlliedModders LLC and authors. * All rights reserved. * ====================================================== * @@ -30,8 +30,6 @@ #include #include #include -#include -#include #include "../metamod_util.h" #include "provider_base.h" #include "console.h" @@ -39,31 +37,7 @@ #include #include "metamod.h" #include -#if SOURCE_ENGINE == SE_DOTA -#include -#endif - -#if SOURCE_ENGINE == SE_DOTA && defined( _WIN32 ) -SH_DECL_HOOK1(ISource2ServerConfig, AllowDedicatedServers, const, 0, bool, EUniverse); -bool BaseProvider::AllowDedicatedServers(EUniverse universe) const -{ - RETURN_META_VALUE(MRES_SUPERCEDE, true); -} -#endif -/* Types */ -typedef void (*CONPRINTF_FUNC)(const char *, ...); -struct UsrMsgInfo -{ - UsrMsgInfo() - { - } - UsrMsgInfo(int s, const char *t) : size(s), name(t) - { - } - int size; - String name; -}; /* Imports */ #if SOURCE_ENGINE < SE_ORANGEBOX @@ -71,239 +45,21 @@ struct UsrMsgInfo DLL_IMPORT ICommandLine *CommandLine(); #endif -/* Functions */ -void CacheUserMessages(); -bool KVLoadFromFile(KeyValues *kv, IBaseFileSystem *filesystem, const char *resourceName, const char *pathID = NULL); -void Detour_Error(const tchar *pMsg, ...); - -#if SOURCE_ENGINE == SE_DOTA -void ClientCommand(CEntityIndex index, const CCommand &args); -#elif SOURCE_ENGINE >= SE_ORANGEBOX -void ClientCommand(edict_t *pEdict, const CCommand &args); -#else -void ClientCommand(edict_t *pEdict); -#endif - -#if SOURCE_ENGINE >= SE_ORANGEBOX -void LocalCommand_Meta(const CCommand &args); -#else -void LocalCommand_Meta(); -#endif - void _ServerCommand(); /* Variables */ -static BaseProvider g_Ep1Provider; static List conbases_unreg; -static CVector usermsgs_list; -static jmp_buf usermsg_end; -static bool g_bOriginalEngine = false; ICvar *icvar = NULL; -IFileSystem *baseFs = NULL; IServerGameDLL *server = NULL; -#if SOURCE_ENGINE == SE_DOTA -static ISource2ServerConfig *serverconfig = NULL; -INetworkServerService *netservice = NULL; -IEngineServiceMgr *enginesvcmgr = NULL; -#endif IVEngineServer *engine = NULL; IServerGameClients *gameclients = NULL; CGlobalVars *gpGlobals = NULL; -ConCommand meta_local_cmd("meta", LocalCommand_Meta, "Metamod:Source control options"); - -#if SOURCE_ENGINE == SE_DOTA -SH_DECL_HOOK2_void(IServerGameClients, ClientCommand, SH_NOATTRIB, 0, CEntityIndex, const CCommand &); -#elif SOURCE_ENGINE >= SE_ORANGEBOX -SH_DECL_HOOK2_void(IServerGameClients, ClientCommand, SH_NOATTRIB, 0, edict_t *, const CCommand &); -#else -SH_DECL_HOOK1_void(IServerGameClients, ClientCommand, SH_NOATTRIB, 0, edict_t *); -#endif - -void BaseProvider::ConsolePrint(const char *str) -{ -#if SOURCE_ENGINE >= SE_ORANGEBOX - ConMsg("%s", str); -#else - Msg("%s", str); -#endif -} - -void BaseProvider::Notify_DLLInit_Pre(CreateInterfaceFn engineFactory, - CreateInterfaceFn serverFactory) -{ -#if SOURCE_ENGINE == SE_SDK2013 - // Shim to avoid hooking shims - engine = (IVEngineServer *)((engineFactory)("VEngineServer023", NULL)); - if (!engine) - { - engine = (IVEngineServer *)((engineFactory)("VEngineServer022", NULL)); - if (!engine) - { - engine = (IVEngineServer *)((engineFactory)("VEngineServer021", NULL)); - } - } -#else - engine = (IVEngineServer *)((engineFactory)(INTERFACEVERSION_VENGINESERVER, NULL)); -#endif - if (!engine) - { - DisplayError("Could not find IVEngineServer! Metamod cannot load."); - return; - } -#if SOURCE_ENGINE == SE_DOTA - gpGlobals = engine->GetServerGlobals(); - serverconfig = (ISource2ServerConfig *) ((serverFactory) (INTERFACEVERSION_SERVERCONFIG, NULL)); - netservice = (INetworkServerService *) ((engineFactory) (NETWORKSERVERSERVICE_INTERFACE_VERSION, NULL)); - enginesvcmgr = (IEngineServiceMgr *) ((engineFactory) (ENGINESERVICEMGR_INTERFACE_VERSION, NULL)); -#endif -#if SOURCE_ENGINE >= SE_ORANGEBOX - icvar = (ICvar *)((engineFactory)(CVAR_INTERFACE_VERSION, NULL)); -#else - icvar = (ICvar *)((engineFactory)(VENGINE_CVAR_INTERFACE_VERSION, NULL)); -#endif - if (!icvar) - { - DisplayError("Could not find ICvar! Metamod cannot load."); - return; - } - -#if SOURCE_ENGINE == SE_DOTA - gameclients = (IServerGameClients *)(serverFactory(INTERFACEVERSION_SERVERGAMECLIENTS, NULL)); -#else - if ((gameclients = (IServerGameClients *)(serverFactory("ServerGameClients003", NULL))) - == NULL) - { - gameclients = (IServerGameClients *)(serverFactory("ServerGameClients004", NULL)); - } -#endif - - baseFs = (IFileSystem *)((engineFactory)(FILESYSTEM_INTERFACE_VERSION, NULL)); - if (baseFs == NULL) - { - mm_LogMessage("Unable to find \"%s\": .vdf files will not be parsed", FILESYSTEM_INTERFACE_VERSION); - } - -#if SOURCE_ENGINE == SE_DOTA && 0 - // Since we have to be added as a Game path (cannot add GameBin directly), we - // automatically get added to other paths as well, including having the MM:S - // dir become the default write path for logs and more. We can fix some of these. - - char searchPath[260]; - baseFs->GetSearchPath("GAME", (GetSearchPathTypes_t)0, searchPath, sizeof(searchPath)); - for (size_t i = 0; i < sizeof(searchPath); ++i) - { - if (searchPath[i] == ';') - { - searchPath[i] = '\0'; - break; - } - } - baseFs->RemoveSearchPath(searchPath, "GAME"); - - // TODO: figure out why these calls get ignored and path remains - //baseFs->RemoveSearchPath(searchPath, "CONTENT"); - //baseFs->RemoveSearchPath(searchPath, "SHADER_SOURCE"); - //baseFs->RemoveSearchPath(searchPath, "SHADER_SOURCE_MOD"); - - baseFs->RemoveSearchPaths("DEFAULT_WRITE_PATH"); - baseFs->GetSearchPath("GAME", (GetSearchPathTypes_t)0, searchPath, sizeof(searchPath)); - for (size_t i = 0; i < sizeof(searchPath); ++i) - { - if (searchPath[i] == ';') - { - searchPath[i] = '\0'; - break; - } - } - baseFs->AddSearchPath(searchPath, "DEFAULT_WRITE_PATH"); -#endif - -#if SOURCE_ENGINE >= SE_ORANGEBOX - g_pCVar = icvar; -#endif - - g_SMConVarAccessor.RegisterConCommandBase(&meta_local_cmd); - -#if SOURCE_ENGINE == SE_EPISODEONE - /* The Ship is the only game known at this time that uses the pre-Episode One engine */ - g_bOriginalEngine = strcmp(CommandLine()->ParmValue("-game", "hl2"), "ship") == 0; -#endif - - CacheUserMessages(); - -#if SOURCE_ENGINE < SE_ORANGEBOX - if (!g_SMConVarAccessor.InitConCommandBaseList()) - { - /* This is very unlikely considering it's old engine */ - mm_LogMessage("[META] Warning: Failed to find ConCommandBase list!"); - mm_LogMessage("[META] Warning: ConVars and ConCommands cannot be unregistered properly! Please file a bug report."); - } -#endif - - if (gameclients) - { - SH_ADD_HOOK_STATICFUNC(IServerGameClients, ClientCommand, gameclients, ClientCommand, false); - } - -#if SOURCE_ENGINE == SE_DOTA && defined( _WIN32 ) - SH_ADD_VPHOOK(ISource2ServerConfig, AllowDedicatedServers, serverconfig, SH_MEMBER(this, &BaseProvider::AllowDedicatedServers), false); -#endif -} - -void BaseProvider::Notify_DLLShutdown_Pre() -{ - g_SMConVarAccessor.RemoveMetamodCommands(); - -#if SOURCE_ENGINE < SE_ORANGEBOX - if (g_Metamod.IsLoadedAsGameDLL()) - { - icvar->UnlinkVariables(FCVAR_GAMEDLL); - } -#endif -} - bool BaseProvider::IsRemotePrintingAvailable() { return true; } -void BaseProvider::ClientConsolePrint(edict_t *pEdict, const char *message) -{ -#if SOURCE_ENGINE == SE_DOTA - int client = (int)(pEdict - gpGlobals->pEdicts); - engine->ClientPrintf(client, message); -#else - engine->ClientPrintf(pEdict, message); -#endif -} - -void BaseProvider::ServerCommand(const char *cmd) -{ - engine->ServerCommand(cmd); -} - -const char *BaseProvider::GetConVarString(ConVar *convar) -{ - if (convar == NULL) - { - return NULL; - } - - return convar->GetString(); -} - -void BaseProvider::SetConVarString(ConVar *convar, const char *str) -{ - convar->SetValue(str); -} - -bool BaseProvider::IsConCommandBaseACommand(ConCommandBase *pCommand) -{ - return pCommand->IsCommand(); -} - - bool BaseProvider::IsSourceEngineBuildCompatible(int build) { return (build == SOURCE_ENGINE_ORIGINAL @@ -352,54 +108,6 @@ bool BaseProvider::LogMessage(const char *buffer) return true; } -bool BaseProvider::GetHookInfo(ProvidedHooks hook, SourceHook::MemFuncInfo *pInfo) -{ -#if SOURCE_ENGINE == SE_DOTA - SourceHook::MemFuncInfo mfi = {true, -1, 0, 0}; - - switch (hook) - { - case ProvidedHook_StartupServer: - SourceHook::GetFuncInfo(&INetworkServerService::StartupServer, mfi); - break; - case ProvidedHook_StartChangeLevel: - SourceHook::GetFuncInfo(&INetworkGameServer::StartChangeLevel, mfi); - break; - case ProvidedHook_Init: - SourceHook::GetFuncInfo(&INetworkGameServer::Init, mfi); - break; - case ProvidedHook_SwitchToLoop: - SourceHook::GetFuncInfo(&IEngineServiceMgr::SwitchToLoop, mfi); - break; - default: - return false; - } - - *pInfo = mfi; - - return (mfi.thisptroffs >= 0); -#else - SourceHook::MemFuncInfo mfi = {true, -1, 0, 0}; - - if (hook == ProvidedHook_LevelInit) - { - SourceHook::GetFuncInfo(&IServerGameDLL::LevelInit, mfi); - } - else if (hook == ProvidedHook_LevelShutdown) - { - SourceHook::GetFuncInfo(&IServerGameDLL::LevelShutdown, mfi); - } - else if (hook == ProvidedHook_GameInit) - { - SourceHook::GetFuncInfo(&IServerGameDLL::GameInit, mfi); - } - - *pInfo = mfi; - - return (mfi.thisptroffs >= 0); -#endif -} - void BaseProvider::DisplayError(const char *fmt, ...) { va_list ap; @@ -424,444 +132,14 @@ void BaseProvider::DisplayWarning(const char *fmt, ...) Warning("%s", buffer); } -IConCommandBaseAccessor *BaseProvider::GetConCommandBaseAccessor() +void BaseProvider::DisplayDevMsg(const char* fmt, ...) { - return &g_SMConVarAccessor; -} - -bool BaseProvider::RegisterConCommandBase(ConCommandBase *pCommand) -{ - return g_SMConVarAccessor.Register(pCommand); -} - -void BaseProvider::UnregisterConCommandBase(ConCommandBase *pCommand) -{ - return g_SMConVarAccessor.Unregister(pCommand); -} - -int BaseProvider::GetUserMessageCount() -{ -#if SOURCE_ENGINE == SE_CSGO || SOURCE_ENGINE == SE_DOTA || SOURCE_ENGINE == SE_BLADE || SOURCE_ENGINE == SE_MCV - return -1; -#else - return (int)usermsgs_list.size(); -#endif -} - -int BaseProvider::FindUserMessage(const char *name, int *size) -{ - for (size_t i = 0; i < usermsgs_list.size(); i++) - { - if (usermsgs_list[i].name.compare(name) == 0) - { - if (size) - { - *size = usermsgs_list[i].size; - } - return (int)i; - } - } - - return -1; -} - -const char *BaseProvider::GetUserMessage(int index, int *size) -{ - if (index < 0 || index >= (int)usermsgs_list.size()) - { - return NULL; - } - - if (size) - { - *size = usermsgs_list[index].size; - } - - return usermsgs_list[index].name.c_str(); -} - -void BaseProvider::GetGamePath(char *pszBuffer, int len) -{ - engine->GetGameDir(pszBuffer, len); -} - -const char *BaseProvider::GetGameDescription() -{ -#if SOURCE_ENGINE == SE_DOTA - return serverconfig->GetGameDescription(); -#else - return server->GetGameDescription(); -#endif -} - -int BaseProvider::DetermineSourceEngine() -{ -#if SOURCE_ENGINE == SE_BLOODYGOODTIME - return SOURCE_ENGINE_BLOODYGOODTIME; -#elif SOURCE_ENGINE == SE_ALIENSWARM - return SOURCE_ENGINE_ALIENSWARM; -#elif SOURCE_ENGINE == SE_LEFT4DEAD2 - return SOURCE_ENGINE_LEFT4DEAD2; -#elif SOURCE_ENGINE == SE_NUCLEARDAWN - return SOURCE_ENGINE_NUCLEARDAWN; -#elif SOURCE_ENGINE == SE_CONTAGION - return SOURCE_ENGINE_CONTAGION; -#elif SOURCE_ENGINE == SE_LEFT4DEAD - return SOURCE_ENGINE_LEFT4DEAD; -#elif SOURCE_ENGINE == SE_ORANGEBOX - return SOURCE_ENGINE_ORANGEBOX; -#elif SOURCE_ENGINE == SE_CSS - return SOURCE_ENGINE_CSS; -#elif SOURCE_ENGINE == SE_HL2DM - return SOURCE_ENGINE_HL2DM; -#elif SOURCE_ENGINE == SE_DODS - return SOURCE_ENGINE_DODS; -#elif SOURCE_ENGINE == SE_SDK2013 - return SOURCE_ENGINE_SDK2013; -#elif SOURCE_ENGINE == SE_TF2 - return SOURCE_ENGINE_TF2; -#elif SOURCE_ENGINE == SE_DARKMESSIAH - return SOURCE_ENGINE_DARKMESSIAH; -#elif SOURCE_ENGINE == SE_EYE - return SOURCE_ENGINE_EYE; -#elif SOURCE_ENGINE == SE_PORTAL2 - return SOURCE_ENGINE_PORTAL2; -#elif SOURCE_ENGINE == SE_BLADE - return SOURCE_ENGINE_BLADE; -#elif SOURCE_ENGINE == SE_INSURGENCY - return SOURCE_ENGINE_INSURGENCY; -#elif SOURCE_ENGINE == SE_DOI - return SOURCE_ENGINE_DOI; -#elif SOURCE_ENGINE == SE_CSGO - return SOURCE_ENGINE_CSGO; -#elif SOURCE_ENGINE == SE_DOTA - return SOURCE_ENGINE_DOTA; -#elif SOURCE_ENGINE == SE_BMS - return SOURCE_ENGINE_BMS; -#elif SOURCE_ENGINE == SE_EPISODEONE - return g_bOriginalEngine ? SOURCE_ENGINE_ORIGINAL : SOURCE_ENGINE_EPISODEONE; -#elif SOURCE_ENGINE == SE_MOCK - return SOURCE_ENGINE_MOCK; -#elif SOURCE_ENGINE == SE_PVKII - return SOURCE_ENGINE_PVKII; -#elif SOURCE_ENGINE == SE_MCV - return SOURCE_ENGINE_MCV; -#else -#error "SOURCE_ENGINE not defined to a known value" -#endif -} - -ConVar *BaseProvider::CreateConVar(const char *name, - const char *defval, - const char *help, - int flags) -{ - int newflags = 0; - if (flags & ConVarFlag_Notify) - { - newflags |= FCVAR_NOTIFY; - } - if (flags & ConVarFlag_SpOnly) - { - newflags |= FCVAR_SPONLY; - } - - ConVar *pVar = new ConVar(name, defval, newflags, help); - - g_SMConVarAccessor.RegisterConCommandBase(pVar); - - return pVar; -} - -bool BaseProvider::ProcessVDF(const char *file, char path[], size_t path_len, char alias[], size_t alias_len) -{ - if (baseFs == NULL) - { - return false; - } - - KeyValues *pValues; - bool bKVLoaded = false; - const char *plugin_file, *p_alias; - - pValues = new KeyValues("Metamod Plugin"); - - if (g_bOriginalEngine) - { - /* The Ship must use a special version of this function */ - bKVLoaded = KVLoadFromFile(pValues, baseFs, file); - } - else - { - bKVLoaded = pValues->LoadFromFile(baseFs, file); - } - - if (!bKVLoaded) - { - pValues->deleteThis(); - return false; - } - - if ((plugin_file = pValues->GetString("file", NULL)) == NULL) - { - pValues->deleteThis(); - return false; - } - - UTIL_Format(path, path_len, "%s", plugin_file); - - if ((p_alias = pValues->GetString("alias", NULL)) != NULL) - { - UTIL_Format(alias, alias_len, "%s", p_alias); - } - else - { - UTIL_Format(alias, alias_len, ""); - } - - pValues->deleteThis(); - - return true; -} - -const char *BaseProvider::GetEngineDescription() const -{ -#if SOURCE_ENGINE == SE_BLOODYGOODTIME - return "Bloody Good Time (2010)"; -#elif SOURCE_ENGINE == SE_ALIENSWARM - return "Alien Swarm (2010)"; -#elif SOURCE_ENGINE == SE_LEFT4DEAD2 - return "Left 4 Dead 2 (2009)"; -#elif SOURCE_ENGINE == SE_NUCLEARDAWN - return "Nuclear Dawn (2011)"; -#elif SOURCE_ENGINE == SE_CONTAGION - return "Contagion (2013)"; -#elif SOURCE_ENGINE == SE_LEFT4DEAD - return "Left 4 Dead (2008)"; -#elif SOURCE_ENGINE == SE_ORANGEBOX - return "Episode 2 (Orange Box, 2007)"; -#elif SOURCE_ENGINE == SE_CSS - return "Counter-Strike: Source (Valve Orange Box)"; -#elif SOURCE_ENGINE == SE_HL2DM - return "Half-Life 2 Deathmatch (Valve Orange Box)"; -#elif SOURCE_ENGINE == SE_DODS - return "Day of Defeat: Source (Valve Orange Box)"; -#elif SOURCE_ENGINE == SE_SDK2013 - return "Source SDK 2013 (2013)"; -#elif SOURCE_ENGINE == SE_BMS - return "Black Mesa (2015)"; -#elif SOURCE_ENGINE == SE_TF2 - return "Team Fortress 2 (Valve Orange Box)"; -#elif SOURCE_ENGINE == SE_DARKMESSIAH - return "Dark Messiah (2006)"; -#elif SOURCE_ENGINE == SE_EYE - return "E.Y.E. Divine Cybermancy (2011)"; -#elif SOURCE_ENGINE == SE_PORTAL2 - return "Portal 2 (2011)"; -#elif SOURCE_ENGINE == SE_BLADE - return "Blade Symphony (2013)"; -#elif SOURCE_ENGINE == SE_INSURGENCY - return "Insurgency (2013)"; -#elif SOURCE_ENGINE == SE_DOI - return "Day of Infamy (2016)"; -#elif SOURCE_ENGINE == SE_CSGO - return "Counter-Strike: Global Offensive (2012)"; -#elif SOURCE_ENGINE == SE_DOTA - return "Dota 2 (2013)"; -#elif SOURCE_ENGINE == SE_EPISODEONE - if (g_bOriginalEngine) - { - return "Original (pre-Episode 1)"; - } - else - { - return "Episode 1 (2004)"; - } -#elif SOURCE_ENGINE == SE_MOCK - return "Mock"; -#elif SOURCE_ENGINE == SE_PVKII - return "Pirates, Vikings, and Knights II"; -#elif SOURCE_ENGINE == SE_MCV - return "Military Combat: Vietnam"; -#else -#error "SOURCE_ENGINE not defined to a known value" -#endif -} - -#if SOURCE_ENGINE >= SE_ORANGEBOX -class GlobCommand : public IMetamodSourceCommandInfo -{ -public: - GlobCommand(const CCommand *cmd) : m_cmd(cmd) - { - } -public: - unsigned int GetArgCount() - { - return m_cmd->ArgC() - 1; - } - - const char *GetArg(unsigned int num) - { - return m_cmd->Arg(num); - } - - const char *GetArgString() - { - return m_cmd->ArgS(); - } -private: - const CCommand *m_cmd; -}; -#else -class GlobCommand : public IMetamodSourceCommandInfo -{ -public: - unsigned int GetArgCount() - { - return engine->Cmd_Argc() - 1; - } - - const char *GetArg(unsigned int num) - { - return engine->Cmd_Argv(num); - } - - const char *GetArgString() - { - return engine->Cmd_Args(); - } -}; -#endif - -#if SOURCE_ENGINE >= SE_ORANGEBOX -void LocalCommand_Meta(const CCommand &args) -{ - GlobCommand cmd(&args); -#else -void LocalCommand_Meta() -{ - GlobCommand cmd; -#endif - Command_Meta(&cmd); -} - -#if SOURCE_ENGINE == SE_DOTA -void ClientCommand(CEntityIndex index, const CCommand &_cmd) -{ - int client = index.Get(); - GlobCommand cmd(&_cmd); -#elif SOURCE_ENGINE >= SE_ORANGEBOX -void ClientCommand(edict_t *client, const CCommand &_cmd) -{ - GlobCommand cmd(&_cmd); -#else -void ClientCommand(edict_t *client) -{ - GlobCommand cmd; -#endif - if (strcmp(cmd.GetArg(0), "meta") == 0) - { - Command_ClientMeta(client, &cmd); - RETURN_META(MRES_SUPERCEDE); - } - - RETURN_META(MRES_IGNORED); -} - -#if SOURCE_ENGINE == SE_CSGO || SOURCE_ENGINE == SE_DOTA || SOURCE_ENGINE == SE_BLADE || SOURCE_ENGINE == SE_MCV - -void CacheUserMessages() -{ -} - -#else - -/* This only gets called if IServerGameDLL::GetUserMessageInfo() triggers it */ -void Detour_Error(const tchar *pMsg, ...) -{ - /* Jump back to setjmp() in CacheUserMessages() */ - longjmp(usermsg_end, 1); -} - -#define IA32_JMP_IMM32 0xE9 - -/* IServerGameDLL::GetUserMessageInfo() crashes on games based on the old engine and - * early Orange Box. This is because Error() from tier0 gets called when a bad index is - * passed. This is all due to a bug in CUtlRBTree::IsValidIndex(). - * - * So we detour Error() to fix this. Our detour then jumps back into CacheUserMessages() - * to a point before GetUserMessageInfo() is called. The detour is then removed and we - * exit. - */ -void CacheUserMessages() -{ - int q, size; - char buffer[256]; - unsigned char *target, *detour; - unsigned char orig_bytes[5]; - - target = (unsigned char *)&Error; - detour = (unsigned char *)&Detour_Error; - - /* Save bytes from target function */ - memcpy(orig_bytes, target, sizeof(orig_bytes)); - - /* Patch in relative jump to our Error() detour */ - SetMemAccess(target, sizeof(orig_bytes), SH_MEM_READ|SH_MEM_WRITE|SH_MEM_EXEC); - target[0] = IA32_JMP_IMM32; - *(int32_t *)&target[1] = (int32_t)(detour - (target + 5)); - - /* This is where longjmp() will end up */ - if (setjmp(usermsg_end)) - { - /* Restore bytes and memory protection */ - memcpy(target, orig_bytes, sizeof(orig_bytes)); - SetMemAccess(target, sizeof(orig_bytes), SH_MEM_READ|SH_MEM_EXEC); - return; - } - - q = 0; - - /* If GetUserMessageInfo() calls Error(), we should end up in our detour */ - while (server->GetUserMessageInfo(q, buffer, sizeof(buffer), size)) - { - usermsgs_list.push_back(UsrMsgInfo(size, buffer)); - q++; - } - - /* Jump back to setjmp() */ - longjmp(usermsg_end, 1); -} - -#endif - -bool KVLoadFromFile(KeyValues *kv, IBaseFileSystem *filesystem, const char *resourceName, const char *pathID) -{ - Assert(filesystem); -#ifdef _MSC_VER - Assert(_heapchk() == _HEAPOK); -#endif - - FileHandle_t f = filesystem->Open(resourceName, "rb", pathID); - if (!f) - return false; - - // load file into a null-terminated buffer - int fileSize = filesystem->Size(f); - char *buffer = (char *)MemAllocScratch(fileSize + 1); - - Assert(buffer); - - filesystem->Read(buffer, fileSize, f); // read into local buffer - - buffer[fileSize] = 0; // null terminate file as EOF - - filesystem->Close( f ); // close file after reading - - bool retOK = kv->LoadFromBuffer( resourceName, buffer, filesystem ); + va_list ap; + char buffer[2048]; - MemFreeScratch(); + va_start(ap, fmt); + UTIL_FormatArgs(buffer, sizeof(buffer), fmt, ap); + va_end(ap); - return retOK; + DevMsg("%s", buffer); } diff --git a/core/provider/provider_base.h b/core/provider/provider_base.h index d888c939..c57c8f9f 100644 --- a/core/provider/provider_base.h +++ b/core/provider/provider_base.h @@ -50,41 +50,47 @@ class INetworkGameServer; class BaseProvider : public IMetamodSourceProvider { -public: +public: // Must implement + virtual void Notify_DLLInit_Pre(CreateInterfaceFn engineFactory, CreateInterfaceFn serverFactory) override = 0; + virtual void Notify_DLLShutdown_Pre() override = 0; + virtual int DetermineSourceEngine() override = 0; + virtual const char *GetEngineDescription() const override = 0; + virtual void GetGamePath(char *pszBuffer, int len) override = 0; + virtual const char *GetGameDescription() override = 0; + virtual bool ProcessVDF(const char* file, char path[], size_t path_len, char alias[], size_t alias_len) override = 0; + virtual void ConsolePrint(const char* msg) override = 0; + virtual void ClientConsolePrint(edict_t* client, const char* msg) override = 0; + virtual void ServerCommand(const char* cmd) override = 0; + virtual ConVar* CreateConVar(const char* name, + const char* defval, + const char* help, + int flags) override = 0; + virtual const char* GetConVarString(ConVar* convar) override = 0; + virtual void SetConVarString(ConVar* convar, const char* str) override = 0; + virtual IConCommandBaseAccessor* GetConCommandBaseAccessor() override = 0; + virtual bool RegisterConCommandBase(ConCommandBase* pCommand) override = 0; + virtual void UnregisterConCommandBase(ConCommandBase* pCommand) override = 0; + virtual bool IsConCommandBaseACommand(ConCommandBase* pCommand) override = 0; +public: // May implement/override (stubbed) + virtual int GetUserMessageCount() override { return -1; } + virtual int FindUserMessage(const char *name, int *size=nullptr) override { return -1;} + virtual const char *GetUserMessage(int index, int *size=nullptr) override { return nullptr;} +public: // May implement/override virtual bool IsSourceEngineBuildCompatible(int build) override; - virtual bool GetHookInfo(ProvidedHooks hook, SourceHook::MemFuncInfo *pInfo) override; virtual bool LogMessage(const char *buffer) override; virtual const char *GetCommandLineValue(const char *key, const char *defval) override; - virtual void ConsolePrint(const char *msg) override; virtual bool IsRemotePrintingAvailable() override; - virtual void ClientConsolePrint(edict_t *client, const char *msg) override; virtual void DisplayError(const char *fmt, ...) override; virtual void DisplayWarning(const char *fmt, ...) override; + virtual void DisplayDevMsg(const char* fmt, ...) override; virtual int TryServerGameDLL(const char *iface) override; - virtual void Notify_DLLInit_Pre(CreateInterfaceFn engineFactory, CreateInterfaceFn serverFactory) override; - void Notify_DLLShutdown_Pre() override; - virtual void ServerCommand(const char *cmd) override; - virtual ConVar *CreateConVar(const char *name, - const char *defval, - const char *help, - int flags) override; - virtual const char *GetConVarString(ConVar *convar) override; - virtual void SetConVarString(ConVar *convar, const char *str) override; - virtual void GetGamePath(char *pszBuffer, int len) override; - virtual const char *GetGameDescription() override; - virtual IConCommandBaseAccessor *GetConCommandBaseAccessor() override; - virtual bool RegisterConCommandBase(ConCommandBase *pCommand) override; - virtual void UnregisterConCommandBase(ConCommandBase *pCommand) override; - virtual bool IsConCommandBaseACommand(ConCommandBase *pCommand) override; - virtual int GetUserMessageCount() override; - virtual int FindUserMessage(const char *name, int *size=NULL) override; - virtual const char *GetUserMessage(int index, int *size=NULL) override; - virtual int DetermineSourceEngine() override; - virtual bool ProcessVDF(const char *file, char path[], size_t path_len, char alias[], size_t alias_len) override; - virtual const char *GetEngineDescription() const override; -#if SOURCE_ENGINE == SE_DOTA && defined( _WIN32 ) - bool AllowDedicatedServers(EUniverse universe) const; -#endif +public: + void SetCallbacks(IMetamodSourceProviderCallbacks* pCallbacks) override final + { + m_pCallbacks = pCallbacks; + } +protected: + IMetamodSourceProviderCallbacks* m_pCallbacks = nullptr; }; extern IVEngineServer *engine; diff --git a/core/provider/source/provider_source.cpp b/core/provider/source/provider_source.cpp index 8a2d0db7..a376caaa 100644 --- a/core/provider/source/provider_source.cpp +++ b/core/provider/source/provider_source.cpp @@ -24,6 +24,625 @@ */ #include "provider_source.h" +#include "../console.h" +#include +#include +#include +#include +#include + +#if SOURCE_ENGINE >= SE_ORANGEBOX +void LocalCommand_Meta(const CCommand& args); +#else +void LocalCommand_Meta(); +#endif + +ConCommand meta_local_cmd("meta", LocalCommand_Meta, "Metamod:Source control options"); + +SH_DECL_HOOK0(IServerGameDLL, GameInit, SH_NOATTRIB, 0, bool); +SH_DECL_HOOK6(IServerGameDLL, LevelInit, SH_NOATTRIB, 0, bool, const char*, const char*, const char*, const char*, bool, bool); +SH_DECL_HOOK0_void(IServerGameDLL, LevelShutdown, SH_NOATTRIB, 0); + +#if SOURCE_ENGINE >= SE_ORANGEBOX +SH_DECL_HOOK2_void(IServerGameClients, ClientCommand, SH_NOATTRIB, 0, edict_t*, const CCommand&); +#else +SH_DECL_HOOK1_void(IServerGameClients, ClientCommand, SH_NOATTRIB, 0, edict_t*); +#endif + +void SourceProvider::Notify_DLLInit_Pre(CreateInterfaceFn engineFactory, + CreateInterfaceFn serverFactory) +{ +#if SOURCE_ENGINE == SE_SDK2013 + // Shim to avoid hooking shims + engine = (IVEngineServer*)((engineFactory)("VEngineServer023", NULL)); + if (!engine) + { + engine = (IVEngineServer*)((engineFactory)("VEngineServer022", NULL)); + if (!engine) + { + engine = (IVEngineServer*)((engineFactory)("VEngineServer021", NULL)); + } + } +#else + engine = (IVEngineServer*)((engineFactory)(INTERFACEVERSION_VENGINESERVER, NULL)); +#endif + if (!engine) + { + DisplayError("Could not find IVEngineServer! Metamod cannot load."); + return; + } + +#if SOURCE_ENGINE >= SE_ORANGEBOX + icvar = (ICvar*)((engineFactory)(CVAR_INTERFACE_VERSION, NULL)); +#else + icvar = (ICvar*)((engineFactory)(VENGINE_CVAR_INTERFACE_VERSION, NULL)); +#endif + if (!icvar) + { + DisplayError("Could not find ICvar! Metamod cannot load."); + return; + } + + if ((gameclients = (IServerGameClients*)(serverFactory("ServerGameClients003", NULL))) + == NULL) + { + gameclients = (IServerGameClients*)(serverFactory("ServerGameClients004", NULL)); + } + + baseFs = (IFileSystem*)((engineFactory)(FILESYSTEM_INTERFACE_VERSION, NULL)); + if (baseFs == NULL) + { + mm_LogMessage("Unable to find \"%s\": .vdf files will not be parsed", FILESYSTEM_INTERFACE_VERSION); + } + +#if SOURCE_ENGINE >= SE_ORANGEBOX + g_pCVar = icvar; +#endif + + g_SMConVarAccessor.RegisterConCommandBase(&meta_local_cmd); + +#if SOURCE_ENGINE == SE_EPISODEONE + /* The Ship is the only game known at this time that uses the pre-Episode One engine */ + bOriginalEngine = strcmp(CommandLine()->ParmValue("-game", "hl2"), "ship") == 0; +#endif + + CacheUserMessages(); + +#if SOURCE_ENGINE < SE_ORANGEBOX + if (!g_SMConVarAccessor.InitConCommandBaseList()) + { + /* This is very unlikely considering it's old engine */ + mm_LogMessage("[META] Warning: Failed to find ConCommandBase list!"); + mm_LogMessage("[META] Warning: ConVars and ConCommands cannot be unregistered properly! Please file a bug report."); + } +#endif + + if (gameclients) + { + SH_ADD_HOOK(IServerGameClients, ClientCommand, gameclients, SH_MEMBER(this, &SourceProvider::Hook_ClientCommand), false); + } + + SH_ADD_HOOK(IServerGameDLL, GameInit, server, SH_MEMBER(this, &SourceProvider::Hook_GameInit), false); + SH_ADD_HOOK(IServerGameDLL, LevelInit, server, SH_MEMBER(this, &SourceProvider::Hook_LevelInit), true); + SH_ADD_HOOK(IServerGameDLL, LevelShutdown, server, SH_MEMBER(this, &SourceProvider::Hook_LevelShutdown), true); +} + +void SourceProvider::Notify_DLLShutdown_Pre() +{ + SH_REMOVE_HOOK(IServerGameDLL, GameInit, server, SH_MEMBER(this, &SourceProvider::Hook_GameInit), false); + SH_REMOVE_HOOK(IServerGameDLL, LevelInit, server, SH_MEMBER(this, &SourceProvider::Hook_LevelInit), true); + SH_REMOVE_HOOK(IServerGameDLL, LevelShutdown, server, SH_MEMBER(this, &SourceProvider::Hook_LevelShutdown), true); + + g_SMConVarAccessor.RemoveMetamodCommands(); + +#if SOURCE_ENGINE < SE_ORANGEBOX + if (g_Metamod.IsLoadedAsGameDLL()) + { + icvar->UnlinkVariables(FCVAR_GAMEDLL); + } +#endif +} + +bool SourceProvider::ProcessVDF(const char* file, char path[], size_t path_len, char alias[], size_t alias_len) +{ + if (baseFs == NULL) + { + return false; + } + + KeyValues* pValues; + bool bKVLoaded = false; + const char* plugin_file, * p_alias; + + pValues = new KeyValues("Metamod Plugin"); + + if (bOriginalEngine) + { + /* The Ship must use a special version of this function */ + bKVLoaded = KVLoadFromFile(pValues, baseFs, file); + } + else + { + bKVLoaded = pValues->LoadFromFile(baseFs, file); + } + + if (!bKVLoaded) + { + pValues->deleteThis(); + return false; + } + + if ((plugin_file = pValues->GetString("file", NULL)) == NULL) + { + pValues->deleteThis(); + return false; + } + + UTIL_Format(path, path_len, "%s", plugin_file); + + if ((p_alias = pValues->GetString("alias", NULL)) != NULL) + { + UTIL_Format(alias, alias_len, "%s", p_alias); + } + else + { + UTIL_Format(alias, alias_len, ""); + } + + pValues->deleteThis(); + + return true; +} + +int SourceProvider::DetermineSourceEngine() +{ +#if SOURCE_ENGINE == SE_BLOODYGOODTIME + return SOURCE_ENGINE_BLOODYGOODTIME; +#elif SOURCE_ENGINE == SE_ALIENSWARM + return SOURCE_ENGINE_ALIENSWARM; +#elif SOURCE_ENGINE == SE_LEFT4DEAD2 + return SOURCE_ENGINE_LEFT4DEAD2; +#elif SOURCE_ENGINE == SE_NUCLEARDAWN + return SOURCE_ENGINE_NUCLEARDAWN; +#elif SOURCE_ENGINE == SE_CONTAGION + return SOURCE_ENGINE_CONTAGION; +#elif SOURCE_ENGINE == SE_LEFT4DEAD + return SOURCE_ENGINE_LEFT4DEAD; +#elif SOURCE_ENGINE == SE_ORANGEBOX + return SOURCE_ENGINE_ORANGEBOX; +#elif SOURCE_ENGINE == SE_CSS + return SOURCE_ENGINE_CSS; +#elif SOURCE_ENGINE == SE_HL2DM + return SOURCE_ENGINE_HL2DM; +#elif SOURCE_ENGINE == SE_DODS + return SOURCE_ENGINE_DODS; +#elif SOURCE_ENGINE == SE_SDK2013 + return SOURCE_ENGINE_SDK2013; +#elif SOURCE_ENGINE == SE_TF2 + return SOURCE_ENGINE_TF2; +#elif SOURCE_ENGINE == SE_DARKMESSIAH + return SOURCE_ENGINE_DARKMESSIAH; +#elif SOURCE_ENGINE == SE_EYE + return SOURCE_ENGINE_EYE; +#elif SOURCE_ENGINE == SE_PORTAL2 + return SOURCE_ENGINE_PORTAL2; +#elif SOURCE_ENGINE == SE_BLADE + return SOURCE_ENGINE_BLADE; +#elif SOURCE_ENGINE == SE_INSURGENCY + return SOURCE_ENGINE_INSURGENCY; +#elif SOURCE_ENGINE == SE_DOI + return SOURCE_ENGINE_DOI; +#elif SOURCE_ENGINE == SE_CSGO + return SOURCE_ENGINE_CSGO; +#elif SOURCE_ENGINE == SE_BMS + return SOURCE_ENGINE_BMS; +#elif SOURCE_ENGINE == SE_EPISODEONE + return g_bOriginalEngine ? SOURCE_ENGINE_ORIGINAL : SOURCE_ENGINE_EPISODEONE; +#elif SOURCE_ENGINE == SE_MOCK + return SOURCE_ENGINE_MOCK; +#elif SOURCE_ENGINE == SE_PVKII + return SOURCE_ENGINE_PVKII; +#elif SOURCE_ENGINE == SE_MCV + return SOURCE_ENGINE_MCV; +#else +#error "SOURCE_ENGINE not defined to a known value" +#endif +} + +const char* SourceProvider::GetEngineDescription() const +{ +#if SOURCE_ENGINE == SE_BLOODYGOODTIME + return "Bloody Good Time (2010)"; +#elif SOURCE_ENGINE == SE_ALIENSWARM + return "Alien Swarm (2010)"; +#elif SOURCE_ENGINE == SE_LEFT4DEAD2 + return "Left 4 Dead 2 (2009)"; +#elif SOURCE_ENGINE == SE_NUCLEARDAWN + return "Nuclear Dawn (2011)"; +#elif SOURCE_ENGINE == SE_CONTAGION + return "Contagion (2013)"; +#elif SOURCE_ENGINE == SE_LEFT4DEAD + return "Left 4 Dead (2008)"; +#elif SOURCE_ENGINE == SE_ORANGEBOX + return "Episode 2 (Orange Box, 2007)"; +#elif SOURCE_ENGINE == SE_CSS + return "Counter-Strike: Source (Valve Orange Box)"; +#elif SOURCE_ENGINE == SE_HL2DM + return "Half-Life 2 Deathmatch (Valve Orange Box)"; +#elif SOURCE_ENGINE == SE_DODS + return "Day of Defeat: Source (Valve Orange Box)"; +#elif SOURCE_ENGINE == SE_SDK2013 + return "Source SDK 2013 (2013)"; +#elif SOURCE_ENGINE == SE_BMS + return "Black Mesa (2015)"; +#elif SOURCE_ENGINE == SE_TF2 + return "Team Fortress 2 (Valve Orange Box)"; +#elif SOURCE_ENGINE == SE_DARKMESSIAH + return "Dark Messiah (2006)"; +#elif SOURCE_ENGINE == SE_EYE + return "E.Y.E. Divine Cybermancy (2011)"; +#elif SOURCE_ENGINE == SE_PORTAL2 + return "Portal 2 (2011)"; +#elif SOURCE_ENGINE == SE_BLADE + return "Blade Symphony (2013)"; +#elif SOURCE_ENGINE == SE_INSURGENCY + return "Insurgency (2013)"; +#elif SOURCE_ENGINE == SE_DOI + return "Day of Infamy (2016)"; +#elif SOURCE_ENGINE == SE_CSGO + return "Counter-Strike: Global Offensive (2012)"; +#elif SOURCE_ENGINE == SE_EPISODEONE + if (g_bOriginalEngine) + { + return "Original (pre-Episode 1)"; + } + else + { + return "Episode 1 (2004)"; + } +#elif SOURCE_ENGINE == SE_MOCK + return "Mock"; +#elif SOURCE_ENGINE == SE_PVKII + return "Pirates, Vikings, and Knights II"; +#elif SOURCE_ENGINE == SE_MCV + return "Military Combat: Vietnam"; +#else +#error "SOURCE_ENGINE not defined to a known value" +#endif +} + +void SourceProvider::GetGamePath(char* pszBuffer, int len) +{ + engine->GetGameDir(pszBuffer, len); +} + +const char* SourceProvider::GetGameDescription() +{ + return server->GetGameDescription(); +} + +void SourceProvider::ConsolePrint(const char* str) +{ +#if SOURCE_ENGINE >= SE_ORANGEBOX + ConMsg("%s", str); +#else + Msg("%s", str); +#endif +} + +void SourceProvider::ClientConsolePrint(edict_t* pEdict, const char* message) +{ + engine->ClientPrintf(pEdict, message); +} + +void SourceProvider::ServerCommand(const char* cmd) +{ + engine->ServerCommand(cmd); +} + +const char* SourceProvider::GetConVarString(ConVar* convar) +{ + if (convar == NULL) + { + return NULL; + } + + return convar->GetString(); +} + +void SourceProvider::SetConVarString(ConVar* convar, const char* str) +{ + convar->SetValue(str); +} + +bool SourceProvider::IsConCommandBaseACommand(ConCommandBase* pCommand) +{ + return pCommand->IsCommand(); +} + +IConCommandBaseAccessor* SourceProvider::GetConCommandBaseAccessor() +{ + return &g_SMConVarAccessor; +} + +bool SourceProvider::RegisterConCommandBase(ConCommandBase* pCommand) +{ + return g_SMConVarAccessor.Register(pCommand); +} + +void SourceProvider::UnregisterConCommandBase(ConCommandBase* pCommand) +{ + return g_SMConVarAccessor.Unregister(pCommand); +} + +ConVar* SourceProvider::CreateConVar(const char* name, + const char* defval, + const char* help, + int flags) +{ + int newflags = 0; + if (flags & ConVarFlag_Notify) + { + newflags |= FCVAR_NOTIFY; + } + if (flags & ConVarFlag_SpOnly) + { + newflags |= FCVAR_SPONLY; + } + + ConVar* pVar = new ConVar(name, defval, newflags, help); + + g_SMConVarAccessor.RegisterConCommandBase(pVar); + + return pVar; +} + +#if SOURCE_ENGINE >= SE_ORANGEBOX +class GlobCommand : public IMetamodSourceCommandInfo +{ +public: + GlobCommand(const CCommand* cmd) : m_cmd(cmd) + { + } +public: + unsigned int GetArgCount() + { + return m_cmd->ArgC() - 1; + } + + const char* GetArg(unsigned int num) + { + return m_cmd->Arg(num); + } + + const char* GetArgString() + { + return m_cmd->ArgS(); + } +private: + const CCommand* m_cmd; +}; +#else +class GlobCommand : public IMetamodSourceCommandInfo +{ +public: + unsigned int GetArgCount() + { + return engine->Cmd_Argc() - 1; + } + + const char* GetArg(unsigned int num) + { + return engine->Cmd_Argv(num); + } + + const char* GetArgString() + { + return engine->Cmd_Args(); + } +}; +#endif + +#if SOURCE_ENGINE >= SE_ORANGEBOX +void LocalCommand_Meta(const CCommand& args) +{ + GlobCommand cmd(&args); +#else +void LocalCommand_Meta() +{ + GlobCommand cmd; +#endif + Command_Meta(&cmd); +} + +#if SOURCE_ENGINE == SE_CSGO || SOURCE_ENGINE == SE_BLADE || SOURCE_ENGINE == SE_MCV + +void SourceProvider::CacheUserMessages() +{ +} + +#else +static jmp_buf usermsg_end; + +/* This only gets called if IServerGameDLL::GetUserMessageInfo() triggers it */ +void SourceProvider::Detour_Error(const tchar* pMsg, ...) +{ + /* Jump back to setjmp() in CacheUserMessages() */ + longjmp(usermsg_end, 1); +} + +#define IA32_JMP_IMM32 0xE9 + +/* IServerGameDLL::GetUserMessageInfo() crashes on games based on the old engine and + * early Orange Box. This is because Error() from tier0 gets called when a bad index is + * passed. This is all due to a bug in CUtlRBTree::IsValidIndex(). + * + * So we detour Error() to fix this. Our detour then jumps back into CacheUserMessages() + * to a point before GetUserMessageInfo() is called. The detour is then removed and we + * exit. + */ +void SourceProvider::CacheUserMessages() +{ + int q, size; + char buffer[256]; + unsigned char* target, * detour; + unsigned char orig_bytes[5]; + + target = (unsigned char*)&Error; + detour = (unsigned char*)&Detour_Error; + + /* Save bytes from target function */ + memcpy(orig_bytes, target, sizeof(orig_bytes)); + + /* Patch in relative jump to our Error() detour */ + SetMemAccess(target, sizeof(orig_bytes), SH_MEM_READ | SH_MEM_WRITE | SH_MEM_EXEC); + target[0] = IA32_JMP_IMM32; + *(int32_t*)&target[1] = (int32_t)(detour - (target + 5)); + + /* This is where longjmp() will end up */ + if (setjmp(usermsg_end)) + { + /* Restore bytes and memory protection */ + memcpy(target, orig_bytes, sizeof(orig_bytes)); + SetMemAccess(target, sizeof(orig_bytes), SH_MEM_READ | SH_MEM_EXEC); + return; + } + + q = 0; + + /* If GetUserMessageInfo() calls Error(), we should end up in our detour */ + while (server->GetUserMessageInfo(q, buffer, sizeof(buffer), size)) + { + usermsgs_list.push_back(UsrMsgInfo(size, buffer)); + q++; + } + + /* Jump back to setjmp() */ + longjmp(usermsg_end, 1); +} +#endif + +int SourceProvider::GetUserMessageCount() +{ + if (!IsUserMessageIterationSupported()) + return -1; + + return (int)usermsgs_list.size(); +} + +int SourceProvider::FindUserMessage(const char* name, int* size) +{ + if (IsUserMessageIterationSupported()) + { + for (size_t i = 0; i < usermsgs_list.size(); i++) + { + if (usermsgs_list[i].name.compare(name) == 0) + { + if (size) + { + *size = usermsgs_list[i].size; + } + return (int)i; + } + } + } + + return -1; +} + +const char* SourceProvider::GetUserMessage(int index, int* size) +{ + if (!IsUserMessageIterationSupported() || index < 0 || index >= (int)usermsgs_list.size()) + { + return nullptr; + } + + if (size) + { + *size = usermsgs_list[index].size; + } + + return usermsgs_list[index].name.c_str(); +} + +bool SourceProvider::KVLoadFromFile(KeyValues* kv, IFileSystem* filesystem, const char* resourceName, const char* pathID) +{ + Assert(filesystem); +#ifdef _MSC_VER + Assert(_heapchk() == _HEAPOK); +#endif + + FileHandle_t f = filesystem->Open(resourceName, "rb", pathID); + if (!f) + return false; + + // load file into a null-terminated buffer + int fileSize = filesystem->Size(f); + char* buffer = (char*)MemAllocScratch(fileSize + 1); + + Assert(buffer); + + filesystem->Read(buffer, fileSize, f); // read into local buffer + + buffer[fileSize] = 0; // null terminate file as EOF + + filesystem->Close(f); // close file after reading + + bool retOK = kv->LoadFromBuffer(resourceName, buffer, filesystem); + + MemFreeScratch(); + + return retOK; +} + +bool SourceProvider::Hook_GameInit() +{ + if (nullptr != m_pCallbacks) + { + m_pCallbacks->OnGameInit(); + } + + RETURN_META_VALUE(MRES_IGNORED, true); +} + +bool SourceProvider::Hook_LevelInit(char const* pMapName, char const* pMapEntities, char const* pOldLevel, + char const* pLandmarkName, bool loadGame, bool background) +{ + if (nullptr != m_pCallbacks) + { + m_pCallbacks->OnLevelInit(pMapName, pMapEntities, pOldLevel, pLandmarkName, loadGame, background); + } + + RETURN_META_VALUE(MRES_IGNORED, true); +} + +void SourceProvider::Hook_LevelShutdown() +{ + if (nullptr != m_pCallbacks) + { + m_pCallbacks->OnLevelShutdown(); + } + + RETURN_META(MRES_IGNORED); +} + +#if SOURCE_ENGINE >= SE_ORANGEBOX +void SourceProvider::Hook_ClientCommand(edict_t* client, const CCommand& _cmd) +{ + GlobCommand cmd(&_cmd); +#else +void SourceProvider::Hook_ClientCommand(edict_t * client) +{ + GlobCommand cmd; +#endif + if (strcmp(cmd.GetArg(0), "meta") == 0) + { + Command_ClientMeta(client, &cmd); + RETURN_META(MRES_SUPERCEDE); + } + + RETURN_META(MRES_IGNORED); +} static SourceProvider g_SourceProvider; diff --git a/core/provider/source/provider_source.h b/core/provider/source/provider_source.h index 6ce682e2..267e8fd7 100644 --- a/core/provider/source/provider_source.h +++ b/core/provider/source/provider_source.h @@ -29,10 +29,73 @@ #define _INCLUDE_METAMOD_SOURCE_SOURCE1_PROVIDER_H_ #include "../provider_base.h" +#include +#include class SourceProvider : public BaseProvider { - +public: + virtual void Notify_DLLInit_Pre(CreateInterfaceFn engineFactory, CreateInterfaceFn serverFactory) override; + virtual void Notify_DLLShutdown_Pre() override; + virtual bool ProcessVDF(const char* file, char path[], size_t path_len, char alias[], size_t alias_len) override; + virtual int DetermineSourceEngine() override; + virtual const char* GetEngineDescription() const override; + virtual void GetGamePath(char* pszBuffer, int len) override; + virtual const char* GetGameDescription() override; + virtual void ConsolePrint(const char* msg) override; + virtual void ClientConsolePrint(edict_t* client, const char* msg) override; + virtual void ServerCommand(const char* cmd) override; + virtual ConVar* CreateConVar(const char* name, + const char* defval, + const char* help, + int flags) override; + virtual const char* GetConVarString(ConVar* convar) override; + virtual void SetConVarString(ConVar* convar, const char* str) override; + virtual IConCommandBaseAccessor* GetConCommandBaseAccessor() override; + virtual bool RegisterConCommandBase(ConCommandBase* pCommand) override; + virtual void UnregisterConCommandBase(ConCommandBase* pCommand) override; + virtual bool IsConCommandBaseACommand(ConCommandBase* pCommand) override; + virtual int GetUserMessageCount() override; + virtual int FindUserMessage(const char* name, int* size = nullptr) override; + virtual const char* GetUserMessage(int index, int* size = nullptr) override; +public: // Hook callbacks that map to provider callbacks + bool Hook_GameInit(); + bool Hook_LevelInit(char const* pMapName, char const* pMapEntities, char const* pOldLevel, + char const* pLandmarkName, bool loadGame, bool background); + void Hook_LevelShutdown(); +#if SOURCE_ENGINE >= SE_ORANGEBOX + void Hook_ClientCommand(edict_t* pEdict, const CCommand& args); +#else + void Hook_ClientCommand(edict_t* pEdict); +#endif +private: + struct UsrMsgInfo + { + UsrMsgInfo() + { + } + UsrMsgInfo(int s, const char* t) : size(s), name(t) + { + } + int size; + std::string name; + }; +private: + void CacheUserMessages(); + void Detour_Error(const tchar* pMsg, ...); + bool KVLoadFromFile(KeyValues* kv, IFileSystem* filesystem, const char* resourceName, const char* pathID = nullptr); + inline bool IsUserMessageIterationSupported() const + { +#if SOURCE_ENGINE == SE_CSGO || SOURCE_ENGINE == SE_DOTA || SOURCE_ENGINE == SE_BLADE || SOURCE_ENGINE == SE_MCV + return false; +#else + return true; +#endif + } +private: + IFileSystem* baseFs = nullptr; + std::vector usermsgs_list; + bool bOriginalEngine = false; }; #endif diff --git a/core/provider/source2/provider_source2.cpp b/core/provider/source2/provider_source2.cpp index 237868df..88d88fb1 100644 --- a/core/provider/source2/provider_source2.cpp +++ b/core/provider/source2/provider_source2.cpp @@ -24,6 +24,401 @@ */ #include "provider_source2.h" +#include "../console.h" +#include +#include +#include +#include +#include +#include +#include +#include + +void LocalCommand_Meta(const CCommand& args); + +ConCommand meta_local_cmd("meta", LocalCommand_Meta, "Metamod:Source control options"); + +static ISource2ServerConfig* serverconfig = NULL; +INetworkServerService* netservice = NULL; +IEngineServiceMgr* enginesvcmgr = NULL; + +// Hack to make hook decl compile when only having forward decl in header. +// (we have class structure but it requires protobuf which we don't want to include here) +class GameSessionConfiguration_t { }; + +SH_DECL_HOOK3_void(INetworkServerService, StartupServer, SH_NOATTRIB, 0, const GameSessionConfiguration_t &, ISource2WorldSession *, const char *); +SH_DECL_HOOK5_void(IEngineServiceMgr, SwitchToLoop, SH_NOATTRIB, 0, const char *, KeyValues *, uint32, const char *, bool); +SH_DECL_HOOK2_void(INetworkGameServer, Init, SH_NOATTRIB, 0, const GameSessionConfiguration_t &, const char *); +SH_DECL_HOOK3(INetworkGameServer, StartChangeLevel, SH_NOATTRIB, 0, CUtlVector *, const char *, const char *, void *); +SH_DECL_HOOK2_void(IServerGameClients, ClientCommand, SH_NOATTRIB, 0, CEntityIndex, const CCommand&); + +#ifdef SHOULD_OVERRIDE_ALLOWDEDICATED_SERVER +SH_DECL_HOOK1(ISource2ServerConfig, AllowDedicatedServers, const, 0, bool, EUniverse); +#endif + +void Source2Provider::Notify_DLLInit_Pre(CreateInterfaceFn engineFactory, + CreateInterfaceFn serverFactory) +{ + engine = (IVEngineServer*)((engineFactory)(INTERFACEVERSION_VENGINESERVER, NULL)); + if (!engine) + { + DisplayError("Could not find IVEngineServer! Metamod cannot load."); + return; + } + + gpGlobals = engine->GetServerGlobals(); + serverconfig = (ISource2ServerConfig*)((serverFactory)(INTERFACEVERSION_SERVERCONFIG, NULL)); + netservice = (INetworkServerService*)((engineFactory)(NETWORKSERVERSERVICE_INTERFACE_VERSION, NULL)); + enginesvcmgr = (IEngineServiceMgr*)((engineFactory)(ENGINESERVICEMGR_INTERFACE_VERSION, NULL)); + + icvar = (ICvar*)((engineFactory)(CVAR_INTERFACE_VERSION, NULL)); + if (!icvar) + { + DisplayError("Could not find ICvar! Metamod cannot load."); + return; + } + + gameclients = (IServerGameClients*)(serverFactory(INTERFACEVERSION_SERVERGAMECLIENTS, NULL)); + baseFs = (IFileSystem*)((engineFactory)(FILESYSTEM_INTERFACE_VERSION, NULL)); + if (baseFs == NULL) + { + mm_LogMessage("Unable to find \"%s\": .vdf files will not be parsed", FILESYSTEM_INTERFACE_VERSION); + } + +#if 0 + // Since we have to be added as a Game path (cannot add GameBin directly), we + // automatically get added to other paths as well, including having the MM:S + // dir become the default write path for logs and more. We can fix some of these. + + char searchPath[260]; + baseFs->GetSearchPath("GAME", (GetSearchPathTypes_t)0, searchPath, sizeof(searchPath)); + for (size_t i = 0; i < sizeof(searchPath); ++i) + { + if (searchPath[i] == ';') + { + searchPath[i] = '\0'; + break; + } + } + baseFs->RemoveSearchPath(searchPath, "GAME"); + + // TODO: figure out why these calls get ignored and path remains + //baseFs->RemoveSearchPath(searchPath, "CONTENT"); + //baseFs->RemoveSearchPath(searchPath, "SHADER_SOURCE"); + //baseFs->RemoveSearchPath(searchPath, "SHADER_SOURCE_MOD"); + + baseFs->RemoveSearchPaths("DEFAULT_WRITE_PATH"); + baseFs->GetSearchPath("GAME", (GetSearchPathTypes_t)0, searchPath, sizeof(searchPath)); + for (size_t i = 0; i < sizeof(searchPath); ++i) + { + if (searchPath[i] == ';') + { + searchPath[i] = '\0'; + break; + } + } + baseFs->AddSearchPath(searchPath, "DEFAULT_WRITE_PATH"); +#endif + + g_pCVar = icvar; + + g_SMConVarAccessor.RegisterConCommandBase(&meta_local_cmd); + + if (gameclients) + { + SH_ADD_HOOK(IServerGameClients, ClientCommand, gameclients, SH_MEMBER(this, &Source2Provider::Hook_ClientCommand), false); + } + +#ifdef SHOULD_OVERRIDE_ALLOWDEDICATED_SERVER + SH_ADD_VPHOOK(ISource2ServerConfig, AllowDedicatedServers, serverconfig, SH_MEMBER(this, &Source2Provider::Hook_AllowDedicatedServers), false); +#endif + + SH_ADD_HOOK(INetworkServerService, StartupServer, netservice, SH_MEMBER(this, &Source2Provider::Hook_StartupServer_Post), true); + SH_ADD_HOOK(IEngineServiceMgr, SwitchToLoop, enginesvcmgr, SH_MEMBER(this, &Source2Provider::Hook_SwitchToLoop), false); +} + +void Source2Provider::Notify_DLLShutdown_Pre() +{ + g_SMConVarAccessor.RemoveMetamodCommands(); +} + +bool Source2Provider::ProcessVDF(const char* file, char path[], size_t path_len, char alias[], size_t alias_len) +{ + if (baseFs == NULL) + { + return false; + } + + KeyValues* pValues; + bool bKVLoaded = false; + const char* plugin_file, * p_alias; + + pValues = new KeyValues("Metamod Plugin"); + + bKVLoaded = pValues->LoadFromFile(baseFs, file); + if (!bKVLoaded) + { + delete pValues; + return false; + } + + if ((plugin_file = pValues->GetString("file", NULL)) == NULL) + { + delete pValues; + return false; + } + + UTIL_Format(path, path_len, "%s", plugin_file); + + if ((p_alias = pValues->GetString("alias", NULL)) != NULL) + { + UTIL_Format(alias, alias_len, "%s", p_alias); + } + else + { + UTIL_Format(alias, alias_len, ""); + } + + delete pValues; + + return true; +} + +int Source2Provider::DetermineSourceEngine() +{ +#if SOURCE_ENGINE == SE_DOTA + return SOURCE_ENGINE_DOTA; +#elif SOURCE_ENGINE == SE_CS2 + return SOURCE_ENGINE_CS2; +#else +#error "SOURCE_ENGINE not defined to a known value" +#endif +} + +const char* Source2Provider::GetEngineDescription() const +{ +#if SOURCE_ENGINE == SE_DOTA + return "Dota 2 (2013)"; +#elif SOURCE_ENGINE == SE_CS2 + return "Counter-Strike 2 (2023)"; +#else +#error "SOURCE_ENGINE not defined to a known value" +#endif +} + +void Source2Provider::GetGamePath(char* pszBuffer, int len) +{ + ke::SafeSprintf(pszBuffer, len, "%s", Plat_GetGameDirectory()); +} + +const char* Source2Provider::GetGameDescription() +{ + return serverconfig->GetGameDescription(); +} + +#ifdef SHOULD_OVERRIDE_ALLOWDEDICATED_SERVER +bool Source2Provider::Hook_AllowDedicatedServers(EUniverse universe) const +{ + RETURN_META_VALUE(MRES_SUPERCEDE, true); +} +#endif + +void Source2Provider::ConsolePrint(const char* str) +{ + ConMsg("%s", str); +} + +void Source2Provider::ClientConsolePrint(edict_t* pEdict, const char* message) +{ + int client = (int)(pEdict - gpGlobals->pEdicts); + engine->ClientPrintf(client, message); +} + +void Source2Provider::ServerCommand(const char* cmd) +{ + engine->ServerCommand(cmd); +} + +const char* Source2Provider::GetConVarString(ConVar* convar) +{ + if (convar == NULL) + { + return NULL; + } + + return convar->GetString(); +} + +void Source2Provider::SetConVarString(ConVar* convar, const char* str) +{ + convar->SetValue(str); +} + +bool Source2Provider::IsConCommandBaseACommand(ConCommandBase* pCommand) +{ + return pCommand->IsCommand(); +} + +IConCommandBaseAccessor* Source2Provider::GetConCommandBaseAccessor() +{ + return &g_SMConVarAccessor; +} + +bool Source2Provider::RegisterConCommandBase(ConCommandBase* pCommand) +{ + return g_SMConVarAccessor.Register(pCommand); +} + +void Source2Provider::UnregisterConCommandBase(ConCommandBase* pCommand) +{ + return g_SMConVarAccessor.Unregister(pCommand); +} + +ConVar* Source2Provider::CreateConVar(const char* name, + const char* defval, + const char* help, + int flags) +{ + int newflags = 0; + if (flags & ConVarFlag_Notify) + { + newflags |= FCVAR_NOTIFY; + } + if (flags & ConVarFlag_SpOnly) + { + newflags |= FCVAR_SPONLY; + } + + ConVar* pVar = new ConVar(name, defval, newflags, help); + + g_SMConVarAccessor.RegisterConCommandBase(pVar); + + return pVar; +} + +class GlobCommand : public IMetamodSourceCommandInfo +{ +public: + GlobCommand(const CCommand* cmd) : m_cmd(cmd) + { + } +public: + unsigned int GetArgCount() + { + return m_cmd->ArgC() - 1; + } + + const char* GetArg(unsigned int num) + { + return m_cmd->Arg(num); + } + + const char* GetArgString() + { + return m_cmd->ArgS(); + } +private: + const CCommand* m_cmd; +}; + +void LocalCommand_Meta(const CCommand& args) +{ + GlobCommand cmd(&args); + Command_Meta(&cmd); +} + +bool Source2Provider::KVLoadFromFile(KeyValues* kv, IFileSystem* filesystem, const char* resourceName, const char* pathID) +{ + Assert(filesystem); +#ifdef _MSC_VER + Assert(_heapchk() == _HEAPOK); +#endif + + FileHandle_t f = filesystem->Open(resourceName, "rb", pathID); + if (!f) + return false; + + // load file into a null-terminated buffer + int fileSize = filesystem->Size(f); + char* buffer = (char*)MemAllocScratch(fileSize + 1); + + Assert(buffer); + + filesystem->Read(buffer, fileSize, f); // read into local buffer + + buffer[fileSize] = 0; // null terminate file as EOF + + filesystem->Close(f); // close file after reading + + bool retOK = kv->LoadFromBuffer(resourceName, buffer, filesystem); + + MemFreeScratch(); + + return retOK; +} + +void Source2Provider::Hook_StartupServer_Post(const GameSessionConfiguration_t &config, ISource2WorldSession *, const char *) +{ + static bool bGameServerHooked = false; + if (!bGameServerHooked) + { + INetworkGameServer* netserver = (META_IFACEPTR(INetworkServerService))->GetIGameServer(); + + SH_ADD_VPHOOK(INetworkGameServer, Init, netserver, SH_MEMBER(this, &Source2Provider::Hook_Init), false); + SH_ADD_VPHOOK(INetworkGameServer, StartChangeLevel, netserver, SH_MEMBER(this, &Source2Provider::Hook_StartChangeLevel), false); + + bGameServerHooked = true; + } + + RETURN_META(MRES_IGNORED); +} + +void Source2Provider::Hook_Init(const GameSessionConfiguration_t &config, const char *pszMapName) +{ + static char szLastMap[260] = ""; + if (nullptr != m_pCallbacks) + { + m_pCallbacks->OnLevelInit(pszMapName, "", sLastMap.c_str(), "", false, false); + } + + sLastMap = pszMapName; + + RETURN_META(MRES_IGNORED); +} + +CUtlVector *Source2Provider::Hook_StartChangeLevel(const char *, const char *, void *) +{ + if (nullptr != m_pCallbacks) + { + m_pCallbacks->OnLevelShutdown(); + } + + RETURN_META_VALUE(MRES_IGNORED, nullptr); +} + +void Source2Provider::Hook_SwitchToLoop(const char *pszLoopName, KeyValues *pKV, uint32 nId, const char *pszUnk, bool bUnk) +{ + if (nullptr != m_pCallbacks && strcmp(pszLoopName, "levelload") == 0) + { + m_pCallbacks->OnGameInit(); + } + + RETURN_META(MRES_IGNORED); +} + +void Source2Provider::Hook_ClientCommand(CEntityIndex index, const CCommand& _cmd) +{ + int client = index.Get(); + GlobCommand cmd(&_cmd); + + if (strcmp(cmd.GetArg(0), "meta") == 0) + { + Command_ClientMeta(client, &cmd); + RETURN_META(MRES_SUPERCEDE); + } + + RETURN_META(MRES_IGNORED); +} static Source2Provider g_Source2Provider; diff --git a/core/provider/source2/provider_source2.h b/core/provider/source2/provider_source2.h index f623762e..da89353e 100644 --- a/core/provider/source2/provider_source2.h +++ b/core/provider/source2/provider_source2.h @@ -29,10 +29,54 @@ #define _INCLUDE_METAMOD_SOURCE_SOURCE2_PROVIDER_H_ #include "../provider_base.h" +#include +#include + +// TODO: is this still needed for Dota or CS2 on any platform? +#if SOURCE_ENGINE == SE_DOTA && defined( _WIN32 ) +#define SHOULD_OVERRIDE_ALLOWDEDICATED_SERVER +#endif + +class INetworkGameClient; +class ISource2WorldSession; class Source2Provider : public BaseProvider { - +public: + virtual void Notify_DLLInit_Pre(CreateInterfaceFn engineFactory, CreateInterfaceFn serverFactory) override; + virtual void Notify_DLLShutdown_Pre() override; + virtual bool ProcessVDF(const char* file, char path[], size_t path_len, char alias[], size_t alias_len) override; + virtual int DetermineSourceEngine() override; + virtual const char* GetEngineDescription() const override; + virtual void GetGamePath(char* pszBuffer, int len) override; + virtual const char* GetGameDescription() override; + virtual void ConsolePrint(const char* msg) override; + virtual void ClientConsolePrint(edict_t* client, const char* msg) override; + virtual void ServerCommand(const char* cmd) override; + virtual ConVar* CreateConVar(const char* name, + const char* defval, + const char* help, + int flags) override; + virtual const char* GetConVarString(ConVar* convar) override; + virtual void SetConVarString(ConVar* convar, const char* str) override; + virtual IConCommandBaseAccessor* GetConCommandBaseAccessor() override; + virtual bool RegisterConCommandBase(ConCommandBase* pCommand) override; + virtual void UnregisterConCommandBase(ConCommandBase* pCommand) override; + virtual bool IsConCommandBaseACommand(ConCommandBase* pCommand) override; +public: +#ifdef SHOULD_OVERRIDE_ALLOWDEDICATED_SERVER + bool Hook_AllowDedicatedServers(EUniverse universe) const; +#endif + void Hook_StartupServer_Post(const GameSessionConfiguration_t &config, ISource2WorldSession *, const char *); + void Hook_Init(const GameSessionConfiguration_t &config, const char* pszMapName); + CUtlVector *Hook_StartChangeLevel(const char*, const char*, void*); + void Hook_SwitchToLoop(const char *pszLoopName, KeyValues *pKV, uint32 nId, const char *pszUnk, bool bUnk); + void Hook_ClientCommand(CEntityIndex index, const CCommand& args); +private: + bool KVLoadFromFile(KeyValues *kv, IFileSystem *filesystem, const char *resourceName, const char *pathID); +private: + IFileSystem* baseFs = nullptr; + std::string sLastMap; }; #endif From c0bd8e3b871c8805463ed79589a0ec39ceceb1ef Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sat, 1 Apr 2023 23:00:03 -0400 Subject: [PATCH 11/39] Remove unused IsRemotePrintingAvailable function --- core/metamod.cpp | 5 ----- core/metamod.h | 1 - core/metamod_provider.h | 8 -------- core/provider/provider_base.cpp | 4 ---- core/provider/provider_base.h | 1 - 5 files changed, 19 deletions(-) diff --git a/core/metamod.cpp b/core/metamod.cpp index f383f0cf..1acb0eb8 100644 --- a/core/metamod.cpp +++ b/core/metamod.cpp @@ -786,11 +786,6 @@ int MetamodSource::GetGameDLLVersion() return gamedll_version; } -bool MetamodSource::RemotePrintingAvailable() -{ - return provider->IsRemotePrintingAvailable(); -} - void *MetamodSource::MetaFactory(const char *iface, int *ret, PluginId *id) { if (id) diff --git a/core/metamod.h b/core/metamod.h index bd245de4..826ce840 100644 --- a/core/metamod.h +++ b/core/metamod.h @@ -67,7 +67,6 @@ class MetamodSource : public ISmmAPI void UnregisterConCommandBase(ISmmPlugin *plugin, ConCommandBase *pCommand); void ConPrint(const char *str); void ConPrintf(const char *fmt, ...); - bool RemotePrintingAvailable(); void GetApiVersions(int &major, int &minor, int &plvers, int &plmin); void GetShVersions(int &shvers, int &shimpl); void AddListener(ISmmPlugin *plugin, IMetamodListener *pListener); diff --git a/core/metamod_provider.h b/core/metamod_provider.h index 30cefc16..2c04dace 100644 --- a/core/metamod_provider.h +++ b/core/metamod_provider.h @@ -149,14 +149,6 @@ namespace SourceMM */ virtual void ConsolePrint(const char *msg) =0; - /** - * @brief Returns whether remote printing is available. - * - * @return True if remote printing is available, - * otherwise returns false. - */ - virtual bool IsRemotePrintingAvailable() =0; - /** * @brief Prints text in the specified client's console. * diff --git a/core/provider/provider_base.cpp b/core/provider/provider_base.cpp index 1631bee9..c60f3170 100644 --- a/core/provider/provider_base.cpp +++ b/core/provider/provider_base.cpp @@ -55,10 +55,6 @@ IVEngineServer *engine = NULL; IServerGameClients *gameclients = NULL; CGlobalVars *gpGlobals = NULL; -bool BaseProvider::IsRemotePrintingAvailable() -{ - return true; -} bool BaseProvider::IsSourceEngineBuildCompatible(int build) { diff --git a/core/provider/provider_base.h b/core/provider/provider_base.h index c57c8f9f..04610680 100644 --- a/core/provider/provider_base.h +++ b/core/provider/provider_base.h @@ -79,7 +79,6 @@ class BaseProvider : public IMetamodSourceProvider virtual bool IsSourceEngineBuildCompatible(int build) override; virtual bool LogMessage(const char *buffer) override; virtual const char *GetCommandLineValue(const char *key, const char *defval) override; - virtual bool IsRemotePrintingAvailable() override; virtual void DisplayError(const char *fmt, ...) override; virtual void DisplayWarning(const char *fmt, ...) override; virtual void DisplayDevMsg(const char* fmt, ...) override; From 522d8f2034ed5569f9abc4c336d3eed92817a4bc Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sun, 2 Apr 2023 09:11:53 -0400 Subject: [PATCH 12/39] Tie ConVar accessor to Source 1 provider. Stub out for Source 2 provider. --- core/AMBuilder | 6 +- core/provider/console.h | 55 ------------------- core/provider/provider_base.cpp | 1 - core/provider/source/provider_source.cpp | 13 ++--- core/provider/source/provider_source.h | 23 +++++++- .../provider_source_console.cpp} | 25 +++------ core/provider/source2/provider_source2.cpp | 29 +++++++++- 7 files changed, 68 insertions(+), 84 deletions(-) delete mode 100644 core/provider/console.h rename core/provider/{console.cpp => source/provider_source_console.cpp} (85%) diff --git a/core/AMBuilder b/core/AMBuilder index a956833f..9d0790e1 100644 --- a/core/AMBuilder +++ b/core/AMBuilder @@ -17,7 +17,6 @@ for sdk_name in MMS.sdks: 'metamod_oslink.cpp', 'metamod_plugins.cpp', 'metamod_util.cpp', - 'provider/console.cpp', 'provider/provider_base.cpp', 'sourcehook/sourcehook.cpp', 'sourcehook/sourcehook_impl_chookidman.cpp', @@ -31,7 +30,10 @@ for sdk_name in MMS.sdks: if sdk_name in ['dota', 'cs2']: binary.sources += ['provider/source2/provider_source2.cpp'] else: - binary.sources += ['provider/source/provider_source.cpp'] + binary.sources += [ + 'provider/source/provider_source.cpp', + 'provider/source/provider_source_console.cpp' + ] # Source2 hack. TODO: check this more deterministically, "are we doing an x64 build?" if binary.compiler.target.arch == 'x86': diff --git a/core/provider/console.h b/core/provider/console.h deleted file mode 100644 index dbae221f..00000000 --- a/core/provider/console.h +++ /dev/null @@ -1,55 +0,0 @@ -/** - * vim: set ts=4 : - * ====================================================== - * Metamod:Source - * Copyright (C) 2004-2008 AlliedModders LLC and authors. - * All rights reserved. - * ====================================================== - * - * This software is provided 'as-is', without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software in a - * product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id$ - */ - -#ifndef _INCLUDE_CONSOLE_MMS_H_ -#define _INCLUDE_CONSOLE_MMS_H_ - -#include -#include "convar.h" -#include -#include - -class SMConVarAccessor : public IConCommandBaseAccessor -{ -public: - bool RegisterConCommandBase(ConCommandBase *pCommand); - bool Register(ConCommandBase *pCommand); - void Unregister(ConCommandBase *pCommand); - void RemoveMetamodCommands(); -#if SOURCE_ENGINE < SE_ORANGEBOX - bool InitConCommandBaseList(); -private: - ConCommandBase **m_TopConCommandBase; -#endif -private: - SourceHook::List m_RegisteredCommands; -}; - -extern SMConVarAccessor g_SMConVarAccessor; - -#endif //_INCLUDE_CONSOLE_MMS_H_ - diff --git a/core/provider/provider_base.cpp b/core/provider/provider_base.cpp index c60f3170..07761907 100644 --- a/core/provider/provider_base.cpp +++ b/core/provider/provider_base.cpp @@ -32,7 +32,6 @@ #include #include "../metamod_util.h" #include "provider_base.h" -#include "console.h" #include "metamod_console.h" #include #include "metamod.h" diff --git a/core/provider/source/provider_source.cpp b/core/provider/source/provider_source.cpp index a376caaa..cef0a7ca 100644 --- a/core/provider/source/provider_source.cpp +++ b/core/provider/source/provider_source.cpp @@ -24,7 +24,6 @@ */ #include "provider_source.h" -#include "../console.h" #include #include #include @@ -99,7 +98,7 @@ void SourceProvider::Notify_DLLInit_Pre(CreateInterfaceFn engineFactory, g_pCVar = icvar; #endif - g_SMConVarAccessor.RegisterConCommandBase(&meta_local_cmd); + m_ConVarAccessor.RegisterConCommandBase(&meta_local_cmd); #if SOURCE_ENGINE == SE_EPISODEONE /* The Ship is the only game known at this time that uses the pre-Episode One engine */ @@ -133,7 +132,7 @@ void SourceProvider::Notify_DLLShutdown_Pre() SH_REMOVE_HOOK(IServerGameDLL, LevelInit, server, SH_MEMBER(this, &SourceProvider::Hook_LevelInit), true); SH_REMOVE_HOOK(IServerGameDLL, LevelShutdown, server, SH_MEMBER(this, &SourceProvider::Hook_LevelShutdown), true); - g_SMConVarAccessor.RemoveMetamodCommands(); + m_ConVarAccessor.RemoveMetamodCommands(); #if SOURCE_ENGINE < SE_ORANGEBOX if (g_Metamod.IsLoadedAsGameDLL()) @@ -362,17 +361,17 @@ bool SourceProvider::IsConCommandBaseACommand(ConCommandBase* pCommand) IConCommandBaseAccessor* SourceProvider::GetConCommandBaseAccessor() { - return &g_SMConVarAccessor; + return &m_ConVarAccessor; } bool SourceProvider::RegisterConCommandBase(ConCommandBase* pCommand) { - return g_SMConVarAccessor.Register(pCommand); + return m_ConVarAccessor.Register(pCommand); } void SourceProvider::UnregisterConCommandBase(ConCommandBase* pCommand) { - return g_SMConVarAccessor.Unregister(pCommand); + return m_ConVarAccessor.Unregister(pCommand); } ConVar* SourceProvider::CreateConVar(const char* name, @@ -392,7 +391,7 @@ ConVar* SourceProvider::CreateConVar(const char* name, ConVar* pVar = new ConVar(name, defval, newflags, help); - g_SMConVarAccessor.RegisterConCommandBase(pVar); + m_ConVarAccessor.RegisterConCommandBase(pVar); return pVar; } diff --git a/core/provider/source/provider_source.h b/core/provider/source/provider_source.h index 267e8fd7..67951aa8 100644 --- a/core/provider/source/provider_source.h +++ b/core/provider/source/provider_source.h @@ -31,10 +31,11 @@ #include "../provider_base.h" #include #include +#include class SourceProvider : public BaseProvider { -public: +public: // BaseProvider virtual void Notify_DLLInit_Pre(CreateInterfaceFn engineFactory, CreateInterfaceFn serverFactory) override; virtual void Notify_DLLShutdown_Pre() override; virtual bool ProcessVDF(const char* file, char path[], size_t path_len, char alias[], size_t alias_len) override; @@ -58,7 +59,25 @@ class SourceProvider : public BaseProvider virtual int GetUserMessageCount() override; virtual int FindUserMessage(const char* name, int* size = nullptr) override; virtual const char* GetUserMessage(int index, int* size = nullptr) override; -public: // Hook callbacks that map to provider callbacks +public: // IConCommandBaseAccessor + class SourceConVarAccessor : public IConCommandBaseAccessor + { + virtual bool RegisterConCommandBase(ConCommandBase* pCommand) override; + private: + bool Register(ConCommandBase* pCommand); + void Unregister(ConCommandBase* pCommand); + void RemoveMetamodCommands(); +#if SOURCE_ENGINE < SE_ORANGEBOX + bool InitConCommandBaseList(); + private: + ConCommandBase** m_TopConCommandBase = nullptr; +#endif + private: + SourceHook::List m_RegisteredCommands; + + friend class SourceProvider; + } m_ConVarAccessor; +public: bool Hook_GameInit(); bool Hook_LevelInit(char const* pMapName, char const* pMapEntities, char const* pOldLevel, char const* pLandmarkName, bool loadGame, bool background); diff --git a/core/provider/console.cpp b/core/provider/source/provider_source_console.cpp similarity index 85% rename from core/provider/console.cpp rename to core/provider/source/provider_source_console.cpp index f75a0815..c3dbaa6a 100644 --- a/core/provider/console.cpp +++ b/core/provider/source/provider_source_console.cpp @@ -25,20 +25,14 @@ * Version: $Id$ */ -#include "console.h" -#include "provider_base.h" -#include "metamod_util.h" - -using namespace SourceHook; - -SMConVarAccessor g_SMConVarAccessor; +#include "provider_source.h" #if SOURCE_ENGINE >= SE_ORANGEBOX #else #define RegisterConCommand RegisterConCommandBase #endif -bool SMConVarAccessor::RegisterConCommandBase(ConCommandBase *pCommand) +bool SourceProvider::SourceConVarAccessor::RegisterConCommandBase(ConCommandBase *pCommand) { m_RegisteredCommands.push_back(pCommand); #if SOURCE_ENGINE < SE_ALIENSWARM @@ -49,7 +43,7 @@ bool SMConVarAccessor::RegisterConCommandBase(ConCommandBase *pCommand) return true; } -bool SMConVarAccessor::Register(ConCommandBase *pCommand) +bool SourceProvider::SourceConVarAccessor::Register(ConCommandBase *pCommand) { #if SOURCE_ENGINE < SE_ALIENSWARM pCommand->SetNext(NULL); @@ -59,7 +53,7 @@ bool SMConVarAccessor::Register(ConCommandBase *pCommand) return true; } -void SMConVarAccessor::RemoveMetamodCommands() +void SourceProvider::SourceConVarAccessor::RemoveMetamodCommands() { List::iterator iter; @@ -73,7 +67,7 @@ void SMConVarAccessor::RemoveMetamodCommands() /* Signature for ICvar::GetCommands() in vstdlib for Win32 and Linux. * * 20226EE0 A1 50 5C 5A 20 mov eax,dword ptr ds:[205A5C50h] <-- What we want - * 20226EE5 C3 ret + * 20226EE5 C3 ret */ #define CMDLIST_SIG "\xA1\x2A\x2A\x2A\x2A\xC3" #define CMDLIST_SIGLEN 6 @@ -87,7 +81,7 @@ void SMConVarAccessor::RemoveMetamodCommands() * This craziness eliminates the need for the eternal command/cvar used previously which * could have caused a crash as a result of registering commands/cvars more than once. */ -bool SMConVarAccessor::InitConCommandBaseList() +bool SourceProvider::SourceConVarAccessor::InitConCommandBaseList() { char *vfunc = (char *)SH_GET_ORIG_VFNPTR_ENTRY(icvar, &ICvar::GetCommands); @@ -96,7 +90,7 @@ bool SMConVarAccessor::InitConCommandBaseList() /* Get address from displacement... * * Add 5 because it's relative to next instruction: - * Opcode <1 byte> + 32-bit displacement <4 bytes> + * Opcode <1 byte> + 32-bit displacement <4 bytes> */ vfunc += *reinterpret_cast(vfunc + 1) + 5; } @@ -140,7 +134,7 @@ bool SMConVarAccessor::InitConCommandBaseList() } #endif -void SMConVarAccessor::Unregister(ConCommandBase *pCommand) +void SourceProvider::SourceConVarAccessor::Unregister(ConCommandBase *pCommand) { #if SOURCE_ENGINE >= SE_ORANGEBOX icvar->UnregisterConCommand(pCommand); @@ -166,7 +160,7 @@ void SMConVarAccessor::Unregister(ConCommandBase *pCommand) pCommand->SetNext(NULL); return; } - + pPrev = pCur; pCur = const_cast(pCur->GetNext()); @@ -183,4 +177,3 @@ void SMConVarAccessor::Unregister(ConCommandBase *pCommand) } #endif } - diff --git a/core/provider/source2/provider_source2.cpp b/core/provider/source2/provider_source2.cpp index 88d88fb1..76c80ffd 100644 --- a/core/provider/source2/provider_source2.cpp +++ b/core/provider/source2/provider_source2.cpp @@ -24,7 +24,6 @@ */ #include "provider_source2.h" -#include "../console.h" #include #include #include @@ -122,7 +121,9 @@ void Source2Provider::Notify_DLLInit_Pre(CreateInterfaceFn engineFactory, g_pCVar = icvar; +#ifdef S2_CONVAR_UNFINISHED g_SMConVarAccessor.RegisterConCommandBase(&meta_local_cmd); +#endif if (gameclients) { @@ -139,7 +140,9 @@ void Source2Provider::Notify_DLLInit_Pre(CreateInterfaceFn engineFactory, void Source2Provider::Notify_DLLShutdown_Pre() { +#ifdef S2_CONVAR_UNFINISHED g_SMConVarAccessor.RemoveMetamodCommands(); +#endif } bool Source2Provider::ProcessVDF(const char* file, char path[], size_t path_len, char alias[], size_t alias_len) @@ -241,37 +244,57 @@ void Source2Provider::ServerCommand(const char* cmd) const char* Source2Provider::GetConVarString(ConVar* convar) { +#ifdef S2_CONVAR_UNFINISHED if (convar == NULL) { return NULL; } return convar->GetString(); +#else + return ""; +#endif } void Source2Provider::SetConVarString(ConVar* convar, const char* str) { +#ifdef S2_CONVAR_UNFINISHED convar->SetValue(str); +#endif } bool Source2Provider::IsConCommandBaseACommand(ConCommandBase* pCommand) { +#ifdef S2_CONVAR_UNFINISHED return pCommand->IsCommand(); +#else + return false; +#endif } IConCommandBaseAccessor* Source2Provider::GetConCommandBaseAccessor() { +#ifdef S2_CONVAR_UNFINISHED return &g_SMConVarAccessor; +#else + return nullptr; +#endif } bool Source2Provider::RegisterConCommandBase(ConCommandBase* pCommand) { +#ifdef S2_CONVAR_UNFINISHED return g_SMConVarAccessor.Register(pCommand); +#else + return true; +#endif } void Source2Provider::UnregisterConCommandBase(ConCommandBase* pCommand) { +#ifdef S2_CONVAR_UNFINISHED return g_SMConVarAccessor.Unregister(pCommand); +#endif } ConVar* Source2Provider::CreateConVar(const char* name, @@ -279,6 +302,7 @@ ConVar* Source2Provider::CreateConVar(const char* name, const char* help, int flags) { +#ifdef S2_CONVAR_UNFINISHED int newflags = 0; if (flags & ConVarFlag_Notify) { @@ -294,6 +318,9 @@ ConVar* Source2Provider::CreateConVar(const char* name, g_SMConVarAccessor.RegisterConCommandBase(pVar); return pVar; +#else + return nullptr; +#endif } class GlobCommand : public IMetamodSourceCommandInfo From b336c9c30d0d1cd3ad2bfeb14053d37484297995 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sun, 2 Apr 2023 09:30:08 -0400 Subject: [PATCH 13/39] Make ConVars opaque outside of providers --- core/metamod.cpp | 6 +++--- core/metamod_provider.h | 8 +++++--- core/provider/provider_base.h | 6 +++--- core/provider/source/provider_source.cpp | 16 ++++++++-------- core/provider/source/provider_source.h | 6 +++--- core/provider/source2/provider_source2.cpp | 6 +++--- core/provider/source2/provider_source2.h | 6 +++--- 7 files changed, 28 insertions(+), 26 deletions(-) diff --git a/core/metamod.cpp b/core/metamod.cpp index 1acb0eb8..22dfce1d 100644 --- a/core/metamod.cpp +++ b/core/metamod.cpp @@ -77,9 +77,9 @@ static bool is_game_init = false; static bool vsp_load_requested = false; static bool vsp_loaded = false; static game_dll_t gamedll_info; -static ConVar *metamod_version = NULL; -static ConVar *mm_pluginsfile = NULL; -static ConVar *mm_basedir = NULL; +static MetamodSourceConVar *metamod_version = NULL; +static MetamodSourceConVar *mm_pluginsfile = NULL; +static MetamodSourceConVar *mm_basedir = NULL; static CreateInterfaceFn engine_factory = NULL; static CreateInterfaceFn physics_factory = NULL; static CreateInterfaceFn filesystem_factory = NULL; diff --git a/core/metamod_provider.h b/core/metamod_provider.h index 2c04dace..a7263066 100644 --- a/core/metamod_provider.h +++ b/core/metamod_provider.h @@ -28,6 +28,8 @@ namespace SourceMM { + class MetamodSourceConVar; + enum { ConVarFlag_None = 0, @@ -219,7 +221,7 @@ namespace SourceMM * @param help Help text. * @return ConVar pointer. */ - virtual ConVar *CreateConVar(const char *name, + virtual MetamodSourceConVar *CreateConVar(const char *name, const char *defval, const char *help, int flags) =0; @@ -230,7 +232,7 @@ namespace SourceMM * @param convar ConVar pointer. * @return String value. */ - virtual const char *GetConVarString(ConVar *convar) =0; + virtual const char *GetConVarString(MetamodSourceConVar *convar) =0; /** * @brief Sets a ConVar string. @@ -238,7 +240,7 @@ namespace SourceMM * @param convar ConVar pointer. * @param str String pointer. */ - virtual void SetConVarString(ConVar *convar, const char *str) =0; + virtual void SetConVarString(MetamodSourceConVar *convar, const char *str) =0; /** * @brief Retrieves the absolute path to the game directory. diff --git a/core/provider/provider_base.h b/core/provider/provider_base.h index 04610680..2801bd3f 100644 --- a/core/provider/provider_base.h +++ b/core/provider/provider_base.h @@ -61,13 +61,13 @@ class BaseProvider : public IMetamodSourceProvider virtual void ConsolePrint(const char* msg) override = 0; virtual void ClientConsolePrint(edict_t* client, const char* msg) override = 0; virtual void ServerCommand(const char* cmd) override = 0; - virtual ConVar* CreateConVar(const char* name, + virtual MetamodSourceConVar *CreateConVar(const char* name, const char* defval, const char* help, int flags) override = 0; - virtual const char* GetConVarString(ConVar* convar) override = 0; - virtual void SetConVarString(ConVar* convar, const char* str) override = 0; virtual IConCommandBaseAccessor* GetConCommandBaseAccessor() override = 0; + virtual const char* GetConVarString(MetamodSourceConVar *convar) override = 0; + virtual void SetConVarString(MetamodSourceConVar *convar, const char* str) override = 0; virtual bool RegisterConCommandBase(ConCommandBase* pCommand) override = 0; virtual void UnregisterConCommandBase(ConCommandBase* pCommand) override = 0; virtual bool IsConCommandBaseACommand(ConCommandBase* pCommand) override = 0; diff --git a/core/provider/source/provider_source.cpp b/core/provider/source/provider_source.cpp index cef0a7ca..c685ebb0 100644 --- a/core/provider/source/provider_source.cpp +++ b/core/provider/source/provider_source.cpp @@ -339,19 +339,19 @@ void SourceProvider::ServerCommand(const char* cmd) engine->ServerCommand(cmd); } -const char* SourceProvider::GetConVarString(ConVar* convar) +const char* SourceProvider::GetConVarString(MetamodSourceConVar *convar) { - if (convar == NULL) + if (nullptr == convar) { - return NULL; + return nullptr; } - return convar->GetString(); + return reinterpret_cast(convar)->GetString(); } -void SourceProvider::SetConVarString(ConVar* convar, const char* str) +void SourceProvider::SetConVarString(MetamodSourceConVar *convar, const char* str) { - convar->SetValue(str); + reinterpret_cast(convar)->SetValue(str); } bool SourceProvider::IsConCommandBaseACommand(ConCommandBase* pCommand) @@ -374,7 +374,7 @@ void SourceProvider::UnregisterConCommandBase(ConCommandBase* pCommand) return m_ConVarAccessor.Unregister(pCommand); } -ConVar* SourceProvider::CreateConVar(const char* name, +MetamodSourceConVar* SourceProvider::CreateConVar(const char* name, const char* defval, const char* help, int flags) @@ -393,7 +393,7 @@ ConVar* SourceProvider::CreateConVar(const char* name, m_ConVarAccessor.RegisterConCommandBase(pVar); - return pVar; + return reinterpret_cast(pVar); } #if SOURCE_ENGINE >= SE_ORANGEBOX diff --git a/core/provider/source/provider_source.h b/core/provider/source/provider_source.h index 67951aa8..6debaecc 100644 --- a/core/provider/source/provider_source.h +++ b/core/provider/source/provider_source.h @@ -46,13 +46,13 @@ class SourceProvider : public BaseProvider virtual void ConsolePrint(const char* msg) override; virtual void ClientConsolePrint(edict_t* client, const char* msg) override; virtual void ServerCommand(const char* cmd) override; - virtual ConVar* CreateConVar(const char* name, + virtual MetamodSourceConVar *CreateConVar(const char* name, const char* defval, const char* help, int flags) override; - virtual const char* GetConVarString(ConVar* convar) override; - virtual void SetConVarString(ConVar* convar, const char* str) override; virtual IConCommandBaseAccessor* GetConCommandBaseAccessor() override; + virtual const char* GetConVarString(MetamodSourceConVar *convar) override; + virtual void SetConVarString(MetamodSourceConVar *convar, const char* str) override; virtual bool RegisterConCommandBase(ConCommandBase* pCommand) override; virtual void UnregisterConCommandBase(ConCommandBase* pCommand) override; virtual bool IsConCommandBaseACommand(ConCommandBase* pCommand) override; diff --git a/core/provider/source2/provider_source2.cpp b/core/provider/source2/provider_source2.cpp index 76c80ffd..1eab4e71 100644 --- a/core/provider/source2/provider_source2.cpp +++ b/core/provider/source2/provider_source2.cpp @@ -242,7 +242,7 @@ void Source2Provider::ServerCommand(const char* cmd) engine->ServerCommand(cmd); } -const char* Source2Provider::GetConVarString(ConVar* convar) +const char* Source2Provider::GetConVarString(MetamodSourceConVar *convar) { #ifdef S2_CONVAR_UNFINISHED if (convar == NULL) @@ -256,7 +256,7 @@ const char* Source2Provider::GetConVarString(ConVar* convar) #endif } -void Source2Provider::SetConVarString(ConVar* convar, const char* str) +void Source2Provider::SetConVarString(MetamodSourceConVar *convar, const char* str) { #ifdef S2_CONVAR_UNFINISHED convar->SetValue(str); @@ -297,7 +297,7 @@ void Source2Provider::UnregisterConCommandBase(ConCommandBase* pCommand) #endif } -ConVar* Source2Provider::CreateConVar(const char* name, +MetamodSourceConVar* Source2Provider::CreateConVar(const char* name, const char* defval, const char* help, int flags) diff --git a/core/provider/source2/provider_source2.h b/core/provider/source2/provider_source2.h index da89353e..ae0de445 100644 --- a/core/provider/source2/provider_source2.h +++ b/core/provider/source2/provider_source2.h @@ -53,13 +53,13 @@ class Source2Provider : public BaseProvider virtual void ConsolePrint(const char* msg) override; virtual void ClientConsolePrint(edict_t* client, const char* msg) override; virtual void ServerCommand(const char* cmd) override; - virtual ConVar* CreateConVar(const char* name, + virtual MetamodSourceConVar *CreateConVar(const char* name, const char* defval, const char* help, int flags) override; - virtual const char* GetConVarString(ConVar* convar) override; - virtual void SetConVarString(ConVar* convar, const char* str) override; virtual IConCommandBaseAccessor* GetConCommandBaseAccessor() override; + virtual const char* GetConVarString(MetamodSourceConVar *convar) override; + virtual void SetConVarString(MetamodSourceConVar *convar, const char* str) override; virtual bool RegisterConCommandBase(ConCommandBase* pCommand) override; virtual void UnregisterConCommandBase(ConCommandBase* pCommand) override; virtual bool IsConCommandBaseACommand(ConCommandBase* pCommand) override; From ebf79cf73d151829c56d292bfebb8877a17d8691 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sun, 2 Apr 2023 09:31:12 -0400 Subject: [PATCH 14/39] Remove exporting of var accessor from provider. It's not used outside (and shouldn't stay that way) --- core/metamod.cpp | 5 ----- core/metamod.h | 1 - core/metamod_provider.h | 7 ------- core/provider/provider_base.h | 1 - core/provider/source/provider_source.cpp | 5 ----- core/provider/source/provider_source.h | 1 - core/provider/source2/provider_source2.cpp | 9 --------- core/provider/source2/provider_source2.h | 1 - 8 files changed, 30 deletions(-) diff --git a/core/metamod.cpp b/core/metamod.cpp index 22dfce1d..4234dca8 100644 --- a/core/metamod.cpp +++ b/core/metamod.cpp @@ -892,11 +892,6 @@ const char *MetamodSource::GetVDFDir() return provider->GetConVarString(mm_basedir); } -IConCommandBaseAccessor *MetamodSource::GetCvarBaseAccessor() -{ - return provider->GetConCommandBaseAccessor(); -} - bool MetamodSource::RegisterConCommandBase(ISmmPlugin *plugin, ConCommandBase *pCommand) { if (provider->IsConCommandBaseACommand(pCommand)) diff --git a/core/metamod.h b/core/metamod.h index 826ce840..60001a9d 100644 --- a/core/metamod.h +++ b/core/metamod.h @@ -62,7 +62,6 @@ class MetamodSource : public ISmmAPI CGlobalVars *GetCGlobals(); void SetLastMetaReturn(META_RES res); META_RES GetLastMetaReturn(); - IConCommandBaseAccessor *GetCvarBaseAccessor(); bool RegisterConCommandBase(ISmmPlugin *plugin, ConCommandBase *pCommand); void UnregisterConCommandBase(ISmmPlugin *plugin, ConCommandBase *pCommand); void ConPrint(const char *str); diff --git a/core/metamod_provider.h b/core/metamod_provider.h index a7263066..b7fdebdb 100644 --- a/core/metamod_provider.h +++ b/core/metamod_provider.h @@ -257,13 +257,6 @@ namespace SourceMM */ virtual const char *GetGameDescription() =0; - /** - * @brief Returns the ConCommandBase accessor. - * - * @return An IConCommandBaseAccessor pointer. - */ - virtual IConCommandBaseAccessor *GetConCommandBaseAccessor() =0; - /** * @brief Registers a ConCommandBase. * diff --git a/core/provider/provider_base.h b/core/provider/provider_base.h index 2801bd3f..9abdff43 100644 --- a/core/provider/provider_base.h +++ b/core/provider/provider_base.h @@ -65,7 +65,6 @@ class BaseProvider : public IMetamodSourceProvider const char* defval, const char* help, int flags) override = 0; - virtual IConCommandBaseAccessor* GetConCommandBaseAccessor() override = 0; virtual const char* GetConVarString(MetamodSourceConVar *convar) override = 0; virtual void SetConVarString(MetamodSourceConVar *convar, const char* str) override = 0; virtual bool RegisterConCommandBase(ConCommandBase* pCommand) override = 0; diff --git a/core/provider/source/provider_source.cpp b/core/provider/source/provider_source.cpp index c685ebb0..9742841e 100644 --- a/core/provider/source/provider_source.cpp +++ b/core/provider/source/provider_source.cpp @@ -359,11 +359,6 @@ bool SourceProvider::IsConCommandBaseACommand(ConCommandBase* pCommand) return pCommand->IsCommand(); } -IConCommandBaseAccessor* SourceProvider::GetConCommandBaseAccessor() -{ - return &m_ConVarAccessor; -} - bool SourceProvider::RegisterConCommandBase(ConCommandBase* pCommand) { return m_ConVarAccessor.Register(pCommand); diff --git a/core/provider/source/provider_source.h b/core/provider/source/provider_source.h index 6debaecc..f09532aa 100644 --- a/core/provider/source/provider_source.h +++ b/core/provider/source/provider_source.h @@ -50,7 +50,6 @@ class SourceProvider : public BaseProvider const char* defval, const char* help, int flags) override; - virtual IConCommandBaseAccessor* GetConCommandBaseAccessor() override; virtual const char* GetConVarString(MetamodSourceConVar *convar) override; virtual void SetConVarString(MetamodSourceConVar *convar, const char* str) override; virtual bool RegisterConCommandBase(ConCommandBase* pCommand) override; diff --git a/core/provider/source2/provider_source2.cpp b/core/provider/source2/provider_source2.cpp index 1eab4e71..fcb8f261 100644 --- a/core/provider/source2/provider_source2.cpp +++ b/core/provider/source2/provider_source2.cpp @@ -272,15 +272,6 @@ bool Source2Provider::IsConCommandBaseACommand(ConCommandBase* pCommand) #endif } -IConCommandBaseAccessor* Source2Provider::GetConCommandBaseAccessor() -{ -#ifdef S2_CONVAR_UNFINISHED - return &g_SMConVarAccessor; -#else - return nullptr; -#endif -} - bool Source2Provider::RegisterConCommandBase(ConCommandBase* pCommand) { #ifdef S2_CONVAR_UNFINISHED diff --git a/core/provider/source2/provider_source2.h b/core/provider/source2/provider_source2.h index ae0de445..bdb00ad8 100644 --- a/core/provider/source2/provider_source2.h +++ b/core/provider/source2/provider_source2.h @@ -57,7 +57,6 @@ class Source2Provider : public BaseProvider const char* defval, const char* help, int flags) override; - virtual IConCommandBaseAccessor* GetConCommandBaseAccessor() override; virtual const char* GetConVarString(MetamodSourceConVar *convar) override; virtual void SetConVarString(MetamodSourceConVar *convar, const char* str) override; virtual bool RegisterConCommandBase(ConCommandBase* pCommand) override; From b727c5455e353dbde9987ed3d538c796a0da4a79 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sun, 2 Apr 2023 10:13:21 -0400 Subject: [PATCH 15/39] Remove ClientCommand Source 2 hacks from outside of provider --- core/metamod.cpp | 19 +++----- core/metamod_console.cpp | 16 ------- core/metamod_console.h | 4 -- core/metamod_provider.h | 51 ++++++++++++---------- core/provider/source/provider_source.cpp | 6 ++- core/provider/source2/provider_source2.cpp | 7 ++- 6 files changed, 44 insertions(+), 59 deletions(-) diff --git a/core/metamod.cpp b/core/metamod.cpp index 4234dca8..c21729cc 100644 --- a/core/metamod.cpp +++ b/core/metamod.cpp @@ -194,6 +194,11 @@ static class ProviderCallbacks : public IMetamodSourceProviderCallbacks ITER_EVENT(OnLevelShutdown, ()); } + + virtual bool OnCommand_ClientMeta(edict_t* client, IMetamodSourceCommandInfo* info) override + { + return Command_ClientMeta(client, info); + } } s_ProviderCallbacks; /* Initialize everything here */ @@ -740,20 +745,6 @@ size_t MetamodSource::PathFormat(char *buffer, size_t len, const char *fmt, ...) return mylen; } -#if SOURCE_ENGINE == SE_DOTA -void MetamodSource::ClientConPrintf(int clientIndex, const char *fmt, ...) -{ - va_list ap; - char buffer[2048]; - - va_start(ap, fmt); - UTIL_FormatArgs(buffer, sizeof(buffer), fmt, ap); - va_end(ap); - - ClientConPrintf((edict_t *)(gpGlobals->pEdicts + clientIndex), "%s", buffer); -} -#endif - void MetamodSource::ClientConPrintf(edict_t *client, const char *fmt, ...) { va_list ap; diff --git a/core/metamod_console.cpp b/core/metamod_console.cpp index 61aa4807..28effa8c 100644 --- a/core/metamod_console.cpp +++ b/core/metamod_console.cpp @@ -44,11 +44,7 @@ using namespace SourceHook; #define CLIENT_CONMSG g_Metamod.ClientConPrintf template -#if SOURCE_ENGINE == SE_DOTA -void CMDMSG(int client, const char *pMsg, Ts ... ts) -#else void CMDMSG(edict_t *client, const char *pMsg, Ts ... ts) -#endif { if (client) { @@ -60,11 +56,7 @@ void CMDMSG(edict_t *client, const char *pMsg, Ts ... ts) } } -#if SOURCE_ENGINE == SE_DOTA -static void ReplyCredits(int client = 0) -#else static void ReplyCredits(edict_t *client = nullptr) -#endif { CMDMSG(client, "Metamod:Source was developed by:\n"); CMDMSG(client, " SourceHook: Pavol \"PM OnoTo\" Marko\n"); @@ -74,11 +66,7 @@ static void ReplyCredits(edict_t *client = nullptr) CMDMSG(client, "http://www.metamodsource.net/\n"); } -#if SOURCE_ENGINE == SE_DOTA -static void ReplyVersion(int client = 0) -#else static void ReplyVersion(edict_t *client = nullptr) -#endif { CMDMSG(client, " Metamod:Source Version Information\n"); CMDMSG(client, " Metamod:Source version %s\n", METAMOD_VERSION); @@ -654,11 +642,7 @@ bool Command_Meta(IMetamodSourceCommandInfo *info) return true; } -#if SOURCE_ENGINE == SE_DOTA -bool Command_ClientMeta(int client, IMetamodSourceCommandInfo *info) -#else bool Command_ClientMeta(edict_t *client, IMetamodSourceCommandInfo *info) -#endif { const char *cmd = info->GetArg(0); diff --git a/core/metamod_console.h b/core/metamod_console.h index ef3d5290..6b3e278d 100644 --- a/core/metamod_console.h +++ b/core/metamod_console.h @@ -31,10 +31,6 @@ #include "metamod_provider.h" bool Command_Meta(IMetamodSourceCommandInfo *info); -#if SOURCE_ENGINE == SE_DOTA -bool Command_ClientMeta(int client, IMetamodSourceCommandInfo *info); -#else bool Command_ClientMeta(edict_t *client, IMetamodSourceCommandInfo *info); -#endif #endif //_INCLUDE_CONCOMMANDS_H diff --git a/core/metamod_provider.h b/core/metamod_provider.h index b7fdebdb..b44e61f8 100644 --- a/core/metamod_provider.h +++ b/core/metamod_provider.h @@ -51,29 +51,6 @@ namespace SourceMM #endif }; - /** - * @brief Interface for Metamod:Source to provide callbacks to the - * provider. - */ - class IMetamodSourceProviderCallbacks - { - public: - /** - * @brief Called before the server DLL handles game initialization. - */ - virtual void OnGameInit() = 0; - - /** - * @brief Called after the server DLL has completed handling level/map initialization. - */ - virtual void OnLevelInit(char const* pMapName, char const* pMapEntities, char const* pOldLevel, char const* pLandmarkName, bool loadGame, bool background) = 0; - - /** - * @brief Called after the server DLL has completed handling level/map shut down. - */ - virtual void OnLevelShutdown() = 0; - }; - /** * @brief Abstracts command information, since the new engine fixes the * re-entrancy problems in the tokenization system. @@ -105,6 +82,34 @@ namespace SourceMM virtual const char *GetArgString() =0; }; + /** + * @brief Interface for Metamod:Source to provide callbacks to the + * provider. + */ + class IMetamodSourceProviderCallbacks + { + public: + /** + * @brief Called before the server DLL handles game initialization. + */ + virtual void OnGameInit() = 0; + + /** + * @brief Called after the server DLL has completed handling level/map initialization. + */ + virtual void OnLevelInit(char const* pMapName, char const* pMapEntities, char const* pOldLevel, char const* pLandmarkName, bool loadGame, bool background) = 0; + + /** + * @brief Called after the server DLL has completed handling level/map shut down. + */ + virtual void OnLevelShutdown() = 0; + + /** + * @brief Called when a client executes "meta" as a ClientCommand + */ + virtual bool OnCommand_ClientMeta(edict_t* client, IMetamodSourceCommandInfo* info) = 0; + }; + class IMetamodSourceProvider { public: diff --git a/core/provider/source/provider_source.cpp b/core/provider/source/provider_source.cpp index 9742841e..c678eefb 100644 --- a/core/provider/source/provider_source.cpp +++ b/core/provider/source/provider_source.cpp @@ -631,7 +631,11 @@ void SourceProvider::Hook_ClientCommand(edict_t * client) #endif if (strcmp(cmd.GetArg(0), "meta") == 0) { - Command_ClientMeta(client, &cmd); + if (nullptr != m_pCallbacks) + { + m_pCallbacks->OnCommand_ClientMeta(client, &cmd); + } + RETURN_META(MRES_SUPERCEDE); } diff --git a/core/provider/source2/provider_source2.cpp b/core/provider/source2/provider_source2.cpp index fcb8f261..d6dd8cd2 100644 --- a/core/provider/source2/provider_source2.cpp +++ b/core/provider/source2/provider_source2.cpp @@ -431,7 +431,12 @@ void Source2Provider::Hook_ClientCommand(CEntityIndex index, const CCommand& _cm if (strcmp(cmd.GetArg(0), "meta") == 0) { - Command_ClientMeta(client, &cmd); + if (nullptr != m_pCallbacks) + { + auto pEdict = reinterpret_cast(gpGlobals->pEdicts + (intp)client); + m_pCallbacks->OnCommand_ClientMeta(pEdict, &cmd); + } + RETURN_META(MRES_SUPERCEDE); } From 088e2d80c7dd589110d4828c3f9a1aa3043ca563 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sun, 2 Apr 2023 10:15:58 -0400 Subject: [PATCH 16/39] Do s1/s2 split on GetCommandLineValue --- core/provider/provider_base.cpp | 20 -------------------- core/provider/provider_base.h | 2 +- core/provider/source/provider_source.cpp | 20 ++++++++++++++++++++ core/provider/source/provider_source.h | 1 + core/provider/source2/provider_source2.cpp | 5 +++++ core/provider/source2/provider_source2.h | 1 + 6 files changed, 28 insertions(+), 21 deletions(-) diff --git a/core/provider/provider_base.cpp b/core/provider/provider_base.cpp index 07761907..d8e8947a 100644 --- a/core/provider/provider_base.cpp +++ b/core/provider/provider_base.cpp @@ -61,26 +61,6 @@ bool BaseProvider::IsSourceEngineBuildCompatible(int build) || build == SOURCE_ENGINE_EPISODEONE); } -const char *BaseProvider::GetCommandLineValue(const char *key, const char *defval) -{ - if (key[0] == '-' || key[0] == '+') - { - return CommandLine()->ParmValue(key, defval); - } - else if (icvar) - { - const char *val; - if ((val = icvar->GetCommandLineValue(key)) == NULL) - { - return defval; - } - - return val; - } - - return NULL; -} - int BaseProvider::TryServerGameDLL(const char *iface) { if (strncmp(iface, "ServerGameDLL", 13) != 0) diff --git a/core/provider/provider_base.h b/core/provider/provider_base.h index 9abdff43..7e7e7edf 100644 --- a/core/provider/provider_base.h +++ b/core/provider/provider_base.h @@ -58,6 +58,7 @@ class BaseProvider : public IMetamodSourceProvider virtual void GetGamePath(char *pszBuffer, int len) override = 0; virtual const char *GetGameDescription() override = 0; virtual bool ProcessVDF(const char* file, char path[], size_t path_len, char alias[], size_t alias_len) override = 0; + virtual const char* GetCommandLineValue(const char* key, const char* defval) override = 0; virtual void ConsolePrint(const char* msg) override = 0; virtual void ClientConsolePrint(edict_t* client, const char* msg) override = 0; virtual void ServerCommand(const char* cmd) override = 0; @@ -77,7 +78,6 @@ class BaseProvider : public IMetamodSourceProvider public: // May implement/override virtual bool IsSourceEngineBuildCompatible(int build) override; virtual bool LogMessage(const char *buffer) override; - virtual const char *GetCommandLineValue(const char *key, const char *defval) override; virtual void DisplayError(const char *fmt, ...) override; virtual void DisplayWarning(const char *fmt, ...) override; virtual void DisplayDevMsg(const char* fmt, ...) override; diff --git a/core/provider/source/provider_source.cpp b/core/provider/source/provider_source.cpp index c678eefb..ebec0871 100644 --- a/core/provider/source/provider_source.cpp +++ b/core/provider/source/provider_source.cpp @@ -329,6 +329,26 @@ void SourceProvider::ConsolePrint(const char* str) #endif } +const char* SourceProvider::GetCommandLineValue(const char* key, const char* defval) +{ + if (key[0] == '-' || key[0] == '+') + { + return CommandLine()->ParmValue(key, defval); + } + else if (icvar) + { + const char* val; + if ((val = icvar->GetCommandLineValue(key)) == NULL) + { + return defval; + } + + return val; + } + + return NULL; +} + void SourceProvider::ClientConsolePrint(edict_t* pEdict, const char* message) { engine->ClientPrintf(pEdict, message); diff --git a/core/provider/source/provider_source.h b/core/provider/source/provider_source.h index f09532aa..425e6cc5 100644 --- a/core/provider/source/provider_source.h +++ b/core/provider/source/provider_source.h @@ -43,6 +43,7 @@ class SourceProvider : public BaseProvider virtual const char* GetEngineDescription() const override; virtual void GetGamePath(char* pszBuffer, int len) override; virtual const char* GetGameDescription() override; + virtual const char* GetCommandLineValue(const char* key, const char* defval) override; virtual void ConsolePrint(const char* msg) override; virtual void ClientConsolePrint(edict_t* client, const char* msg) override; virtual void ServerCommand(const char* cmd) override; diff --git a/core/provider/source2/provider_source2.cpp b/core/provider/source2/provider_source2.cpp index d6dd8cd2..34eb0e19 100644 --- a/core/provider/source2/provider_source2.cpp +++ b/core/provider/source2/provider_source2.cpp @@ -226,6 +226,11 @@ bool Source2Provider::Hook_AllowDedicatedServers(EUniverse universe) const } #endif +const char* Source2Provider::GetCommandLineValue(const char* key, const char* defval) +{ + return CommandLine()->ParmValue(key, defval); +} + void Source2Provider::ConsolePrint(const char* str) { ConMsg("%s", str); diff --git a/core/provider/source2/provider_source2.h b/core/provider/source2/provider_source2.h index bdb00ad8..a26bebe5 100644 --- a/core/provider/source2/provider_source2.h +++ b/core/provider/source2/provider_source2.h @@ -50,6 +50,7 @@ class Source2Provider : public BaseProvider virtual const char* GetEngineDescription() const override; virtual void GetGamePath(char* pszBuffer, int len) override; virtual const char* GetGameDescription() override; + virtual const char* GetCommandLineValue(const char* key, const char* defval) override; virtual void ConsolePrint(const char* msg) override; virtual void ClientConsolePrint(edict_t* client, const char* msg) override; virtual void ServerCommand(const char* cmd) override; From 8f619851df3bad347fb52adff6e891a8c7dfda39 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sun, 2 Apr 2023 10:30:26 -0400 Subject: [PATCH 17/39] Remove ProvidedHooks enum. No longer used --- core/metamod_provider.h | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/core/metamod_provider.h b/core/metamod_provider.h index b44e61f8..7387af06 100644 --- a/core/metamod_provider.h +++ b/core/metamod_provider.h @@ -37,20 +37,6 @@ namespace SourceMM ConVarFlag_SpOnly = 2, }; - enum ProvidedHooks - { -#if SOURCE_ENGINE == SE_DOTA - ProvidedHook_StartChangeLevel = 0, - ProvidedHook_Init = 1, - ProvidedHook_StartupServer = 2, - ProvidedHook_SwitchToLoop = 3, -#else - ProvidedHook_LevelInit = 0, /**< IServerGameDLL::LevelInit */ - ProvidedHook_LevelShutdown = 1, /**< IServerGameDLL::LevelShutdown */ - ProvidedHook_GameInit = 4, /**< IServerGameDLL::GameInit */ -#endif - }; - /** * @brief Abstracts command information, since the new engine fixes the * re-entrancy problems in the tokenization system. From 6a1a79df429380ec95997b2ac3cf87ec4430d385 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sun, 2 Apr 2023 10:44:11 -0400 Subject: [PATCH 18/39] Missed part of ClientCommand s2 hack removal outside of provider --- core/metamod.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/core/metamod.h b/core/metamod.h index 60001a9d..82b6bf80 100644 --- a/core/metamod.h +++ b/core/metamod.h @@ -74,10 +74,6 @@ class MetamodSource : public ISmmAPI void *InterfaceSearch(CreateInterfaceFn fn, const char *iface, int max, int *ret); const char *GetBaseDir(); size_t PathFormat(char *buffer, size_t len, const char *fmt, ...); -#if SOURCE_ENGINE == SE_DOTA - // Shim - void ClientConPrintf(int clientIndex, const char *fmt, ...); -#endif void ClientConPrintf(edict_t *client, const char *fmt, ...); void *VInterfaceMatch(CreateInterfaceFn fn, const char *iface, int min=-1); void EnableVSPListener(); From 15c84495cbcd9e4eda3c6d3c22690111392dd4d6 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sun, 2 Apr 2023 11:01:22 -0400 Subject: [PATCH 19/39] Don't compile in VSP bridge on s2. --- core/AMBuilder | 6 +++--- core/vsp_bridge.cpp | 15 ++++----------- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/core/AMBuilder b/core/AMBuilder index 9d0790e1..c0bfef13 100644 --- a/core/AMBuilder +++ b/core/AMBuilder @@ -23,8 +23,7 @@ for sdk_name in MMS.sdks: 'sourcehook/sourcehook_impl_chookmaninfo.cpp', 'sourcehook/sourcehook_impl_cproto.cpp', 'sourcehook/sourcehook_impl_cvfnptr.cpp', - 'gamedll_bridge.cpp', - 'vsp_bridge.cpp' + 'gamedll_bridge.cpp' ] if sdk_name in ['dota', 'cs2']: @@ -32,7 +31,8 @@ for sdk_name in MMS.sdks: else: binary.sources += [ 'provider/source/provider_source.cpp', - 'provider/source/provider_source_console.cpp' + 'provider/source/provider_source_console.cpp', + 'vsp_bridge.cpp' ] # Source2 hack. TODO: check this more deterministically, "are we doing an x64 build?" diff --git a/core/vsp_bridge.cpp b/core/vsp_bridge.cpp index 06c696b8..40a7f35c 100644 --- a/core/vsp_bridge.cpp +++ b/core/vsp_bridge.cpp @@ -34,9 +34,7 @@ #include #include "provider/provider_base.h" -#if SOURCE_ENGINE == SE_DOTA -SH_DECL_HOOK2_void(ConCommand, Dispatch, SH_NOATTRIB, false, const CCommandContext &, const CCommand &); -#elif SOURCE_ENGINE >= SE_ORANGEBOX +#if SOURCE_ENGINE >= SE_ORANGEBOX SH_DECL_HOOK1_void(ConCommand, Dispatch, SH_NOATTRIB, false, const CCommand &); #else SH_DECL_HOOK0_void(ConCommand, Dispatch, SH_NOATTRIB, false); @@ -46,9 +44,7 @@ ConCommand *g_plugin_unload = NULL; bool g_bIsTryingToUnload; SourceHook::String vsp_desc("Metamod:Source"); -#if SOURCE_ENGINE == SE_DOTA -void InterceptPluginUnloads(const CCommandContext &context, const CCommand &args) -#elif SOURCE_ENGINE >= SE_ORANGEBOX +#if SOURCE_ENGINE >= SE_ORANGEBOX void InterceptPluginUnloads(const CCommand &args) #else void InterceptPluginUnloads() @@ -57,9 +53,7 @@ void InterceptPluginUnloads() g_bIsTryingToUnload = true; } -#if SOURCE_ENGINE == SE_DOTA -void InterceptPluginUnloads_Post(const CCommandContext &context, const CCommand &args) -#elif SOURCE_ENGINE >= SE_ORANGEBOX +#if SOURCE_ENGINE >= SE_ORANGEBOX void InterceptPluginUnloads_Post(const CCommand &args) #else void InterceptPluginUnloads_Post() @@ -165,13 +159,12 @@ class VspBridge : public IVspBridge virtual void Unload() { // Source2 doesn't have the Error function (nor VSP support). -#if SOURCE_ENGINE != SE_DOTA if (g_bIsTryingToUnload) { Error("Metamod:Source cannot be unloaded from VSP mode. Use \"meta unload\" to unload specific plugins.\n"); return; } -#endif + if (g_plugin_unload != NULL) { SH_REMOVE_HOOK_STATICFUNC(ConCommand, Dispatch, g_plugin_unload, InterceptPluginUnloads, false); From acd8644688029d7202801a842c3b4f725bcdcadc Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sun, 2 Apr 2023 12:08:28 -0400 Subject: [PATCH 20/39] Fix provider reaching calling directly outside for "meta" ConCommand --- core/metamod.cpp | 5 +++++ core/metamod_provider.h | 5 +++++ core/provider/source/provider_source.cpp | 21 ++++++++++----------- core/provider/source/provider_source.h | 6 ++++++ core/provider/source2/provider_source2.cpp | 17 ++++++++++------- core/provider/source2/provider_source2.h | 2 ++ 6 files changed, 38 insertions(+), 18 deletions(-) diff --git a/core/metamod.cpp b/core/metamod.cpp index c21729cc..a1a2dc35 100644 --- a/core/metamod.cpp +++ b/core/metamod.cpp @@ -195,6 +195,11 @@ static class ProviderCallbacks : public IMetamodSourceProviderCallbacks ITER_EVENT(OnLevelShutdown, ()); } + virtual bool OnCommand_Meta(IMetamodSourceCommandInfo* info) override + { + return Command_Meta(info); + } + virtual bool OnCommand_ClientMeta(edict_t* client, IMetamodSourceCommandInfo* info) override { return Command_ClientMeta(client, info); diff --git a/core/metamod_provider.h b/core/metamod_provider.h index 7387af06..e1065d61 100644 --- a/core/metamod_provider.h +++ b/core/metamod_provider.h @@ -90,6 +90,11 @@ namespace SourceMM */ virtual void OnLevelShutdown() = 0; + /** + * @brief Called when the ConCommand "meta" is executed + */ + virtual bool OnCommand_Meta(IMetamodSourceCommandInfo* info) = 0; + /** * @brief Called when a client executes "meta" as a ClientCommand */ diff --git a/core/provider/source/provider_source.cpp b/core/provider/source/provider_source.cpp index ebec0871..d5eb3edb 100644 --- a/core/provider/source/provider_source.cpp +++ b/core/provider/source/provider_source.cpp @@ -30,14 +30,12 @@ #include #include -#if SOURCE_ENGINE >= SE_ORANGEBOX -void LocalCommand_Meta(const CCommand& args); -#else -void LocalCommand_Meta(); -#endif - ConCommand meta_local_cmd("meta", LocalCommand_Meta, "Metamod:Source control options"); +static SourceProvider g_SourceProvider; + +IMetamodSourceProvider* provider = &g_SourceProvider; + SH_DECL_HOOK0(IServerGameDLL, GameInit, SH_NOATTRIB, 0, bool); SH_DECL_HOOK6(IServerGameDLL, LevelInit, SH_NOATTRIB, 0, bool, const char*, const char*, const char*, const char*, bool, bool); SH_DECL_HOOK0_void(IServerGameDLL, LevelShutdown, SH_NOATTRIB, 0); @@ -466,7 +464,12 @@ void LocalCommand_Meta() { GlobCommand cmd; #endif - Command_Meta(&cmd); + + if (nullptr != g_SourceProvider.m_pCallbacks) + { + GlobCommand cmd(&args); + g_SourceProvider.m_pCallbacks->OnCommand_Meta(&cmd); + } } #if SOURCE_ENGINE == SE_CSGO || SOURCE_ENGINE == SE_BLADE || SOURCE_ENGINE == SE_MCV @@ -661,7 +664,3 @@ void SourceProvider::Hook_ClientCommand(edict_t * client) RETURN_META(MRES_IGNORED); } - -static SourceProvider g_SourceProvider; - -IMetamodSourceProvider* provider = &g_SourceProvider; \ No newline at end of file diff --git a/core/provider/source/provider_source.h b/core/provider/source/provider_source.h index 425e6cc5..3029e80b 100644 --- a/core/provider/source/provider_source.h +++ b/core/provider/source/provider_source.h @@ -115,6 +115,12 @@ class SourceProvider : public BaseProvider IFileSystem* baseFs = nullptr; std::vector usermsgs_list; bool bOriginalEngine = false; + +#if SOURCE_ENGINE >= SE_ORANGEBOX + friend void LocalCommand_Meta(const CCommand& args); +#else + friend void LocalCommand_Meta(); +#endif }; #endif diff --git a/core/provider/source2/provider_source2.cpp b/core/provider/source2/provider_source2.cpp index 34eb0e19..d81d3f31 100644 --- a/core/provider/source2/provider_source2.cpp +++ b/core/provider/source2/provider_source2.cpp @@ -33,7 +33,11 @@ #include #include -void LocalCommand_Meta(const CCommand& args); + +static Source2Provider g_Source2Provider; + +IMetamodSourceProvider* provider = &g_Source2Provider; + ConCommand meta_local_cmd("meta", LocalCommand_Meta, "Metamod:Source control options"); @@ -346,8 +350,11 @@ class GlobCommand : public IMetamodSourceCommandInfo void LocalCommand_Meta(const CCommand& args) { - GlobCommand cmd(&args); - Command_Meta(&cmd); + if (nullptr != g_Source2Provider.m_pCallbacks) + { + GlobCommand cmd(&args); + g_Source2Provider.m_pCallbacks->OnCommand_Meta(&cmd); + } } bool Source2Provider::KVLoadFromFile(KeyValues* kv, IFileSystem* filesystem, const char* resourceName, const char* pathID) @@ -447,7 +454,3 @@ void Source2Provider::Hook_ClientCommand(CEntityIndex index, const CCommand& _cm RETURN_META(MRES_IGNORED); } - -static Source2Provider g_Source2Provider; - -IMetamodSourceProvider* provider = &g_Source2Provider; \ No newline at end of file diff --git a/core/provider/source2/provider_source2.h b/core/provider/source2/provider_source2.h index a26bebe5..ff90d6e4 100644 --- a/core/provider/source2/provider_source2.h +++ b/core/provider/source2/provider_source2.h @@ -77,6 +77,8 @@ class Source2Provider : public BaseProvider private: IFileSystem* baseFs = nullptr; std::string sLastMap; + + friend void LocalCommand_Meta(const CCommand& args); }; #endif From d62379244cc74d091d2ec3f425b9a3ef06908d7e Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Tue, 16 May 2023 14:31:31 -0400 Subject: [PATCH 21/39] Add and use META_IS_SOURCE2 define --- AMBuildScript | 2 ++ core/ISmmPlugin.h | 2 +- core/gamedll_bridge.cpp | 2 +- core/provider/provider_base.h | 4 ++-- core/provider/source/provider_source.h | 2 +- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/AMBuildScript b/AMBuildScript index 00418a19..930cbd35 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -398,6 +398,8 @@ class MMSConfig(object): if sdk.name in ['csgo', 'blade', 'pvkii'] and compiler.target.platform == 'linux': compiler.linkflags += ['-lstdc++'] + if sdk.name in ['dota', 'cs2']: + compiler.defines += ['META_IS_SOURCE2'] for path in paths: compiler.cxxincludes += [os.path.join(sdk.path, *path)] diff --git a/core/ISmmPlugin.h b/core/ISmmPlugin.h index d15dfc54..f0d185d7 100644 --- a/core/ISmmPlugin.h +++ b/core/ISmmPlugin.h @@ -40,7 +40,7 @@ #include #ifndef META_NO_HL2SDK -#if SOURCE_ENGINE == SE_DOTA +#if META_IS_SOURCE2 #include #else #include diff --git a/core/gamedll_bridge.cpp b/core/gamedll_bridge.cpp index 2c6f5758..0743bef8 100644 --- a/core/gamedll_bridge.cpp +++ b/core/gamedll_bridge.cpp @@ -63,7 +63,7 @@ class GameDllBridge : public IGameDllBridge SourceHook::MemFuncInfo mfi; mfi.isVirtual = false; -#if SOURCE_ENGINE == SE_DOTA +#ifdef META_IS_SOURCE2 SourceHook::GetFuncInfo(&IServerGameDLL::Shutdown, mfi); #else SourceHook::GetFuncInfo(&IServerGameDLL::DLLShutdown, mfi); diff --git a/core/provider/provider_base.h b/core/provider/provider_base.h index 7e7e7edf..3092eba5 100644 --- a/core/provider/provider_base.h +++ b/core/provider/provider_base.h @@ -32,7 +32,7 @@ #endif #include #include -#if SOURCE_ENGINE != SE_DOTA +#if !defined META_IS_SOURCE2 #include #endif #include "ISmmAPI.h" @@ -96,7 +96,7 @@ extern IServerGameDLL *server; extern IServerGameClients *gameclients; extern ICvar *icvar; extern CGlobalVars *gpGlobals; -#if SOURCE_ENGINE == SE_DOTA +#if defined META_IS_SOURCE2 extern INetworkServerService *netservice; extern IEngineServiceMgr *enginesvcmgr; #endif diff --git a/core/provider/source/provider_source.h b/core/provider/source/provider_source.h index 3029e80b..3d80baed 100644 --- a/core/provider/source/provider_source.h +++ b/core/provider/source/provider_source.h @@ -105,7 +105,7 @@ class SourceProvider : public BaseProvider bool KVLoadFromFile(KeyValues* kv, IFileSystem* filesystem, const char* resourceName, const char* pathID = nullptr); inline bool IsUserMessageIterationSupported() const { -#if SOURCE_ENGINE == SE_CSGO || SOURCE_ENGINE == SE_DOTA || SOURCE_ENGINE == SE_BLADE || SOURCE_ENGINE == SE_MCV +#if SOURCE_ENGINE == SE_CSGO || SOURCE_ENGINE == SE_BLADE || SOURCE_ENGINE == SE_MCV return false; #else return true; From 2e43b26539eae36b7c1920684c9bcd1ad63ba585 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Tue, 16 May 2023 16:20:53 -0400 Subject: [PATCH 22/39] Fix ambuild script error when using branch name with utf-8 chars --- support/buildbot/Versioning | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/support/buildbot/Versioning b/support/buildbot/Versioning index ff54eb32..3c2101c6 100644 --- a/support/buildbot/Versioning +++ b/support/buildbot/Versioning @@ -16,7 +16,7 @@ outputs = [ os.path.join(builder.buildFolder, 'includes', 'metamod_version_auto.h') ] -with open(os.path.join(builder.sourcePath, '.git', 'HEAD')) as fp: +with open(os.path.join(builder.sourcePath, '.git', 'HEAD'), encoding='utf-8') as fp: head_contents = fp.read().strip() if re.search('^[a-fA-F0-9]{40}$', head_contents): git_head_path = os.path.join(builder.sourcePath, '.git', 'HEAD') From e1a81e3c06c3949c045e19b7d671369bc72a475c Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sun, 21 May 2023 12:07:05 -0400 Subject: [PATCH 23/39] Improve CS2 support and S2 game detection --- AMBuildScript | 10 ++--- core/provider/source2/provider_source2.cpp | 4 +- loader/gamedll.cpp | 11 ++++- loader/loader.cpp | 52 ++++++++++++++++------ loader/loader.h | 5 ++- loader/serverplugin.cpp | 5 +-- 6 files changed, 60 insertions(+), 27 deletions(-) diff --git a/AMBuildScript b/AMBuildScript index 930cbd35..7e4a71c2 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -78,7 +78,7 @@ PossibleSDKs = { 'mock': SDK('HL2SDK-MOCK', '2.mock', '999', 'MOCK', Mock, 'mock'), 'pvkii': SDK('HL2SDKPVKII', '2.pvkii', '10', 'PVKII', WinLinux, 'pvkii'), 'dota': SDK('HL2SDKDOTA', '2.dota', '24', 'DOTA', Source2, 'dota'), - 'cs2': SDK('HL2SDKCS2', '2.cs2', '25', 'CS2', [], 'cs2'), + 'cs2': SDK('HL2SDKCS2', '2.cs2', '25', 'CS2', Source2, 'cs2'), } def ResolveEnvPath(env, folder): @@ -391,7 +391,7 @@ class MMSConfig(object): if compiler.target.arch == 'x86_64': compiler.defines += ['X64BITS', 'PLATFORM_64BITS'] - if sdk.name in ['css', 'hl2dm', 'dods', 'sdk2013', 'bms', 'tf2', 'l4d', 'nucleardawn', 'l4d2', 'dota', 'pvkii']: + if sdk.name in ['css', 'hl2dm', 'dods', 'sdk2013', 'bms', 'tf2', 'l4d', 'nucleardawn', 'l4d2', 'dota', 'cs2', 'pvkii']: if compiler.target.platform in ['linux', 'mac']: compiler.defines += ['NO_HOOK_MALLOC', 'NO_MALLOC_OVERRIDE'] @@ -475,7 +475,7 @@ class MMSConfig(object): compiler.linkflags += ['-Wl,-z,origin'] compiler.postlink += [tier1] - if sdk.name in ['blade', 'insurgency', 'doi', 'csgo', 'dota']: + if sdk.name in ['blade', 'insurgency', 'doi', 'csgo', 'cs2', 'dota']: if compiler.target.arch == 'x86_64': compiler.postlink += [os.path.join(lib_folder, 'interfaces.a')] else: @@ -494,7 +494,7 @@ class MMSConfig(object): dynamic_libs = ['libtier0_srv.so', 'libvstdlib_srv.so'] elif compiler.target.arch == 'x86_64' and sdk.name in ['csgo', 'mock']: dynamic_libs = ['libtier0_client.so', 'libvstdlib_client.so'] - elif sdk.name in ['l4d', 'blade', 'insurgency', 'doi', 'csgo', 'dota', 'pvkii']: + elif sdk.name in ['l4d', 'blade', 'insurgency', 'doi', 'csgo', 'cs2', 'dota', 'pvkii']: dynamic_libs = ['libtier0.so'] if sdk.name not in ['dota', 'cs2']: dynamic_libs += ['libvstdlib.so'] @@ -509,7 +509,7 @@ class MMSConfig(object): libs = ['tier0', 'tier1'] if sdk.name not in ['dota', 'cs2']: libs += ['vstdlib'] - if sdk.name in ['swarm', 'blade', 'insurgency', 'doi', 'mcv', 'csgo', 'dota']: + if sdk.name in ['swarm', 'blade', 'insurgency', 'doi', 'mcv', 'csgo', 'cs2', 'dota']: libs.append('interfaces') if sdk.name == 'bms': libs.append('mathlib') diff --git a/core/provider/source2/provider_source2.cpp b/core/provider/source2/provider_source2.cpp index d81d3f31..13502fda 100644 --- a/core/provider/source2/provider_source2.cpp +++ b/core/provider/source2/provider_source2.cpp @@ -215,7 +215,9 @@ const char* Source2Provider::GetEngineDescription() const void Source2Provider::GetGamePath(char* pszBuffer, int len) { - ke::SafeSprintf(pszBuffer, len, "%s", Plat_GetGameDirectory()); + CBufferStringGrowable buf; + engine->GetGameDir(buf); + ke::SafeSprintf(pszBuffer, len, "%s", buf.Get()); } const char* Source2Provider::GetGameDescription() diff --git a/loader/gamedll.cpp b/loader/gamedll.cpp index 66b9c5d3..8bf062b1 100644 --- a/loader/gamedll.cpp +++ b/loader/gamedll.cpp @@ -328,7 +328,14 @@ class ISource2Server virtual InitReturnVal_t Init() { - mm_backend = MMBackend_DOTA; + if (!stricmp("csgo", game_name)) + { + mm_backend = MMBackend_CS2; + } + else + { + mm_backend = MMBackend_DOTA; + } char error[255]; if (!mm_LoadMetamodLibrary(mm_backend, error, sizeof(error))) @@ -454,7 +461,7 @@ class IServerGameDLL QueryValveInterface fileSystemFactory, void *pGlobals) { - mm_backend = mm_DetermineBackend(engineFactory, gamedll_qvi, game_name); + mm_backend = mm_DetermineBackendS1(engineFactory, gamedll_qvi, game_name); char error[255]; if (mm_backend == MMBackend_UNKNOWN) diff --git a/loader/loader.cpp b/loader/loader.cpp index 876b832a..d554d00f 100644 --- a/loader/loader.cpp +++ b/loader/loader.cpp @@ -2,7 +2,7 @@ * vim: set ts=4 sw=4 tw=99 noet : * ====================================================== * Metamod:Source - * Copyright (C) 2004-2015 AlliedModders LLC and authors. + * Copyright (C) 2004-2023 AlliedModders LLC and authors. * All rights reserved. * ====================================================== * @@ -29,6 +29,7 @@ #include #include #include +#include #include "loader.h" #include "serverplugin.h" #include "gamedll.h" @@ -93,7 +94,8 @@ static const char *backend_names[] = "2.doi", "2.mock", "2.pvkii", - "2.mcv" + "2.mcv", + "2.cs2", }; #if defined _WIN32 @@ -198,6 +200,8 @@ mm_GetProcAddress(const char *name) return mm_GetLibAddress(mm_library, name); } +typedef const char *(*GetGameInfoStringFn)(const char *pszKeyName, const char *pszDefaultValue, char *pszOut, uint64_t cbOut); + void mm_GetGameName(char *buffer, size_t size) { @@ -283,24 +287,44 @@ mm_GetGameName(char *buffer, size_t size) if (buffer[0] == 0) { - // HackHackHack - Different engines have different defaults if -game isn't specified - // we only use this for game detection, and not even in all cases. Old behavior was to - // give back ".", which was only really accurate for Dark Messiah. We'll add a special - // case for Source2 / Dota as well, since it only supports gameinfo loading, which relies - // on accuracy here more than VSP loading. - if (bHasDedicated) - { - strncpy(buffer, "dota", size); - } - else + char tier0_path[PLATFORM_MAX_PATH]; +#ifdef _WIN32 + if (mm_ResolvePath("tier0.dll", tier0_path, sizeof(tier0_path), false)) +#elif defined __linux__ + if (mm_ResolvePath("libtier0.so", tier0_path, sizeof(tier0_path), false)) +#elif defined __APPLE__ + if (mm_ResolvePath("libtier0.dylib", tier0_path, sizeof(tier0_path), false))#else +#error unsupported platform +#endif { - strncpy(buffer, ".", size); + char err[1024]; + void* pTier0 = mm_LoadLibrary(tier0_path, err, sizeof(err)); + if (pTier0) + { +#ifdef _WIN32 + GetGameInfoStringFn func = (GetGameInfoStringFn)mm_GetLibAddress(pTier0, "?GetGameInfoString@@YAPEBDPEBD0PEAD_K@Z"); +#else + GetGameInfoStringFn func = (GetGameInfoStringFn)mm_GetLibAddress(pTier0, "__Z17GetGameInfoStringPKcS0_Pcm"); +#endif + if (func != nullptr) + { + static char szTmp[260]; + strncpy(buffer, func("FileSystem/SearchPaths/Mod", "", szTmp, sizeof(szTmp)), size); + } + + mm_UnloadLibrary(pTier0); + } } } + + if (buffer[0] == 0) + { + strncpy(buffer, ".", size); + } } MetamodBackend -mm_DetermineBackend(QueryValveInterface engineFactory, QueryValveInterface serverFactory, const char *game_name) +mm_DetermineBackendS1(QueryValveInterface engineFactory, QueryValveInterface serverFactory, const char *game_name) { if (engineFactory("VEngineServer023", NULL) != NULL) { diff --git a/loader/loader.h b/loader/loader.h index a4b02a71..aac8ca35 100644 --- a/loader/loader.h +++ b/loader/loader.h @@ -2,7 +2,7 @@ * vim: set ts=4 sw=4 tw=99 noet : * ====================================================== * Metamod:Source - * Copyright (C) 2004-2015 AlliedModders LLC and authors. + * Copyright (C) 2004-2023 AlliedModders LLC and authors. * All rights reserved. * ====================================================== * @@ -106,6 +106,7 @@ enum MetamodBackend MMBackend_Mock, MMBackend_PVKII, MMBackend_MCV, + MMBackend_CS2, MMBackend_UNKNOWN }; @@ -125,7 +126,7 @@ extern void mm_GetGameName(char *buffer, size_t size); extern MetamodBackend -mm_DetermineBackend(QueryValveInterface engineFactory, QueryValveInterface serverFactory, const char *game_name); +mm_DetermineBackendS1(QueryValveInterface engineFactory, QueryValveInterface serverFactory, const char *game_name); extern MetamodBackend mm_backend; diff --git a/loader/serverplugin.cpp b/loader/serverplugin.cpp index 72164bdc..c6bf4fd6 100644 --- a/loader/serverplugin.cpp +++ b/loader/serverplugin.cpp @@ -90,7 +90,7 @@ class ServerPlugin { mm_GetGameName(game_name, sizeof(game_name)); - mm_backend = mm_DetermineBackend(engineFactory, gsFactory, game_name); + mm_backend = mm_DetermineBackendS1(engineFactory, gsFactory, game_name); if (mm_backend == MMBackend_Mock) strcpy(game_name, "mock"); } @@ -139,8 +139,7 @@ class ServerPlugin && mm_backend != MMBackend_Insurgency && mm_backend != MMBackend_DOI && mm_backend != MMBackend_CSGO - && mm_backend != MMBackend_MCV - && mm_backend != MMBackend_DOTA) + && mm_backend != MMBackend_MCV) { SourceHook::MemFuncInfo mfp_fconnect; mfp_fconnect.isVirtual = false; From edc80a0957f753802355903465381b3eb2e67685 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sun, 21 May 2023 12:07:22 -0400 Subject: [PATCH 24/39] Add dll2lib helper script --- support/dll2lib.ps1 | 96 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 support/dll2lib.ps1 diff --git a/support/dll2lib.ps1 b/support/dll2lib.ps1 new file mode 100644 index 00000000..0f1cae33 --- /dev/null +++ b/support/dll2lib.ps1 @@ -0,0 +1,96 @@ +<# +.SYNOPSIS + Generate a .lib file for linking to a dll. +.DESCRIPTION + This script generates a .lib from from a dynamic link library (dll) file. + + The .lib file can then be linked against to resolve symbols in the dll file. +.PARAMETER InputBinary + The path to the dll file. +.PARAMETER OutPath + The output folder in which to save the .lib file. Defaults to the directory of the dll file. + + The folder must already exist. +#> +[CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'High')] +param( + [Parameter(Mandatory, ValueFromPipeline)] + [ValidateScript({($_ -match '\.dll$') -and (Test-Path -Path $_ -PathType Leaf)})] + [string]$InputBinary, + + [Parameter()] + [ValidateScript({Test-Path -Path $_ -PathType Container})] + [string]$OutPath, + + [Parameter()] + [switch]$Force +) + +try { + $dumpbinBin = (Get-Command -Name 'dumpbin.exe').Source +} catch { + throw 'Could not find dumpbin.exe in PATH. (Are you running from a Developer Command Prompt?)' +} + +Write-Verbose "Found dumpbin.exe at '$dumpbinBin'" + +try { + $libBin = (Get-Command -Name 'lib.exe').Source +} catch { + throw 'Could not find lib.exe in PATH. (Are you running from a Developer Command Prompt?)' +} + +Write-Verbose "Found lib.exe at '$libBin'" + +$inputBinInfo = Get-Item -Path $InputBinary + +$defTempPath = Join-Path -Path ([System.IO.Path]::GetTempPath()) -ChildPath ('{0}.def' -f $inputBinInfo.BaseName) + +if (-not $OutPath) { + $OutPath = $inputBinInfo.DirectoryName +} + +Write-Verbose "Using output path '$OutPath'" + +$outLibFullName = Join-Path -Path $OutPath -ChildPath ('{0}.lib' -f $inputBinInfo.BaseName) +if ((-not (Test-Path -Path $outLibFullName)) -or $PSCmdlet.ShouldProcess($outLibFullName, 'overwrite')) +{ + $archCode = ((. $dumpbinBin /headers $inputBinInfo.FullName | Select-String -Context 1 -SimpleMatch -Pattern 'FILE HEADER VALUES' -CaseSensitive).Context.PostContext | Select-String -Pattern '^\s*([A-Z0-9]+) machine \(.*\)$' -CaseSensitive).Matches[0].Groups[1].Value + switch ($archCode) + { + '14C' { $arch = 'X86' } + '8664' { $arch = 'X64' } + 'AA64' { $arch = 'ARM64' } + default { + if ([Environment]::Is64BitOperatingSystem) { + $arch = 'X64' + } else { + $arch = 'X86' + } + # TODO: Add ARM64 detection fallback + + Write-Warning "Unable to determine arch of binary. Defaulting to $arch for lib." + } + } + + Write-Verbose "Using arch '$arch' for lib generation." + + $funcs = . $dumpbinBin /exports $inputBinInfo.FullName | + Select-String -Pattern '^\s+\d+\s+[A-Z0-9]+\s+[A-Z0-9]+\s+(.+)$' -CaseSensitive | + Select-Object -ExpandProperty 'Matches' | + ForEach-Object -Process { + $_.Groups[1].Value + } + + Write-Verbose "Found $($funcs.Count) functions in '$InputBinary'" + + Write-Verbose "Creating def file at '$defTempPath'" + 'EXPORTS' | Out-File $defTempPath -Force + $funcs | Out-File $defTempPath -Append + + Write-Verbose "Calling lib.exe to generate '$outLibFullName'" + . $libBin /def:$defTempPath /OUT:$outLibFullName /MACHINE:$arch + + Write-Verbose "Removing temp def file at '$defTempPath'" + Remove-Item -Path $defTempPath -Confirm:$false +} \ No newline at end of file From 956861f27ae94ee13eb769a757311cb1d2f23ad0 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sun, 21 May 2023 12:08:11 -0400 Subject: [PATCH 25/39] Bump version to 2.0.0-dev --- product.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product.version b/product.version index 381cf024..d72f2626 100644 --- a/product.version +++ b/product.version @@ -1 +1 @@ -1.12.0-dev +2.0.0-dev From 817b5f940eef4b76b865bd740af5276a8d1ff2f7 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sun, 21 May 2023 12:13:17 -0400 Subject: [PATCH 26/39] Iterate on ConCommands, ClientCommands, and the split S1/S2 compat --- core/ISmmAPI.h | 10 +++- core/metamod.cpp | 4 +- core/metamod.h | 62 +++++++++++----------- core/metamod_console.cpp | 10 ++-- core/metamod_console.h | 2 +- core/metamod_provider.h | 6 +-- core/provider/provider_base.h | 2 +- core/provider/source/provider_source.cpp | 2 +- core/provider/source/provider_source.h | 2 +- core/provider/source2/provider_source2.cpp | 25 ++++----- core/provider/source2/provider_source2.h | 6 +-- 11 files changed, 66 insertions(+), 65 deletions(-) diff --git a/core/ISmmAPI.h b/core/ISmmAPI.h index 6676e343..50dc7019 100644 --- a/core/ISmmAPI.h +++ b/core/ISmmAPI.h @@ -53,6 +53,14 @@ class ConCommandBase; #define MMIFACE_SH_HOOKMANAUTOGEN "IHookManagerAutoGen" /**< SourceHook::IHookManagerAutoGen Pointer */ #define IFACE_MAXNUM 999 /**< Maximum interface version */ +#if defined META_IS_SOURCE2 +typedef CPlayerSlot MMSPlayer_t; +static const MMSPlayer_t MMSPlayer_INVALID = CPlayerSlot(-1); +#else +typedef edict_t* MMSPlayer_t; +static const MMSPlayer_t MMSPlayer_INVALID = nullptr; +#endif + typedef void* (*CreateInterfaceFn)(const char *pName, int *pReturnCode); class IServerPluginCallbacks; @@ -255,7 +263,7 @@ namespace SourceMM * @param client Client edict pointer. * @param fmt Formatted string to print to the client. */ - virtual void ClientConPrintf(edict_t *client, const char *fmt, ...) =0; + virtual void ClientConPrintf(MMSPlayer_t client, const char *fmt, ...) =0; /** * @brief Wrapper around InterfaceSearch(). Assumes no maximum. diff --git a/core/metamod.cpp b/core/metamod.cpp index a1a2dc35..d57bab3d 100644 --- a/core/metamod.cpp +++ b/core/metamod.cpp @@ -200,7 +200,7 @@ static class ProviderCallbacks : public IMetamodSourceProviderCallbacks return Command_Meta(info); } - virtual bool OnCommand_ClientMeta(edict_t* client, IMetamodSourceCommandInfo* info) override + virtual bool OnCommand_ClientMeta(MMSPlayer_t client, IMetamodSourceCommandInfo* info) override { return Command_ClientMeta(client, info); } @@ -750,7 +750,7 @@ size_t MetamodSource::PathFormat(char *buffer, size_t len, const char *fmt, ...) return mylen; } -void MetamodSource::ClientConPrintf(edict_t *client, const char *fmt, ...) +void MetamodSource::ClientConPrintf(MMSPlayer_t client, const char *fmt, ...) { va_list ap; char buffer[2048]; diff --git a/core/metamod.h b/core/metamod.h index 82b6bf80..468c61f7 100644 --- a/core/metamod.h +++ b/core/metamod.h @@ -53,40 +53,40 @@ using namespace SourceMM; class MetamodSource : public ISmmAPI { +public: // ISmmAPI + void LogMsg(ISmmPlugin *pl, const char *msg, ...) override; + CreateInterfaceFn GetEngineFactory(bool syn=true) override; + CreateInterfaceFn GetPhysicsFactory(bool syn=true) override; + CreateInterfaceFn GetFileSystemFactory(bool syn=true) override; + CreateInterfaceFn GetServerFactory(bool syn=true) override; + CGlobalVars *GetCGlobals() override; + bool RegisterConCommandBase(ISmmPlugin *plugin, ConCommandBase *pCommand) override; + void UnregisterConCommandBase(ISmmPlugin *plugin, ConCommandBase *pCommand) override; + void ConPrint(const char *str) override; + void ConPrintf(const char *fmt, ...) override; + void GetApiVersions(int &major, int &minor, int &plvers, int &plmin) override; + void GetShVersions(int &shvers, int &shimpl) override; + void AddListener(ISmmPlugin *plugin, IMetamodListener *pListener) override; + void *MetaFactory(const char *iface, int *ret, PluginId *id) override; + int FormatIface(char iface[], size_t maxlength) override; + void *InterfaceSearch(CreateInterfaceFn fn, const char *iface, int max, int *ret) override; + const char *GetBaseDir() override; + size_t PathFormat(char *buffer, size_t len, const char *fmt, ...) override; + void ClientConPrintf(MMSPlayer_t client, const char *fmt, ...) override; + void *VInterfaceMatch(CreateInterfaceFn fn, const char *iface, int min=-1) override; + void EnableVSPListener() override; + int GetGameDLLVersion() override; + int GetUserMessageCount() override; + int FindUserMessage(const char *name, int *size=NULL) override; + const char *GetUserMessage(int index, int *size=NULL) override; + int GetVSPVersion() override; + int GetSourceEngineBuild() override; + IServerPluginCallbacks *GetVSPInfo(int *pVersion) override; + size_t Format(char *buffer, size_t maxlength, const char *format, ...) override; + size_t FormatArgs(char *buffer, size_t maxlength, const char *format, va_list ap) override; public: - void LogMsg(ISmmPlugin *pl, const char *msg, ...); - CreateInterfaceFn GetEngineFactory(bool syn=true); - CreateInterfaceFn GetPhysicsFactory(bool syn=true); - CreateInterfaceFn GetFileSystemFactory(bool syn=true); - CreateInterfaceFn GetServerFactory(bool syn=true); - CGlobalVars *GetCGlobals(); void SetLastMetaReturn(META_RES res); META_RES GetLastMetaReturn(); - bool RegisterConCommandBase(ISmmPlugin *plugin, ConCommandBase *pCommand); - void UnregisterConCommandBase(ISmmPlugin *plugin, ConCommandBase *pCommand); - void ConPrint(const char *str); - void ConPrintf(const char *fmt, ...); - void GetApiVersions(int &major, int &minor, int &plvers, int &plmin); - void GetShVersions(int &shvers, int &shimpl); - void AddListener(ISmmPlugin *plugin, IMetamodListener *pListener); - void *MetaFactory(const char *iface, int *ret, PluginId *id); - int FormatIface(char iface[], size_t maxlength); - void *InterfaceSearch(CreateInterfaceFn fn, const char *iface, int max, int *ret); - const char *GetBaseDir(); - size_t PathFormat(char *buffer, size_t len, const char *fmt, ...); - void ClientConPrintf(edict_t *client, const char *fmt, ...); - void *VInterfaceMatch(CreateInterfaceFn fn, const char *iface, int min=-1); - void EnableVSPListener(); - int GetGameDLLVersion(); - int GetUserMessageCount(); - int FindUserMessage(const char *name, int *size=NULL); - const char *GetUserMessage(int index, int *size=NULL); - int GetVSPVersion(); - int GetSourceEngineBuild(); - IServerPluginCallbacks *GetVSPInfo(int *pVersion); - size_t Format(char *buffer, size_t maxlength, const char *format, ...); - size_t FormatArgs(char *buffer, size_t maxlength, const char *format, va_list ap); -public: bool IsLoadedAsGameDLL(); const char *GetGameBinaryPath(); const char *GetPluginsFile(); diff --git a/core/metamod_console.cpp b/core/metamod_console.cpp index 28effa8c..8cadd8ac 100644 --- a/core/metamod_console.cpp +++ b/core/metamod_console.cpp @@ -44,9 +44,9 @@ using namespace SourceHook; #define CLIENT_CONMSG g_Metamod.ClientConPrintf template -void CMDMSG(edict_t *client, const char *pMsg, Ts ... ts) +void CMDMSG(MMSPlayer_t client, const char *pMsg, Ts ... ts) { - if (client) + if (client != MMSPlayer_INVALID) { CLIENT_CONMSG(client, pMsg, ts...); } @@ -56,7 +56,7 @@ void CMDMSG(edict_t *client, const char *pMsg, Ts ... ts) } } -static void ReplyCredits(edict_t *client = nullptr) +static void ReplyCredits(MMSPlayer_t client = MMSPlayer_INVALID) { CMDMSG(client, "Metamod:Source was developed by:\n"); CMDMSG(client, " SourceHook: Pavol \"PM OnoTo\" Marko\n"); @@ -66,7 +66,7 @@ static void ReplyCredits(edict_t *client = nullptr) CMDMSG(client, "http://www.metamodsource.net/\n"); } -static void ReplyVersion(edict_t *client = nullptr) +static void ReplyVersion(MMSPlayer_t client = MMSPlayer_INVALID) { CMDMSG(client, " Metamod:Source Version Information\n"); CMDMSG(client, " Metamod:Source version %s\n", METAMOD_VERSION); @@ -642,7 +642,7 @@ bool Command_Meta(IMetamodSourceCommandInfo *info) return true; } -bool Command_ClientMeta(edict_t *client, IMetamodSourceCommandInfo *info) +bool Command_ClientMeta(MMSPlayer_t client, IMetamodSourceCommandInfo *info) { const char *cmd = info->GetArg(0); diff --git a/core/metamod_console.h b/core/metamod_console.h index 6b3e278d..68c026a8 100644 --- a/core/metamod_console.h +++ b/core/metamod_console.h @@ -31,6 +31,6 @@ #include "metamod_provider.h" bool Command_Meta(IMetamodSourceCommandInfo *info); -bool Command_ClientMeta(edict_t *client, IMetamodSourceCommandInfo *info); +bool Command_ClientMeta(MMSPlayer_t client, IMetamodSourceCommandInfo *info); #endif //_INCLUDE_CONCOMMANDS_H diff --git a/core/metamod_provider.h b/core/metamod_provider.h index e1065d61..2c12a2e4 100644 --- a/core/metamod_provider.h +++ b/core/metamod_provider.h @@ -98,7 +98,7 @@ namespace SourceMM /** * @brief Called when a client executes "meta" as a ClientCommand */ - virtual bool OnCommand_ClientMeta(edict_t* client, IMetamodSourceCommandInfo* info) = 0; + virtual bool OnCommand_ClientMeta(MMSPlayer_t player, IMetamodSourceCommandInfo* info) = 0; }; class IMetamodSourceProvider @@ -150,10 +150,10 @@ namespace SourceMM /** * @brief Prints text in the specified client's console. * - * @param client Client edict pointer. + * @param player Player identifier * @param msg Message string. */ - virtual void ClientConsolePrint(edict_t *client, const char *msg) =0; + virtual void ClientConsolePrint(MMSPlayer_t player, const char *msg) =0; /** * @brief Halts the server with a fatal error message. diff --git a/core/provider/provider_base.h b/core/provider/provider_base.h index 3092eba5..413a5cf1 100644 --- a/core/provider/provider_base.h +++ b/core/provider/provider_base.h @@ -60,7 +60,7 @@ class BaseProvider : public IMetamodSourceProvider virtual bool ProcessVDF(const char* file, char path[], size_t path_len, char alias[], size_t alias_len) override = 0; virtual const char* GetCommandLineValue(const char* key, const char* defval) override = 0; virtual void ConsolePrint(const char* msg) override = 0; - virtual void ClientConsolePrint(edict_t* client, const char* msg) override = 0; + virtual void ClientConsolePrint(MMSPlayer_t player, const char* msg) override = 0; virtual void ServerCommand(const char* cmd) override = 0; virtual MetamodSourceConVar *CreateConVar(const char* name, const char* defval, diff --git a/core/provider/source/provider_source.cpp b/core/provider/source/provider_source.cpp index d5eb3edb..a6b330f0 100644 --- a/core/provider/source/provider_source.cpp +++ b/core/provider/source/provider_source.cpp @@ -347,7 +347,7 @@ const char* SourceProvider::GetCommandLineValue(const char* key, const char* def return NULL; } -void SourceProvider::ClientConsolePrint(edict_t* pEdict, const char* message) +void SourceProvider::ClientConsolePrint(MMSPlayer_t pEdict, const char* message) { engine->ClientPrintf(pEdict, message); } diff --git a/core/provider/source/provider_source.h b/core/provider/source/provider_source.h index 3d80baed..6f55ade7 100644 --- a/core/provider/source/provider_source.h +++ b/core/provider/source/provider_source.h @@ -45,7 +45,7 @@ class SourceProvider : public BaseProvider virtual const char* GetGameDescription() override; virtual const char* GetCommandLineValue(const char* key, const char* defval) override; virtual void ConsolePrint(const char* msg) override; - virtual void ClientConsolePrint(edict_t* client, const char* msg) override; + virtual void ClientConsolePrint(MMSPlayer_t client, const char* msg) override; virtual void ServerCommand(const char* cmd) override; virtual MetamodSourceConVar *CreateConVar(const char* name, const char* defval, diff --git a/core/provider/source2/provider_source2.cpp b/core/provider/source2/provider_source2.cpp index 13502fda..89cbb022 100644 --- a/core/provider/source2/provider_source2.cpp +++ b/core/provider/source2/provider_source2.cpp @@ -38,8 +38,8 @@ static Source2Provider g_Source2Provider; IMetamodSourceProvider* provider = &g_Source2Provider; +CON_COMMAND_EXTERN(meta, LocalCommand_Meta, "Metamod:Source control options"); -ConCommand meta_local_cmd("meta", LocalCommand_Meta, "Metamod:Source control options"); static ISource2ServerConfig* serverconfig = NULL; INetworkServerService* netservice = NULL; @@ -53,7 +53,7 @@ SH_DECL_HOOK3_void(INetworkServerService, StartupServer, SH_NOATTRIB, 0, const G SH_DECL_HOOK5_void(IEngineServiceMgr, SwitchToLoop, SH_NOATTRIB, 0, const char *, KeyValues *, uint32, const char *, bool); SH_DECL_HOOK2_void(INetworkGameServer, Init, SH_NOATTRIB, 0, const GameSessionConfiguration_t &, const char *); SH_DECL_HOOK3(INetworkGameServer, StartChangeLevel, SH_NOATTRIB, 0, CUtlVector *, const char *, const char *, void *); -SH_DECL_HOOK2_void(IServerGameClients, ClientCommand, SH_NOATTRIB, 0, CEntityIndex, const CCommand&); +SH_DECL_HOOK2_void(IServerGameClients, ClientCommand, SH_NOATTRIB, 0, CPlayerSlot, const CCommand&); #ifdef SHOULD_OVERRIDE_ALLOWDEDICATED_SERVER SH_DECL_HOOK1(ISource2ServerConfig, AllowDedicatedServers, const, 0, bool, EUniverse); @@ -125,9 +125,7 @@ void Source2Provider::Notify_DLLInit_Pre(CreateInterfaceFn engineFactory, g_pCVar = icvar; -#ifdef S2_CONVAR_UNFINISHED - g_SMConVarAccessor.RegisterConCommandBase(&meta_local_cmd); -#endif + ConVar_Register(FCVAR_RELEASE); if (gameclients) { @@ -144,9 +142,7 @@ void Source2Provider::Notify_DLLInit_Pre(CreateInterfaceFn engineFactory, void Source2Provider::Notify_DLLShutdown_Pre() { -#ifdef S2_CONVAR_UNFINISHED - g_SMConVarAccessor.RemoveMetamodCommands(); -#endif + ConVar_Unregister(); } bool Source2Provider::ProcessVDF(const char* file, char path[], size_t path_len, char alias[], size_t alias_len) @@ -242,9 +238,8 @@ void Source2Provider::ConsolePrint(const char* str) ConMsg("%s", str); } -void Source2Provider::ClientConsolePrint(edict_t* pEdict, const char* message) +void Source2Provider::ClientConsolePrint(MMSPlayer_t client, const char* message) { - int client = (int)(pEdict - gpGlobals->pEdicts); engine->ClientPrintf(client, message); } @@ -263,7 +258,7 @@ const char* Source2Provider::GetConVarString(MetamodSourceConVar *convar) return convar->GetString(); #else - return ""; + return nullptr; #endif } @@ -350,7 +345,7 @@ class GlobCommand : public IMetamodSourceCommandInfo const CCommand* m_cmd; }; -void LocalCommand_Meta(const CCommand& args) +void LocalCommand_Meta(const CCommandContext &, const CCommand& args) { if (nullptr != g_Source2Provider.m_pCallbacks) { @@ -438,17 +433,15 @@ void Source2Provider::Hook_SwitchToLoop(const char *pszLoopName, KeyValues *pKV, RETURN_META(MRES_IGNORED); } -void Source2Provider::Hook_ClientCommand(CEntityIndex index, const CCommand& _cmd) +void Source2Provider::Hook_ClientCommand(CPlayerSlot nSlot, const CCommand& _cmd) { - int client = index.Get(); GlobCommand cmd(&_cmd); if (strcmp(cmd.GetArg(0), "meta") == 0) { if (nullptr != m_pCallbacks) { - auto pEdict = reinterpret_cast(gpGlobals->pEdicts + (intp)client); - m_pCallbacks->OnCommand_ClientMeta(pEdict, &cmd); + m_pCallbacks->OnCommand_ClientMeta(nSlot, &cmd); } RETURN_META(MRES_SUPERCEDE); diff --git a/core/provider/source2/provider_source2.h b/core/provider/source2/provider_source2.h index ff90d6e4..d9f03788 100644 --- a/core/provider/source2/provider_source2.h +++ b/core/provider/source2/provider_source2.h @@ -52,7 +52,7 @@ class Source2Provider : public BaseProvider virtual const char* GetGameDescription() override; virtual const char* GetCommandLineValue(const char* key, const char* defval) override; virtual void ConsolePrint(const char* msg) override; - virtual void ClientConsolePrint(edict_t* client, const char* msg) override; + virtual void ClientConsolePrint(MMSPlayer_t player, const char* msg) override; virtual void ServerCommand(const char* cmd) override; virtual MetamodSourceConVar *CreateConVar(const char* name, const char* defval, @@ -71,14 +71,14 @@ class Source2Provider : public BaseProvider void Hook_Init(const GameSessionConfiguration_t &config, const char* pszMapName); CUtlVector *Hook_StartChangeLevel(const char*, const char*, void*); void Hook_SwitchToLoop(const char *pszLoopName, KeyValues *pKV, uint32 nId, const char *pszUnk, bool bUnk); - void Hook_ClientCommand(CEntityIndex index, const CCommand& args); + void Hook_ClientCommand(CPlayerSlot nSlot, const CCommand& args); private: bool KVLoadFromFile(KeyValues *kv, IFileSystem *filesystem, const char *resourceName, const char *pathID); private: IFileSystem* baseFs = nullptr; std::string sLastMap; - friend void LocalCommand_Meta(const CCommand& args); + friend void LocalCommand_Meta(const CCommandContext& context, const CCommand& args); }; #endif From bf62e8e59cc68cb877db7556dcc3282cc5044f1e Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sun, 21 May 2023 12:24:54 -0400 Subject: [PATCH 27/39] Remove now-unused check for "-dedicated" --- loader/loader.cpp | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/loader/loader.cpp b/loader/loader.cpp index d554d00f..579f213a 100644 --- a/loader/loader.cpp +++ b/loader/loader.cpp @@ -206,7 +206,6 @@ void mm_GetGameName(char *buffer, size_t size) { buffer[0] = '\0'; - bool bHasDedicated = false; #if defined _WIN32 static char game[128]; @@ -224,10 +223,6 @@ mm_GetGameName(char *buffer, size_t size) wcstombs(buffer, wargv[i], size); buffer[size-1] = '\0'; } - else if (wcscmp(wargv[i], L"-dedicated") == 0) - { - bHasDedicated = true; - } } LocalFree(wargv); @@ -245,10 +240,6 @@ mm_GetGameName(char *buffer, size_t size) strncpy(buffer, argv[i], size); buffer[size-1] = '\0'; } - else if (strcmp(argv[i], "-dedicated") == 0) - { - bHasDedicated = true; - } } #elif defined __linux__ @@ -272,10 +263,6 @@ mm_GetGameName(char *buffer, size_t size) { bNextIsGame = true; } - else if (strcmp(arg, "-dedicated") == 0) - { - bHasDedicated = true; - } } free(arg); From ee9243c82f3e44743331d34155a3fea7f6717ea9 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Sun, 21 May 2023 15:27:46 -0400 Subject: [PATCH 28/39] Replace hardcoded "ServerGameDLL" part of iface name in meta game output --- core/gamedll_bridge.cpp | 3 ++- core/metamod.cpp | 9 ++++++++- core/metamod.h | 3 ++- core/metamod_console.cpp | 2 +- core/vsp_bridge.cpp | 8 ++++---- loader/gamedll.cpp | 7 ++++++- loader/loader_bridge.h | 1 + 7 files changed, 24 insertions(+), 9 deletions(-) diff --git a/core/gamedll_bridge.cpp b/core/gamedll_bridge.cpp index 0743bef8..c5adc20f 100644 --- a/core/gamedll_bridge.cpp +++ b/core/gamedll_bridge.cpp @@ -38,7 +38,8 @@ class GameDllBridge : public IGameDllBridge virtual bool DLLInit_Pre(const gamedll_bridge_info *info, char *buffer, size_t maxlength) { server = (IServerGameDLL *) info->isgd; - g_Metamod.SetGameDLLInfo((CreateInterfaceFn) info->gsFactory, + g_Metamod.SetGameDLLInfo((CreateInterfaceFn)info->gsFactory, + info->dllInterfaceName, info->dllVersion, true); g_Metamod.SetVSPListener(info->vsp_listener_path); diff --git a/core/metamod.cpp b/core/metamod.cpp index d57bab3d..bfe44d09 100644 --- a/core/metamod.cpp +++ b/core/metamod.cpp @@ -69,6 +69,7 @@ static String metamod_path; static String full_bin_path; static int vsp_version = 0; static int gamedll_version = 0; +static const char *gamedll_interface_name = nullptr; static int engine_build = SOURCE_ENGINE_UNKNOWN; static List gamedll_list; static bool is_gamedll_loaded = false; @@ -1018,9 +1019,10 @@ bool MetamodSource::IsLoadedAsGameDLL() return is_gamedll_loaded; } -void MetamodSource::SetGameDLLInfo(CreateInterfaceFn serverFactory, int version, bool loaded) +void MetamodSource::SetGameDLLInfo(CreateInterfaceFn serverFactory, const char *pGameDllIfaceName, int version, bool loaded) { gamedll_info.factory = serverFactory; + gamedll_interface_name = pGameDllIfaceName; gamedll_version = version; is_gamedll_loaded = loaded; } @@ -1086,6 +1088,11 @@ size_t MetamodSource::GetFullPluginPath(const char *plugin, char *buffer, size_t return num; } +const char *MetamodSource::GetGameDLLInterfaceName() const +{ + return gamedll_interface_name; +} + static bool ProcessVDF(const char *path, bool &skipped) { diff --git a/core/metamod.h b/core/metamod.h index 468c61f7..b1446bbc 100644 --- a/core/metamod.h +++ b/core/metamod.h @@ -93,7 +93,8 @@ class MetamodSource : public ISmmAPI const char *GetVDFDir(); void UnregisterConCommandBase(PluginId id, ConCommandBase *pCommand); void NotifyVSPListening(IServerPluginCallbacks *callbacks, int version); - void SetGameDLLInfo(CreateInterfaceFn serverFactory, int version, bool loaded); + const char* GetGameDLLInterfaceName() const; + void SetGameDLLInfo(CreateInterfaceFn serverFactory, const char *pGameDllIfaceName, int version, bool loaded); void SetVSPListener(const char *path); size_t GetFullPluginPath(const char *plugin, char *buffer, size_t len); }; diff --git a/core/metamod_console.cpp b/core/metamod_console.cpp index 8cadd8ac..0fd08ac2 100644 --- a/core/metamod_console.cpp +++ b/core/metamod_console.cpp @@ -119,7 +119,7 @@ bool Command_Meta(IMetamodSourceCommandInfo *info) CONMSG(" Description: %s\n", provider->GetGameDescription()); CONMSG(" Mod Path: %s\n", g_Metamod.GetBaseDir()); CONMSG(" DLL Path: %s\n", g_Metamod.GetGameBinaryPath()); - CONMSG(" Interface: ServerGameDLL%03d\n", g_Metamod.GetGameDLLVersion()); + CONMSG(" Interface: %s\n", g_Metamod.GetGameDLLInterfaceName()); CONMSG(" Engine: %s\n", provider->GetEngineDescription()); // Display user messages diff --git a/core/vsp_bridge.cpp b/core/vsp_bridge.cpp index 40a7f35c..ee385b37 100644 --- a/core/vsp_bridge.cpp +++ b/core/vsp_bridge.cpp @@ -43,6 +43,7 @@ SH_DECL_HOOK0_void(ConCommand, Dispatch, SH_NOATTRIB, false); ConCommand *g_plugin_unload = NULL; bool g_bIsTryingToUnload; SourceHook::String vsp_desc("Metamod:Source"); +static char gamedll_iface_name[128] = { 0 }; #if SOURCE_ENGINE >= SE_ORANGEBOX void InterceptPluginUnloads(const CCommand &args) @@ -84,13 +85,12 @@ class VspBridge : public IVspBridge pGlobals = playerInfoManager->GetGlobalVars(); - char gamedll_iface[24]; for (unsigned int i = 3; i <= 50; i++) { - UTIL_Format(gamedll_iface, sizeof(gamedll_iface), "ServerGameDLL%03d", i); - if ((server = (IServerGameDLL *)info->gsFactory(gamedll_iface, NULL)) != NULL) + UTIL_Format(gamedll_iface_name, sizeof(gamedll_iface_name), "ServerGameDLL%03d", i); + if ((server = (IServerGameDLL *)info->gsFactory(gamedll_iface_name, NULL)) != NULL) { - g_Metamod.SetGameDLLInfo((CreateInterfaceFn)info->gsFactory, i, false); + g_Metamod.SetGameDLLInfo((CreateInterfaceFn)info->gsFactory, gamedll_iface_name, i, false); break; } } diff --git a/loader/gamedll.cpp b/loader/gamedll.cpp index 8bf062b1..82d476a5 100644 --- a/loader/gamedll.cpp +++ b/loader/gamedll.cpp @@ -50,6 +50,7 @@ static void *gamedll_lib = NULL; static IServerGameDLL *gamedll_iface = NULL; static ISource2ServerConfig *config_iface = NULL; static QueryValveInterface gamedll_qvi = NULL; +static char gamedll_iface_name[128] = { 0 }; static int gamedll_version = 0; static int isgd_shutdown_index = -1; #if defined _WIN32 @@ -361,6 +362,7 @@ class ISource2Server { g_bridge_info.pGlobals = nullptr;// pGlobals; g_bridge_info.dllVersion = gamedll_version; + g_bridge_info.dllInterfaceName = gamedll_iface_name; g_bridge_info.isgd = gamedll_iface; g_bridge_info.gsFactory = gamedll_qvi; g_bridge_info.vsp_listener_path = mm_path; @@ -497,6 +499,7 @@ class IServerGameDLL g_bridge_info.fsFactory = (QueryValveInterface)fileSystemFactory; g_bridge_info.pGlobals = pGlobals; g_bridge_info.dllVersion = gamedll_version; + g_bridge_info.dllInterfaceName = gamedll_iface_name; g_bridge_info.isgd = gamedll_iface; g_bridge_info.gsFactory = gamedll_qvi; g_bridge_info.vsp_listener_path = mm_path; @@ -807,9 +810,10 @@ mm_GameDllRequest(const char *name, int *ret) return ptr; } } - else if (strncmp(name, "Source2Server0", 14) == 0) + else if (strncmp(name, "Source2Server", 13) == 0 && atoi(&name[13]) != 0) { gamedll_iface = (IServerGameDLL *)gamedll_qvi(name, ret); + strncpy(gamedll_iface_name, name, sizeof(gamedll_iface_name)); gamedll_version = atoi(&name[13]); mm_PatchDllInit(true); @@ -856,6 +860,7 @@ mm_GameDllRequest(const char *name, int *ret) mm_FreeCachedLibraries(); gamedll_lib = lib; gamedll_iface = (IServerGameDLL *)ptr; + strncpy(gamedll_iface_name, name, sizeof(gamedll_iface_name)); gamedll_qvi = qvi; gamedll_version = atoi(&name[13]); mm_PatchDllInit(true); diff --git a/loader/loader_bridge.h b/loader/loader_bridge.h index 07570ce8..3fcd8df9 100644 --- a/loader/loader_bridge.h +++ b/loader/loader_bridge.h @@ -53,6 +53,7 @@ struct gamedll_bridge_info QueryValveInterface gsFactory; void * pGlobals; unsigned int dllVersion; + const char * dllInterfaceName; void * isgd; const char * vsp_listener_path; }; From 3b5d72df1de6079bbfa504bd45e6b7276048c657 Mon Sep 17 00:00:00 2001 From: GAMMACASE Date: Fri, 8 Sep 2023 18:20:22 +0300 Subject: [PATCH 29/39] Obsolete KVLoadFromFile Current implementation isn't used anywhere in the s2 provider and due to the removal of MemAllocScratch & MemFreeScratch I guess this could be obsoleted --- core/provider/source2/provider_source2.cpp | 30 ---------------------- core/provider/source2/provider_source2.h | 2 -- 2 files changed, 32 deletions(-) diff --git a/core/provider/source2/provider_source2.cpp b/core/provider/source2/provider_source2.cpp index 89cbb022..5c948af0 100644 --- a/core/provider/source2/provider_source2.cpp +++ b/core/provider/source2/provider_source2.cpp @@ -354,36 +354,6 @@ void LocalCommand_Meta(const CCommandContext &, const CCommand& args) } } -bool Source2Provider::KVLoadFromFile(KeyValues* kv, IFileSystem* filesystem, const char* resourceName, const char* pathID) -{ - Assert(filesystem); -#ifdef _MSC_VER - Assert(_heapchk() == _HEAPOK); -#endif - - FileHandle_t f = filesystem->Open(resourceName, "rb", pathID); - if (!f) - return false; - - // load file into a null-terminated buffer - int fileSize = filesystem->Size(f); - char* buffer = (char*)MemAllocScratch(fileSize + 1); - - Assert(buffer); - - filesystem->Read(buffer, fileSize, f); // read into local buffer - - buffer[fileSize] = 0; // null terminate file as EOF - - filesystem->Close(f); // close file after reading - - bool retOK = kv->LoadFromBuffer(resourceName, buffer, filesystem); - - MemFreeScratch(); - - return retOK; -} - void Source2Provider::Hook_StartupServer_Post(const GameSessionConfiguration_t &config, ISource2WorldSession *, const char *) { static bool bGameServerHooked = false; diff --git a/core/provider/source2/provider_source2.h b/core/provider/source2/provider_source2.h index d9f03788..f2ca942d 100644 --- a/core/provider/source2/provider_source2.h +++ b/core/provider/source2/provider_source2.h @@ -72,8 +72,6 @@ class Source2Provider : public BaseProvider CUtlVector *Hook_StartChangeLevel(const char*, const char*, void*); void Hook_SwitchToLoop(const char *pszLoopName, KeyValues *pKV, uint32 nId, const char *pszUnk, bool bUnk); void Hook_ClientCommand(CPlayerSlot nSlot, const CCommand& args); -private: - bool KVLoadFromFile(KeyValues *kv, IFileSystem *filesystem, const char *resourceName, const char *pathID); private: IFileSystem* baseFs = nullptr; std::string sLastMap; From f6a8c7b48243f679d697d342b650a34c9dfdf04c Mon Sep 17 00:00:00 2001 From: GAMMACASE Date: Fri, 8 Sep 2023 18:20:54 +0300 Subject: [PATCH 30/39] Add missing cpp files to the compilation step --- core/AMBuilder | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/AMBuilder b/core/AMBuilder index c0bfef13..4c4c9fa2 100644 --- a/core/AMBuilder +++ b/core/AMBuilder @@ -27,7 +27,11 @@ for sdk_name in MMS.sdks: ] if sdk_name in ['dota', 'cs2']: - binary.sources += ['provider/source2/provider_source2.cpp'] + binary.sources += [ + 'provider/source2/provider_source2.cpp', + os.path.join(sdk.path, 'tier1', 'convar.cpp'), + os.path.join(sdk.path, 'public', 'tier0', 'memoverride.cpp') + ] else: binary.sources += [ 'provider/source/provider_source.cpp', From 0807f197cc8eb724689433264d30bf67993d71bc Mon Sep 17 00:00:00 2001 From: GAMMACASE Date: Fri, 8 Sep 2023 18:21:17 +0300 Subject: [PATCH 31/39] Fix search paths cleanup --- core/provider/source2/provider_source2.cpp | 61 +++++++++++++--------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/core/provider/source2/provider_source2.cpp b/core/provider/source2/provider_source2.cpp index 5c948af0..58d3ab11 100644 --- a/core/provider/source2/provider_source2.cpp +++ b/core/provider/source2/provider_source2.cpp @@ -88,40 +88,51 @@ void Source2Provider::Notify_DLLInit_Pre(CreateInterfaceFn engineFactory, mm_LogMessage("Unable to find \"%s\": .vdf files will not be parsed", FILESYSTEM_INTERFACE_VERSION); } -#if 0 // Since we have to be added as a Game path (cannot add GameBin directly), we // automatically get added to other paths as well, including having the MM:S // dir become the default write path for logs and more. We can fix some of these. - - char searchPath[260]; - baseFs->GetSearchPath("GAME", (GetSearchPathTypes_t)0, searchPath, sizeof(searchPath)); - for (size_t i = 0; i < sizeof(searchPath); ++i) + + // GAMMACASE: This deals with the search paths where metamod could get added to, but there are still + // problems with this as console.log file for example would be created way earlier than we alter these search paths, + // and will be created in the metamod folder still, unsure what the solution to that could be tho! + + // NOTE: baseFs->PrintSearchPaths(); could be used to print out search paths to debug them. + + const char *pathIds[] = { + "ADDONS", + "CONTENT", + "CONTENTADDONS", + "CONTENTROOT", + "EXECUTABLE_PATH", + "GAME", + "GAMEBIN", + "GAMEROOT", + "MOD", + "PLATFORM", + "SHADER_SOURCE", + "SHADER_SOURCE_MOD", + "SHADER_SOURCE_ROOT" + }; + + for(int id = 0; id < (sizeof(pathIds) / sizeof(pathIds[0])); id++) { - if (searchPath[i] == ';') + CUtlVector searchPaths; + baseFs->GetSearchPathsForPathID(pathIds[id], (GetSearchPathTypes_t)0, searchPaths); + + FOR_EACH_VEC(searchPaths, i) { - searchPath[i] = '\0'; - break; + if(strstr(searchPaths[i].Get(), "metamod") != 0) + { + baseFs->RemoveSearchPath(searchPaths[i].Get(), pathIds[id]); + } } } - baseFs->RemoveSearchPath(searchPath, "GAME"); - - // TODO: figure out why these calls get ignored and path remains - //baseFs->RemoveSearchPath(searchPath, "CONTENT"); - //baseFs->RemoveSearchPath(searchPath, "SHADER_SOURCE"); - //baseFs->RemoveSearchPath(searchPath, "SHADER_SOURCE_MOD"); baseFs->RemoveSearchPaths("DEFAULT_WRITE_PATH"); - baseFs->GetSearchPath("GAME", (GetSearchPathTypes_t)0, searchPath, sizeof(searchPath)); - for (size_t i = 0; i < sizeof(searchPath); ++i) - { - if (searchPath[i] == ';') - { - searchPath[i] = '\0'; - break; - } - } - baseFs->AddSearchPath(searchPath, "DEFAULT_WRITE_PATH"); -#endif + + CBufferStringGrowable<260> searchPath; + baseFs->GetSearchPath("GAME", (GetSearchPathTypes_t)0, searchPath, 1); + baseFs->AddSearchPath(searchPath.Get(), "DEFAULT_WRITE_PATH"); g_pCVar = icvar; From 339d8a90c8793997d192e616645907499dc60b22 Mon Sep 17 00:00:00 2001 From: GAMMACASE Date: Wed, 27 Sep 2023 07:26:50 +0300 Subject: [PATCH 32/39] Add s2_sample_mm & Move samples to a sub folder --- .../s1_sample_mm}/AMBuildScript | 0 .../s1_sample_mm/README.md | 8 +- .../s1_sample_mm}/configure.py | 0 .../s1_sample_mm}/engine_wrappers.h | 196 +- .../s1_sample_mm}/msvc10/sample_mm.sln | 112 +- .../s1_sample_mm}/msvc10/sample_mm.vcxproj | 2310 ++++++++-------- .../msvc10/sample_mm.vcxproj.filters | 58 +- .../s1_sample_mm}/msvc8/sample_mm.sln | 112 +- .../s1_sample_mm}/msvc8/sample_mm.vcproj | 2350 ++++++++--------- .../s1_sample_mm}/msvc9/sample_mm.sln | 112 +- .../s1_sample_mm}/msvc9/sample_mm.vcproj | 2324 ++++++++-------- .../s1_sample_mm}/product.version | 0 .../s1_sample_mm}/sample_mm.cpp | 714 ++--- .../s1_sample_mm}/sample_mm.h | 156 +- .../s1_sample_mm}/sample_mm.vdf | 10 +- {stub_mm => samples/s1_stub_mm}/Makefile | 0 .../s1_stub_mm/README.md | 8 +- .../s1_stub_mm}/msvc10/stub_mm.sln | 112 +- .../s1_stub_mm}/msvc10/stub_mm.vcxproj | 2308 ++++++++-------- .../msvc10/stub_mm.vcxproj.filters | 52 +- .../s1_stub_mm}/msvc8/stub_mm.sln | 112 +- .../s1_stub_mm}/msvc8/stub_mm.vcproj | 2342 ++++++++-------- .../s1_stub_mm}/msvc9/stub_mm.sln | 112 +- .../s1_stub_mm}/msvc9/stub_mm.vcproj | 2316 ++++++++-------- {stub_mm => samples/s1_stub_mm}/stub_mm.cpp | 214 +- {stub_mm => samples/s1_stub_mm}/stub_mm.h | 98 +- {stub_mm => samples/s1_stub_mm}/stub_mm.vdf | 10 +- samples/s2_sample_mm/AMBuildScript | 526 ++++ samples/s2_sample_mm/AMBuilder | 33 + samples/s2_sample_mm/PackageScript | 49 + samples/s2_sample_mm/README.md | 37 + samples/s2_sample_mm/configure.py | 39 + samples/s2_sample_mm/sample_mm.cpp | 225 ++ samples/s2_sample_mm/sample_mm.h | 62 + 34 files changed, 9044 insertions(+), 8073 deletions(-) rename {sample_mm => samples/s1_sample_mm}/AMBuildScript (100%) rename sample_mm/README.txt => samples/s1_sample_mm/README.md (97%) rename {sample_mm => samples/s1_sample_mm}/configure.py (100%) rename {sample_mm => samples/s1_sample_mm}/engine_wrappers.h (95%) rename {sample_mm => samples/s1_sample_mm}/msvc10/sample_mm.sln (98%) rename {sample_mm => samples/s1_sample_mm}/msvc10/sample_mm.vcxproj (98%) rename {sample_mm => samples/s1_sample_mm}/msvc10/sample_mm.vcxproj.filters (97%) rename {sample_mm => samples/s1_sample_mm}/msvc8/sample_mm.sln (98%) rename {sample_mm => samples/s1_sample_mm}/msvc8/sample_mm.vcproj (96%) rename {sample_mm => samples/s1_sample_mm}/msvc9/sample_mm.sln (98%) rename {sample_mm => samples/s1_sample_mm}/msvc9/sample_mm.vcproj (96%) rename {sample_mm => samples/s1_sample_mm}/product.version (100%) rename {sample_mm => samples/s1_sample_mm}/sample_mm.cpp (97%) rename {sample_mm => samples/s1_sample_mm}/sample_mm.h (96%) rename {sample_mm => samples/s1_sample_mm}/sample_mm.vdf (93%) rename {stub_mm => samples/s1_stub_mm}/Makefile (100%) rename stub_mm/README.txt => samples/s1_stub_mm/README.md (97%) rename {stub_mm => samples/s1_stub_mm}/msvc10/stub_mm.sln (98%) rename {stub_mm => samples/s1_stub_mm}/msvc10/stub_mm.vcxproj (98%) rename {stub_mm => samples/s1_stub_mm}/msvc10/stub_mm.vcxproj.filters (97%) rename {stub_mm => samples/s1_stub_mm}/msvc8/stub_mm.sln (98%) rename {stub_mm => samples/s1_stub_mm}/msvc8/stub_mm.vcproj (96%) rename {stub_mm => samples/s1_stub_mm}/msvc9/stub_mm.sln (98%) rename {stub_mm => samples/s1_stub_mm}/msvc9/stub_mm.vcproj (96%) rename {stub_mm => samples/s1_stub_mm}/stub_mm.cpp (95%) rename {stub_mm => samples/s1_stub_mm}/stub_mm.h (96%) rename {stub_mm => samples/s1_stub_mm}/stub_mm.vdf (92%) create mode 100644 samples/s2_sample_mm/AMBuildScript create mode 100644 samples/s2_sample_mm/AMBuilder create mode 100644 samples/s2_sample_mm/PackageScript create mode 100644 samples/s2_sample_mm/README.md create mode 100644 samples/s2_sample_mm/configure.py create mode 100644 samples/s2_sample_mm/sample_mm.cpp create mode 100644 samples/s2_sample_mm/sample_mm.h diff --git a/sample_mm/AMBuildScript b/samples/s1_sample_mm/AMBuildScript similarity index 100% rename from sample_mm/AMBuildScript rename to samples/s1_sample_mm/AMBuildScript diff --git a/sample_mm/README.txt b/samples/s1_sample_mm/README.md similarity index 97% rename from sample_mm/README.txt rename to samples/s1_sample_mm/README.md index 2a002c1b..aa8cbc13 100644 --- a/sample_mm/README.txt +++ b/samples/s1_sample_mm/README.md @@ -1,4 +1,4 @@ -For more information on compiling and reading the plugin's source code, see: - - http://wiki.alliedmods.net/Category:Metamod:Source_Development - +For more information on compiling and reading the plugin's source code, see: + + http://wiki.alliedmods.net/Category:Metamod:Source_Development + diff --git a/sample_mm/configure.py b/samples/s1_sample_mm/configure.py similarity index 100% rename from sample_mm/configure.py rename to samples/s1_sample_mm/configure.py diff --git a/sample_mm/engine_wrappers.h b/samples/s1_sample_mm/engine_wrappers.h similarity index 95% rename from sample_mm/engine_wrappers.h rename to samples/s1_sample_mm/engine_wrappers.h index 255b648f..1f883e1c 100644 --- a/sample_mm/engine_wrappers.h +++ b/samples/s1_sample_mm/engine_wrappers.h @@ -1,98 +1,98 @@ -/** - * vim: set ts=4 sw=4 tw=99 noet : - * ====================================================== - * Metamod:Source Sample Plugin - * Written by AlliedModders LLC. - * ====================================================== - * - * This software is provided 'as-is', without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. - * - * This sample plugin is public domain. - */ - -#ifndef _INCLUDE_SOURCE_ENGINE_WRAPPERS_ -#define _INCLUDE_SOURCE_ENGINE_WRAPPERS_ - -#include - -extern IVEngineServer *engine; -extern CGlobalVars *gpGlobals; - -#if SOURCE_ENGINE == SE_EPISODEONE && defined METAMOD_PLAPI_VERSION -#error "Metamod:Source 1.6 API is not supported on the old engine." -#endif - -#define ENGINE_CALL(func) SH_CALL(engine, &IVEngineServer::func) - -/** - * Wrap some API calls for legacy MM:S. - */ -#if !defined METAMOD_PLAPI_VERSION -#define GetEngineFactory engineFactory -#define GetServerFactory serverFactory -#define MM_Format snprintf -#define GetCGlobals pGlobals -#else -#define MM_Format g_SMAPI->Format -#endif - -#if SOURCE_ENGINE <= SE_DARKMESSIAH -/** - * Wrap the CCommand class so our code looks the same on all engines. - */ -class CCommand -{ -public: - const char *ArgS() - { - return engine->Cmd_Args(); - } - int ArgC() - { - return engine->Cmd_Argc(); - } - - const char *Arg(int index) - { - return engine->Cmd_Argv(index); - } -}; - -#define CVAR_INTERFACE_VERSION VENGINE_CVAR_INTERFACE_VERSION -#endif - -/** - * Left 4 Dead engine removed these from IVEngineServer. - */ -#if SOURCE_ENGINE >= SE_LEFT4DEAD - -inline int IndexOfEdict(const edict_t *pEdict) -{ - return (int)(pEdict - gpGlobals->pEdicts); -} -inline edict_t *PEntityOfEntIndex(int iEntIndex) -{ - if (iEntIndex >= 0 && iEntIndex < gpGlobals->maxEntities) - { - return (edict_t *)(gpGlobals->pEdicts + iEntIndex); - } - return NULL; -} - -#else - -inline int IndexOfEdict(const edict_t *pEdict) -{ - return engine->IndexOfEdict(pEdict); -} -inline edict_t *PEntityOfEntIndex(int iEntIndex) -{ - return engine->PEntityOfEntIndex(iEntIndex); -} - -#endif - -#endif //_INCLUDE_SOURCE_ENGINE_WRAPPERS_ - +/** + * vim: set ts=4 sw=4 tw=99 noet : + * ====================================================== + * Metamod:Source Sample Plugin + * Written by AlliedModders LLC. + * ====================================================== + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * This sample plugin is public domain. + */ + +#ifndef _INCLUDE_SOURCE_ENGINE_WRAPPERS_ +#define _INCLUDE_SOURCE_ENGINE_WRAPPERS_ + +#include + +extern IVEngineServer *engine; +extern CGlobalVars *gpGlobals; + +#if SOURCE_ENGINE == SE_EPISODEONE && defined METAMOD_PLAPI_VERSION +#error "Metamod:Source 1.6 API is not supported on the old engine." +#endif + +#define ENGINE_CALL(func) SH_CALL(engine, &IVEngineServer::func) + +/** + * Wrap some API calls for legacy MM:S. + */ +#if !defined METAMOD_PLAPI_VERSION +#define GetEngineFactory engineFactory +#define GetServerFactory serverFactory +#define MM_Format snprintf +#define GetCGlobals pGlobals +#else +#define MM_Format g_SMAPI->Format +#endif + +#if SOURCE_ENGINE <= SE_DARKMESSIAH +/** + * Wrap the CCommand class so our code looks the same on all engines. + */ +class CCommand +{ +public: + const char *ArgS() + { + return engine->Cmd_Args(); + } + int ArgC() + { + return engine->Cmd_Argc(); + } + + const char *Arg(int index) + { + return engine->Cmd_Argv(index); + } +}; + +#define CVAR_INTERFACE_VERSION VENGINE_CVAR_INTERFACE_VERSION +#endif + +/** + * Left 4 Dead engine removed these from IVEngineServer. + */ +#if SOURCE_ENGINE >= SE_LEFT4DEAD + +inline int IndexOfEdict(const edict_t *pEdict) +{ + return (int)(pEdict - gpGlobals->pEdicts); +} +inline edict_t *PEntityOfEntIndex(int iEntIndex) +{ + if (iEntIndex >= 0 && iEntIndex < gpGlobals->maxEntities) + { + return (edict_t *)(gpGlobals->pEdicts + iEntIndex); + } + return NULL; +} + +#else + +inline int IndexOfEdict(const edict_t *pEdict) +{ + return engine->IndexOfEdict(pEdict); +} +inline edict_t *PEntityOfEntIndex(int iEntIndex) +{ + return engine->PEntityOfEntIndex(iEntIndex); +} + +#endif + +#endif //_INCLUDE_SOURCE_ENGINE_WRAPPERS_ + diff --git a/sample_mm/msvc10/sample_mm.sln b/samples/s1_sample_mm/msvc10/sample_mm.sln similarity index 98% rename from sample_mm/msvc10/sample_mm.sln rename to samples/s1_sample_mm/msvc10/sample_mm.sln index 27cd73d7..14216110 100644 --- a/sample_mm/msvc10/sample_mm.sln +++ b/samples/s1_sample_mm/msvc10/sample_mm.sln @@ -1,56 +1,56 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample_mm", "sample_mm.vcxproj", "{E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug - Alien Swarm|Win32 = Debug - Alien Swarm|Win32 - Debug - Dark Messiah|Win32 = Debug - Dark Messiah|Win32 - Debug - Left 4 Dead 2|Win32 = Debug - Left 4 Dead 2|Win32 - Debug - Left 4 Dead|Win32 = Debug - Left 4 Dead|Win32 - Debug - Orange Box Valve|Win32 = Debug - Orange Box Valve|Win32 - Debug - Orange Box|Win32 = Debug - Orange Box|Win32 - Debug - Original|Win32 = Debug - Original|Win32 - Release - Alien Swarm|Win32 = Release - Alien Swarm|Win32 - Release - Dark Messiah|Win32 = Release - Dark Messiah|Win32 - Release - Left 4 Dead 2|Win32 = Release - Left 4 Dead 2|Win32 - Release - Left 4 Dead|Win32 = Release - Left 4 Dead|Win32 - Release - Orange Box Valve|Win32 = Release - Orange Box Valve|Win32 - Release - Orange Box|Win32 = Release - Orange Box|Win32 - Release - Original|Win32 = Release - Original|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.ActiveCfg = Debug - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.Build.0 = Debug - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.ActiveCfg = Debug - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.Build.0 = Debug - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.ActiveCfg = Debug - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.Build.0 = Debug - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.ActiveCfg = Debug - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.Build.0 = Debug - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.ActiveCfg = Debug - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.Build.0 = Debug - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.ActiveCfg = Debug - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.Build.0 = Debug - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.ActiveCfg = Release - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.Build.0 = Release - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.ActiveCfg = Release - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.Build.0 = Release - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.ActiveCfg = Release - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.Build.0 = Release - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.ActiveCfg = Release - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.Build.0 = Release - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.ActiveCfg = Release - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.Build.0 = Release - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.ActiveCfg = Release - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.Build.0 = Release - Original|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample_mm", "sample_mm.vcxproj", "{E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug - Alien Swarm|Win32 = Debug - Alien Swarm|Win32 + Debug - Dark Messiah|Win32 = Debug - Dark Messiah|Win32 + Debug - Left 4 Dead 2|Win32 = Debug - Left 4 Dead 2|Win32 + Debug - Left 4 Dead|Win32 = Debug - Left 4 Dead|Win32 + Debug - Orange Box Valve|Win32 = Debug - Orange Box Valve|Win32 + Debug - Orange Box|Win32 = Debug - Orange Box|Win32 + Debug - Original|Win32 = Debug - Original|Win32 + Release - Alien Swarm|Win32 = Release - Alien Swarm|Win32 + Release - Dark Messiah|Win32 = Release - Dark Messiah|Win32 + Release - Left 4 Dead 2|Win32 = Release - Left 4 Dead 2|Win32 + Release - Left 4 Dead|Win32 = Release - Left 4 Dead|Win32 + Release - Orange Box Valve|Win32 = Release - Orange Box Valve|Win32 + Release - Orange Box|Win32 = Release - Orange Box|Win32 + Release - Original|Win32 = Release - Original|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.ActiveCfg = Debug - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.Build.0 = Debug - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.ActiveCfg = Debug - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.Build.0 = Debug - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.ActiveCfg = Debug - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.Build.0 = Debug - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.ActiveCfg = Debug - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.Build.0 = Debug - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.ActiveCfg = Debug - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.Build.0 = Debug - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.ActiveCfg = Debug - Original|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.Build.0 = Debug - Original|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.ActiveCfg = Release - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.Build.0 = Release - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.ActiveCfg = Release - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.Build.0 = Release - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.ActiveCfg = Release - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.Build.0 = Release - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.ActiveCfg = Release - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.Build.0 = Release - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.ActiveCfg = Release - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.Build.0 = Release - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.ActiveCfg = Release - Original|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.Build.0 = Release - Original|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/sample_mm/msvc10/sample_mm.vcxproj b/samples/s1_sample_mm/msvc10/sample_mm.vcxproj similarity index 98% rename from sample_mm/msvc10/sample_mm.vcxproj rename to samples/s1_sample_mm/msvc10/sample_mm.vcxproj index e749c285..4734b202 100644 --- a/sample_mm/msvc10/sample_mm.vcxproj +++ b/samples/s1_sample_mm/msvc10/sample_mm.vcxproj @@ -1,1156 +1,1156 @@ - - - - - Debug - Alien Swarm - Win32 - - - Debug - Bloody Good Time - Win32 - - - Debug - CS GO - Win32 - - - Debug - CSS - Win32 - - - Debug - Dark Messiah - Win32 - - - Debug - EYE - Win32 - - - Debug - Left 4 Dead 2 - Win32 - - - Debug - Left 4 Dead - Win32 - - - Debug - Orange Box Valve - Win32 - - - Debug - Orange Box - Win32 - - - Debug - Original - Win32 - - - Debug - Portal 2 - Win32 - - - Release - Alien Swarm - Win32 - - - Release - Bloody Good Time - Win32 - - - Release - CS GO - Win32 - - - Release - CSS - Win32 - - - Release - Dark Messiah - Win32 - - - Release - EYE - Win32 - - - Release - Left 4 Dead 2 - Win32 - - - Release - Left 4 Dead - Win32 - - - Release - Orange Box Valve - Win32 - - - Release - Orange Box - Win32 - - - Release - Original - Win32 - - - Release - Portal 2 - Win32 - - - - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9} - sample_mm - Win32Proj - - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - true - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - false - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - true - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - false - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - true - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - false - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - true - true - true - true - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - false - false - false - false - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - true - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - false - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - true - true - true - true - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - false - false - false - false - AllRules.ruleset - - - AllRules.ruleset - AllRules.ruleset - AllRules.ruleset - AllRules.ruleset - - - - - - - - - AllRules.ruleset - - - AllRules.ruleset - AllRules.ruleset - AllRules.ruleset - AllRules.ruleset - - - - - - - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - AllRules.ruleset - AllRules.ruleset - AllRules.ruleset - - - - - - - - - AllRules.ruleset - - - AllRules.ruleset - AllRules.ruleset - AllRules.ruleset - AllRules.ruleset - - - - - - - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE18)\core-legacy;$(MMSOURCE18)\core-legacy\sourcehook;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=1;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDK)\lib\public\tier0.lib;$(HL2SDK)\lib\public\tier1.lib;$(HL2SDK)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE18)\core-legacy;$(MMSOURCE18)\core-legacy\sourcehook;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=1;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDK)\lib\public\tier0.lib;$(HL2SDK)\lib\public\tier1.lib;$(HL2SDK)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-DARKM)\public;$(HL2SDK-DARKM)\public\engine;$(HL2SDK-DARKM)\public\dlls;$(HL2SDK-DARKM)\public\tier0;$(HL2SDK-DARKM)\public\tier1;$(HL2SDK-DARKM)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=2;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDK-DARKM)\lib\public\tier0.lib;$(HL2SDK-DARKM)\lib\public\tier1.lib;$(HL2SDK-DARKM)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-DARKM)\public;$(HL2SDK-DARKM)\public\engine;$(HL2SDK-DARKM)\public\dlls;$(HL2SDK-DARKM)\public\tier0;$(HL2SDK-DARKM)\public\tier1;$(HL2SDK-DARKM)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=2;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDK-DARKM)\lib\public\tier0.lib;$(HL2SDK-DARKM)\lib\public\tier1.lib;$(HL2SDK-DARKM)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKOB)\public;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\game\server;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=3;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDKOB)\lib\public\tier0.lib;$(HL2SDKOB)\lib\public\tier1.lib;$(HL2SDKOB)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKOB)\public;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\game\server;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=3;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDKOB)\lib\public\tier0.lib;$(HL2SDKOB)\lib\public\tier1.lib;$(HL2SDKOB)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKOBVALVE)\public;$(HL2SDKOBVALVE)\public\engine;$(HL2SDKOBVALVE)\public\game\server;$(HL2SDKOBVALVE)\public\tier0;$(HL2SDKOBVALVE)\public\tier1;$(HL2SDKOBVALVE)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=7;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDKOBVALVE)\lib\public\tier0.lib;$(HL2SDKOBVALVE)\lib\public\tier1.lib;$(HL2SDKOBVALVE)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKCSS)\public;$(HL2SDKCSS)\public\engine;$(HL2SDKCSS)\public\game\server;$(HL2SDKCSS)\public\tier0;$(HL2SDKCSS)\public\tier1;$(HL2SDKCSS)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDKCSS)\lib\public\tier0.lib;$(HL2SDKCSS)\lib\public\tier1.lib;$(HL2SDKCSS)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-EYE)\public;$(HL2SDK-EYE)\public\engine;$(HL2SDK-EYE)\public\game\server;$(HL2SDK-EYE)\public\tier0;$(HL2SDK-EYE)\public\tier1;$(HL2SDK-EYE)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=5;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDK-EYE)\lib\public\tier0.lib;$(HL2SDK-EYE)\lib\public\tier1.lib;$(HL2SDK-EYE)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-BGT)\public;$(HL2SDK-BGT)\public\engine;$(HL2SDK-BGT)\public\game\server;$(HL2SDK-BGT)\public\tier0;$(HL2SDK-BGT)\public\tier1;$(HL2SDK-BGT)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=4;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDK-BGT)\lib\public\tier0.lib;$(HL2SDK-BGT)\lib\public\tier1.lib;$(HL2SDK-BGT)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKOBVALVE)\public;$(HL2SDKOBVALVE)\public\engine;$(HL2SDKOBVALVE)\public\game\server;$(HL2SDKOBVALVE)\public\tier0;$(HL2SDKOBVALVE)\public\tier1;$(HL2SDKOBVALVE)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=7;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDKOBVALVE)\lib\public\tier0.lib;$(HL2SDKOBVALVE)\lib\public\tier1.lib;$(HL2SDKOBVALVE)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKCSS)\public;$(HL2SDKCSS)\public\engine;$(HL2SDKCSS)\public\game\server;$(HL2SDKCSS)\public\tier0;$(HL2SDKCSS)\public\tier1;$(HL2SDKCSS)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=6;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDKCSS)\lib\public\tier0.lib;$(HL2SDKCSS)\lib\public\tier1.lib;$(HL2SDKCSS)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-EYE)\public;$(HL2SDK-EYE)\public\engine;$(HL2SDK-EYE)\public\game\server;$(HL2SDK-EYE)\public\tier0;$(HL2SDK-EYE)\public\tier1;$(HL2SDK-EYE)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=5;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDK-EYE)\lib\public\tier0.lib;$(HL2SDK-EYE)\lib\public\tier1.lib;$(HL2SDK-EYE)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-BGT)\public;$(HL2SDK-BGT)\public\engine;$(HL2SDK-BGT)\public\game\server;$(HL2SDK-BGT)\public\tier0;$(HL2SDK-BGT)\public\tier1;$(HL2SDK-BGT)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=4;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDK-BGT)\lib\public\tier0.lib;$(HL2SDK-BGT)\lib\public\tier1.lib;$(HL2SDK-BGT)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKL4D)\public;$(HL2SDKL4D)\public\engine;$(HL2SDKL4D)\public\game\server;$(HL2SDKL4D)\public\tier0;$(HL2SDKL4D)\public\tier1;$(HL2SDKL4D)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=8;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDKL4D)\lib\public\tier0.lib;$(HL2SDKL4D)\lib\public\tier1.lib;$(HL2SDKL4D)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKL4D)\public;$(HL2SDKL4D)\public\engine;$(HL2SDKL4D)\public\game\server;$(HL2SDKL4D)\public\tier0;$(HL2SDKL4D)\public\tier1;$(HL2SDKL4D)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=8;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDKL4D)\lib\public\tier0.lib;$(HL2SDKL4D)\lib\public\tier1.lib;$(HL2SDKL4D)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKL4D2)\public;$(HL2SDKL4D2)\public\engine;$(HL2SDKL4D2)\public\game\server;$(HL2SDKL4D2)\public\tier0;$(HL2SDKL4D2)\public\tier1;$(HL2SDKL4D2)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=9;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDKL4D2)\lib\public\tier0.lib;$(HL2SDKL4D2)\lib\public\tier1.lib;$(HL2SDKL4D2)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-SWARM)\public;$(HL2SDK-SWARM)\public\engine;$(HL2SDK-SWARM)\public\game\server;$(HL2SDK-SWARM)\public\tier0;$(HL2SDK-SWARM)\public\tier1;$(HL2SDK-SWARM)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=10;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDK-SWARM)\lib\public\interfaces.lib;$(HL2SDK-SWARM)\lib\public\tier0.lib;$(HL2SDK-SWARM)\lib\public\tier1.lib;$(HL2SDK-SWARM)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKCSGO)\public;$(HL2SDKCSGO)\public\engine;$(HL2SDKCSGO)\public\game\server;$(HL2SDKCSGO)\public\tier0;$(HL2SDKCSGO)\public\tier1;$(HL2SDKCSGO)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=12;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDKCSGO)\lib\public\interfaces.lib;$(HL2SDKCSGO)\lib\public\tier0.lib;$(HL2SDKCSGO)\lib\public\tier1.lib;$(HL2SDKCSGO)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKPORTAL2)\public;$(HL2SDKPORTAL2)\public\engine;$(HL2SDKPORTAL2)\public\game\server;$(HL2SDKPORTAL2)\public\tier0;$(HL2SDKPORTAL2)\public\tier1;$(HL2SDKPORTAL2)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=11;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDKPORTAL2)\lib\public\interfaces.lib;$(HL2SDKPORTAL2)\lib\public\tier0.lib;$(HL2SDKPORTAL2)\lib\public\tier1.lib;$(HL2SDKPORTAL2)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKL4D2)\public;$(HL2SDKL4D2)\public\engine;$(HL2SDKL4D2)\public\game\server;$(HL2SDKL4D2)\public\tier0;$(HL2SDKL4D2)\public\tier1;$(HL2SDKL4D2)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=9;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDKL4D2)\lib\public\tier0.lib;$(HL2SDKL4D2)\lib\public\tier1.lib;$(HL2SDKL4D2)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-SWARM)\public;$(HL2SDK-SWARM)\public\engine;$(HL2SDK-SWARM)\public\game\server;$(HL2SDK-SWARM)\public\tier0;$(HL2SDK-SWARM)\public\tier1;$(HL2SDK-SWARM)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=10;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDK-SWARM)\lib\public\interfaces.lib;$(HL2SDK-SWARM)\lib\public\tier0.lib;$(HL2SDK-SWARM)\lib\public\tier1.lib;$(HL2SDK-SWARM)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKCSGO)\public;$(HL2SDKCSGO)\public\engine;$(HL2SDKCSGO)\public\game\server;$(HL2SDKCSGO)\public\tier0;$(HL2SDKCSGO)\public\tier1;$(HL2SDKCSGO)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=12;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDKCSGO)\lib\public\interfaces.lib;$(HL2SDKCSGO)\lib\public\tier0.lib;$(HL2SDKCSGO)\lib\public\tier1.lib;$(HL2SDKCSGO)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKPORTAL2)\public;$(HL2SDKPORTAL2)\public\engine;$(HL2SDKPORTAL2)\public\game\server;$(HL2SDKPORTAL2)\public\tier0;$(HL2SDKPORTAL2)\public\tier1;$(HL2SDKPORTAL2)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=11;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDKPORTAL2)\lib\public\interfaces.lib;$(HL2SDKPORTAL2)\lib\public\tier0.lib;$(HL2SDKPORTAL2)\lib\public\tier1.lib;$(HL2SDKPORTAL2)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)sample_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - - - - - - - - + + + + + Debug - Alien Swarm + Win32 + + + Debug - Bloody Good Time + Win32 + + + Debug - CS GO + Win32 + + + Debug - CSS + Win32 + + + Debug - Dark Messiah + Win32 + + + Debug - EYE + Win32 + + + Debug - Left 4 Dead 2 + Win32 + + + Debug - Left 4 Dead + Win32 + + + Debug - Orange Box Valve + Win32 + + + Debug - Orange Box + Win32 + + + Debug - Original + Win32 + + + Debug - Portal 2 + Win32 + + + Release - Alien Swarm + Win32 + + + Release - Bloody Good Time + Win32 + + + Release - CS GO + Win32 + + + Release - CSS + Win32 + + + Release - Dark Messiah + Win32 + + + Release - EYE + Win32 + + + Release - Left 4 Dead 2 + Win32 + + + Release - Left 4 Dead + Win32 + + + Release - Orange Box Valve + Win32 + + + Release - Orange Box + Win32 + + + Release - Original + Win32 + + + Release - Portal 2 + Win32 + + + + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9} + sample_mm + Win32Proj + + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + true + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + false + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + true + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + false + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + true + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + false + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + true + true + true + true + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + false + false + false + false + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + true + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + false + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + true + true + true + true + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + false + false + false + false + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE18)\core-legacy;$(MMSOURCE18)\core-legacy\sourcehook;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=1;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDK)\lib\public\tier0.lib;$(HL2SDK)\lib\public\tier1.lib;$(HL2SDK)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE18)\core-legacy;$(MMSOURCE18)\core-legacy\sourcehook;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=1;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDK)\lib\public\tier0.lib;$(HL2SDK)\lib\public\tier1.lib;$(HL2SDK)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-DARKM)\public;$(HL2SDK-DARKM)\public\engine;$(HL2SDK-DARKM)\public\dlls;$(HL2SDK-DARKM)\public\tier0;$(HL2SDK-DARKM)\public\tier1;$(HL2SDK-DARKM)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=2;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDK-DARKM)\lib\public\tier0.lib;$(HL2SDK-DARKM)\lib\public\tier1.lib;$(HL2SDK-DARKM)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-DARKM)\public;$(HL2SDK-DARKM)\public\engine;$(HL2SDK-DARKM)\public\dlls;$(HL2SDK-DARKM)\public\tier0;$(HL2SDK-DARKM)\public\tier1;$(HL2SDK-DARKM)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=2;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDK-DARKM)\lib\public\tier0.lib;$(HL2SDK-DARKM)\lib\public\tier1.lib;$(HL2SDK-DARKM)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKOB)\public;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\game\server;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=3;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDKOB)\lib\public\tier0.lib;$(HL2SDKOB)\lib\public\tier1.lib;$(HL2SDKOB)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKOB)\public;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\game\server;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=3;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDKOB)\lib\public\tier0.lib;$(HL2SDKOB)\lib\public\tier1.lib;$(HL2SDKOB)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKOBVALVE)\public;$(HL2SDKOBVALVE)\public\engine;$(HL2SDKOBVALVE)\public\game\server;$(HL2SDKOBVALVE)\public\tier0;$(HL2SDKOBVALVE)\public\tier1;$(HL2SDKOBVALVE)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=7;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDKOBVALVE)\lib\public\tier0.lib;$(HL2SDKOBVALVE)\lib\public\tier1.lib;$(HL2SDKOBVALVE)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKCSS)\public;$(HL2SDKCSS)\public\engine;$(HL2SDKCSS)\public\game\server;$(HL2SDKCSS)\public\tier0;$(HL2SDKCSS)\public\tier1;$(HL2SDKCSS)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=6;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDKCSS)\lib\public\tier0.lib;$(HL2SDKCSS)\lib\public\tier1.lib;$(HL2SDKCSS)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-EYE)\public;$(HL2SDK-EYE)\public\engine;$(HL2SDK-EYE)\public\game\server;$(HL2SDK-EYE)\public\tier0;$(HL2SDK-EYE)\public\tier1;$(HL2SDK-EYE)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=5;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDK-EYE)\lib\public\tier0.lib;$(HL2SDK-EYE)\lib\public\tier1.lib;$(HL2SDK-EYE)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-BGT)\public;$(HL2SDK-BGT)\public\engine;$(HL2SDK-BGT)\public\game\server;$(HL2SDK-BGT)\public\tier0;$(HL2SDK-BGT)\public\tier1;$(HL2SDK-BGT)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=4;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDK-BGT)\lib\public\tier0.lib;$(HL2SDK-BGT)\lib\public\tier1.lib;$(HL2SDK-BGT)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKOBVALVE)\public;$(HL2SDKOBVALVE)\public\engine;$(HL2SDKOBVALVE)\public\game\server;$(HL2SDKOBVALVE)\public\tier0;$(HL2SDKOBVALVE)\public\tier1;$(HL2SDKOBVALVE)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=7;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDKOBVALVE)\lib\public\tier0.lib;$(HL2SDKOBVALVE)\lib\public\tier1.lib;$(HL2SDKOBVALVE)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKCSS)\public;$(HL2SDKCSS)\public\engine;$(HL2SDKCSS)\public\game\server;$(HL2SDKCSS)\public\tier0;$(HL2SDKCSS)\public\tier1;$(HL2SDKCSS)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=6;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDKCSS)\lib\public\tier0.lib;$(HL2SDKCSS)\lib\public\tier1.lib;$(HL2SDKCSS)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-EYE)\public;$(HL2SDK-EYE)\public\engine;$(HL2SDK-EYE)\public\game\server;$(HL2SDK-EYE)\public\tier0;$(HL2SDK-EYE)\public\tier1;$(HL2SDK-EYE)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=5;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDK-EYE)\lib\public\tier0.lib;$(HL2SDK-EYE)\lib\public\tier1.lib;$(HL2SDK-EYE)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-BGT)\public;$(HL2SDK-BGT)\public\engine;$(HL2SDK-BGT)\public\game\server;$(HL2SDK-BGT)\public\tier0;$(HL2SDK-BGT)\public\tier1;$(HL2SDK-BGT)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=4;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDK-BGT)\lib\public\tier0.lib;$(HL2SDK-BGT)\lib\public\tier1.lib;$(HL2SDK-BGT)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKL4D)\public;$(HL2SDKL4D)\public\engine;$(HL2SDKL4D)\public\game\server;$(HL2SDKL4D)\public\tier0;$(HL2SDKL4D)\public\tier1;$(HL2SDKL4D)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=8;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDKL4D)\lib\public\tier0.lib;$(HL2SDKL4D)\lib\public\tier1.lib;$(HL2SDKL4D)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKL4D)\public;$(HL2SDKL4D)\public\engine;$(HL2SDKL4D)\public\game\server;$(HL2SDKL4D)\public\tier0;$(HL2SDKL4D)\public\tier1;$(HL2SDKL4D)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=8;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDKL4D)\lib\public\tier0.lib;$(HL2SDKL4D)\lib\public\tier1.lib;$(HL2SDKL4D)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKL4D2)\public;$(HL2SDKL4D2)\public\engine;$(HL2SDKL4D2)\public\game\server;$(HL2SDKL4D2)\public\tier0;$(HL2SDKL4D2)\public\tier1;$(HL2SDKL4D2)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=9;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDKL4D2)\lib\public\tier0.lib;$(HL2SDKL4D2)\lib\public\tier1.lib;$(HL2SDKL4D2)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-SWARM)\public;$(HL2SDK-SWARM)\public\engine;$(HL2SDK-SWARM)\public\game\server;$(HL2SDK-SWARM)\public\tier0;$(HL2SDK-SWARM)\public\tier1;$(HL2SDK-SWARM)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=10;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDK-SWARM)\lib\public\interfaces.lib;$(HL2SDK-SWARM)\lib\public\tier0.lib;$(HL2SDK-SWARM)\lib\public\tier1.lib;$(HL2SDK-SWARM)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKCSGO)\public;$(HL2SDKCSGO)\public\engine;$(HL2SDKCSGO)\public\game\server;$(HL2SDKCSGO)\public\tier0;$(HL2SDKCSGO)\public\tier1;$(HL2SDKCSGO)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=12;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDKCSGO)\lib\public\interfaces.lib;$(HL2SDKCSGO)\lib\public\tier0.lib;$(HL2SDKCSGO)\lib\public\tier1.lib;$(HL2SDKCSGO)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKPORTAL2)\public;$(HL2SDKPORTAL2)\public\engine;$(HL2SDKPORTAL2)\public\game\server;$(HL2SDKPORTAL2)\public\tier0;$(HL2SDKPORTAL2)\public\tier1;$(HL2SDKPORTAL2)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=11;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDKPORTAL2)\lib\public\interfaces.lib;$(HL2SDKPORTAL2)\lib\public\tier0.lib;$(HL2SDKPORTAL2)\lib\public\tier1.lib;$(HL2SDKPORTAL2)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKL4D2)\public;$(HL2SDKL4D2)\public\engine;$(HL2SDKL4D2)\public\game\server;$(HL2SDKL4D2)\public\tier0;$(HL2SDKL4D2)\public\tier1;$(HL2SDKL4D2)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;SOURCE_ENGINE=9;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDKL4D2)\lib\public\tier0.lib;$(HL2SDKL4D2)\lib\public\tier1.lib;$(HL2SDKL4D2)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-SWARM)\public;$(HL2SDK-SWARM)\public\engine;$(HL2SDK-SWARM)\public\game\server;$(HL2SDK-SWARM)\public\tier0;$(HL2SDK-SWARM)\public\tier1;$(HL2SDK-SWARM)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=10;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDK-SWARM)\lib\public\interfaces.lib;$(HL2SDK-SWARM)\lib\public\tier0.lib;$(HL2SDK-SWARM)\lib\public\tier1.lib;$(HL2SDK-SWARM)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKCSGO)\public;$(HL2SDKCSGO)\public\engine;$(HL2SDKCSGO)\public\game\server;$(HL2SDKCSGO)\public\tier0;$(HL2SDKCSGO)\public\tier1;$(HL2SDKCSGO)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=12;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDKCSGO)\lib\public\interfaces.lib;$(HL2SDKCSGO)\lib\public\tier0.lib;$(HL2SDKCSGO)\lib\public\tier1.lib;$(HL2SDKCSGO)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKPORTAL2)\public;$(HL2SDKPORTAL2)\public\engine;$(HL2SDKPORTAL2)\public\game\server;$(HL2SDKPORTAL2)\public\tier0;$(HL2SDKPORTAL2)\public\tier1;$(HL2SDKPORTAL2)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;SAMPLE_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=11;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDKPORTAL2)\lib\public\interfaces.lib;$(HL2SDKPORTAL2)\lib\public\tier0.lib;$(HL2SDKPORTAL2)\lib\public\tier1.lib;$(HL2SDKPORTAL2)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)sample_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sample_mm/msvc10/sample_mm.vcxproj.filters b/samples/s1_sample_mm/msvc10/sample_mm.vcxproj.filters similarity index 97% rename from sample_mm/msvc10/sample_mm.vcxproj.filters rename to samples/s1_sample_mm/msvc10/sample_mm.vcxproj.filters index 66f06ea1..6680f772 100644 --- a/sample_mm/msvc10/sample_mm.vcxproj.filters +++ b/samples/s1_sample_mm/msvc10/sample_mm.vcxproj.filters @@ -1,30 +1,30 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav - - - - - Source Files - - - - - Header Files - - - Header Files - - + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + + + Source Files + + + + + Header Files + + + Header Files + + \ No newline at end of file diff --git a/sample_mm/msvc8/sample_mm.sln b/samples/s1_sample_mm/msvc8/sample_mm.sln similarity index 98% rename from sample_mm/msvc8/sample_mm.sln rename to samples/s1_sample_mm/msvc8/sample_mm.sln index a3fa65f3..c6da3ad4 100644 --- a/sample_mm/msvc8/sample_mm.sln +++ b/samples/s1_sample_mm/msvc8/sample_mm.sln @@ -1,57 +1,57 @@ - -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample_mm", "sample_mm.vcproj", "{E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug - Alien Swarm|Win32 = Debug - Alien Swarm|Win32 - Debug - Dark Messiah|Win32 = Debug - Dark Messiah|Win32 - Debug - Left 4 Dead 2|Win32 = Debug - Left 4 Dead 2|Win32 - Debug - Left 4 Dead|Win32 = Debug - Left 4 Dead|Win32 - Debug - Orange Box Valve|Win32 = Debug - Orange Box Valve|Win32 - Debug - Orange Box|Win32 = Debug - Orange Box|Win32 - Debug - Original|Win32 = Debug - Original|Win32 - Release - Alien Swarm|Win32 = Release - Alien Swarm|Win32 - Release - Dark Messiah|Win32 = Release - Dark Messiah|Win32 - Release - Left 4 Dead 2|Win32 = Release - Left 4 Dead 2|Win32 - Release - Left 4 Dead|Win32 = Release - Left 4 Dead|Win32 - Release - Orange Box Valve|Win32 = Release - Orange Box Valve|Win32 - Release - Orange Box|Win32 = Release - Orange Box|Win32 - Release - Original|Win32 = Release - Original|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.ActiveCfg = Debug - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.Build.0 = Debug - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.ActiveCfg = Debug - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.Build.0 = Debug - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.ActiveCfg = Debug - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.Build.0 = Debug - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.ActiveCfg = Debug - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.Build.0 = Debug - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.ActiveCfg = Debug - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.Build.0 = Debug - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.ActiveCfg = Debug - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.Build.0 = Debug - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.ActiveCfg = Release - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.Build.0 = Release - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.ActiveCfg = Release - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.Build.0 = Release - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.ActiveCfg = Release - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.Build.0 = Release - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.ActiveCfg = Release - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.Build.0 = Release - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.ActiveCfg = Release - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.Build.0 = Release - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.ActiveCfg = Release - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.Build.0 = Release - Original|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample_mm", "sample_mm.vcproj", "{E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug - Alien Swarm|Win32 = Debug - Alien Swarm|Win32 + Debug - Dark Messiah|Win32 = Debug - Dark Messiah|Win32 + Debug - Left 4 Dead 2|Win32 = Debug - Left 4 Dead 2|Win32 + Debug - Left 4 Dead|Win32 = Debug - Left 4 Dead|Win32 + Debug - Orange Box Valve|Win32 = Debug - Orange Box Valve|Win32 + Debug - Orange Box|Win32 = Debug - Orange Box|Win32 + Debug - Original|Win32 = Debug - Original|Win32 + Release - Alien Swarm|Win32 = Release - Alien Swarm|Win32 + Release - Dark Messiah|Win32 = Release - Dark Messiah|Win32 + Release - Left 4 Dead 2|Win32 = Release - Left 4 Dead 2|Win32 + Release - Left 4 Dead|Win32 = Release - Left 4 Dead|Win32 + Release - Orange Box Valve|Win32 = Release - Orange Box Valve|Win32 + Release - Orange Box|Win32 = Release - Orange Box|Win32 + Release - Original|Win32 = Release - Original|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.ActiveCfg = Debug - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.Build.0 = Debug - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.ActiveCfg = Debug - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.Build.0 = Debug - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.ActiveCfg = Debug - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.Build.0 = Debug - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.ActiveCfg = Debug - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.Build.0 = Debug - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.ActiveCfg = Debug - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.Build.0 = Debug - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.ActiveCfg = Debug - Original|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.Build.0 = Debug - Original|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.ActiveCfg = Release - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.Build.0 = Release - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.ActiveCfg = Release - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.Build.0 = Release - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.ActiveCfg = Release - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.Build.0 = Release - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.ActiveCfg = Release - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.Build.0 = Release - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.ActiveCfg = Release - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.Build.0 = Release - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.ActiveCfg = Release - Original|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.Build.0 = Release - Original|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/sample_mm/msvc8/sample_mm.vcproj b/samples/s1_sample_mm/msvc8/sample_mm.vcproj similarity index 96% rename from sample_mm/msvc8/sample_mm.vcproj rename to samples/s1_sample_mm/msvc8/sample_mm.vcproj index f6e71db3..6115365e 100644 --- a/sample_mm/msvc8/sample_mm.vcproj +++ b/samples/s1_sample_mm/msvc8/sample_mm.vcproj @@ -1,1175 +1,1175 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sample_mm/msvc9/sample_mm.sln b/samples/s1_sample_mm/msvc9/sample_mm.sln similarity index 98% rename from sample_mm/msvc9/sample_mm.sln rename to samples/s1_sample_mm/msvc9/sample_mm.sln index 3aa0d4da..b7c42522 100644 --- a/sample_mm/msvc9/sample_mm.sln +++ b/samples/s1_sample_mm/msvc9/sample_mm.sln @@ -1,56 +1,56 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample_mm", "sample_mm.vcproj", "{E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug - Alien Swarm|Win32 = Debug - Alien Swarm|Win32 - Debug - Dark Messiah|Win32 = Debug - Dark Messiah|Win32 - Debug - Left 4 Dead 2|Win32 = Debug - Left 4 Dead 2|Win32 - Debug - Left 4 Dead|Win32 = Debug - Left 4 Dead|Win32 - Debug - Orange Box Valve|Win32 = Debug - Orange Box Valve|Win32 - Debug - Orange Box|Win32 = Debug - Orange Box|Win32 - Debug - Original|Win32 = Debug - Original|Win32 - Release - Alien Swarm|Win32 = Release - Alien Swarm|Win32 - Release - Dark Messiah|Win32 = Release - Dark Messiah|Win32 - Release - Left 4 Dead 2|Win32 = Release - Left 4 Dead 2|Win32 - Release - Left 4 Dead|Win32 = Release - Left 4 Dead|Win32 - Release - Orange Box Valve|Win32 = Release - Orange Box Valve|Win32 - Release - Orange Box|Win32 = Release - Orange Box|Win32 - Release - Original|Win32 = Release - Original|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.ActiveCfg = Debug - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.Build.0 = Debug - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.ActiveCfg = Debug - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.Build.0 = Debug - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.ActiveCfg = Debug - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.Build.0 = Debug - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.ActiveCfg = Debug - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.Build.0 = Debug - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.ActiveCfg = Debug - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.Build.0 = Debug - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.ActiveCfg = Debug - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.Build.0 = Debug - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.ActiveCfg = Release - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.Build.0 = Release - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.ActiveCfg = Release - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.Build.0 = Release - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.ActiveCfg = Release - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.Build.0 = Release - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.ActiveCfg = Release - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.Build.0 = Release - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.ActiveCfg = Release - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.Build.0 = Release - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.ActiveCfg = Release - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.Build.0 = Release - Original|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample_mm", "sample_mm.vcproj", "{E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug - Alien Swarm|Win32 = Debug - Alien Swarm|Win32 + Debug - Dark Messiah|Win32 = Debug - Dark Messiah|Win32 + Debug - Left 4 Dead 2|Win32 = Debug - Left 4 Dead 2|Win32 + Debug - Left 4 Dead|Win32 = Debug - Left 4 Dead|Win32 + Debug - Orange Box Valve|Win32 = Debug - Orange Box Valve|Win32 + Debug - Orange Box|Win32 = Debug - Orange Box|Win32 + Debug - Original|Win32 = Debug - Original|Win32 + Release - Alien Swarm|Win32 = Release - Alien Swarm|Win32 + Release - Dark Messiah|Win32 = Release - Dark Messiah|Win32 + Release - Left 4 Dead 2|Win32 = Release - Left 4 Dead 2|Win32 + Release - Left 4 Dead|Win32 = Release - Left 4 Dead|Win32 + Release - Orange Box Valve|Win32 = Release - Orange Box Valve|Win32 + Release - Orange Box|Win32 = Release - Orange Box|Win32 + Release - Original|Win32 = Release - Original|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.ActiveCfg = Debug - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.Build.0 = Debug - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.ActiveCfg = Debug - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.Build.0 = Debug - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.ActiveCfg = Debug - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.Build.0 = Debug - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.ActiveCfg = Debug - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.Build.0 = Debug - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.ActiveCfg = Debug - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.Build.0 = Debug - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.ActiveCfg = Debug - Original|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.Build.0 = Debug - Original|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.ActiveCfg = Release - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.Build.0 = Release - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.ActiveCfg = Release - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.Build.0 = Release - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.ActiveCfg = Release - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.Build.0 = Release - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.ActiveCfg = Release - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.Build.0 = Release - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.ActiveCfg = Release - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.Build.0 = Release - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.ActiveCfg = Release - Original|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.Build.0 = Release - Original|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/sample_mm/msvc9/sample_mm.vcproj b/samples/s1_sample_mm/msvc9/sample_mm.vcproj similarity index 96% rename from sample_mm/msvc9/sample_mm.vcproj rename to samples/s1_sample_mm/msvc9/sample_mm.vcproj index d748b90c..06b7bc97 100644 --- a/sample_mm/msvc9/sample_mm.vcproj +++ b/samples/s1_sample_mm/msvc9/sample_mm.vcproj @@ -1,1162 +1,1162 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sample_mm/product.version b/samples/s1_sample_mm/product.version similarity index 100% rename from sample_mm/product.version rename to samples/s1_sample_mm/product.version diff --git a/sample_mm/sample_mm.cpp b/samples/s1_sample_mm/sample_mm.cpp similarity index 97% rename from sample_mm/sample_mm.cpp rename to samples/s1_sample_mm/sample_mm.cpp index c5520ff6..01951aca 100644 --- a/sample_mm/sample_mm.cpp +++ b/samples/s1_sample_mm/sample_mm.cpp @@ -1,357 +1,357 @@ -/** - * vim: set ts=4 sw=4 tw=99 noet : - * ====================================================== - * Metamod:Source Sample Plugin - * Written by AlliedModders LLC. - * ====================================================== - * - * This software is provided 'as-is', without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. - * - * This sample plugin is public domain. - */ - -#include -#include "sample_mm.h" - -SH_DECL_HOOK6(IServerGameDLL, LevelInit, SH_NOATTRIB, 0, bool, char const *, char const *, char const *, char const *, bool, bool); -SH_DECL_HOOK3_void(IServerGameDLL, ServerActivate, SH_NOATTRIB, 0, edict_t *, int, int); -SH_DECL_HOOK1_void(IServerGameDLL, GameFrame, SH_NOATTRIB, 0, bool); -SH_DECL_HOOK0_void(IServerGameDLL, LevelShutdown, SH_NOATTRIB, 0); -SH_DECL_HOOK2_void(IServerGameClients, ClientActive, SH_NOATTRIB, 0, edict_t *, bool); -SH_DECL_HOOK1_void(IServerGameClients, ClientDisconnect, SH_NOATTRIB, 0, edict_t *); -SH_DECL_HOOK2_void(IServerGameClients, ClientPutInServer, SH_NOATTRIB, 0, edict_t *, char const *); -SH_DECL_HOOK1_void(IServerGameClients, SetCommandClient, SH_NOATTRIB, 0, int); -SH_DECL_HOOK1_void(IServerGameClients, ClientSettingsChanged, SH_NOATTRIB, 0, edict_t *); -SH_DECL_HOOK5(IServerGameClients, ClientConnect, SH_NOATTRIB, 0, bool, edict_t *, const char*, const char *, char *, int); -SH_DECL_HOOK2(IGameEventManager2, FireEvent, SH_NOATTRIB, 0, bool, IGameEvent *, bool); - -#if SOURCE_ENGINE >= SE_ORANGEBOX -SH_DECL_HOOK2_void(IServerGameClients, ClientCommand, SH_NOATTRIB, 0, edict_t *, const CCommand &); -#else -SH_DECL_HOOK1_void(IServerGameClients, ClientCommand, SH_NOATTRIB, 0, edict_t *); -#endif - -SamplePlugin g_SamplePlugin; -IServerGameDLL *server = NULL; -IServerGameClients *gameclients = NULL; -IVEngineServer *engine = NULL; -IServerPluginHelpers *helpers = NULL; -IGameEventManager2 *gameevents = NULL; -IServerPluginCallbacks *vsp_callbacks = NULL; -IPlayerInfoManager *playerinfomanager = NULL; -ICvar *icvar = NULL; -CGlobalVars *gpGlobals = NULL; - -ConVar sample_cvar("sample_cvar", "42", 0); - -/** - * Something like this is needed to register cvars/CON_COMMANDs. - */ -class BaseAccessor : public IConCommandBaseAccessor -{ -public: - bool RegisterConCommandBase(ConCommandBase *pCommandBase) - { - /* Always call META_REGCVAR instead of going through the engine. */ - return META_REGCVAR(pCommandBase); - } -} s_BaseAccessor; - -PLUGIN_EXPOSE(SamplePlugin, g_SamplePlugin); -bool SamplePlugin::Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late) -{ - PLUGIN_SAVEVARS(); - - GET_V_IFACE_CURRENT(GetEngineFactory, engine, IVEngineServer, INTERFACEVERSION_VENGINESERVER); - GET_V_IFACE_CURRENT(GetEngineFactory, gameevents, IGameEventManager2, INTERFACEVERSION_GAMEEVENTSMANAGER2); - GET_V_IFACE_CURRENT(GetEngineFactory, helpers, IServerPluginHelpers, INTERFACEVERSION_ISERVERPLUGINHELPERS); - GET_V_IFACE_CURRENT(GetEngineFactory, icvar, ICvar, CVAR_INTERFACE_VERSION); - GET_V_IFACE_ANY(GetServerFactory, server, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL); - GET_V_IFACE_ANY(GetServerFactory, gameclients, IServerGameClients, INTERFACEVERSION_SERVERGAMECLIENTS); - GET_V_IFACE_ANY(GetServerFactory, playerinfomanager, IPlayerInfoManager, INTERFACEVERSION_PLAYERINFOMANAGER); - - gpGlobals = ismm->GetCGlobals(); - - META_LOG(g_PLAPI, "Starting plugin."); - - /* Load the VSP listener. This is usually needed for IServerPluginHelpers. */ - if ((vsp_callbacks = ismm->GetVSPInfo(NULL)) == NULL) - { - ismm->AddListener(this, this); - ismm->EnableVSPListener(); - } - - SH_ADD_HOOK_MEMFUNC(IServerGameDLL, LevelInit, server, this, &SamplePlugin::Hook_LevelInit, true); - SH_ADD_HOOK_MEMFUNC(IServerGameDLL, ServerActivate, server, this, &SamplePlugin::Hook_ServerActivate, true); - SH_ADD_HOOK_MEMFUNC(IServerGameDLL, GameFrame, server, this, &SamplePlugin::Hook_GameFrame, true); - SH_ADD_HOOK_MEMFUNC(IServerGameDLL, LevelShutdown, server, this, &SamplePlugin::Hook_LevelShutdown, false); - SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientActive, gameclients, this, &SamplePlugin::Hook_ClientActive, true); - SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, gameclients, this, &SamplePlugin::Hook_ClientDisconnect, true); - SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientPutInServer, gameclients, this, &SamplePlugin::Hook_ClientPutInServer, true); - SH_ADD_HOOK_MEMFUNC(IServerGameClients, SetCommandClient, gameclients, this, &SamplePlugin::Hook_SetCommandClient, true); - SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientSettingsChanged, gameclients, this, &SamplePlugin::Hook_ClientSettingsChanged, false); - SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientConnect, gameclients, this, &SamplePlugin::Hook_ClientConnect, false); - SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientCommand, gameclients, this, &SamplePlugin::Hook_ClientCommand, false); - - ENGINE_CALL(LogPrint)("All hooks started!\n"); - -#if SOURCE_ENGINE >= SE_ORANGEBOX - g_pCVar = icvar; - ConVar_Register(0, &s_BaseAccessor); -#else - ConCommandBaseMgr::OneTimeInit(&s_BaseAccessor); -#endif - - return true; -} - -bool SamplePlugin::Unload(char *error, size_t maxlen) -{ - SH_REMOVE_HOOK_MEMFUNC(IServerGameDLL, LevelInit, server, this, &SamplePlugin::Hook_LevelInit, true); - SH_REMOVE_HOOK_MEMFUNC(IServerGameDLL, ServerActivate, server, this, &SamplePlugin::Hook_ServerActivate, true); - SH_REMOVE_HOOK_MEMFUNC(IServerGameDLL, GameFrame, server, this, &SamplePlugin::Hook_GameFrame, true); - SH_REMOVE_HOOK_MEMFUNC(IServerGameDLL, LevelShutdown, server, this, &SamplePlugin::Hook_LevelShutdown, false); - SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientActive, gameclients, this, &SamplePlugin::Hook_ClientActive, true); - SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, gameclients, this, &SamplePlugin::Hook_ClientDisconnect, true); - SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientPutInServer, gameclients, this, &SamplePlugin::Hook_ClientPutInServer, true); - SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, SetCommandClient, gameclients, this, &SamplePlugin::Hook_SetCommandClient, true); - SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientSettingsChanged, gameclients, this, &SamplePlugin::Hook_ClientSettingsChanged, false); - SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientConnect, gameclients, this, &SamplePlugin::Hook_ClientConnect, false); - SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientCommand, gameclients, this, &SamplePlugin::Hook_ClientCommand, false); - - return true; -} - -void SamplePlugin::OnVSPListening(IServerPluginCallbacks *iface) -{ - vsp_callbacks = iface; -} - -void SamplePlugin::Hook_ServerActivate(edict_t *pEdictList, int edictCount, int clientMax) -{ - META_LOG(g_PLAPI, "ServerActivate() called: edictCount = %d, clientMax = %d", edictCount, clientMax); -} - -void SamplePlugin::AllPluginsLoaded() -{ - /* This is where we'd do stuff that relies on the mod or other plugins - * being initialized (for example, cvars added and events registered). - */ -} - -void SamplePlugin::Hook_ClientActive(edict_t *pEntity, bool bLoadGame) -{ - META_LOG(g_PLAPI, "Hook_ClientActive(%d, %d)", IndexOfEdict(pEntity), bLoadGame); -} - -#if SOURCE_ENGINE >= SE_ORANGEBOX -void SamplePlugin::Hook_ClientCommand(edict_t *pEntity, const CCommand &args) -#else -void SamplePlugin::Hook_ClientCommand(edict_t *pEntity) -#endif -{ -#if SOURCE_ENGINE <= SE_DARKMESSIAH - CCommand args; -#endif - - if (!pEntity || pEntity->IsFree()) - { - return; - } - - const char *cmd = args.Arg(0); - if (strcmp(cmd, "menu") == 0) - { - KeyValues *kv = new KeyValues("menu"); - kv->SetString("title", "You've got options, hit ESC"); - kv->SetInt("level", 1); - kv->SetColor("color", Color(255, 0, 0, 255)); - kv->SetInt("time", 20); - kv->SetString("msg", "Pick an option\nOr don't."); - - for (int i = 1; i < 9; i++) - { - char num[10], msg[10], cmd[10]; - MM_Format( num, sizeof(num), "%i", i ); - MM_Format( msg, sizeof(msg), "Option %i", i ); - MM_Format( cmd, sizeof(cmd), "option %i", i ); - - KeyValues *item1 = kv->FindKey(num, true); - item1->SetString("msg", msg); - item1->SetString("command", cmd); - } - - helpers->CreateMessage(pEntity, DIALOG_MENU, kv, vsp_callbacks); - kv->deleteThis(); - RETURN_META(MRES_SUPERCEDE); - } - else if (strcmp(cmd, "rich") == 0) - { - KeyValues *kv = new KeyValues("menu"); - kv->SetString("title", "A rich message"); - kv->SetInt("level", 1); - kv->SetInt("time", 20); - kv->SetString("msg", "This is a long long long text string.\n\nIt also has line breaks."); - - helpers->CreateMessage(pEntity, DIALOG_TEXT, kv, vsp_callbacks); - kv->deleteThis(); - RETURN_META(MRES_SUPERCEDE); - } - else if (strcmp(cmd, "msg") == 0) - { - KeyValues *kv = new KeyValues("menu"); - kv->SetString("title", "Just a simple hello"); - kv->SetInt("level", 1); - kv->SetInt("time", 20); - - helpers->CreateMessage(pEntity, DIALOG_MSG, kv, vsp_callbacks); - kv->deleteThis(); - RETURN_META(MRES_SUPERCEDE); - } - else if (strcmp(cmd, "entry") == 0) - { - KeyValues *kv = new KeyValues("entry"); - kv->SetString("title", "Stuff"); - kv->SetString("msg", "Enter something"); - kv->SetString("command", "say"); // anything they enter into the dialog turns into a say command - kv->SetInt("level", 1); - kv->SetInt("time", 20); - - helpers->CreateMessage(pEntity, DIALOG_ENTRY, kv, vsp_callbacks); - kv->deleteThis(); - RETURN_META(MRES_SUPERCEDE); - } -} - -void SamplePlugin::Hook_ClientSettingsChanged(edict_t *pEdict) -{ - if (playerinfomanager) - { - IPlayerInfo *playerinfo = playerinfomanager->GetPlayerInfo(pEdict); - - const char *name = engine->GetClientConVarValue(IndexOfEdict(pEdict), "name"); - - if (playerinfo != NULL - && name != NULL - && strcmp(engine->GetPlayerNetworkIDString(pEdict), "BOT") != 0 - && playerinfo->GetName() != NULL - && strcmp(name, playerinfo->GetName()) == 0) - { - char msg[128]; - MM_Format(msg, sizeof(msg), "Your name changed to \"%s\" (from \"%s\")\n", name, playerinfo->GetName()); - engine->ClientPrintf(pEdict, msg); - } - } -} - -bool SamplePlugin::Hook_ClientConnect(edict_t *pEntity, - const char *pszName, - const char *pszAddress, - char *reject, - int maxrejectlen) -{ - META_LOG(g_PLAPI, "Hook_ClientConnect(%d, \"%s\", \"%s\")", IndexOfEdict(pEntity), pszName, pszAddress); - - return true; -} - -void SamplePlugin::Hook_ClientPutInServer(edict_t *pEntity, char const *playername) -{ - KeyValues *kv = new KeyValues( "msg" ); - kv->SetString( "title", "Hello" ); - kv->SetString( "msg", "Hello there" ); - kv->SetColor( "color", Color( 255, 0, 0, 255 )); - kv->SetInt( "level", 5); - kv->SetInt( "time", 10); - helpers->CreateMessage(pEntity, DIALOG_MSG, kv, vsp_callbacks); - kv->deleteThis(); -} - -void SamplePlugin::Hook_ClientDisconnect(edict_t *pEntity) -{ - META_LOG(g_PLAPI, "Hook_ClientDisconnect(%d)", IndexOfEdict(pEntity)); -} - -void SamplePlugin::Hook_GameFrame(bool simulating) -{ - /** - * simulating: - * *********** - * true | game is ticking - * false | game is not ticking - */ -} - -bool SamplePlugin::Hook_LevelInit(const char *pMapName, - char const *pMapEntities, - char const *pOldLevel, - char const *pLandmarkName, - bool loadGame, - bool background) -{ - META_LOG(g_PLAPI, "Hook_LevelInit(%s)", pMapName); - - return true; -} - -void SamplePlugin::Hook_LevelShutdown() -{ - META_LOG(g_PLAPI, "Hook_LevelShutdown()"); -} - -void SamplePlugin::Hook_SetCommandClient(int index) -{ - META_LOG(g_PLAPI, "Hook_SetCommandClient(%d)", index); -} - -bool SamplePlugin::Pause(char *error, size_t maxlen) -{ - return true; -} - -bool SamplePlugin::Unpause(char *error, size_t maxlen) -{ - return true; -} - -const char *SamplePlugin::GetLicense() -{ - return "Public Domain"; -} - -const char *SamplePlugin::GetVersion() -{ - return "1.0.0.0"; -} - -const char *SamplePlugin::GetDate() -{ - return __DATE__; -} - -const char *SamplePlugin::GetLogTag() -{ - return "SAMPLE"; -} - -const char *SamplePlugin::GetAuthor() -{ - return "AlliedModders LLC"; -} - -const char *SamplePlugin::GetDescription() -{ - return "Sample basic plugin"; -} - -const char *SamplePlugin::GetName() -{ - return "Sample Plugin"; -} - -const char *SamplePlugin::GetURL() -{ - return "http://www.sourcemm.net/"; -} +/** + * vim: set ts=4 sw=4 tw=99 noet : + * ====================================================== + * Metamod:Source Sample Plugin + * Written by AlliedModders LLC. + * ====================================================== + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * This sample plugin is public domain. + */ + +#include +#include "sample_mm.h" + +SH_DECL_HOOK6(IServerGameDLL, LevelInit, SH_NOATTRIB, 0, bool, char const *, char const *, char const *, char const *, bool, bool); +SH_DECL_HOOK3_void(IServerGameDLL, ServerActivate, SH_NOATTRIB, 0, edict_t *, int, int); +SH_DECL_HOOK1_void(IServerGameDLL, GameFrame, SH_NOATTRIB, 0, bool); +SH_DECL_HOOK0_void(IServerGameDLL, LevelShutdown, SH_NOATTRIB, 0); +SH_DECL_HOOK2_void(IServerGameClients, ClientActive, SH_NOATTRIB, 0, edict_t *, bool); +SH_DECL_HOOK1_void(IServerGameClients, ClientDisconnect, SH_NOATTRIB, 0, edict_t *); +SH_DECL_HOOK2_void(IServerGameClients, ClientPutInServer, SH_NOATTRIB, 0, edict_t *, char const *); +SH_DECL_HOOK1_void(IServerGameClients, SetCommandClient, SH_NOATTRIB, 0, int); +SH_DECL_HOOK1_void(IServerGameClients, ClientSettingsChanged, SH_NOATTRIB, 0, edict_t *); +SH_DECL_HOOK5(IServerGameClients, ClientConnect, SH_NOATTRIB, 0, bool, edict_t *, const char*, const char *, char *, int); +SH_DECL_HOOK2(IGameEventManager2, FireEvent, SH_NOATTRIB, 0, bool, IGameEvent *, bool); + +#if SOURCE_ENGINE >= SE_ORANGEBOX +SH_DECL_HOOK2_void(IServerGameClients, ClientCommand, SH_NOATTRIB, 0, edict_t *, const CCommand &); +#else +SH_DECL_HOOK1_void(IServerGameClients, ClientCommand, SH_NOATTRIB, 0, edict_t *); +#endif + +SamplePlugin g_SamplePlugin; +IServerGameDLL *server = NULL; +IServerGameClients *gameclients = NULL; +IVEngineServer *engine = NULL; +IServerPluginHelpers *helpers = NULL; +IGameEventManager2 *gameevents = NULL; +IServerPluginCallbacks *vsp_callbacks = NULL; +IPlayerInfoManager *playerinfomanager = NULL; +ICvar *icvar = NULL; +CGlobalVars *gpGlobals = NULL; + +ConVar sample_cvar("sample_cvar", "42", 0); + +/** + * Something like this is needed to register cvars/CON_COMMANDs. + */ +class BaseAccessor : public IConCommandBaseAccessor +{ +public: + bool RegisterConCommandBase(ConCommandBase *pCommandBase) + { + /* Always call META_REGCVAR instead of going through the engine. */ + return META_REGCVAR(pCommandBase); + } +} s_BaseAccessor; + +PLUGIN_EXPOSE(SamplePlugin, g_SamplePlugin); +bool SamplePlugin::Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late) +{ + PLUGIN_SAVEVARS(); + + GET_V_IFACE_CURRENT(GetEngineFactory, engine, IVEngineServer, INTERFACEVERSION_VENGINESERVER); + GET_V_IFACE_CURRENT(GetEngineFactory, gameevents, IGameEventManager2, INTERFACEVERSION_GAMEEVENTSMANAGER2); + GET_V_IFACE_CURRENT(GetEngineFactory, helpers, IServerPluginHelpers, INTERFACEVERSION_ISERVERPLUGINHELPERS); + GET_V_IFACE_CURRENT(GetEngineFactory, icvar, ICvar, CVAR_INTERFACE_VERSION); + GET_V_IFACE_ANY(GetServerFactory, server, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL); + GET_V_IFACE_ANY(GetServerFactory, gameclients, IServerGameClients, INTERFACEVERSION_SERVERGAMECLIENTS); + GET_V_IFACE_ANY(GetServerFactory, playerinfomanager, IPlayerInfoManager, INTERFACEVERSION_PLAYERINFOMANAGER); + + gpGlobals = ismm->GetCGlobals(); + + META_LOG(g_PLAPI, "Starting plugin."); + + /* Load the VSP listener. This is usually needed for IServerPluginHelpers. */ + if ((vsp_callbacks = ismm->GetVSPInfo(NULL)) == NULL) + { + ismm->AddListener(this, this); + ismm->EnableVSPListener(); + } + + SH_ADD_HOOK_MEMFUNC(IServerGameDLL, LevelInit, server, this, &SamplePlugin::Hook_LevelInit, true); + SH_ADD_HOOK_MEMFUNC(IServerGameDLL, ServerActivate, server, this, &SamplePlugin::Hook_ServerActivate, true); + SH_ADD_HOOK_MEMFUNC(IServerGameDLL, GameFrame, server, this, &SamplePlugin::Hook_GameFrame, true); + SH_ADD_HOOK_MEMFUNC(IServerGameDLL, LevelShutdown, server, this, &SamplePlugin::Hook_LevelShutdown, false); + SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientActive, gameclients, this, &SamplePlugin::Hook_ClientActive, true); + SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, gameclients, this, &SamplePlugin::Hook_ClientDisconnect, true); + SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientPutInServer, gameclients, this, &SamplePlugin::Hook_ClientPutInServer, true); + SH_ADD_HOOK_MEMFUNC(IServerGameClients, SetCommandClient, gameclients, this, &SamplePlugin::Hook_SetCommandClient, true); + SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientSettingsChanged, gameclients, this, &SamplePlugin::Hook_ClientSettingsChanged, false); + SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientConnect, gameclients, this, &SamplePlugin::Hook_ClientConnect, false); + SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientCommand, gameclients, this, &SamplePlugin::Hook_ClientCommand, false); + + ENGINE_CALL(LogPrint)("All hooks started!\n"); + +#if SOURCE_ENGINE >= SE_ORANGEBOX + g_pCVar = icvar; + ConVar_Register(0, &s_BaseAccessor); +#else + ConCommandBaseMgr::OneTimeInit(&s_BaseAccessor); +#endif + + return true; +} + +bool SamplePlugin::Unload(char *error, size_t maxlen) +{ + SH_REMOVE_HOOK_MEMFUNC(IServerGameDLL, LevelInit, server, this, &SamplePlugin::Hook_LevelInit, true); + SH_REMOVE_HOOK_MEMFUNC(IServerGameDLL, ServerActivate, server, this, &SamplePlugin::Hook_ServerActivate, true); + SH_REMOVE_HOOK_MEMFUNC(IServerGameDLL, GameFrame, server, this, &SamplePlugin::Hook_GameFrame, true); + SH_REMOVE_HOOK_MEMFUNC(IServerGameDLL, LevelShutdown, server, this, &SamplePlugin::Hook_LevelShutdown, false); + SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientActive, gameclients, this, &SamplePlugin::Hook_ClientActive, true); + SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, gameclients, this, &SamplePlugin::Hook_ClientDisconnect, true); + SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientPutInServer, gameclients, this, &SamplePlugin::Hook_ClientPutInServer, true); + SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, SetCommandClient, gameclients, this, &SamplePlugin::Hook_SetCommandClient, true); + SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientSettingsChanged, gameclients, this, &SamplePlugin::Hook_ClientSettingsChanged, false); + SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientConnect, gameclients, this, &SamplePlugin::Hook_ClientConnect, false); + SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientCommand, gameclients, this, &SamplePlugin::Hook_ClientCommand, false); + + return true; +} + +void SamplePlugin::OnVSPListening(IServerPluginCallbacks *iface) +{ + vsp_callbacks = iface; +} + +void SamplePlugin::Hook_ServerActivate(edict_t *pEdictList, int edictCount, int clientMax) +{ + META_LOG(g_PLAPI, "ServerActivate() called: edictCount = %d, clientMax = %d", edictCount, clientMax); +} + +void SamplePlugin::AllPluginsLoaded() +{ + /* This is where we'd do stuff that relies on the mod or other plugins + * being initialized (for example, cvars added and events registered). + */ +} + +void SamplePlugin::Hook_ClientActive(edict_t *pEntity, bool bLoadGame) +{ + META_LOG(g_PLAPI, "Hook_ClientActive(%d, %d)", IndexOfEdict(pEntity), bLoadGame); +} + +#if SOURCE_ENGINE >= SE_ORANGEBOX +void SamplePlugin::Hook_ClientCommand(edict_t *pEntity, const CCommand &args) +#else +void SamplePlugin::Hook_ClientCommand(edict_t *pEntity) +#endif +{ +#if SOURCE_ENGINE <= SE_DARKMESSIAH + CCommand args; +#endif + + if (!pEntity || pEntity->IsFree()) + { + return; + } + + const char *cmd = args.Arg(0); + if (strcmp(cmd, "menu") == 0) + { + KeyValues *kv = new KeyValues("menu"); + kv->SetString("title", "You've got options, hit ESC"); + kv->SetInt("level", 1); + kv->SetColor("color", Color(255, 0, 0, 255)); + kv->SetInt("time", 20); + kv->SetString("msg", "Pick an option\nOr don't."); + + for (int i = 1; i < 9; i++) + { + char num[10], msg[10], cmd[10]; + MM_Format( num, sizeof(num), "%i", i ); + MM_Format( msg, sizeof(msg), "Option %i", i ); + MM_Format( cmd, sizeof(cmd), "option %i", i ); + + KeyValues *item1 = kv->FindKey(num, true); + item1->SetString("msg", msg); + item1->SetString("command", cmd); + } + + helpers->CreateMessage(pEntity, DIALOG_MENU, kv, vsp_callbacks); + kv->deleteThis(); + RETURN_META(MRES_SUPERCEDE); + } + else if (strcmp(cmd, "rich") == 0) + { + KeyValues *kv = new KeyValues("menu"); + kv->SetString("title", "A rich message"); + kv->SetInt("level", 1); + kv->SetInt("time", 20); + kv->SetString("msg", "This is a long long long text string.\n\nIt also has line breaks."); + + helpers->CreateMessage(pEntity, DIALOG_TEXT, kv, vsp_callbacks); + kv->deleteThis(); + RETURN_META(MRES_SUPERCEDE); + } + else if (strcmp(cmd, "msg") == 0) + { + KeyValues *kv = new KeyValues("menu"); + kv->SetString("title", "Just a simple hello"); + kv->SetInt("level", 1); + kv->SetInt("time", 20); + + helpers->CreateMessage(pEntity, DIALOG_MSG, kv, vsp_callbacks); + kv->deleteThis(); + RETURN_META(MRES_SUPERCEDE); + } + else if (strcmp(cmd, "entry") == 0) + { + KeyValues *kv = new KeyValues("entry"); + kv->SetString("title", "Stuff"); + kv->SetString("msg", "Enter something"); + kv->SetString("command", "say"); // anything they enter into the dialog turns into a say command + kv->SetInt("level", 1); + kv->SetInt("time", 20); + + helpers->CreateMessage(pEntity, DIALOG_ENTRY, kv, vsp_callbacks); + kv->deleteThis(); + RETURN_META(MRES_SUPERCEDE); + } +} + +void SamplePlugin::Hook_ClientSettingsChanged(edict_t *pEdict) +{ + if (playerinfomanager) + { + IPlayerInfo *playerinfo = playerinfomanager->GetPlayerInfo(pEdict); + + const char *name = engine->GetClientConVarValue(IndexOfEdict(pEdict), "name"); + + if (playerinfo != NULL + && name != NULL + && strcmp(engine->GetPlayerNetworkIDString(pEdict), "BOT") != 0 + && playerinfo->GetName() != NULL + && strcmp(name, playerinfo->GetName()) == 0) + { + char msg[128]; + MM_Format(msg, sizeof(msg), "Your name changed to \"%s\" (from \"%s\")\n", name, playerinfo->GetName()); + engine->ClientPrintf(pEdict, msg); + } + } +} + +bool SamplePlugin::Hook_ClientConnect(edict_t *pEntity, + const char *pszName, + const char *pszAddress, + char *reject, + int maxrejectlen) +{ + META_LOG(g_PLAPI, "Hook_ClientConnect(%d, \"%s\", \"%s\")", IndexOfEdict(pEntity), pszName, pszAddress); + + return true; +} + +void SamplePlugin::Hook_ClientPutInServer(edict_t *pEntity, char const *playername) +{ + KeyValues *kv = new KeyValues( "msg" ); + kv->SetString( "title", "Hello" ); + kv->SetString( "msg", "Hello there" ); + kv->SetColor( "color", Color( 255, 0, 0, 255 )); + kv->SetInt( "level", 5); + kv->SetInt( "time", 10); + helpers->CreateMessage(pEntity, DIALOG_MSG, kv, vsp_callbacks); + kv->deleteThis(); +} + +void SamplePlugin::Hook_ClientDisconnect(edict_t *pEntity) +{ + META_LOG(g_PLAPI, "Hook_ClientDisconnect(%d)", IndexOfEdict(pEntity)); +} + +void SamplePlugin::Hook_GameFrame(bool simulating) +{ + /** + * simulating: + * *********** + * true | game is ticking + * false | game is not ticking + */ +} + +bool SamplePlugin::Hook_LevelInit(const char *pMapName, + char const *pMapEntities, + char const *pOldLevel, + char const *pLandmarkName, + bool loadGame, + bool background) +{ + META_LOG(g_PLAPI, "Hook_LevelInit(%s)", pMapName); + + return true; +} + +void SamplePlugin::Hook_LevelShutdown() +{ + META_LOG(g_PLAPI, "Hook_LevelShutdown()"); +} + +void SamplePlugin::Hook_SetCommandClient(int index) +{ + META_LOG(g_PLAPI, "Hook_SetCommandClient(%d)", index); +} + +bool SamplePlugin::Pause(char *error, size_t maxlen) +{ + return true; +} + +bool SamplePlugin::Unpause(char *error, size_t maxlen) +{ + return true; +} + +const char *SamplePlugin::GetLicense() +{ + return "Public Domain"; +} + +const char *SamplePlugin::GetVersion() +{ + return "1.0.0.0"; +} + +const char *SamplePlugin::GetDate() +{ + return __DATE__; +} + +const char *SamplePlugin::GetLogTag() +{ + return "SAMPLE"; +} + +const char *SamplePlugin::GetAuthor() +{ + return "AlliedModders LLC"; +} + +const char *SamplePlugin::GetDescription() +{ + return "Sample basic plugin"; +} + +const char *SamplePlugin::GetName() +{ + return "Sample Plugin"; +} + +const char *SamplePlugin::GetURL() +{ + return "http://www.sourcemm.net/"; +} diff --git a/sample_mm/sample_mm.h b/samples/s1_sample_mm/sample_mm.h similarity index 96% rename from sample_mm/sample_mm.h rename to samples/s1_sample_mm/sample_mm.h index 8164fd81..7268506b 100644 --- a/sample_mm/sample_mm.h +++ b/samples/s1_sample_mm/sample_mm.h @@ -1,78 +1,78 @@ -/** - * vim: set ts=4 sw=4 tw=99 noet : - * ====================================================== - * Metamod:Source Sample Plugin - * Written by AlliedModders LLC. - * ====================================================== - * - * This software is provided 'as-is', without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. - * - * This sample plugin is public domain. - */ - -#ifndef _INCLUDE_METAMOD_SOURCE_STUB_PLUGIN_H_ -#define _INCLUDE_METAMOD_SOURCE_STUB_PLUGIN_H_ - -#include -#include -#include -#include -#include "engine_wrappers.h" - -#if defined WIN32 && !defined snprintf -#define snprintf _snprintf -#endif - -class SamplePlugin : public ISmmPlugin, public IMetamodListener -{ -public: - bool Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late); - bool Unload(char *error, size_t maxlen); - bool Pause(char *error, size_t maxlen); - bool Unpause(char *error, size_t maxlen); - void AllPluginsLoaded(); -public: //IMetamodListener stuff - void OnVSPListening(IServerPluginCallbacks *iface); -public: //hooks - void Hook_ServerActivate(edict_t *pEdictList, int edictCount, int clientMax); - bool Hook_LevelInit(const char *pMapName, - char const *pMapEntities, - char const *pOldLevel, - char const *pLandmarkName, - bool loadGame, - bool background); - void Hook_GameFrame(bool simulating); - void Hook_LevelShutdown(void); - void Hook_ClientActive(edict_t *pEntity, bool bLoadGame); - void Hook_ClientDisconnect(edict_t *pEntity); - void Hook_ClientPutInServer(edict_t *pEntity, char const *playername); - void Hook_SetCommandClient(int index); - void Hook_ClientSettingsChanged(edict_t *pEdict); - bool Hook_ClientConnect(edict_t *pEntity, - const char *pszName, - const char *pszAddress, - char *reject, - int maxrejectlen); -#if SOURCE_ENGINE >= SE_ORANGEBOX - void Hook_ClientCommand(edict_t *pEntity, const CCommand &args); -#else - void Hook_ClientCommand(edict_t *pEntity); -#endif -public: - const char *GetAuthor(); - const char *GetName(); - const char *GetDescription(); - const char *GetURL(); - const char *GetLicense(); - const char *GetVersion(); - const char *GetDate(); - const char *GetLogTag(); -}; - -extern SamplePlugin g_SamplePlugin; - -PLUGIN_GLOBALVARS(); - -#endif //_INCLUDE_METAMOD_SOURCE_STUB_PLUGIN_H_ +/** + * vim: set ts=4 sw=4 tw=99 noet : + * ====================================================== + * Metamod:Source Sample Plugin + * Written by AlliedModders LLC. + * ====================================================== + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * This sample plugin is public domain. + */ + +#ifndef _INCLUDE_METAMOD_SOURCE_STUB_PLUGIN_H_ +#define _INCLUDE_METAMOD_SOURCE_STUB_PLUGIN_H_ + +#include +#include +#include +#include +#include "engine_wrappers.h" + +#if defined WIN32 && !defined snprintf +#define snprintf _snprintf +#endif + +class SamplePlugin : public ISmmPlugin, public IMetamodListener +{ +public: + bool Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late); + bool Unload(char *error, size_t maxlen); + bool Pause(char *error, size_t maxlen); + bool Unpause(char *error, size_t maxlen); + void AllPluginsLoaded(); +public: //IMetamodListener stuff + void OnVSPListening(IServerPluginCallbacks *iface); +public: //hooks + void Hook_ServerActivate(edict_t *pEdictList, int edictCount, int clientMax); + bool Hook_LevelInit(const char *pMapName, + char const *pMapEntities, + char const *pOldLevel, + char const *pLandmarkName, + bool loadGame, + bool background); + void Hook_GameFrame(bool simulating); + void Hook_LevelShutdown(void); + void Hook_ClientActive(edict_t *pEntity, bool bLoadGame); + void Hook_ClientDisconnect(edict_t *pEntity); + void Hook_ClientPutInServer(edict_t *pEntity, char const *playername); + void Hook_SetCommandClient(int index); + void Hook_ClientSettingsChanged(edict_t *pEdict); + bool Hook_ClientConnect(edict_t *pEntity, + const char *pszName, + const char *pszAddress, + char *reject, + int maxrejectlen); +#if SOURCE_ENGINE >= SE_ORANGEBOX + void Hook_ClientCommand(edict_t *pEntity, const CCommand &args); +#else + void Hook_ClientCommand(edict_t *pEntity); +#endif +public: + const char *GetAuthor(); + const char *GetName(); + const char *GetDescription(); + const char *GetURL(); + const char *GetLicense(); + const char *GetVersion(); + const char *GetDate(); + const char *GetLogTag(); +}; + +extern SamplePlugin g_SamplePlugin; + +PLUGIN_GLOBALVARS(); + +#endif //_INCLUDE_METAMOD_SOURCE_STUB_PLUGIN_H_ diff --git a/sample_mm/sample_mm.vdf b/samples/s1_sample_mm/sample_mm.vdf similarity index 93% rename from sample_mm/sample_mm.vdf rename to samples/s1_sample_mm/sample_mm.vdf index 39e7a115..715ee306 100644 --- a/sample_mm/sample_mm.vdf +++ b/samples/s1_sample_mm/sample_mm.vdf @@ -1,5 +1,5 @@ -"Metamod Plugin" -{ - "alias" "sample" - "file" "addons/sample_mm" -} +"Metamod Plugin" +{ + "alias" "sample" + "file" "addons/sample_mm" +} diff --git a/stub_mm/Makefile b/samples/s1_stub_mm/Makefile similarity index 100% rename from stub_mm/Makefile rename to samples/s1_stub_mm/Makefile diff --git a/stub_mm/README.txt b/samples/s1_stub_mm/README.md similarity index 97% rename from stub_mm/README.txt rename to samples/s1_stub_mm/README.md index 2a002c1b..aa8cbc13 100644 --- a/stub_mm/README.txt +++ b/samples/s1_stub_mm/README.md @@ -1,4 +1,4 @@ -For more information on compiling and reading the plugin's source code, see: - - http://wiki.alliedmods.net/Category:Metamod:Source_Development - +For more information on compiling and reading the plugin's source code, see: + + http://wiki.alliedmods.net/Category:Metamod:Source_Development + diff --git a/stub_mm/msvc10/stub_mm.sln b/samples/s1_stub_mm/msvc10/stub_mm.sln similarity index 98% rename from stub_mm/msvc10/stub_mm.sln rename to samples/s1_stub_mm/msvc10/stub_mm.sln index 7c4359ea..2bbacd7a 100644 --- a/stub_mm/msvc10/stub_mm.sln +++ b/samples/s1_stub_mm/msvc10/stub_mm.sln @@ -1,56 +1,56 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stub_mm", "stub_mm.vcxproj", "{E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug - Alien Swarm|Win32 = Debug - Alien Swarm|Win32 - Debug - Dark Messiah|Win32 = Debug - Dark Messiah|Win32 - Debug - Left 4 Dead 2|Win32 = Debug - Left 4 Dead 2|Win32 - Debug - Left 4 Dead|Win32 = Debug - Left 4 Dead|Win32 - Debug - Orange Box Valve|Win32 = Debug - Orange Box Valve|Win32 - Debug - Orange Box|Win32 = Debug - Orange Box|Win32 - Debug - Original|Win32 = Debug - Original|Win32 - Release - Alien Swarm|Win32 = Release - Alien Swarm|Win32 - Release - Dark Messiah|Win32 = Release - Dark Messiah|Win32 - Release - Left 4 Dead 2|Win32 = Release - Left 4 Dead 2|Win32 - Release - Left 4 Dead|Win32 = Release - Left 4 Dead|Win32 - Release - Orange Box Valve|Win32 = Release - Orange Box Valve|Win32 - Release - Orange Box|Win32 = Release - Orange Box|Win32 - Release - Original|Win32 = Release - Original|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.ActiveCfg = Debug - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.Build.0 = Debug - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.ActiveCfg = Debug - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.Build.0 = Debug - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.ActiveCfg = Debug - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.Build.0 = Debug - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.ActiveCfg = Debug - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.Build.0 = Debug - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.ActiveCfg = Debug - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.Build.0 = Debug - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.ActiveCfg = Debug - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.Build.0 = Debug - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.ActiveCfg = Release - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.Build.0 = Release - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.ActiveCfg = Release - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.Build.0 = Release - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.ActiveCfg = Release - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.Build.0 = Release - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.ActiveCfg = Release - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.Build.0 = Release - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.ActiveCfg = Release - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.Build.0 = Release - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.ActiveCfg = Release - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.Build.0 = Release - Original|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stub_mm", "stub_mm.vcxproj", "{E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug - Alien Swarm|Win32 = Debug - Alien Swarm|Win32 + Debug - Dark Messiah|Win32 = Debug - Dark Messiah|Win32 + Debug - Left 4 Dead 2|Win32 = Debug - Left 4 Dead 2|Win32 + Debug - Left 4 Dead|Win32 = Debug - Left 4 Dead|Win32 + Debug - Orange Box Valve|Win32 = Debug - Orange Box Valve|Win32 + Debug - Orange Box|Win32 = Debug - Orange Box|Win32 + Debug - Original|Win32 = Debug - Original|Win32 + Release - Alien Swarm|Win32 = Release - Alien Swarm|Win32 + Release - Dark Messiah|Win32 = Release - Dark Messiah|Win32 + Release - Left 4 Dead 2|Win32 = Release - Left 4 Dead 2|Win32 + Release - Left 4 Dead|Win32 = Release - Left 4 Dead|Win32 + Release - Orange Box Valve|Win32 = Release - Orange Box Valve|Win32 + Release - Orange Box|Win32 = Release - Orange Box|Win32 + Release - Original|Win32 = Release - Original|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.ActiveCfg = Debug - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.Build.0 = Debug - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.ActiveCfg = Debug - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.Build.0 = Debug - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.ActiveCfg = Debug - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.Build.0 = Debug - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.ActiveCfg = Debug - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.Build.0 = Debug - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.ActiveCfg = Debug - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.Build.0 = Debug - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.ActiveCfg = Debug - Original|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.Build.0 = Debug - Original|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.ActiveCfg = Release - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.Build.0 = Release - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.ActiveCfg = Release - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.Build.0 = Release - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.ActiveCfg = Release - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.Build.0 = Release - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.ActiveCfg = Release - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.Build.0 = Release - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.ActiveCfg = Release - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.Build.0 = Release - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.ActiveCfg = Release - Original|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.Build.0 = Release - Original|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/stub_mm/msvc10/stub_mm.vcxproj b/samples/s1_stub_mm/msvc10/stub_mm.vcxproj similarity index 98% rename from stub_mm/msvc10/stub_mm.vcxproj rename to samples/s1_stub_mm/msvc10/stub_mm.vcxproj index fbeb17b3..9ef0f93a 100644 --- a/stub_mm/msvc10/stub_mm.vcxproj +++ b/samples/s1_stub_mm/msvc10/stub_mm.vcxproj @@ -1,1155 +1,1155 @@ - - - - - Debug - Alien Swarm - Win32 - - - Debug - Bloody Good Time - Win32 - - - Debug - CS GO - Win32 - - - Debug - CSS - Win32 - - - Debug - Dark Messiah - Win32 - - - Debug - EYE - Win32 - - - Debug - Left 4 Dead 2 - Win32 - - - Debug - Left 4 Dead - Win32 - - - Debug - Orange Box Valve - Win32 - - - Debug - Orange Box - Win32 - - - Debug - Original - Win32 - - - Debug - Portal 2 - Win32 - - - Release - Alien Swarm - Win32 - - - Release - Bloody Good Time - Win32 - - - Release - CS GO - Win32 - - - Release - CSS - Win32 - - - Release - Dark Messiah - Win32 - - - Release - EYE - Win32 - - - Release - Left 4 Dead 2 - Win32 - - - Release - Left 4 Dead - Win32 - - - Release - Orange Box Valve - Win32 - - - Release - Orange Box - Win32 - - - Release - Original - Win32 - - - Release - Portal 2 - Win32 - - - - {EA8E7106-8D09-46A1-881B-FFBC4B8532F2} - stub_mm - Win32Proj - - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - true - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - false - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - true - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - false - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - true - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - false - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - true - true - true - true - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - false - false - false - false - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - true - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - false - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - true - true - true - true - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(Configuration)\ - false - false - false - false - AllRules.ruleset - - - AllRules.ruleset - AllRules.ruleset - AllRules.ruleset - AllRules.ruleset - - - - - - - - - AllRules.ruleset - - - AllRules.ruleset - AllRules.ruleset - AllRules.ruleset - AllRules.ruleset - - - - - - - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - AllRules.ruleset - AllRules.ruleset - AllRules.ruleset - - - - - - - - - AllRules.ruleset - - - AllRules.ruleset - AllRules.ruleset - AllRules.ruleset - AllRules.ruleset - - - - - - - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE18)\core-legacy;$(MMSOURCE18)\core-legacy\sourcehook;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=1;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDK)\lib\public\tier0.lib;$(HL2SDK)\lib\public\tier1.lib;$(HL2SDK)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE18)\core-legacy;$(MMSOURCE18)\core-legacy\sourcehook;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=1;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDK)\lib\public\tier0.lib;$(HL2SDK)\lib\public\tier1.lib;$(HL2SDK)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-DARKM)\public;$(HL2SDK-DARKM)\public\engine;$(HL2SDK-DARKM)\public\dlls;$(HL2SDK-DARKM)\public\tier0;$(HL2SDK-DARKM)\public\tier1;$(HL2SDK-DARKM)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=2;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDK-DARKM)\lib\public\tier0.lib;$(HL2SDK-DARKM)\lib\public\tier1.lib;$(HL2SDK-DARKM)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-DARKM)\public;$(HL2SDK-DARKM)\public\engine;$(HL2SDK-DARKM)\public\dlls;$(HL2SDK-DARKM)\public\tier0;$(HL2SDK-DARKM)\public\tier1;$(HL2SDK-DARKM)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=2;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDK-DARKM)\lib\public\tier0.lib;$(HL2SDK-DARKM)\lib\public\tier1.lib;$(HL2SDK-DARKM)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKOB)\public;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\game\server;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=3;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDKOB)\lib\public\tier0.lib;$(HL2SDKOB)\lib\public\tier1.lib;$(HL2SDKOB)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKOB)\public;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\game\server;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=3;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDKOB)\lib\public\tier0.lib;$(HL2SDKOB)\lib\public\tier1.lib;$(HL2SDKOB)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKOBVALVE)\public;$(HL2SDKOBVALVE)\public\engine;$(HL2SDKOBVALVE)\public\game\server;$(HL2SDKOBVALVE)\public\tier0;$(HL2SDKOBVALVE)\public\tier1;$(HL2SDKOBVALVE)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=7;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDKOBVALVE)\lib\public\tier0.lib;$(HL2SDKOBVALVE)\lib\public\tier1.lib;$(HL2SDKOBVALVE)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKCSS)\public;$(HL2SDKCSS)\public\engine;$(HL2SDKCSS)\public\game\server;$(HL2SDKCSS)\public\tier0;$(HL2SDKCSS)\public\tier1;$(HL2SDKCSS)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDKCSS)\lib\public\tier0.lib;$(HL2SDKCSS)\lib\public\tier1.lib;$(HL2SDKCSS)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-EYE)\public;$(HL2SDK-EYE)\public\engine;$(HL2SDK-EYE)\public\game\server;$(HL2SDK-EYE)\public\tier0;$(HL2SDK-EYE)\public\tier1;$(HL2SDK-EYE)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=5;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDK-EYE)\lib\public\tier0.lib;$(HL2SDK-EYE)\lib\public\tier1.lib;$(HL2SDK-EYE)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-BGT)\public;$(HL2SDK-BGT)\public\engine;$(HL2SDK-BGT)\public\game\server;$(HL2SDK-BGT)\public\tier0;$(HL2SDK-BGT)\public\tier1;$(HL2SDK-BGT)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=4;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDK-BGT)\lib\public\tier0.lib;$(HL2SDK-BGT)\lib\public\tier1.lib;$(HL2SDK-BGT)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKOBVALVE)\public;$(HL2SDKOBVALVE)\public\engine;$(HL2SDKOBVALVE)\public\game\server;$(HL2SDKOBVALVE)\public\tier0;$(HL2SDKOBVALVE)\public\tier1;$(HL2SDKOBVALVE)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=7;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDKOBVALVE)\lib\public\tier0.lib;$(HL2SDKOBVALVE)\lib\public\tier1.lib;$(HL2SDKOBVALVE)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKCSS)\public;$(HL2SDKCSS)\public\engine;$(HL2SDKCSS)\public\game\server;$(HL2SDKCSS)\public\tier0;$(HL2SDKCSS)\public\tier1;$(HL2SDKCSS)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=6;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDKCSS)\lib\public\tier0.lib;$(HL2SDKCSS)\lib\public\tier1.lib;$(HL2SDKCSS)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-EYE)\public;$(HL2SDK-EYE)\public\engine;$(HL2SDK-EYE)\public\game\server;$(HL2SDK-EYE)\public\tier0;$(HL2SDK-EYE)\public\tier1;$(HL2SDK-EYE)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=5;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDK-EYE)\lib\public\tier0.lib;$(HL2SDK-EYE)\lib\public\tier1.lib;$(HL2SDK-EYE)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-BGT)\public;$(HL2SDK-BGT)\public\engine;$(HL2SDK-BGT)\public\game\server;$(HL2SDK-BGT)\public\tier0;$(HL2SDK-BGT)\public\tier1;$(HL2SDK-BGT)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=4;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDK-BGT)\lib\public\tier0.lib;$(HL2SDK-BGT)\lib\public\tier1.lib;$(HL2SDK-BGT)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKL4D)\public;$(HL2SDKL4D)\public\engine;$(HL2SDKL4D)\public\game\server;$(HL2SDKL4D)\public\tier0;$(HL2SDKL4D)\public\tier1;$(HL2SDKL4D)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=8;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDKL4D)\lib\public\tier0.lib;$(HL2SDKL4D)\lib\public\tier1.lib;$(HL2SDKL4D)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKL4D)\public;$(HL2SDKL4D)\public\engine;$(HL2SDKL4D)\public\game\server;$(HL2SDKL4D)\public\tier0;$(HL2SDKL4D)\public\tier1;$(HL2SDKL4D)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=8;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDKL4D)\lib\public\tier0.lib;$(HL2SDKL4D)\lib\public\tier1.lib;$(HL2SDKL4D)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKL4D2)\public;$(HL2SDKL4D2)\public\engine;$(HL2SDKL4D2)\public\game\server;$(HL2SDKL4D2)\public\tier0;$(HL2SDKL4D2)\public\tier1;$(HL2SDKL4D2)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=9;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDKL4D2)\lib\public\tier0.lib;$(HL2SDKL4D2)\lib\public\tier1.lib;$(HL2SDKL4D2)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-SWARM)\public;$(HL2SDK-SWARM)\public\engine;$(HL2SDK-SWARM)\public\game\server;$(HL2SDK-SWARM)\public\tier0;$(HL2SDK-SWARM)\public\tier1;$(HL2SDK-SWARM)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=10;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDK-SWARM)\lib\public\interfaces.lib;$(HL2SDK-SWARM)\lib\public\tier0.lib;$(HL2SDK-SWARM)\lib\public\tier1.lib;$(HL2SDK-SWARM)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKCSGO)\public;$(HL2SDKCSGO)\public\engine;$(HL2SDKCSGO)\public\game\server;$(HL2SDKCSGO)\public\tier0;$(HL2SDKCSGO)\public\tier1;$(HL2SDKCSGO)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=12;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDKCSGO)\lib\public\interfaces.lib;$(HL2SDKCSGO)\lib\public\tier0.lib;$(HL2SDKCSGO)\lib\public\tier1.lib;$(HL2SDKCSGO)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - Disabled - $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKPORTAL2)\public;$(HL2SDKPORTAL2)\public\engine;$(HL2SDKPORTAL2)\public\game\server;$(HL2SDKPORTAL2)\public\tier0;$(HL2SDKPORTAL2)\public\tier1;$(HL2SDKPORTAL2)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=11;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(HL2SDKPORTAL2)\lib\public\interfaces.lib;$(HL2SDKPORTAL2)\lib\public\tier0.lib;$(HL2SDKPORTAL2)\lib\public\tier1.lib;$(HL2SDKPORTAL2)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) - true - Windows - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKL4D2)\public;$(HL2SDKL4D2)\public\engine;$(HL2SDKL4D2)\public\game\server;$(HL2SDKL4D2)\public\tier0;$(HL2SDKL4D2)\public\tier1;$(HL2SDKL4D2)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=9;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDKL4D2)\lib\public\tier0.lib;$(HL2SDKL4D2)\lib\public\tier1.lib;$(HL2SDKL4D2)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-SWARM)\public;$(HL2SDK-SWARM)\public\engine;$(HL2SDK-SWARM)\public\game\server;$(HL2SDK-SWARM)\public\tier0;$(HL2SDK-SWARM)\public\tier1;$(HL2SDK-SWARM)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=10;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDK-SWARM)\lib\public\interfaces.lib;$(HL2SDK-SWARM)\lib\public\tier0.lib;$(HL2SDK-SWARM)\lib\public\tier1.lib;$(HL2SDK-SWARM)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKCSGO)\public;$(HL2SDKCSGO)\public\engine;$(HL2SDKCSGO)\public\game\server;$(HL2SDKCSGO)\public\tier0;$(HL2SDKCSGO)\public\tier1;$(HL2SDKCSGO)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=12;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDKCSGO)\lib\public\interfaces.lib;$(HL2SDKCSGO)\lib\public\tier0.lib;$(HL2SDKCSGO)\lib\public\tier1.lib;$(HL2SDKCSGO)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) - $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKPORTAL2)\public;$(HL2SDKPORTAL2)\public\engine;$(HL2SDKPORTAL2)\public\game\server;$(HL2SDKPORTAL2)\public\tier0;$(HL2SDKPORTAL2)\public\tier1;$(HL2SDKPORTAL2)\public\vstdlib;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=11;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(HL2SDKPORTAL2)\lib\public\interfaces.lib;$(HL2SDKPORTAL2)\lib\public\tier0.lib;$(HL2SDKPORTAL2)\lib\public\tier1.lib;$(HL2SDKPORTAL2)\lib\public\vstdlib.lib;%(AdditionalDependencies) - $(OutDir)stub_mm.dll - LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - - - - - - - - - - - + + + + + Debug - Alien Swarm + Win32 + + + Debug - Bloody Good Time + Win32 + + + Debug - CS GO + Win32 + + + Debug - CSS + Win32 + + + Debug - Dark Messiah + Win32 + + + Debug - EYE + Win32 + + + Debug - Left 4 Dead 2 + Win32 + + + Debug - Left 4 Dead + Win32 + + + Debug - Orange Box Valve + Win32 + + + Debug - Orange Box + Win32 + + + Debug - Original + Win32 + + + Debug - Portal 2 + Win32 + + + Release - Alien Swarm + Win32 + + + Release - Bloody Good Time + Win32 + + + Release - CS GO + Win32 + + + Release - CSS + Win32 + + + Release - Dark Messiah + Win32 + + + Release - EYE + Win32 + + + Release - Left 4 Dead 2 + Win32 + + + Release - Left 4 Dead + Win32 + + + Release - Orange Box Valve + Win32 + + + Release - Orange Box + Win32 + + + Release - Original + Win32 + + + Release - Portal 2 + Win32 + + + + {EA8E7106-8D09-46A1-881B-FFBC4B8532F2} + stub_mm + Win32Proj + + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + true + + + DynamicLibrary + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + true + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + false + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + true + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + false + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + true + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + false + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + true + true + true + true + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + false + false + false + false + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + true + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + false + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + true + true + true + true + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + false + false + false + false + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE18)\core-legacy;$(MMSOURCE18)\core-legacy\sourcehook;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=1;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDK)\lib\public\tier0.lib;$(HL2SDK)\lib\public\tier1.lib;$(HL2SDK)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE18)\core-legacy;$(MMSOURCE18)\core-legacy\sourcehook;$(HL2SDK)\public;$(HL2SDK)\public\dlls;$(HL2SDK)\public\engine;$(HL2SDK)\public\tier0;$(HL2SDK)\public\tier1;$(HL2SDK)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=1;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDK)\lib\public\tier0.lib;$(HL2SDK)\lib\public\tier1.lib;$(HL2SDK)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-DARKM)\public;$(HL2SDK-DARKM)\public\engine;$(HL2SDK-DARKM)\public\dlls;$(HL2SDK-DARKM)\public\tier0;$(HL2SDK-DARKM)\public\tier1;$(HL2SDK-DARKM)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=2;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDK-DARKM)\lib\public\tier0.lib;$(HL2SDK-DARKM)\lib\public\tier1.lib;$(HL2SDK-DARKM)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-DARKM)\public;$(HL2SDK-DARKM)\public\engine;$(HL2SDK-DARKM)\public\dlls;$(HL2SDK-DARKM)\public\tier0;$(HL2SDK-DARKM)\public\tier1;$(HL2SDK-DARKM)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=2;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDK-DARKM)\lib\public\tier0.lib;$(HL2SDK-DARKM)\lib\public\tier1.lib;$(HL2SDK-DARKM)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKOB)\public;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\game\server;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=3;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDKOB)\lib\public\tier0.lib;$(HL2SDKOB)\lib\public\tier1.lib;$(HL2SDKOB)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKOB)\public;$(HL2SDKOB)\public\engine;$(HL2SDKOB)\public\game\server;$(HL2SDKOB)\public\tier0;$(HL2SDKOB)\public\tier1;$(HL2SDKOB)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=3;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDKOB)\lib\public\tier0.lib;$(HL2SDKOB)\lib\public\tier1.lib;$(HL2SDKOB)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKOBVALVE)\public;$(HL2SDKOBVALVE)\public\engine;$(HL2SDKOBVALVE)\public\game\server;$(HL2SDKOBVALVE)\public\tier0;$(HL2SDKOBVALVE)\public\tier1;$(HL2SDKOBVALVE)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=7;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDKOBVALVE)\lib\public\tier0.lib;$(HL2SDKOBVALVE)\lib\public\tier1.lib;$(HL2SDKOBVALVE)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKCSS)\public;$(HL2SDKCSS)\public\engine;$(HL2SDKCSS)\public\game\server;$(HL2SDKCSS)\public\tier0;$(HL2SDKCSS)\public\tier1;$(HL2SDKCSS)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=6;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDKCSS)\lib\public\tier0.lib;$(HL2SDKCSS)\lib\public\tier1.lib;$(HL2SDKCSS)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-EYE)\public;$(HL2SDK-EYE)\public\engine;$(HL2SDK-EYE)\public\game\server;$(HL2SDK-EYE)\public\tier0;$(HL2SDK-EYE)\public\tier1;$(HL2SDK-EYE)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=5;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDK-EYE)\lib\public\tier0.lib;$(HL2SDK-EYE)\lib\public\tier1.lib;$(HL2SDK-EYE)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-BGT)\public;$(HL2SDK-BGT)\public\engine;$(HL2SDK-BGT)\public\game\server;$(HL2SDK-BGT)\public\tier0;$(HL2SDK-BGT)\public\tier1;$(HL2SDK-BGT)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=4;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDK-BGT)\lib\public\tier0.lib;$(HL2SDK-BGT)\lib\public\tier1.lib;$(HL2SDK-BGT)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKOBVALVE)\public;$(HL2SDKOBVALVE)\public\engine;$(HL2SDKOBVALVE)\public\game\server;$(HL2SDKOBVALVE)\public\tier0;$(HL2SDKOBVALVE)\public\tier1;$(HL2SDKOBVALVE)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=7;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDKOBVALVE)\lib\public\tier0.lib;$(HL2SDKOBVALVE)\lib\public\tier1.lib;$(HL2SDKOBVALVE)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKCSS)\public;$(HL2SDKCSS)\public\engine;$(HL2SDKCSS)\public\game\server;$(HL2SDKCSS)\public\tier0;$(HL2SDKCSS)\public\tier1;$(HL2SDKCSS)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=6;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDKCSS)\lib\public\tier0.lib;$(HL2SDKCSS)\lib\public\tier1.lib;$(HL2SDKCSS)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-EYE)\public;$(HL2SDK-EYE)\public\engine;$(HL2SDK-EYE)\public\game\server;$(HL2SDK-EYE)\public\tier0;$(HL2SDK-EYE)\public\tier1;$(HL2SDK-EYE)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=5;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDK-EYE)\lib\public\tier0.lib;$(HL2SDK-EYE)\lib\public\tier1.lib;$(HL2SDK-EYE)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-BGT)\public;$(HL2SDK-BGT)\public\engine;$(HL2SDK-BGT)\public\game\server;$(HL2SDK-BGT)\public\tier0;$(HL2SDK-BGT)\public\tier1;$(HL2SDK-BGT)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=4;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDK-BGT)\lib\public\tier0.lib;$(HL2SDK-BGT)\lib\public\tier1.lib;$(HL2SDK-BGT)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKL4D)\public;$(HL2SDKL4D)\public\engine;$(HL2SDKL4D)\public\game\server;$(HL2SDKL4D)\public\tier0;$(HL2SDKL4D)\public\tier1;$(HL2SDKL4D)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=8;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDKL4D)\lib\public\tier0.lib;$(HL2SDKL4D)\lib\public\tier1.lib;$(HL2SDKL4D)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKL4D)\public;$(HL2SDKL4D)\public\engine;$(HL2SDKL4D)\public\game\server;$(HL2SDKL4D)\public\tier0;$(HL2SDKL4D)\public\tier1;$(HL2SDKL4D)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=8;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDKL4D)\lib\public\tier0.lib;$(HL2SDKL4D)\lib\public\tier1.lib;$(HL2SDKL4D)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKL4D2)\public;$(HL2SDKL4D2)\public\engine;$(HL2SDKL4D2)\public\game\server;$(HL2SDKL4D2)\public\tier0;$(HL2SDKL4D2)\public\tier1;$(HL2SDKL4D2)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=9;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDKL4D2)\lib\public\tier0.lib;$(HL2SDKL4D2)\lib\public\tier1.lib;$(HL2SDKL4D2)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-SWARM)\public;$(HL2SDK-SWARM)\public\engine;$(HL2SDK-SWARM)\public\game\server;$(HL2SDK-SWARM)\public\tier0;$(HL2SDK-SWARM)\public\tier1;$(HL2SDK-SWARM)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=10;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDK-SWARM)\lib\public\interfaces.lib;$(HL2SDK-SWARM)\lib\public\tier0.lib;$(HL2SDK-SWARM)\lib\public\tier1.lib;$(HL2SDK-SWARM)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKCSGO)\public;$(HL2SDKCSGO)\public\engine;$(HL2SDKCSGO)\public\game\server;$(HL2SDKCSGO)\public\tier0;$(HL2SDKCSGO)\public\tier1;$(HL2SDKCSGO)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=12;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDKCSGO)\lib\public\interfaces.lib;$(HL2SDKCSGO)\lib\public\tier0.lib;$(HL2SDKCSGO)\lib\public\tier1.lib;$(HL2SDKCSGO)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + Disabled + $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKPORTAL2)\public;$(HL2SDKPORTAL2)\public\engine;$(HL2SDKPORTAL2)\public\game\server;$(HL2SDKPORTAL2)\public\tier0;$(HL2SDKPORTAL2)\public\tier1;$(HL2SDKPORTAL2)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=11;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + $(HL2SDKPORTAL2)\lib\public\interfaces.lib;$(HL2SDKPORTAL2)\lib\public\tier0.lib;$(HL2SDKPORTAL2)\lib\public\tier1.lib;$(HL2SDKPORTAL2)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries) + true + Windows + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDKL4D2)\public;$(HL2SDKL4D2)\public\engine;$(HL2SDKL4D2)\public\game\server;$(HL2SDKL4D2)\public\tier0;$(HL2SDKL4D2)\public\tier1;$(HL2SDKL4D2)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;SOURCE_ENGINE=9;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDKL4D2)\lib\public\tier0.lib;$(HL2SDKL4D2)\lib\public\tier1.lib;$(HL2SDKL4D2)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE18)\core;$(MMSOURCE18)\core\sourcehook;$(HL2SDK-SWARM)\public;$(HL2SDK-SWARM)\public\engine;$(HL2SDK-SWARM)\public\game\server;$(HL2SDK-SWARM)\public\tier0;$(HL2SDK-SWARM)\public\tier1;$(HL2SDK-SWARM)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=10;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDK-SWARM)\lib\public\interfaces.lib;$(HL2SDK-SWARM)\lib\public\tier0.lib;$(HL2SDK-SWARM)\lib\public\tier1.lib;$(HL2SDK-SWARM)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKCSGO)\public;$(HL2SDKCSGO)\public\engine;$(HL2SDKCSGO)\public\game\server;$(HL2SDKCSGO)\public\tier0;$(HL2SDKCSGO)\public\tier1;$(HL2SDKCSGO)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=12;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDKCSGO)\lib\public\interfaces.lib;$(HL2SDKCSGO)\lib\public\tier0.lib;$(HL2SDKCSGO)\lib\public\tier1.lib;$(HL2SDKCSGO)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + /D SE_EPISODE1=1 /D SE_DARKMESSIAH=2 /D SE_ORANGEBOX=3 /D SE_BLOODYGOODTIME=4 /D SE_EYE=5 /D SE_CSS=6 /D SE_ORANGEBOXVALVE=7 /D SE_LEFT4DEAD=8 /D SE_LEFT4DEAD2=9 /D SE_ALIENSWARM=10 /D SE_PORTAL2=1 /D SE_CSGO=12 %(AdditionalOptions) + $(MMSOURCE19)\core;$(MMSOURCE19)\core\sourcehook;$(HL2SDKPORTAL2)\public;$(HL2SDKPORTAL2)\public\engine;$(HL2SDKPORTAL2)\public\game\server;$(HL2SDKPORTAL2)\public\tier0;$(HL2SDKPORTAL2)\public\tier1;$(HL2SDKPORTAL2)\public\vstdlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;STUB_MM_EXPORTS;COMPILER_MSVC;COMPILER_MSVC32;SOURCE_ENGINE=11;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + + + $(HL2SDKPORTAL2)\lib\public\interfaces.lib;$(HL2SDKPORTAL2)\lib\public\tier0.lib;$(HL2SDKPORTAL2)\lib\public\tier1.lib;$(HL2SDKPORTAL2)\lib\public\vstdlib.lib;%(AdditionalDependencies) + $(OutDir)stub_mm.dll + LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries) + true + Windows + true + true + false + + + MachineX86 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/stub_mm/msvc10/stub_mm.vcxproj.filters b/samples/s1_stub_mm/msvc10/stub_mm.vcxproj.filters similarity index 97% rename from stub_mm/msvc10/stub_mm.vcxproj.filters rename to samples/s1_stub_mm/msvc10/stub_mm.vcxproj.filters index 4b96bfb8..5cce4617 100644 --- a/stub_mm/msvc10/stub_mm.vcxproj.filters +++ b/samples/s1_stub_mm/msvc10/stub_mm.vcxproj.filters @@ -1,27 +1,27 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav - - - - - Source Files - - - - - Header Files - - + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + + + Source Files + + + + + Header Files + + \ No newline at end of file diff --git a/stub_mm/msvc8/stub_mm.sln b/samples/s1_stub_mm/msvc8/stub_mm.sln similarity index 98% rename from stub_mm/msvc8/stub_mm.sln rename to samples/s1_stub_mm/msvc8/stub_mm.sln index 35923f0f..9c7c7a53 100644 --- a/stub_mm/msvc8/stub_mm.sln +++ b/samples/s1_stub_mm/msvc8/stub_mm.sln @@ -1,57 +1,57 @@ - -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stub_mm", "stub_mm.vcproj", "{E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug - Alien Swarm|Win32 = Debug - Alien Swarm|Win32 - Debug - Dark Messiah|Win32 = Debug - Dark Messiah|Win32 - Debug - Left 4 Dead 2|Win32 = Debug - Left 4 Dead 2|Win32 - Debug - Left 4 Dead|Win32 = Debug - Left 4 Dead|Win32 - Debug - Orange Box Valve|Win32 = Debug - Orange Box Valve|Win32 - Debug - Orange Box|Win32 = Debug - Orange Box|Win32 - Debug - Original|Win32 = Debug - Original|Win32 - Release - Alien Swarm|Win32 = Release - Alien Swarm|Win32 - Release - Dark Messiah|Win32 = Release - Dark Messiah|Win32 - Release - Left 4 Dead 2|Win32 = Release - Left 4 Dead 2|Win32 - Release - Left 4 Dead|Win32 = Release - Left 4 Dead|Win32 - Release - Orange Box Valve|Win32 = Release - Orange Box Valve|Win32 - Release - Orange Box|Win32 = Release - Orange Box|Win32 - Release - Original|Win32 = Release - Original|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.ActiveCfg = Debug - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.Build.0 = Debug - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.ActiveCfg = Debug - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.Build.0 = Debug - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.ActiveCfg = Debug - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.Build.0 = Debug - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.ActiveCfg = Debug - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.Build.0 = Debug - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.ActiveCfg = Debug - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.Build.0 = Debug - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.ActiveCfg = Debug - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.Build.0 = Debug - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.ActiveCfg = Release - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.Build.0 = Release - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.ActiveCfg = Release - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.Build.0 = Release - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.ActiveCfg = Release - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.Build.0 = Release - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.ActiveCfg = Release - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.Build.0 = Release - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.ActiveCfg = Release - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.Build.0 = Release - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.ActiveCfg = Release - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.Build.0 = Release - Original|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stub_mm", "stub_mm.vcproj", "{E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug - Alien Swarm|Win32 = Debug - Alien Swarm|Win32 + Debug - Dark Messiah|Win32 = Debug - Dark Messiah|Win32 + Debug - Left 4 Dead 2|Win32 = Debug - Left 4 Dead 2|Win32 + Debug - Left 4 Dead|Win32 = Debug - Left 4 Dead|Win32 + Debug - Orange Box Valve|Win32 = Debug - Orange Box Valve|Win32 + Debug - Orange Box|Win32 = Debug - Orange Box|Win32 + Debug - Original|Win32 = Debug - Original|Win32 + Release - Alien Swarm|Win32 = Release - Alien Swarm|Win32 + Release - Dark Messiah|Win32 = Release - Dark Messiah|Win32 + Release - Left 4 Dead 2|Win32 = Release - Left 4 Dead 2|Win32 + Release - Left 4 Dead|Win32 = Release - Left 4 Dead|Win32 + Release - Orange Box Valve|Win32 = Release - Orange Box Valve|Win32 + Release - Orange Box|Win32 = Release - Orange Box|Win32 + Release - Original|Win32 = Release - Original|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.ActiveCfg = Debug - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.Build.0 = Debug - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.ActiveCfg = Debug - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.Build.0 = Debug - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.ActiveCfg = Debug - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.Build.0 = Debug - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.ActiveCfg = Debug - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.Build.0 = Debug - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.ActiveCfg = Debug - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.Build.0 = Debug - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.ActiveCfg = Debug - Original|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.Build.0 = Debug - Original|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.ActiveCfg = Release - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.Build.0 = Release - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.ActiveCfg = Release - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.Build.0 = Release - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.ActiveCfg = Release - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.Build.0 = Release - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.ActiveCfg = Release - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.Build.0 = Release - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.ActiveCfg = Release - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.Build.0 = Release - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.ActiveCfg = Release - Original|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.Build.0 = Release - Original|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/stub_mm/msvc8/stub_mm.vcproj b/samples/s1_stub_mm/msvc8/stub_mm.vcproj similarity index 96% rename from stub_mm/msvc8/stub_mm.vcproj rename to samples/s1_stub_mm/msvc8/stub_mm.vcproj index 5a1ede18..68e59507 100644 --- a/stub_mm/msvc8/stub_mm.vcproj +++ b/samples/s1_stub_mm/msvc8/stub_mm.vcproj @@ -1,1171 +1,1171 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stub_mm/msvc9/stub_mm.sln b/samples/s1_stub_mm/msvc9/stub_mm.sln similarity index 98% rename from stub_mm/msvc9/stub_mm.sln rename to samples/s1_stub_mm/msvc9/stub_mm.sln index 6456bcc5..7d1fce6f 100644 --- a/stub_mm/msvc9/stub_mm.sln +++ b/samples/s1_stub_mm/msvc9/stub_mm.sln @@ -1,56 +1,56 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stub_mm", "stub_mm.vcproj", "{E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug - Alien Swarm|Win32 = Debug - Alien Swarm|Win32 - Debug - Dark Messiah|Win32 = Debug - Dark Messiah|Win32 - Debug - Left 4 Dead 2|Win32 = Debug - Left 4 Dead 2|Win32 - Debug - Left 4 Dead|Win32 = Debug - Left 4 Dead|Win32 - Debug - Orange Box Valve|Win32 = Debug - Orange Box Valve|Win32 - Debug - Orange Box|Win32 = Debug - Orange Box|Win32 - Debug - Original|Win32 = Debug - Original|Win32 - Release - Alien Swarm|Win32 = Release - Alien Swarm|Win32 - Release - Dark Messiah|Win32 = Release - Dark Messiah|Win32 - Release - Left 4 Dead 2|Win32 = Release - Left 4 Dead 2|Win32 - Release - Left 4 Dead|Win32 = Release - Left 4 Dead|Win32 - Release - Orange Box Valve|Win32 = Release - Orange Box Valve|Win32 - Release - Orange Box|Win32 = Release - Orange Box|Win32 - Release - Original|Win32 = Release - Original|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.ActiveCfg = Debug - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.Build.0 = Debug - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.ActiveCfg = Debug - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.Build.0 = Debug - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.ActiveCfg = Debug - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.Build.0 = Debug - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.ActiveCfg = Debug - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.Build.0 = Debug - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.ActiveCfg = Debug - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.Build.0 = Debug - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.ActiveCfg = Debug - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.Build.0 = Debug - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.ActiveCfg = Release - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.Build.0 = Release - Alien Swarm|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.ActiveCfg = Release - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.Build.0 = Release - Dark Messiah|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.ActiveCfg = Release - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.Build.0 = Release - Left 4 Dead 2|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.ActiveCfg = Release - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.Build.0 = Release - Left 4 Dead|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.ActiveCfg = Release - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.Build.0 = Release - Orange Box Valve|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.ActiveCfg = Release - Original|Win32 - {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.Build.0 = Release - Original|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stub_mm", "stub_mm.vcproj", "{E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug - Alien Swarm|Win32 = Debug - Alien Swarm|Win32 + Debug - Dark Messiah|Win32 = Debug - Dark Messiah|Win32 + Debug - Left 4 Dead 2|Win32 = Debug - Left 4 Dead 2|Win32 + Debug - Left 4 Dead|Win32 = Debug - Left 4 Dead|Win32 + Debug - Orange Box Valve|Win32 = Debug - Orange Box Valve|Win32 + Debug - Orange Box|Win32 = Debug - Orange Box|Win32 + Debug - Original|Win32 = Debug - Original|Win32 + Release - Alien Swarm|Win32 = Release - Alien Swarm|Win32 + Release - Dark Messiah|Win32 = Release - Dark Messiah|Win32 + Release - Left 4 Dead 2|Win32 = Release - Left 4 Dead 2|Win32 + Release - Left 4 Dead|Win32 = Release - Left 4 Dead|Win32 + Release - Orange Box Valve|Win32 = Release - Orange Box Valve|Win32 + Release - Orange Box|Win32 = Release - Orange Box|Win32 + Release - Original|Win32 = Release - Original|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.ActiveCfg = Debug - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Alien Swarm|Win32.Build.0 = Debug - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.ActiveCfg = Debug - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Dark Messiah|Win32.Build.0 = Debug - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.ActiveCfg = Debug - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead 2|Win32.Build.0 = Debug - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.ActiveCfg = Debug - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Left 4 Dead|Win32.Build.0 = Debug - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.ActiveCfg = Debug - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box Valve|Win32.Build.0 = Debug - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.ActiveCfg = Debug - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Orange Box|Win32.Build.0 = Debug - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.ActiveCfg = Debug - Original|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Debug - Original|Win32.Build.0 = Debug - Original|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.ActiveCfg = Release - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Alien Swarm|Win32.Build.0 = Release - Alien Swarm|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.ActiveCfg = Release - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Dark Messiah|Win32.Build.0 = Release - Dark Messiah|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.ActiveCfg = Release - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead 2|Win32.Build.0 = Release - Left 4 Dead 2|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.ActiveCfg = Release - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Left 4 Dead|Win32.Build.0 = Release - Left 4 Dead|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.ActiveCfg = Release - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box Valve|Win32.Build.0 = Release - Orange Box Valve|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.ActiveCfg = Release - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Orange Box|Win32.Build.0 = Release - Orange Box|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.ActiveCfg = Release - Original|Win32 + {E62E5876-E1E2-41A0-85CA-1B41B9DA55F9}.Release - Original|Win32.Build.0 = Release - Original|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/stub_mm/msvc9/stub_mm.vcproj b/samples/s1_stub_mm/msvc9/stub_mm.vcproj similarity index 96% rename from stub_mm/msvc9/stub_mm.vcproj rename to samples/s1_stub_mm/msvc9/stub_mm.vcproj index 42e587e4..9829fc2a 100644 --- a/stub_mm/msvc9/stub_mm.vcproj +++ b/samples/s1_stub_mm/msvc9/stub_mm.vcproj @@ -1,1158 +1,1158 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stub_mm/stub_mm.cpp b/samples/s1_stub_mm/stub_mm.cpp similarity index 95% rename from stub_mm/stub_mm.cpp rename to samples/s1_stub_mm/stub_mm.cpp index 18f1cb9c..965c3841 100644 --- a/stub_mm/stub_mm.cpp +++ b/samples/s1_stub_mm/stub_mm.cpp @@ -1,107 +1,107 @@ -/** - * vim: set ts=4 sw=4 tw=99 noet : - * ====================================================== - * Metamod:Source Stub Plugin - * Written by AlliedModders LLC. - * ====================================================== - * - * This software is provided 'as-is', without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. - * - * This stub plugin is public domain. - */ - -#include -#include "stub_mm.h" - -SH_DECL_HOOK3_void(IServerGameDLL, ServerActivate, SH_NOATTRIB, 0, edict_t *, int, int); - -StubPlugin g_StubPlugin; -IServerGameDLL *server = NULL; - -PLUGIN_EXPOSE(StubPlugin, g_StubPlugin); -bool StubPlugin::Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late) -{ - PLUGIN_SAVEVARS(); - - /* Make sure we build on MM:S 1.4 */ -#if defined METAMOD_PLAPI_VERSION - GET_V_IFACE_ANY(GetServerFactory, server, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL); -#else - GET_V_IFACE_ANY(serverFactory, server, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL); -#endif - - SH_ADD_HOOK_STATICFUNC(IServerGameDLL, ServerActivate, server, Hook_ServerActivate, true); - - return true; -} - -bool StubPlugin::Unload(char *error, size_t maxlen) -{ - SH_REMOVE_HOOK_STATICFUNC(IServerGameDLL, ServerActivate, server, Hook_ServerActivate, true); - - return true; -} - -void Hook_ServerActivate(edict_t *pEdictList, int edictCount, int clientMax) -{ - META_LOG(g_PLAPI, "ServerActivate() called: edictCount = %d, clientMax = %d", edictCount, clientMax); -} - -void StubPlugin::AllPluginsLoaded() -{ - /* This is where we'd do stuff that relies on the mod or other plugins - * being initialized (for example, cvars added and events registered). - */ -} - -bool StubPlugin::Pause(char *error, size_t maxlen) -{ - return true; -} - -bool StubPlugin::Unpause(char *error, size_t maxlen) -{ - return true; -} - -const char *StubPlugin::GetLicense() -{ - return "Public Domain"; -} - -const char *StubPlugin::GetVersion() -{ - return "1.0.0.0"; -} - -const char *StubPlugin::GetDate() -{ - return __DATE__; -} - -const char *StubPlugin::GetLogTag() -{ - return "STUB"; -} - -const char *StubPlugin::GetAuthor() -{ - return "AlliedModders LLC"; -} - -const char *StubPlugin::GetDescription() -{ - return "Sample empty plugin"; -} - -const char *StubPlugin::GetName() -{ - return "Stub Plugin"; -} - -const char *StubPlugin::GetURL() -{ - return "http://www.sourcemm.net/"; -} +/** + * vim: set ts=4 sw=4 tw=99 noet : + * ====================================================== + * Metamod:Source Stub Plugin + * Written by AlliedModders LLC. + * ====================================================== + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * This stub plugin is public domain. + */ + +#include +#include "stub_mm.h" + +SH_DECL_HOOK3_void(IServerGameDLL, ServerActivate, SH_NOATTRIB, 0, edict_t *, int, int); + +StubPlugin g_StubPlugin; +IServerGameDLL *server = NULL; + +PLUGIN_EXPOSE(StubPlugin, g_StubPlugin); +bool StubPlugin::Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late) +{ + PLUGIN_SAVEVARS(); + + /* Make sure we build on MM:S 1.4 */ +#if defined METAMOD_PLAPI_VERSION + GET_V_IFACE_ANY(GetServerFactory, server, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL); +#else + GET_V_IFACE_ANY(serverFactory, server, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL); +#endif + + SH_ADD_HOOK_STATICFUNC(IServerGameDLL, ServerActivate, server, Hook_ServerActivate, true); + + return true; +} + +bool StubPlugin::Unload(char *error, size_t maxlen) +{ + SH_REMOVE_HOOK_STATICFUNC(IServerGameDLL, ServerActivate, server, Hook_ServerActivate, true); + + return true; +} + +void Hook_ServerActivate(edict_t *pEdictList, int edictCount, int clientMax) +{ + META_LOG(g_PLAPI, "ServerActivate() called: edictCount = %d, clientMax = %d", edictCount, clientMax); +} + +void StubPlugin::AllPluginsLoaded() +{ + /* This is where we'd do stuff that relies on the mod or other plugins + * being initialized (for example, cvars added and events registered). + */ +} + +bool StubPlugin::Pause(char *error, size_t maxlen) +{ + return true; +} + +bool StubPlugin::Unpause(char *error, size_t maxlen) +{ + return true; +} + +const char *StubPlugin::GetLicense() +{ + return "Public Domain"; +} + +const char *StubPlugin::GetVersion() +{ + return "1.0.0.0"; +} + +const char *StubPlugin::GetDate() +{ + return __DATE__; +} + +const char *StubPlugin::GetLogTag() +{ + return "STUB"; +} + +const char *StubPlugin::GetAuthor() +{ + return "AlliedModders LLC"; +} + +const char *StubPlugin::GetDescription() +{ + return "Sample empty plugin"; +} + +const char *StubPlugin::GetName() +{ + return "Stub Plugin"; +} + +const char *StubPlugin::GetURL() +{ + return "http://www.sourcemm.net/"; +} diff --git a/stub_mm/stub_mm.h b/samples/s1_stub_mm/stub_mm.h similarity index 96% rename from stub_mm/stub_mm.h rename to samples/s1_stub_mm/stub_mm.h index 6963b513..d0c23810 100644 --- a/stub_mm/stub_mm.h +++ b/samples/s1_stub_mm/stub_mm.h @@ -1,49 +1,49 @@ -/** - * vim: set ts=4 sw=4 tw=99 noet : - * ====================================================== - * Metamod:Source Stub Plugin - * Written by AlliedModders LLC. - * ====================================================== - * - * This software is provided 'as-is', without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. - * - * This stub plugin is public domain. - */ - -#ifndef _INCLUDE_METAMOD_SOURCE_STUB_PLUGIN_H_ -#define _INCLUDE_METAMOD_SOURCE_STUB_PLUGIN_H_ - -#include - -#if defined WIN32 && !defined snprintf -#define snprintf _snprintf -#endif - -class StubPlugin : public ISmmPlugin -{ -public: - bool Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late); - bool Unload(char *error, size_t maxlen); - bool Pause(char *error, size_t maxlen); - bool Unpause(char *error, size_t maxlen); - void AllPluginsLoaded(); -public: - const char *GetAuthor(); - const char *GetName(); - const char *GetDescription(); - const char *GetURL(); - const char *GetLicense(); - const char *GetVersion(); - const char *GetDate(); - const char *GetLogTag(); -}; - -void Hook_ServerActivate(edict_t *pEdictList, int edictCount, int clientMax); - -extern StubPlugin g_StubPlugin; - -PLUGIN_GLOBALVARS(); - -#endif //_INCLUDE_METAMOD_SOURCE_STUB_PLUGIN_H_ +/** + * vim: set ts=4 sw=4 tw=99 noet : + * ====================================================== + * Metamod:Source Stub Plugin + * Written by AlliedModders LLC. + * ====================================================== + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * This stub plugin is public domain. + */ + +#ifndef _INCLUDE_METAMOD_SOURCE_STUB_PLUGIN_H_ +#define _INCLUDE_METAMOD_SOURCE_STUB_PLUGIN_H_ + +#include + +#if defined WIN32 && !defined snprintf +#define snprintf _snprintf +#endif + +class StubPlugin : public ISmmPlugin +{ +public: + bool Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late); + bool Unload(char *error, size_t maxlen); + bool Pause(char *error, size_t maxlen); + bool Unpause(char *error, size_t maxlen); + void AllPluginsLoaded(); +public: + const char *GetAuthor(); + const char *GetName(); + const char *GetDescription(); + const char *GetURL(); + const char *GetLicense(); + const char *GetVersion(); + const char *GetDate(); + const char *GetLogTag(); +}; + +void Hook_ServerActivate(edict_t *pEdictList, int edictCount, int clientMax); + +extern StubPlugin g_StubPlugin; + +PLUGIN_GLOBALVARS(); + +#endif //_INCLUDE_METAMOD_SOURCE_STUB_PLUGIN_H_ diff --git a/stub_mm/stub_mm.vdf b/samples/s1_stub_mm/stub_mm.vdf similarity index 92% rename from stub_mm/stub_mm.vdf rename to samples/s1_stub_mm/stub_mm.vdf index db44b518..0bbbf582 100644 --- a/stub_mm/stub_mm.vdf +++ b/samples/s1_stub_mm/stub_mm.vdf @@ -1,5 +1,5 @@ -"Metamod Plugin" -{ - "alias" "stub" - "file" "addons/stub_mm" -} +"Metamod Plugin" +{ + "alias" "stub" + "file" "addons/stub_mm" +} diff --git a/samples/s2_sample_mm/AMBuildScript b/samples/s2_sample_mm/AMBuildScript new file mode 100644 index 00000000..74ce1bb2 --- /dev/null +++ b/samples/s2_sample_mm/AMBuildScript @@ -0,0 +1,526 @@ +# vim: set sts=2 ts=8 sw=2 tw=99 et ft=python: +import os, sys + +additional_libs = [ + # Path should be relative either to hl2sdk folder or to build folder + #'path/to/lib/example.lib', +] + +additional_defines = [ + #'EXAMPLE_DEFINE=2' +] + +additional_includes = [ + # Path should be absolute only! + #'D:/absolute/path/to/include/folder/' +] + +class SDK(object): + def __init__(self, sdk, ext, aDef, name, platform, dir): + self.folder = 'hl2sdk-' + dir + self.envvar = sdk + self.ext = ext + self.code = aDef + self.define = name + self.name = dir + self.path = None # Actual path + self.platformSpec = platform + + # By default, nothing supports x64. + if type(platform) is list: + self.platformSpec = {p: ['x86'] for p in platform} + else: + self.platformSpec = platform + + def shouldBuild(self, targets): + for cxx in targets: + if cxx.target.platform in self.platformSpec: + if cxx.target.arch in self.platformSpec[cxx.target.platform]: + return True + return False + +WinOnly = ['windows'] +WinLinux = ['windows', 'linux'] +WinLinuxMac = ['windows', 'linux', 'mac'] +CSGO = { + 'windows': ['x86'], + 'linux': ['x86', 'x86_64'], + 'mac': ['x86_64'] +} +Source2 = { + 'windows': ['x86_64'], + 'linux': ['x86_64'], +} +Insurgency = { + 'windows': ['x86', 'x86_64'], + 'linux': ['x86'], + 'mac': ['x86', 'x86_64'], +} +Blade = { + 'windows': ['x86', 'x86_64'], + 'linux': ['x86_64'] +} +Mock = { + 'windows': ['x86', 'x86_64'], + 'linux': ['x86', 'x86_64'], + 'mac': ['x86_64'] +} + +PossibleSDKs = { + 'episode1': SDK('HL2SDK', '2.ep1', '1', 'EPISODEONE', WinLinux, 'episode1'), + 'ep2': SDK('HL2SDKOB', '2.ep2', '3', 'ORANGEBOX', WinLinux, 'orangebox'), + 'css': SDK('HL2SDKCSS', '2.css', '6', 'CSS', WinLinuxMac, 'css'), + 'hl2dm': SDK('HL2SDKHL2DM', '2.hl2dm', '7', 'HL2DM', WinLinuxMac, 'hl2dm'), + 'dods': SDK('HL2SDKDODS', '2.dods', '8', 'DODS', WinLinuxMac, 'dods'), + 'sdk2013': SDK('HL2SDK2013', '2.sdk2013', '9', 'SDK2013', WinLinuxMac, 'sdk2013'), + 'tf2': SDK('HL2SDKTF2', '2.tf2', '12', 'TF2', WinLinuxMac, 'tf2'), + 'l4d': SDK('HL2SDKL4D', '2.l4d', '13', 'LEFT4DEAD', WinLinuxMac, 'l4d'), + 'nucleardawn': SDK('HL2SDKND', '2.nd', '14', 'NUCLEARDAWN', WinLinuxMac, 'nucleardawn'), + 'l4d2': SDK('HL2SDKL4D2', '2.l4d2', '16', 'LEFT4DEAD2', WinLinuxMac, 'l4d2'), + 'darkm': SDK('HL2SDK-DARKM', '2.darkm', '2', 'DARKMESSIAH', WinOnly, 'darkm'), + 'swarm': SDK('HL2SDK-SWARM', '2.swarm', '17', 'ALIENSWARM', WinOnly, 'swarm'), + 'bgt': SDK('HL2SDK-BGT', '2.bgt', '4', 'BLOODYGOODTIME', WinOnly, 'bgt'), + 'eye': SDK('HL2SDK-EYE', '2.eye', '5', 'EYE', WinOnly, 'eye'), + 'mcv': SDK('HL2SDKMCV', '2.mcv', '22', 'MCV', WinOnly, 'mcv'), + 'csgo': SDK('HL2SDKCSGO', '2.csgo', '23', 'CSGO', CSGO, 'csgo'), + 'portal2': SDK('HL2SDKPORTAL2', '2.portal2', '18', 'PORTAL2', [], 'portal2'), + 'blade': SDK('HL2SDKBLADE', '2.blade', '19', 'BLADE', Blade, 'blade'), + 'insurgency': SDK('HL2SDKINSURGENCY', '2.insurgency', '20', 'INSURGENCY', Insurgency, 'insurgency'), + 'doi': SDK('HL2SDKDOI', '2.doi', '21', 'DOI', WinLinuxMac, 'doi'), + 'contagion': SDK('HL2SDKCONTAGION', '2.contagion', '15', 'CONTAGION', WinOnly, 'contagion'), + 'bms': SDK('HL2SDKBMS', '2.bms', '11', 'BMS', WinLinux, 'bms'), + 'mock': SDK('HL2SDK-MOCK', '2.mock', '999', 'MOCK', Mock, 'mock'), + 'pvkii': SDK('HL2SDKPVKII', '2.pvkii', '10', 'PVKII', WinLinux, 'pvkii'), + 'dota': SDK('HL2SDKDOTA', '2.dota', '24', 'DOTA', Source2, 'dota'), + 'cs2': SDK('HL2SDKCS2', '2.cs2', '25', 'CS2', Source2, 'cs2'), +} + +def ResolveEnvPath(env, folder): + if env in os.environ: + path = os.environ[env] + if os.path.isdir(path): + return path + else: + head = os.getcwd() + oldhead = None + while head != None and head != oldhead: + path = os.path.join(head, folder) + if os.path.isdir(path): + return path + oldhead = head + head, tail = os.path.split(head) + return None + +def Normalize(path): + return os.path.abspath(os.path.normpath(path)) + +class MMSPluginConfig(object): + def __init__(self): + self.sdks = {} + self.binaries = [] + self.mms_root = None + self.all_targets = [] + self.target_archs = set() + + if builder.options.plugin_name is not None: + self.plugin_name = builder.options.plugin_name + else: + self.plugin_name = 'sample_mm' + + if builder.options.plugin_alias is not None: + self.plugin_alias = builder.options.plugin_alias + else: + self.plugin_alias = 'sample' + + if builder.options.targets: + target_archs = builder.options.targets.split(',') + else: + target_archs = ['x86'] + target_archs.append('x86_64') + + for arch in target_archs: + try: + cxx = builder.DetectCxx(target_arch = arch) + self.target_archs.add(cxx.target.arch) + except Exception as e: + # Error if archs were manually overridden. + if builder.options.targets: + raise + print('Skipping target {}: {}'.format(arch, e)) + continue + self.all_targets.append(cxx) + + if not self.all_targets: + raise Exception('No suitable C/C++ compiler was found.') + + def detectSDKs(self): + sdk_list = builder.options.sdks.split(',') + use_all = sdk_list[0] == 'all' + use_present = sdk_list[0] == 'present' + if sdk_list[0] == '': + sdk_list = [] + + not_found = [] + for sdk_name in PossibleSDKs: + sdk = PossibleSDKs[sdk_name] + if sdk.shouldBuild(self.all_targets): + if builder.options.hl2sdk_root: + sdk_path = os.path.join(builder.options.hl2sdk_root, sdk.folder) + if not os.path.exists(sdk_path): + sdk_path = None + else: + sdk_path = ResolveEnvPath(sdk.envvar, sdk.folder) + if sdk_path is None: + if (use_all and sdk_name != 'mock') or sdk_name in sdk_list: + raise Exception('Could not find a valid path for {0}'.format(sdk.envvar)) + not_found.append(sdk_name) + continue + if use_all or use_present or sdk_name in sdk_list: + sdk.path = sdk_path + self.sdks[sdk_name] = sdk + + if len(self.sdks) < 1 and len(sdk_list): + raise Exception('No SDKs were found, nothing to build.') + + if len(self.sdks) > 1: + raise Exception('Only one sdk at a time is supported, for multi-sdk approach use loader based solution.') + + if builder.options.mms_path: + self.mms_root = builder.options.mms_path + else: + self.mms_root = ResolveEnvPath('MMSOURCE112', 'mmsource-1.12') + if not self.mms_root: + self.mms_root = ResolveEnvPath('MMSOURCE111', 'mmsource-1.11') + if not self.mms_root: + self.mms_root = ResolveEnvPath('MMSOURCE110', 'mmsource-1.10') + if not self.mms_root: + self.mms_root = ResolveEnvPath('MMSOURCE_DEV', 'metamod-source') + if not self.mms_root: + self.mms_root = ResolveEnvPath('MMSOURCE_DEV', 'mmsource-central') + if not self.mms_root or not os.path.isdir(self.mms_root): + raise Exception('Could not find a source copy of Metamod:Source') + self.mms_root = Normalize(self.mms_root) + + if use_present: + for sdk in not_found: + print('Warning: hl2sdk-{} was not found, and will not be included in build.'.format(sdk)) + + def configure(self): + for cxx in self.all_targets: + if cxx.target.arch not in ['x86', 'x86_64']: + raise Exception('Unknown target architecture: {0}'.format(arch)) + + self.configure_cxx(cxx) + + def configure_cxx(self, cxx): + if cxx.behavior == 'gcc': + cxx.defines += [ + 'stricmp=strcasecmp', + '_stricmp=strcasecmp', + '_snprintf=snprintf', + '_vsnprintf=vsnprintf', + 'HAVE_STDINT_H', + 'GNUC', + ] + cxx.cflags += [ + '-pipe', + '-fno-strict-aliasing', + '-Wall', + '-Werror', + '-Wno-uninitialized', + '-Wno-unused', + '-Wno-switch', + '-msse', + '-fPIC', + ] + + if cxx.version == 'apple-clang-6.0' or cxx.version == 'clang-3.4': + cxx.cxxflags += ['-std=c++1y'] + else: + cxx.cxxflags += ['-std=c++14'] + if (cxx.version >= 'gcc-4.0') or cxx.family == 'clang': + cxx.cflags += ['-fvisibility=hidden'] + cxx.cxxflags += ['-fvisibility-inlines-hidden'] + cxx.cxxflags += [ + '-fno-exceptions', + '-fno-rtti', + '-fno-threadsafe-statics', + '-Wno-non-virtual-dtor', + '-Wno-overloaded-virtual', + ] + if (cxx.version >= 'gcc-4.7' or cxx.family == 'clang'): + cxx.cxxflags += ['-Wno-delete-non-virtual-dtor'] + if cxx.family == 'gcc': + cxx.cflags += ['-mfpmath=sse'] + if cxx.family == 'clang': + cxx.cxxflags += ['-Wno-implicit-exception-spec-mismatch'] + if cxx.version >= 'clang-3.9' or cxx.version >= 'apple-clang-10.0': + cxx.cxxflags += ['-Wno-expansion-to-defined'] + if cxx.version >= 'clang-3.6' or cxx.version >= 'apple-clang-7.0': + cxx.cxxflags += ['-Wno-inconsistent-missing-override'] + if cxx.version >= 'apple-clang-5.1' or cxx.version >= 'clang-3.4': + cxx.cxxflags += ['-Wno-deprecated-register'] + else: + cxx.cxxflags += ['-Wno-deprecated'] + + # Work around SDK warnings. + if cxx.version >= 'clang-10.0' or cxx.version >= 'apple-clang-12.0': + cxx.cflags += [ + '-Wno-implicit-int-float-conversion', + '-Wno-tautological-overlap-compare', + ] + + elif cxx.like('msvc'): + if builder.options.debug == '1': + cxx.cflags += ['/MTd'] + cxx.linkflags += ['/NODEFAULTLIB:libcmt'] + else: + cxx.cflags += ['/MT'] + cxx.defines += [ + '_CRT_SECURE_NO_DEPRECATE', + '_CRT_SECURE_NO_WARNINGS', + '_CRT_NONSTDC_NO_DEPRECATE', + ] + cxx.cflags += [ + '/W3', + '/Zi', + ] + cxx.cxxflags += ['/TP'] + + cxx.linkflags += [ + '/SUBSYSTEM:WINDOWS', + 'kernel32.lib', + 'user32.lib', + 'gdi32.lib', + 'winspool.lib', + 'comdlg32.lib', + 'advapi32.lib', + 'shell32.lib', + 'ole32.lib', + 'oleaut32.lib', + 'uuid.lib', + 'odbc32.lib', + 'odbccp32.lib', + ] + + # Optimization + if builder.options.opt == '1': + cxx.defines += ['NDEBUG'] + if cxx.behavior == 'gcc': + cxx.cflags += ['-O3'] + elif cxx.behavior == 'msvc': + cxx.cflags += ['/Ox', '/Zo'] + cxx.linkflags += ['/OPT:ICF', '/OPT:REF'] + + # Debugging + if builder.options.debug == '1': + cxx.defines += ['DEBUG', '_DEBUG'] + if cxx.behavior == 'gcc': + cxx.cflags += ['-g3'] + elif cxx.behavior == 'msvc': + cxx.cflags += ['/Od', '/RTC1'] + + # Don't omit the frame pointer. + # This needs to be after our optimization flags which could otherwise disable it. + if cxx.behavior == 'gcc': + cxx.cflags += ['-fno-omit-frame-pointer'] + elif cxx.behavior == 'msvc': + cxx.cflags += ['/Oy-'] + + # Platform-specifics + if cxx.target.platform == 'linux': + cxx.defines += ['_LINUX', 'POSIX', '_FILE_OFFSET_BITS=64'] + if cxx.family == 'gcc': + cxx.linkflags += ['-static-libgcc'] + elif cxx.family == 'clang': + cxx.linkflags += ['-lgcc_eh'] + elif cxx.target.platform == 'mac': + cxx.defines += ['OSX', '_OSX', 'POSIX'] + + if cxx.version >= 'apple-clang-10.0': + cxx.cflags += ['-mmacosx-version-min=10.9', '-stdlib=libc++'] + cxx.linkflags += [ + '-mmacosx-version-min=10.9', + ] + else: + cxx.cflags += ['-mmacosx-version-min=10.5'] + cxx.linkflags += [ + '-mmacosx-version-min=10.5', + ] + + cxx.linkflags += [ + '-lc++', + ] + elif cxx.target.platform == 'windows': + cxx.defines += ['WIN32', '_WINDOWS'] + + # Finish up. + # Custom defines here + cxx.defines += [ ] + # Custom includes here + cxx.includes += [ ] + + def HL2Compiler(self, context, cxx, sdk): + compiler = cxx.clone() + mms_core_path = os.path.join(self.mms_root, 'core') + compiler.cxxincludes += [ + os.path.join(mms_core_path), + os.path.join(mms_core_path, 'sourcehook'), + os.path.join(context.currentSourcePath), + ] + + defines = ['SE_' + PossibleSDKs[i].define + '=' + PossibleSDKs[i].code for i in PossibleSDKs] + compiler.defines += defines + paths = [['public'], + ['public', 'engine'], + ['public', 'mathlib'], + ['public', 'vstdlib'], + ['public', 'tier0'], ['public', 'tier1']] + if sdk.name == 'episode1' or sdk.name == 'darkm': + paths.append(['public', 'dlls']) + paths.append(['game_shared']) + else: + paths.append(['public', 'game', 'server']) + paths.append(['game', 'shared']) + paths.append(['common']) + compiler.defines += ['SOURCE_ENGINE=' + sdk.code] + + if sdk.name in ['sdk2013', 'bms', 'pvkii'] and compiler.like('gcc'): + # The 2013 SDK already has these in public/tier0/basetypes.h + compiler.defines.remove('stricmp=strcasecmp') + compiler.defines.remove('_stricmp=strcasecmp') + compiler.defines.remove('_snprintf=snprintf') + compiler.defines.remove('_vsnprintf=vsnprintf') + + if compiler.family == 'msvc': + compiler.defines += ['COMPILER_MSVC'] + if compiler.target.arch == 'x86': + compiler.defines += ['COMPILER_MSVC32'] + elif compiler.target.arch == 'x86_64': + compiler.defines += ['COMPILER_MSVC64'] + + if compiler.version >= 1900: + compiler.linkflags += ['legacy_stdio_definitions.lib'] + else: + compiler.defines += ['COMPILER_GCC'] + + if compiler.target.arch == 'x86_64': + compiler.defines += ['X64BITS', 'PLATFORM_64BITS'] + + if sdk.name in ['css', 'hl2dm', 'dods', 'sdk2013', 'bms', 'tf2', 'l4d', 'nucleardawn', 'l4d2', 'dota', 'cs2', 'pvkii']: + if compiler.target.platform in ['linux', 'mac']: + compiler.defines += ['NO_HOOK_MALLOC', 'NO_MALLOC_OVERRIDE'] + + if sdk.name in ['csgo', 'blade', 'pvkii'] and compiler.target.platform == 'linux': + compiler.linkflags += ['-lstdc++'] + + if sdk.name in ['dota', 'cs2']: + compiler.defines += ['META_IS_SOURCE2'] + + for path in paths: + compiler.cxxincludes += [os.path.join(sdk.path, *path)] + + compiler.linkflags += additional_libs + compiler.defines += additional_defines + compiler.cxxincludes += additional_includes + + return compiler + + def Library(self, cxx, name): + binary = cxx.Library(name) + return binary + + def HL2Library(self, context, compiler, name, sdk): + compiler = self.HL2Compiler(context, compiler, sdk) + + if compiler.target.platform == 'linux': + if sdk.name == 'episode1': + lib_folder = os.path.join(sdk.path, 'linux_sdk') + elif sdk.name in ['sdk2013', 'bms', 'pvkii']: + lib_folder = os.path.join(sdk.path, 'lib', 'public', 'linux32') + elif compiler.target.arch == 'x86_64': + lib_folder = os.path.join(sdk.path, 'lib', 'linux64') + else: + lib_folder = os.path.join(sdk.path, 'lib', 'linux') + elif compiler.target.platform == 'mac': + if sdk.name in ['sdk2013', 'bms']: + lib_folder = os.path.join(sdk.path, 'lib', 'public', 'osx32') + elif compiler.target.arch == 'x86_64': + lib_folder = os.path.join(sdk.path, 'lib', 'osx64') + else: + lib_folder = os.path.join(sdk.path, 'lib', 'mac') + + if compiler.target.platform in ['linux', 'mac']: + if sdk.name in ['sdk2013', 'bms', 'pvkii'] or compiler.target.arch == 'x86_64': + tier1 = os.path.join(lib_folder, 'tier1.a') + else: + tier1 = os.path.join(lib_folder, 'tier1_i486.a') + if sdk.name == 'mock' and compiler.target.platform == 'linux': + compiler.linkflags += ['-Wl,-z,origin'] + compiler.postlink += [tier1] + + if sdk.name in ['blade', 'insurgency', 'doi', 'csgo', 'cs2', 'dota']: + if compiler.target.arch == 'x86_64': + compiler.postlink += [os.path.join(lib_folder, 'interfaces.a')] + else: + compiler.postlink += [os.path.join(lib_folder, 'interfaces_i486.a')] + + if sdk.name == 'bms': + compiler.postlink += [os.path.join(lib_folder, 'mathlib.a')] + + binary = self.Library(compiler, name) + compiler = binary.compiler + + dynamic_libs = [] + if compiler.target.platform == 'linux': + compiler.linkflags[0:0] = ['-lm'] + if sdk.name in ['css', 'hl2dm', 'dods', 'tf2', 'sdk2013', 'bms', 'nucleardawn', 'l4d2', 'insurgency', 'doi']: + dynamic_libs = ['libtier0_srv.so', 'libvstdlib_srv.so'] + elif compiler.target.arch == 'x86_64' and sdk.name in ['csgo', 'mock']: + dynamic_libs = ['libtier0_client.so', 'libvstdlib_client.so'] + elif sdk.name in ['l4d', 'blade', 'insurgency', 'doi', 'csgo', 'cs2', 'dota', 'pvkii']: + dynamic_libs = ['libtier0.so'] + if sdk.name not in ['dota', 'cs2']: + dynamic_libs += ['libvstdlib.so'] + else: + dynamic_libs = ['tier0_i486.so', 'vstdlib_i486.so'] + if sdk.name in ['csgo', 'blade']: + compiler.defines += ['_GLIBCXX_USE_CXX11_ABI=0'] + elif compiler.target.platform == 'mac': + binary.compiler.linkflags.append('-liconv') + dynamic_libs = ['libtier0.dylib', 'libvstdlib.dylib'] + elif compiler.target.platform == 'windows': + libs = ['tier0', 'tier1', 'mathlib'] + if sdk.name not in ['dota', 'cs2']: + libs += ['vstdlib'] + if sdk.name in ['swarm', 'blade', 'insurgency', 'doi', 'mcv', 'csgo', 'cs2', 'dota']: + libs.append('interfaces') + for lib in libs: + if compiler.target.arch == 'x86': + lib_path = os.path.join(sdk.path, 'lib', 'public', lib) + '.lib' + elif compiler.target.arch == 'x86_64': + lib_path = os.path.join(sdk.path, 'lib', 'public', 'win64', lib) + '.lib' + binary.compiler.linkflags.append(lib_path) + + for library in dynamic_libs: + source_path = os.path.join(lib_folder, library) + output_path = os.path.join(binary.localFolder, library) + + context.AddFolder(binary.localFolder) + output = context.AddSymlink(source_path, output_path) + + binary.compiler.weaklinkdeps += [output] + binary.compiler.linkflags[0:0] = [library] + + return binary + +MMSPlugin = MMSPluginConfig() +MMSPlugin.detectSDKs() +MMSPlugin.configure() + +BuildScripts = [ + 'AMBuilder', + 'PackageScript', +] + +builder.Build(BuildScripts, { 'MMSPlugin': MMSPlugin }) diff --git a/samples/s2_sample_mm/AMBuilder b/samples/s2_sample_mm/AMBuilder new file mode 100644 index 00000000..54ebacc5 --- /dev/null +++ b/samples/s2_sample_mm/AMBuilder @@ -0,0 +1,33 @@ +# vim: set sts=2 ts=8 sw=2 tw=99 et ft=python: +import os + +# Here only one sdk should be available to generate only one executable in the end, +# as multi-sdk loading isn't supported out of the box by metamod, and would require specifying the full path in the vdf +# which in the end would ruin the multi-platform (unix, win etc) loading by metamod as it won't be able to append platform specific extension +# so just fall back to the single binary. +# Multi-sdk solutions should be manually loaded with a custom plugin loader (examples being sourcemod, stripper:source) +for sdk_name in MMSPlugin.sdks: + for cxx in MMSPlugin.all_targets: + sdk = MMSPlugin.sdks[sdk_name] + + if not cxx.target.arch in sdk.platformSpec[cxx.target.platform]: + continue + + binary = MMSPlugin.HL2Library(builder, cxx, MMSPlugin.plugin_name, sdk) + + binary.sources += [ + 'sample_mm.cpp', + ] + + if sdk_name in ['dota', 'cs2']: + binary.sources += [ + os.path.join(sdk.path, 'tier1', 'convar.cpp'), + os.path.join(sdk.path, 'public', 'tier0', 'memoverride.cpp'), + ] + + if cxx.target.arch == 'x86': + binary.sources += ['sourcehook/sourcehook_hookmangen.cpp'] + nodes = builder.Add(binary) + MMSPlugin.binaries += [nodes] + + break diff --git a/samples/s2_sample_mm/PackageScript b/samples/s2_sample_mm/PackageScript new file mode 100644 index 00000000..86ff3406 --- /dev/null +++ b/samples/s2_sample_mm/PackageScript @@ -0,0 +1,49 @@ +# vim: set ts=2 sw=2 tw=99 noet ft=python: +import os + +builder.SetBuildFolder('package') + +metamod_folder = builder.AddFolder(os.path.join('addons', 'metamod')) +bin_folder_path = os.path.join('addons', MMSPlugin.plugin_name, 'bin') +bin_folder = builder.AddFolder(bin_folder_path) + +for cxx in MMSPlugin.all_targets: + if cxx.target.arch == 'x86_64': + if cxx.target.platform == 'windows': + bin64_folder_path = os.path.join('addons', MMSPlugin.plugin_name, 'bin', 'win64') + bin64_folder = builder.AddFolder(bin64_folder_path) + elif cxx.target.platform == 'linux': + bin64_folder_path = os.path.join('addons', MMSPlugin.plugin_name, 'bin', 'win64') + bin64_folder = builder.AddFolder(bin64_folder_path) + elif cxx.target.platform == 'mac': + bin64_folder_path = os.path.join('addons', MMSPlugin.plugin_name, 'bin', 'win64') + bin64_folder = builder.AddFolder(bin64_folder_path) + +pdb_list = [] +for task in MMSPlugin.binaries: + # This hardly assumes there's only 1 targetted platform and would be overwritten + # with whatever comes last if multiple are used! + with open(os.path.join(builder.buildPath, MMSPlugin.plugin_name + '.vdf'), 'w') as fp: + fp.write('"Metamod Plugin"\n') + fp.write('{\n') + fp.write(f'\t"alias"\t"{MMSPlugin.plugin_alias}"\n') + if task.target.arch == 'x86_64': + fp.write(f'\t"file"\t"{os.path.join(bin64_folder_path, MMSPlugin.plugin_name)}"\n') + else: + fp.write(f'\t"file"\t"{os.path.join(bin_folder_path, MMSPlugin.plugin_name)}"\n') + fp.write('}\n') + + if task.target.arch == 'x86_64': + builder.AddCopy(task.binary, bin64_folder) + else: + builder.AddCopy(task.binary, bin_folder) + + if task.debug: + pdb_list.append(task.debug) + +builder.AddCopy(os.path.join(builder.buildPath, MMSPlugin.plugin_name + '.vdf'), metamod_folder) + +# Generate PDB info. +with open(os.path.join(builder.buildPath, 'pdblog.txt'), 'wt') as fp: + for line in pdb_list: + fp.write(line.path + '\n') \ No newline at end of file diff --git a/samples/s2_sample_mm/README.md b/samples/s2_sample_mm/README.md new file mode 100644 index 00000000..1cf1be40 --- /dev/null +++ b/samples/s2_sample_mm/README.md @@ -0,0 +1,37 @@ +## Manual building example + +### Prerequisites + * [hl2sdk](https://github.com/alliedmodders/hl2sdk) of the game you plan on writing plugin for (the current plugin build scripts allows only for 1 sdk and 1 platform at a time!); + * [metamod-source](https://github.com/alliedmodders/metamod-source); + * [python3](https://www.python.org/) + * [ambuild](https://github.com/alliedmodders/ambuild), make sure ``ambuild`` command is available via the ``PATH`` environment variable; + +### Setting up + * ``mkdir build`` & ``cd build`` in the root of the plugin folder. + * Open the [MSVC developer console](https://learn.microsoft.com/en-us/cpp/build/building-on-the-command-line) with the correct platform (x86 or x86_64) that you plan on targetting. + * Run ``python3 ../configure.py --plugin-name={PLUGIN_NAME} --plugin-alias={PLUGIN_ALIAS} -s {SDKNAME} --targets={TARGET} --mms_path={MMS_PATH} --hl2sdk-root {HL2SDKROOT} `` where: + * ``{PLUGIN_NAME}`` should be the plugin name which is used for the resulting binary name and folder naming scheme (this doesn't affect the plugin name you'd see in the plugin list if you don't modify the base plugin functions); + * ``{PLUGIN_ALIAS}`` should be used to set the plugin alias that is used as a short hand version to load, unload, list info etc via the metamod-source menu (example being ``meta unload sample``, where ``sample`` is the alias); + * ``{SDKNAME}`` should be the hl2sdk game name that you are building for; + * ``{TARGET}`` should be the target platform you are targeting (``x86`` or ``x86_64``); + * ``{MMS_PATH}`` should point to the root of the metamod-source folder; + * ``{HL2SDKROOT}`` should point to the root of the hl2sdk's folders, note that it should not point to the actual ``hl2sdk-GAME`` folder but a root parent of it; + * Alternatively ``{MMS_PATH}`` & ``{HL2SDKROOT}`` could be put as a ``PATH`` environment variables, like ``MMSOURCE112=D:\mmsource-1.12`` & ``HL2SDKCS2=D:\hl2sdks\hl2sdk-cs2`` (note the metamod version and that here hl2sdk environment variable should point directly to the game's hl2sdk folder and not to the root of it!) + * Example: ``python3 ../configure.py --plugin-name=sample_mm --plugin-alias=sample -s cs2 --targets=x86_64 --mms_path=D:\mmsource-1.12 --hl2sdk-root=D:\hl2sdks`` + * If the process of configuring was successful, you should be able to run ``ambuild`` in the ``\build`` folder to compile the plugin. + * Once the plugin is compiled the files would be packaged and placed in ``\build\package`` folder. + * To run the plugin on the server, place the files preserving the layout provided in ``\package``. Be aware that plugins get loaded either by corresponding ``.vdf`` files (automatic step) in the metamod folder, or by listing them in ``addons/metamod/metaplugins.ini`` file (manual step). + + ## Points of interest + * To generate the VS solution of the plugin with the correct setup, use ``python3 ../configure {CONFIGURE_OPTIONS} --gen=vs``, where ``{CONFIGURE_OPTIONS}`` is your default configuring options that are used when building. As a result ``.vcxproj`` file would be created in the folder where the command was executed. + * To update which ``.cpp`` files gets compiled in or to add new ones, look at ``AMBuilder`` script which has the ``sample_mm.cpp`` being built initially, you can add or edit this however you want to, running ``ambuild`` after editing this script would automatically catch up the changes, no need for the reconfiguration. + * To change the name/version/author/etc that's displayed in the metamod-source menu, make sure to correctly overload and provide the wanted info to the metamod-source, like ``ISmmPlugin::GetAuthor``, ``ISmmPlugin::GetName`` and so on. + * There are also additional arguments for the configuration step that aren't covered here, you can see them by running ``python3 ../configure -h`` from within the ``\build`` folder. + * To add additional linking ``.libs``/defines/include directories, open ``AMBuildScript`` and at the top edit corresponding arrays. + * Sometimes there could be problems with ``ambuild`` not catching up the changes in ``.h`` files, thus producing incorrect (outdated) binaries or even doesn't compile with the new changes. As there's [no full rebuild option](https://github.com/alliedmodders/ambuild/issues/145) to combat this, go to the ``/build`` folder and locate the folder named after the plugin name you've used, deleting that folder and building after should provide the clean build of the project and the described issues should be eliminated. + + +## For more information on compiling and reading the plugin's source code, see: + + http://wiki.alliedmods.net/Category:Metamod:Source_Development + diff --git a/samples/s2_sample_mm/configure.py b/samples/s2_sample_mm/configure.py new file mode 100644 index 00000000..2ca9277a --- /dev/null +++ b/samples/s2_sample_mm/configure.py @@ -0,0 +1,39 @@ +# vim: set sts=2 ts=8 sw=2 tw=99 et: +import sys +try: + from ambuild2 import run, util +except: + try: + import ambuild + sys.stderr.write('It looks like you have AMBuild 1 installed, but this project uses AMBuild 2.\n') + sys.stderr.write('Upgrade to the latest version of AMBuild to continue.\n') + except: + sys.stderr.write('AMBuild must be installed to build this project.\n') + sys.stderr.write('http://www.alliedmods.net/ambuild\n') + sys.exit(1) + +# Hack to show a decent upgrade message, which wasn't done until 2.2. +ambuild_version = getattr(run, 'CURRENT_API', '2.1') +if ambuild_version.startswith('2.1'): + sys.stderr.write("AMBuild 2.2 or higher is required; please update\n") + sys.exit(1) + +parser = run.BuildParser(sourcePath=sys.path[0], api='2.2') +parser.options.add_argument('-n', '--plugin-name', type=str, dest='plugin_name', default=None, + help='Plugin name') +parser.options.add_argument('-a', '--plugin-alias', type=str, dest='plugin_alias', default=None, + help='Plugin alias') +parser.options.add_argument('--hl2sdk-root', type=str, dest='hl2sdk_root', default=None, + help='Root search folder for HL2SDKs') +parser.options.add_argument('--mms_path', type=str, dest='mms_path', default=None, + help='Metamod:Source source tree folder') +parser.options.add_argument('--enable-debug', action='store_const', const='1', dest='debug', + help='Enable debugging symbols') +parser.options.add_argument('--enable-optimize', action='store_const', const='1', dest='opt', + help='Enable optimization') +parser.options.add_argument('-s', '--sdks', default='all', dest='sdks', + help='Build against specified SDKs; valid args are "all", "present", or ' + 'comma-delimited list of engine names (default: "all")') +parser.options.add_argument('--targets', type=str, dest='targets', default=None, + help="Override the target architecture (use commas to separate multiple targets).") +parser.Configure() diff --git a/samples/s2_sample_mm/sample_mm.cpp b/samples/s2_sample_mm/sample_mm.cpp new file mode 100644 index 00000000..56e8774f --- /dev/null +++ b/samples/s2_sample_mm/sample_mm.cpp @@ -0,0 +1,225 @@ +/** + * vim: set ts=4 sw=4 tw=99 noet : + * ====================================================== + * Metamod:Source Sample Plugin + * Written by AlliedModders LLC. + * ====================================================== + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * This sample plugin is public domain. + */ + +#include +#include "sample_mm.h" +#include "iserver.h" + +SH_DECL_HOOK3_void(IServerGameDLL, GameFrame, SH_NOATTRIB, 0, bool, bool, bool); +SH_DECL_HOOK4_void(IServerGameClients, ClientActive, SH_NOATTRIB, 0, CPlayerSlot, bool, const char *, uint64); +SH_DECL_HOOK5_void(IServerGameClients, ClientDisconnect, SH_NOATTRIB, 0, CPlayerSlot, int, const char *, uint64, const char *); +SH_DECL_HOOK4_void(IServerGameClients, ClientPutInServer, SH_NOATTRIB, 0, CPlayerSlot, char const *, int, uint64); +SH_DECL_HOOK1_void(IServerGameClients, ClientSettingsChanged, SH_NOATTRIB, 0, CPlayerSlot ); +SH_DECL_HOOK6_void(IServerGameClients, OnClientConnected, SH_NOATTRIB, 0, CPlayerSlot, const char*, uint64, const char *, const char *, bool); +SH_DECL_HOOK6(IServerGameClients, ClientConnect, SH_NOATTRIB, 0, bool, CPlayerSlot, const char*, uint64, const char *, bool, CBufferString *); +SH_DECL_HOOK2(IGameEventManager2, FireEvent, SH_NOATTRIB, 0, bool, IGameEvent *, bool); + +SH_DECL_HOOK2_void( IServerGameClients, ClientCommand, SH_NOATTRIB, 0, CPlayerSlot, const CCommand & ); + +SamplePlugin g_SamplePlugin; +IServerGameDLL *server = NULL; +IServerGameClients *gameclients = NULL; +IVEngineServer *engine = NULL; +IGameEventManager2 *gameevents = NULL; +ICvar *icvar = NULL; + +// Should only be called within the active game loop (i e map should be loaded and active) +// otherwise that'll be nullptr! +CGlobalVars *GetGameGlobals() +{ + INetworkGameServer *server = g_pNetworkServerService->GetIGameServer(); + + if(!server) + return nullptr; + + return g_pNetworkServerService->GetIGameServer()->GetGlobals(); +} + +#if 0 +// Currently unavailable, requires hl2sdk work! +ConVar sample_cvar("sample_cvar", "42", 0); +#endif + +CON_COMMAND_F(sample_command, "Sample command", FCVAR_NONE) +{ + META_CONPRINTF( "Sample command called by %d. Command: %s\n", context.GetPlayerSlot(), args.GetCommandString() ); +} + +PLUGIN_EXPOSE(SamplePlugin, g_SamplePlugin); +bool SamplePlugin::Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late) +{ + PLUGIN_SAVEVARS(); + + GET_V_IFACE_CURRENT(GetEngineFactory, engine, IVEngineServer, INTERFACEVERSION_VENGINESERVER); + GET_V_IFACE_CURRENT(GetEngineFactory, icvar, ICvar, CVAR_INTERFACE_VERSION); + GET_V_IFACE_ANY(GetServerFactory, server, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL); + GET_V_IFACE_ANY(GetServerFactory, gameclients, IServerGameClients, INTERFACEVERSION_SERVERGAMECLIENTS); + GET_V_IFACE_ANY(GetEngineFactory, g_pNetworkServerService, INetworkServerService, NETWORKSERVERSERVICE_INTERFACE_VERSION); + + // Currently doesn't work from within mm side, use GetGameGlobals() in the mean time instead + // gpGlobals = ismm->GetCGlobals(); + + META_CONPRINTF( "Starting plugin.\n" ); + + SH_ADD_HOOK_MEMFUNC(IServerGameDLL, GameFrame, server, this, &SamplePlugin::Hook_GameFrame, true); + SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientActive, gameclients, this, &SamplePlugin::Hook_ClientActive, true); + SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, gameclients, this, &SamplePlugin::Hook_ClientDisconnect, true); + SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientPutInServer, gameclients, this, &SamplePlugin::Hook_ClientPutInServer, true); + SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientSettingsChanged, gameclients, this, &SamplePlugin::Hook_ClientSettingsChanged, false); + SH_ADD_HOOK_MEMFUNC(IServerGameClients, OnClientConnected, gameclients, this, &SamplePlugin::Hook_OnClientConnected, false); + SH_ADD_HOOK_MEMFUNC( IServerGameClients, ClientConnect, gameclients, this, &SamplePlugin::Hook_ClientConnect, false ); + SH_ADD_HOOK_MEMFUNC(IServerGameClients, ClientCommand, gameclients, this, &SamplePlugin::Hook_ClientCommand, false); + + META_CONPRINTF( "All hooks started!\n" ); + + g_pCVar = icvar; + ConVar_Register( FCVAR_RELEASE | FCVAR_CLIENT_CAN_EXECUTE | FCVAR_GAMEDLL ); + + return true; +} + +bool SamplePlugin::Unload(char *error, size_t maxlen) +{ + SH_REMOVE_HOOK_MEMFUNC(IServerGameDLL, GameFrame, server, this, &SamplePlugin::Hook_GameFrame, true); + SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientActive, gameclients, this, &SamplePlugin::Hook_ClientActive, true); + SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientDisconnect, gameclients, this, &SamplePlugin::Hook_ClientDisconnect, true); + SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientPutInServer, gameclients, this, &SamplePlugin::Hook_ClientPutInServer, true); + SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientSettingsChanged, gameclients, this, &SamplePlugin::Hook_ClientSettingsChanged, false); + SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, OnClientConnected, gameclients, this, &SamplePlugin::Hook_OnClientConnected, false); + SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientConnect, gameclients, this, &SamplePlugin::Hook_ClientConnect, false); + SH_REMOVE_HOOK_MEMFUNC(IServerGameClients, ClientCommand, gameclients, this, &SamplePlugin::Hook_ClientCommand, false); + + return true; +} + +void SamplePlugin::AllPluginsLoaded() +{ + /* This is where we'd do stuff that relies on the mod or other plugins + * being initialized (for example, cvars added and events registered). + */ +} + +void SamplePlugin::Hook_ClientActive( CPlayerSlot slot, bool bLoadGame, const char *pszName, uint64 xuid ) +{ + META_CONPRINTF( "Hook_ClientActive(%d, %d, \"%s\", %d)\n", slot, bLoadGame, pszName, xuid ); +} + +void SamplePlugin::Hook_ClientCommand( CPlayerSlot slot, const CCommand &args ) +{ + META_CONPRINTF( "Hook_ClientCommand(%d, \"%s\")\n", slot, args.GetCommandString() ); +} + +void SamplePlugin::Hook_ClientSettingsChanged( CPlayerSlot slot ) +{ + META_CONPRINTF( "Hook_ClientSettingsChanged(%d)\n", slot ); +} + +void SamplePlugin::Hook_OnClientConnected( CPlayerSlot slot, const char *pszName, uint64 xuid, const char *pszNetworkID, const char *pszAddress, bool bFakePlayer ) +{ + META_CONPRINTF( "Hook_OnClientConnected(%d, \"%s\", %d, \"%s\", \"%s\", %d)\n", slot, pszName, xuid, pszNetworkID, pszAddress, bFakePlayer ); +} + +bool SamplePlugin::Hook_ClientConnect( CPlayerSlot slot, const char *pszName, uint64 xuid, const char *pszNetworkID, bool unk1, CBufferString *pRejectReason ) +{ + META_CONPRINTF( "Hook_ClientConnect(%d, \"%s\", %d, \"%s\", %d, \"%s\")\n", slot, pszName, xuid, pszNetworkID, unk1, pRejectReason->ToGrowable()->Get() ); + + RETURN_META_VALUE(MRES_IGNORED, true); +} + +void SamplePlugin::Hook_ClientPutInServer( CPlayerSlot slot, char const *pszName, int type, uint64 xuid ) +{ + META_CONPRINTF( "Hook_ClientPutInServer(%d, \"%s\", %d, %d, %d)\n", slot, pszName, type, xuid ); +} + +void SamplePlugin::Hook_ClientDisconnect( CPlayerSlot slot, int reason, const char *pszName, uint64 xuid, const char *pszNetworkID ) +{ + META_CONPRINTF( "Hook_ClientDisconnect(%d, %d, \"%s\", %d, \"%s\")\n", slot, reason, pszName, xuid, pszNetworkID ); +} + +void SamplePlugin::Hook_GameFrame( bool simulating, bool bFirstTick, bool bLastTick ) +{ + /** + * simulating: + * *********** + * true | game is ticking + * false | game is not ticking + */ +} + +// Potentially might not work +void SamplePlugin::OnLevelInit( char const *pMapName, + char const *pMapEntities, + char const *pOldLevel, + char const *pLandmarkName, + bool loadGame, + bool background ) +{ + META_CONPRINTF("OnLevelInit(%s)\n", pMapName); +} + +// Potentially might not work +void SamplePlugin::OnLevelShutdown() +{ + META_CONPRINTF("OnLevelShutdown()\n"); +} + +bool SamplePlugin::Pause(char *error, size_t maxlen) +{ + return true; +} + +bool SamplePlugin::Unpause(char *error, size_t maxlen) +{ + return true; +} + +const char *SamplePlugin::GetLicense() +{ + return "Public Domain"; +} + +const char *SamplePlugin::GetVersion() +{ + return "1.0.0.0"; +} + +const char *SamplePlugin::GetDate() +{ + return __DATE__; +} + +const char *SamplePlugin::GetLogTag() +{ + return "SAMPLE"; +} + +const char *SamplePlugin::GetAuthor() +{ + return "AlliedModders LLC"; +} + +const char *SamplePlugin::GetDescription() +{ + return "Sample basic plugin"; +} + +const char *SamplePlugin::GetName() +{ + return "Sample Plugin"; +} + +const char *SamplePlugin::GetURL() +{ + return "http://www.sourcemm.net/"; +} diff --git a/samples/s2_sample_mm/sample_mm.h b/samples/s2_sample_mm/sample_mm.h new file mode 100644 index 00000000..5f5d7302 --- /dev/null +++ b/samples/s2_sample_mm/sample_mm.h @@ -0,0 +1,62 @@ +/** + * vim: set ts=4 sw=4 tw=99 noet : + * ====================================================== + * Metamod:Source Sample Plugin + * Written by AlliedModders LLC. + * ====================================================== + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * This sample plugin is public domain. + */ + +#ifndef _INCLUDE_METAMOD_SOURCE_STUB_PLUGIN_H_ +#define _INCLUDE_METAMOD_SOURCE_STUB_PLUGIN_H_ + +#include +#include +#include +#include + +class SamplePlugin : public ISmmPlugin, public IMetamodListener +{ +public: + bool Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late); + bool Unload(char *error, size_t maxlen); + bool Pause(char *error, size_t maxlen); + bool Unpause(char *error, size_t maxlen); + void AllPluginsLoaded(); +public: //hooks + void OnLevelInit( char const *pMapName, + char const *pMapEntities, + char const *pOldLevel, + char const *pLandmarkName, + bool loadGame, + bool background ); + void OnLevelShutdown(); + void Hook_GameFrame( bool simulating, bool bFirstTick, bool bLastTick ); + void Hook_ClientActive( CPlayerSlot slot, bool bLoadGame, const char *pszName, uint64 xuid ); + void Hook_ClientDisconnect( CPlayerSlot slot, int reason, const char *pszName, uint64 xuid, const char *pszNetworkID ); + void Hook_ClientPutInServer( CPlayerSlot slot, char const *pszName, int type, uint64 xuid ); + void Hook_ClientSettingsChanged( CPlayerSlot slot ); + void Hook_OnClientConnected( CPlayerSlot slot, const char *pszName, uint64 xuid, const char *pszNetworkID, const char *pszAddress, bool bFakePlayer ); + bool Hook_ClientConnect( CPlayerSlot slot, const char *pszName, uint64 xuid, const char *pszNetworkID, bool unk1, CBufferString *pRejectReason ); + void Hook_ClientCommand( CPlayerSlot nSlot, const CCommand &_cmd ); +public: + const char *GetAuthor(); + const char *GetName(); + const char *GetDescription(); + const char *GetURL(); + const char *GetLicense(); + const char *GetVersion(); + const char *GetDate(); + const char *GetLogTag(); +}; + +extern SamplePlugin g_SamplePlugin; + +PLUGIN_GLOBALVARS(); + +#endif //_INCLUDE_METAMOD_SOURCE_STUB_PLUGIN_H_ From 799f1660a3938c2b9b265f099fbced76b1d98258 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Wed, 27 Sep 2023 18:52:44 -0400 Subject: [PATCH 33/39] Build fixes --- core/provider/source/provider_source.cpp | 2 +- core/provider/source/provider_source.h | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/core/provider/source/provider_source.cpp b/core/provider/source/provider_source.cpp index a6b330f0..76806830 100644 --- a/core/provider/source/provider_source.cpp +++ b/core/provider/source/provider_source.cpp @@ -482,7 +482,7 @@ void SourceProvider::CacheUserMessages() static jmp_buf usermsg_end; /* This only gets called if IServerGameDLL::GetUserMessageInfo() triggers it */ -void SourceProvider::Detour_Error(const tchar* pMsg, ...) +void Detour_Error(const tchar* pMsg, ...) { /* Jump back to setjmp() in CacheUserMessages() */ longjmp(usermsg_end, 1); diff --git a/core/provider/source/provider_source.h b/core/provider/source/provider_source.h index 6f55ade7..a74522b7 100644 --- a/core/provider/source/provider_source.h +++ b/core/provider/source/provider_source.h @@ -33,6 +33,8 @@ #include #include +class IFileSystem; + class SourceProvider : public BaseProvider { public: // BaseProvider @@ -101,7 +103,6 @@ class SourceProvider : public BaseProvider }; private: void CacheUserMessages(); - void Detour_Error(const tchar* pMsg, ...); bool KVLoadFromFile(KeyValues* kv, IFileSystem* filesystem, const char* resourceName, const char* pathID = nullptr); inline bool IsUserMessageIterationSupported() const { From 2ce27062b02e28a02914133161d9d2fb8dfd3482 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Wed, 27 Sep 2023 19:33:20 -0400 Subject: [PATCH 34/39] Build fixes --- core/provider/source/provider_source.cpp | 15 ++++++++++++--- core/provider/source/provider_source_console.cpp | 1 + 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/core/provider/source/provider_source.cpp b/core/provider/source/provider_source.cpp index 76806830..a3a00032 100644 --- a/core/provider/source/provider_source.cpp +++ b/core/provider/source/provider_source.cpp @@ -30,6 +30,11 @@ #include #include +#if SOURCE_ENGINE == SE_EPISODEONE +#include +#include +#endif + ConCommand meta_local_cmd("meta", LocalCommand_Meta, "Metamod:Source control options"); static SourceProvider g_SourceProvider; @@ -106,7 +111,7 @@ void SourceProvider::Notify_DLLInit_Pre(CreateInterfaceFn engineFactory, CacheUserMessages(); #if SOURCE_ENGINE < SE_ORANGEBOX - if (!g_SMConVarAccessor.InitConCommandBaseList()) + if (!m_ConVarAccessor.InitConCommandBaseList()) { /* This is very unlikely considering it's old engine */ mm_LogMessage("[META] Warning: Failed to find ConCommandBase list!"); @@ -234,7 +239,7 @@ int SourceProvider::DetermineSourceEngine() #elif SOURCE_ENGINE == SE_BMS return SOURCE_ENGINE_BMS; #elif SOURCE_ENGINE == SE_EPISODEONE - return g_bOriginalEngine ? SOURCE_ENGINE_ORIGINAL : SOURCE_ENGINE_EPISODEONE; + return bOriginalEngine ? SOURCE_ENGINE_ORIGINAL : SOURCE_ENGINE_EPISODEONE; #elif SOURCE_ENGINE == SE_MOCK return SOURCE_ENGINE_MOCK; #elif SOURCE_ENGINE == SE_PVKII @@ -289,7 +294,7 @@ const char* SourceProvider::GetEngineDescription() const #elif SOURCE_ENGINE == SE_CSGO return "Counter-Strike: Global Offensive (2012)"; #elif SOURCE_ENGINE == SE_EPISODEONE - if (g_bOriginalEngine) + if (bOriginalEngine) { return "Original (pre-Episode 1)"; } @@ -467,7 +472,11 @@ void LocalCommand_Meta() if (nullptr != g_SourceProvider.m_pCallbacks) { +#if SOURCE_ENGINE >= SE_ORANGEBOX GlobCommand cmd(&args); +#else + GlobCommand cmd; +#endif g_SourceProvider.m_pCallbacks->OnCommand_Meta(&cmd); } } diff --git a/core/provider/source/provider_source_console.cpp b/core/provider/source/provider_source_console.cpp index c3dbaa6a..4c6fc502 100644 --- a/core/provider/source/provider_source_console.cpp +++ b/core/provider/source/provider_source_console.cpp @@ -26,6 +26,7 @@ */ #include "provider_source.h" +#include "metamod_util.h" #if SOURCE_ENGINE >= SE_ORANGEBOX #else From 40ee69cf78d0e0fb7deaf87aadd6374824630b3b Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Wed, 27 Sep 2023 19:43:41 -0400 Subject: [PATCH 35/39] More build fixes --- core/provider/source/provider_source.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core/provider/source/provider_source.cpp b/core/provider/source/provider_source.cpp index a3a00032..e103deb5 100644 --- a/core/provider/source/provider_source.cpp +++ b/core/provider/source/provider_source.cpp @@ -35,7 +35,12 @@ #include #endif -ConCommand meta_local_cmd("meta", LocalCommand_Meta, "Metamod:Source control options"); +#if SOURCE_ENGINE >= SE_ORANGEBOX +static void LocalCommand_Meta(const CCommand& args); +#else +static void LocalCommand_Meta(); +#endif +static ConCommand meta_local_cmd("meta", LocalCommand_Meta, "Metamod:Source control options"); static SourceProvider g_SourceProvider; From 85d410adbd550ce80fdf15ce4a26fe9578a59fed Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Wed, 27 Sep 2023 19:50:51 -0400 Subject: [PATCH 36/39] More build fixes --- core/provider/source/provider_source.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/provider/source/provider_source.cpp b/core/provider/source/provider_source.cpp index e103deb5..0f419aa2 100644 --- a/core/provider/source/provider_source.cpp +++ b/core/provider/source/provider_source.cpp @@ -29,9 +29,9 @@ #include #include #include +#include #if SOURCE_ENGINE == SE_EPISODEONE -#include #include #endif From fe826bbc51d3334c751c24b724e3f27ea4bf8fd1 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Wed, 27 Sep 2023 20:01:43 -0400 Subject: [PATCH 37/39] More build fixes --- core/provider/source/provider_source.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/provider/source/provider_source.cpp b/core/provider/source/provider_source.cpp index 0f419aa2..ce95a128 100644 --- a/core/provider/source/provider_source.cpp +++ b/core/provider/source/provider_source.cpp @@ -36,9 +36,9 @@ #endif #if SOURCE_ENGINE >= SE_ORANGEBOX -static void LocalCommand_Meta(const CCommand& args); +void LocalCommand_Meta(const CCommand& args); #else -static void LocalCommand_Meta(); +void LocalCommand_Meta(); #endif static ConCommand meta_local_cmd("meta", LocalCommand_Meta, "Metamod:Source control options"); From 458090eec6a528abc19db5d3a585c17f3912cddb Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Wed, 27 Sep 2023 20:07:35 -0400 Subject: [PATCH 38/39] Fix Mac build --- loader/loader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/loader/loader.cpp b/loader/loader.cpp index 579f213a..54a6e84c 100644 --- a/loader/loader.cpp +++ b/loader/loader.cpp @@ -280,7 +280,7 @@ mm_GetGameName(char *buffer, size_t size) #elif defined __linux__ if (mm_ResolvePath("libtier0.so", tier0_path, sizeof(tier0_path), false)) #elif defined __APPLE__ - if (mm_ResolvePath("libtier0.dylib", tier0_path, sizeof(tier0_path), false))#else + if (mm_ResolvePath("libtier0.dylib", tier0_path, sizeof(tier0_path), false)) #error unsupported platform #endif { From 6196318f5240e7ee7b5d273cef8d12c2e54144e1 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Wed, 27 Sep 2023 20:11:21 -0400 Subject: [PATCH 39/39] Maybe fix Mac build --- loader/loader.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/loader/loader.cpp b/loader/loader.cpp index 54a6e84c..c5eacb72 100644 --- a/loader/loader.cpp +++ b/loader/loader.cpp @@ -281,6 +281,7 @@ mm_GetGameName(char *buffer, size_t size) if (mm_ResolvePath("libtier0.so", tier0_path, sizeof(tier0_path), false)) #elif defined __APPLE__ if (mm_ResolvePath("libtier0.dylib", tier0_path, sizeof(tier0_path), false)) +#else #error unsupported platform #endif {