From 3cf1554d342e2b6b1c1ee465a8614e74f07a30bc Mon Sep 17 00:00:00 2001 From: Noah Metzger Date: Mon, 6 Feb 2023 23:15:19 -0600 Subject: [PATCH] set cmod "nativeUI" flag on server Adds "nativeUI" flag to server config string for better compatibility with cMod client in certain cases. Implemented using new "misc" server module to support the convention of using the mod system for non-essential features when possible. --- build/msvc_2019/game.vcxproj | 1 + build/msvc_2019/game.vcxproj.filters | 3 ++ build/qvm_build/build_game.bat | 1 + code/game/mods/features/feat_misc.c | 42 ++++++++++++++++++++++++++++ code/game/mods/g_mod_local.h | 1 + code/game/mods/g_mod_main.c | 1 + 6 files changed, 49 insertions(+) create mode 100644 code/game/mods/features/feat_misc.c diff --git a/build/msvc_2019/game.vcxproj b/build/msvc_2019/game.vcxproj index 6ec6ae7..332b328 100644 --- a/build/msvc_2019/game.vcxproj +++ b/build/msvc_2019/game.vcxproj @@ -263,6 +263,7 @@ + diff --git a/build/msvc_2019/game.vcxproj.filters b/build/msvc_2019/game.vcxproj.filters index 5bb9af6..c197cc9 100644 --- a/build/msvc_2019/game.vcxproj.filters +++ b/build/msvc_2019/game.vcxproj.filters @@ -287,6 +287,9 @@ game\mods\features + + game\mods\features + game\mods\features diff --git a/build/qvm_build/build_game.bat b/build/qvm_build/build_game.bat index 6c1a97c..8dbff9c 100644 --- a/build/qvm_build/build_game.bat +++ b/build/qvm_build/build_game.bat @@ -72,6 +72,7 @@ set src=game\mods\components&set name=comp_pending_item&call :compile set src=game\mods\components&set name=comp_warmup_sequence&call :compile set src=game\mods\features&set name=feat_altswap_handler&call :compile set src=game\mods\features&set name=feat_bot_adding&call :compile +set src=game\mods\features&set name=feat_misc&call :compile set src=game\mods\features&set name=feat_player_move&call :compile set src=game\mods\features&set name=feat_spect_passthrough&call :compile set src=game\mods\features&set name=feat_spawn_protect&call :compile diff --git a/code/game/mods/features/feat_misc.c b/code/game/mods/features/feat_misc.c new file mode 100644 index 0000000..9af2e11 --- /dev/null +++ b/code/game/mods/features/feat_misc.c @@ -0,0 +1,42 @@ +/* +* Misc Features +* +* This module can be used to add minor tweaks or cvar-controlled options that +* don't fit anywhere else and are too minor to justify their own mod file. +*/ + +#define MOD_PREFIX( x ) ModMiscFeatures_##x + +#include "mods/g_mod_local.h" + +static struct { + // For mod function stacking + ModFNType_AddModConfigInfo Prev_AddModConfigInfo; +} *MOD_STATE; + +/* +============== +(ModFN) AddModConfigInfo +============== +*/ +LOGFUNCTION_VOID( MOD_PREFIX(AddModConfigInfo), ( char *info ), ( info ), "G_MODFN_ADDMODCONFIGINFO" ) { + // Indicate to cMod client to use preferred default UI module if possible, to avoid + // potential settings reset on disconnect or other engine incompatibilities. + // This should be disabled if creating a mod that has a need for a customized UI. + Info_SetValueForKey( info, "nativeUI", "1" ); + + MOD_STATE->Prev_AddModConfigInfo( info ); +} + +/* +================ +ModMiscFeatures_Init +================ +*/ +LOGFUNCTION_VOID( ModMiscFeatures_Init, ( void ), (), "G_MOD_INIT" ) { + if ( !MOD_STATE ) { + MOD_STATE = G_Alloc( sizeof( *MOD_STATE ) ); + + INIT_FN_STACKABLE( AddModConfigInfo ); + } +} diff --git a/code/game/mods/g_mod_local.h b/code/game/mods/g_mod_local.h index 7a2bfb1..4567be8 100644 --- a/code/game/mods/g_mod_local.h +++ b/code/game/mods/g_mod_local.h @@ -45,6 +45,7 @@ void ModTournament_Init( void ); void ModAltSwapHandler_Init( void ); void ModBotAdding_Init( void ); +void ModMiscFeatures_Init( void ); void ModPingcomp_Init( void ); void ModPlayerMove_Init( void ); void ModSpawnProtect_Init( void ); diff --git a/code/game/mods/g_mod_main.c b/code/game/mods/g_mod_main.c index 040ad61..e2c1520 100644 --- a/code/game/mods/g_mod_main.c +++ b/code/game/mods/g_mod_main.c @@ -42,6 +42,7 @@ LOGFUNCTION_VOID( G_ModsInit, ( void ), (), "G_MOD_INIT" ) { // Default mods if ( modsEnabled >= 2 ) { + ModMiscFeatures_Init(); ModPlayerMove_Init(); ModAltSwapHandler_Init(); ModPingcomp_Init();