From c0529af327bd3b691bc80c53043633c324a8b4c7 Mon Sep 17 00:00:00 2001 From: Jakub Mach Date: Tue, 8 Jun 2021 19:33:08 +0200 Subject: [PATCH] Added cl_viewmodel_hltv to disable idle/fidget animations on the viewmodel weapons --- cl_dll/StudioModelRenderer.cpp | 26 +++++++++++++++++++++++++- cl_dll/StudioModelRenderer.h | 4 ++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/cl_dll/StudioModelRenderer.cpp b/cl_dll/StudioModelRenderer.cpp index fc21ea8d..c058a5ff 100644 --- a/cl_dll/StudioModelRenderer.cpp +++ b/cl_dll/StudioModelRenderer.cpp @@ -70,7 +70,9 @@ void CStudioModelRenderer::Init( void ) m_pCvarHiModels = IEngineStudio.GetCvar( "cl_himodels" ); m_pCvarDeveloper = IEngineStudio.GetCvar( "developer" ); m_pCvarDrawEntities = IEngineStudio.GetCvar( "r_drawentities" ); - m_pCvarViewmodelFov = gEngfuncs.pfnRegisterVariable( "cl_viewmodel_fov","0", FCVAR_ARCHIVE ); + m_pCvarViewmodelFov = gEngfuncs.pfnRegisterVariable( "cl_viewmodel_fov", "0", FCVAR_ARCHIVE ); + m_pCvarViewmodelNoIdle = gEngfuncs.pfnRegisterVariable( "cl_viewmodel_disable_idle", "0", FCVAR_ARCHIVE ); + m_pCvarViewmodelNoEquip = gEngfuncs.pfnRegisterVariable( "cl_viewmodel_disable_equip", "0", FCVAR_ARCHIVE ); m_pChromeSprite = IEngineStudio.GetChromeSprite(); @@ -816,6 +818,28 @@ void CStudioModelRenderer::StudioSetupBones ( void ) } pseqdesc = (mstudioseqdesc_t *)((byte *)m_pStudioHeader + m_pStudioHeader->seqindex) + m_pCurrentEntity->curstate.sequence; + if (m_pCurrentEntity == gEngfuncs.GetViewModel()) + { + if (m_pCvarViewmodelNoIdle->value != 0.0f) + { + if (strstr(pseqdesc->label, "idle") != NULL || strstr(pseqdesc->label, "fidget") != NULL) + { + m_pCurrentEntity->curstate.frame = 0; // set current state to first frame + m_pCurrentEntity->curstate.framerate = 0; // don't animate at all + } + } + if (m_pCvarViewmodelNoEquip->value != 0.0f) + { + if (strstr(pseqdesc->label, "holster") != NULL || strstr(pseqdesc->label, "draw") != NULL || + strstr(pseqdesc->label, "deploy") != NULL) + { + m_pCurrentEntity->curstate.sequence = 0; // instead set to idle sequence + pseqdesc = (mstudioseqdesc_t *)((byte *)m_pStudioHeader + m_pStudioHeader->seqindex) + m_pCurrentEntity->curstate.sequence; + pseqdesc->numframes = 1; + pseqdesc->fps = 1; + } + } + } // always want new gait sequences to start on frame zero /* if ( m_pPlayerInfo ) diff --git a/cl_dll/StudioModelRenderer.h b/cl_dll/StudioModelRenderer.h index 92a31fe5..d100b06f 100644 --- a/cl_dll/StudioModelRenderer.h +++ b/cl_dll/StudioModelRenderer.h @@ -132,6 +132,10 @@ class CStudioModelRenderer cvar_t *m_pCvarDrawEntities; // Change viewmodel FOV cvar_t *m_pCvarViewmodelFov; + // Disable viewmodel idle/fidget animations on viewmodels + cvar_t *m_pCvarViewmodelNoIdle; + // Disable viewmodel draw/holster/deploy animations on viewmodels + cvar_t *m_pCvarViewmodelNoEquip; // The entity which we are currently rendering. cl_entity_t *m_pCurrentEntity;