From 437feb57bd9af40bfb063b94046277d504faf230 Mon Sep 17 00:00:00 2001 From: Spirrwell Date: Mon, 24 Oct 2022 12:57:18 -0400 Subject: [PATCH] Split PVKII into its own engine branch (#97) * Initial PVKII branch support * Fix compiler error * Add missing SE_PVKII check * Update checkout-deps with 'pvkii' * Change PVKII code to 10 and bump others by 1, including recommended change in provider_ep2.cpp:135 --- AMBuildScript | 37 +++++++++++++++++----------------- core/ISmmPluginExt.h | 1 + core/provider/provider_ep2.cpp | 6 +++++- loader/loader.cpp | 5 +++++ loader/loader.h | 3 ++- support/checkout-deps.ps1 | 3 ++- support/checkout-deps.sh | 2 +- 7 files changed, 35 insertions(+), 22 deletions(-) diff --git a/AMBuildScript b/AMBuildScript index 40fdc01..32654b8 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -59,23 +59,24 @@ PossibleSDKs = { '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', '11', 'TF2', WinLinuxMac, 'tf2'), - 'l4d': SDK('HL2SDKL4D', '2.l4d', '12', 'LEFT4DEAD', WinLinuxMac, 'l4d'), - 'nucleardawn': SDK('HL2SDKND', '2.nd', '13', 'NUCLEARDAWN', WinLinuxMac, 'nucleardawn'), - 'l4d2': SDK('HL2SDKL4D2', '2.l4d2', '15', 'LEFT4DEAD2', WinLinuxMac, 'l4d2'), + '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', '16', 'ALIENSWARM', WinOnly, 'swarm'), + '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'), - 'csgo': SDK('HL2SDKCSGO', '2.csgo', '21', 'CSGO', CSGO, 'csgo'), - 'dota': SDK('HL2SDKDOTA', '2.dota', '22', 'DOTA', [], 'dota'), - 'portal2': SDK('HL2SDKPORTAL2', '2.portal2', '17', 'PORTAL2', [], 'portal2'), - 'blade': SDK('HL2SDKBLADE', '2.blade', '18', 'BLADE', Blade, 'blade'), - 'insurgency': SDK('HL2SDKINSURGENCY', '2.insurgency', '19', 'INSURGENCY', Insurgency, 'insurgency'), - 'doi': SDK('HL2SDKDOI', '2.doi', '20', 'DOI', WinLinuxMac, 'doi'), - 'contagion': SDK('HL2SDKCONTAGION', '2.contagion', '14', 'CONTAGION', WinOnly, 'contagion'), - 'bms': SDK('HL2SDKBMS', '2.bms', '10', 'BMS', WinLinux, 'bms'), + 'csgo': SDK('HL2SDKCSGO', '2.csgo', '22', 'CSGO', CSGO, 'csgo'), + 'dota': SDK('HL2SDKDOTA', '2.dota', '23', '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'), + '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'), } def ResolveEnvPath(env, folder): @@ -365,7 +366,7 @@ class MMSConfig(object): compiler.defines += ['SOURCE_ENGINE=' + sdk.code] - if sdk.name in ['sdk2013', 'bms'] and compiler.like('gcc'): + 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') @@ -387,7 +388,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']: + if sdk.name in ['css', 'hl2dm', 'dods', 'sdk2013', 'bms', 'tf2', 'l4d', 'nucleardawn', 'l4d2', 'dota', 'pvkii']: if compiler.target.platform in ['linux', 'mac']: compiler.defines += ['NO_HOOK_MALLOC', 'NO_MALLOC_OVERRIDE'] @@ -446,7 +447,7 @@ class MMSConfig(object): if compiler.target.platform == 'linux': if sdk.name == 'episode1': lib_folder = os.path.join(sdk.path, 'linux_sdk') - elif sdk.name in ['sdk2013', 'bms']: + 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') @@ -461,7 +462,7 @@ class MMSConfig(object): lib_folder = os.path.join(sdk.path, 'lib', 'mac') if compiler.target.platform in ['linux', 'mac']: - if sdk.name in ['sdk2013', 'bms'] or compiler.target.arch == 'x86_64': + 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') @@ -488,7 +489,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']: + elif sdk.name in ['l4d', 'blade', 'insurgency', 'doi', 'csgo', 'dota', 'pvkii']: dynamic_libs = ['libtier0.so', 'libvstdlib.so'] else: dynamic_libs = ['tier0_i486.so', 'vstdlib_i486.so'] diff --git a/core/ISmmPluginExt.h b/core/ISmmPluginExt.h index 0c64f46..52c7892 100644 --- a/core/ISmmPluginExt.h +++ b/core/ISmmPluginExt.h @@ -61,6 +61,7 @@ #define SOURCE_ENGINE_BMS 23 /**< Black Mesa Multiplayer */ #define SOURCE_ENGINE_DOI 24 /**< Day of Infamy */ #define SOURCE_ENGINE_MOCK 25 /**< Mock source engine */ +#define SOURCE_ENGINE_PVKII 26 /**< Pirates, Vikings, and Knights II */ #define METAMOD_PLAPI_VERSION 16 /**< Version of this header file */ #define METAMOD_PLAPI_NAME "ISmmPlugin" /**< Name of the plugin interface */ diff --git a/core/provider/provider_ep2.cpp b/core/provider/provider_ep2.cpp index b2a3684..5c56172 100644 --- a/core/provider/provider_ep2.cpp +++ b/core/provider/provider_ep2.cpp @@ -132,7 +132,7 @@ void BaseProvider::ConsolePrint(const char *str) void BaseProvider::Notify_DLLInit_Pre(CreateInterfaceFn engineFactory, CreateInterfaceFn serverFactory) { -#if SOURCE_ENGINE == SE_TF2 || SOURCE_ENGINE == SE_CSS || SOURCE_ENGINE == SE_DODS || SOURCE_ENGINE == SE_HL2DM || SOURCE_ENGINE == SE_SDK2013 +#if SOURCE_ENGINE == SE_SDK2013 // Shim to avoid hooking shims engine = (IVEngineServer *)((engineFactory)("VEngineServer023", NULL)); if (!engine) @@ -542,6 +542,8 @@ int BaseProvider::DetermineSourceEngine() 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; #else #error "SOURCE_ENGINE not defined to a known value" #endif @@ -675,6 +677,8 @@ const char *BaseProvider::GetEngineDescription() const } #elif SOURCE_ENGINE == SE_MOCK return "Mock"; +#elif SOURCE_ENGINE == SE_PVKII + return "Pirates, Vikings, and Knights II"; #else #error "SOURCE_ENGINE not defined to a known value" #endif diff --git a/loader/loader.cpp b/loader/loader.cpp index 4918709..461af09 100644 --- a/loader/loader.cpp +++ b/loader/loader.cpp @@ -92,6 +92,7 @@ static const char *backend_names[] = "2.bms", "2.doi", "2.mock", + "2.pvkii" }; #if defined _WIN32 @@ -426,6 +427,10 @@ mm_DetermineBackend(QueryValveInterface engineFactory, QueryValveInterface serve { return MMBackend_HL2DM; } + else if (strcmp(game_name, "pvkii") == 0) + { + return MMBackend_PVKII; + } else if (strcmp(game_name, ".") == 0 && engineFactory("MOCK_ENGINE", NULL)) { return MMBackend_Mock; diff --git a/loader/loader.h b/loader/loader.h index 5e7b99e..4614757 100644 --- a/loader/loader.h +++ b/loader/loader.h @@ -103,8 +103,9 @@ enum MetamodBackend MMBackend_Contagion, MMBackend_BMS, MMBackend_DOI, - MMBackend_Mock, + + MMBackend_PVKII, MMBackend_UNKNOWN }; diff --git a/support/checkout-deps.ps1 b/support/checkout-deps.ps1 index c424ec7..1456d22 100644 --- a/support/checkout-deps.ps1 +++ b/support/checkout-deps.ps1 @@ -28,7 +28,8 @@ param( 'bgt', 'eye', 'contagion', - 'doi' + 'doi', + 'pvkii' ) ) diff --git a/support/checkout-deps.sh b/support/checkout-deps.sh index 273df84..ea0bcb8 100755 --- a/support/checkout-deps.sh +++ b/support/checkout-deps.sh @@ -61,7 +61,7 @@ if [ -z ${sdks+x} ]; then if [ $ismac -eq 0 ]; then # Add these SDKs for Windows or Linux - sdks+=( orangebox blade episode1 bms ) + sdks+=( orangebox blade episode1 bms pvkii ) # Add more SDKs for Windows only if [ $iswin -eq 1 ]; then