diff --git a/code/libcod.cpp b/code/libcod.cpp index 4bb57a73..de45adda 100644 --- a/code/libcod.cpp +++ b/code/libcod.cpp @@ -87,6 +87,7 @@ dvar_t *con_coloredPrints; #endif dvar_t *fs_callbacks; dvar_t *fs_library; +dvar_t *g_brushModelCollisionTweaks; dvar_t *g_bulletDrop; dvar_t *g_bulletDropMaxTime; dvar_t *g_corpseHit; @@ -103,9 +104,9 @@ dvar_t *g_resetSlide; dvar_t *g_safePrecache; dvar_t *g_spawnMapTurrets; dvar_t *g_spawnMapWeapons; +dvar_t *g_spectateBots; dvar_t *g_triggerMode; dvar_t *g_turretMissingTagTerminalError; -dvar_t *g_spectateBots; dvar_t *libcod; dvar_t *loc_loadLocalizedMods; dvar_t *logErrors; @@ -381,6 +382,7 @@ void common_init_complete_print(const char *format, ...) #endif fs_callbacks = Dvar_RegisterString("fs_callbacks", "", DVAR_ARCHIVE); fs_library = Dvar_RegisterString("fs_library", "", DVAR_ARCHIVE); + g_brushModelCollisionTweaks = Dvar_RegisterBool("g_brushModelCollisionTweaks", qfalse, DVAR_ARCHIVE); g_bulletDrop = Dvar_RegisterBool("g_bulletDrop", qfalse, DVAR_ARCHIVE); g_bulletDropMaxTime = Dvar_RegisterInt("g_bulletDropMaxTime", 10000, 50, 60000, DVAR_ARCHIVE); g_corpseHit = Dvar_RegisterBool("g_corpseHit", qtrue, DVAR_ARCHIVE); @@ -9599,8 +9601,11 @@ void RestoreBrushModelContents() void custom_PM_playerTrace(pmove_t *pmove, trace_t *results, const float *start, const float *mins, const float *maxs, const float *end, int passEntityNum, int contentMask) { - // New: (not)SolidForPlayer - SetupBrushModelContents(passEntityNum); + /* New code start: (not)SolidForPlayer */ + qboolean updateBrushModelContents = g_brushModelCollisionTweaks->current.boolean; + if ( updateBrushModelContents ) + SetupBrushModelContents(passEntityNum); + /* New code end */ (*pmoveHandlers[pmove->handler].trace)(results, start, mins, maxs, end, passEntityNum, contentMask); if ( (results->startsolid != 0) && ((results->contents & CONTENTS_BODY) != 0) ) @@ -9611,7 +9616,8 @@ void custom_PM_playerTrace(pmove_t *pmove, trace_t *results, const float *start, } // New: (not)SolidForPlayer - RestoreBrushModelContents(); + if ( updateBrushModelContents ) + RestoreBrushModelContents(); } class cCallOfDuty2Pro diff --git a/doc/added_dvars.md b/doc/added_dvars.md index 44bd072b..3189b093 100644 --- a/doc/added_dvars.md +++ b/doc/added_dvars.md @@ -1,5 +1,9 @@ Added dvars: + * `g_brushModelCollisionTweaks` + * Type: Boolean + * Default: False + * Effect: If false, the `notSolidForPlayer` and `solidForPlayer` script methods have no effect. Disabled by default to avoid a performance impact in situations with a high number of brush models and many players with a high client-sided FPS setting. * `g_bulletDrop` * Type: Boolean * Default: False diff --git a/doc/libcod.cfg b/doc/libcod.cfg index e6225787..fcf418ae 100644 --- a/doc/libcod.cfg +++ b/doc/libcod.cfg @@ -11,6 +11,7 @@ set con_coloredPrints "0" set fs_callbacks "" set fs_library "" +set g_brushModelCollisionTweaks "0" set g_bulletDrop "0" set g_bulletDropMaxTime "10000" set g_corpseHit "1" diff --git a/doc/script_reference/libcod/entity/notsolidforplayer.htm b/doc/script_reference/libcod/entity/notsolidforplayer.htm index 6a33dde7..007e9252 100644 --- a/doc/script_reference/libcod/entity/notsolidforplayer.htm +++ b/doc/script_reference/libcod/entity/notsolidforplayer.htm @@ -27,7 +27,7 @@
-Unsets the solid flag so that this object is no longer collidable, for the specified player. Resets on map load or a fast_restart. +Unsets the solid flag so that this object is no longer collidable, for the specified player. Requires the brush model collision tweak system to be enabled using the g_brushModelCollisionTweaks dvar. Resets on map load or a fast_restart. |