From 6e54c19832b2e80d9e2e67e6c186aad2de0da6f0 Mon Sep 17 00:00:00 2001 From: ScriptedSnark <51358194+ScriptedSnark@users.noreply.github.com> Date: Thu, 23 Jul 2026 16:53:52 +0500 Subject: [PATCH] Client: Restore HL SDK behavior for gait animations --- src/game/client/StudioModelRenderer.cpp | 30 ++++++++++--------------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/src/game/client/StudioModelRenderer.cpp b/src/game/client/StudioModelRenderer.cpp index 694d93c1..05d7141b 100644 --- a/src/game/client/StudioModelRenderer.cpp +++ b/src/game/client/StudioModelRenderer.cpp @@ -22,19 +22,6 @@ #include "GameStudioModelRenderer.h" #include "opengl.h" -// Bones that used in gait animation -#define NUM_LEGS_BONES 8 -const char *legs_bones[NUM_LEGS_BONES] = { - "Bip01", - "Bip01 Pelvis", - "Bip01 L Leg", - "Bip01 L Leg1", - "Bip01 L Foot", - "Bip01 R Leg", - "Bip01 R Leg1", - "Bip01 R Foot", -}; - // Global engine <-> studio model rendering code interface engine_studio_api_t IEngineStudio; @@ -964,19 +951,26 @@ void CStudioModelRenderer::StudioSetupBones(void) pseqdesc = (mstudioseqdesc_t *)((byte *)m_pStudioHeader + m_pStudioHeader->seqindex) + m_pPlayerInfo->gaitsequence; + int copy = 1; + panim = StudioGetAnim(m_pRenderModel, pseqdesc); StudioCalcRotations(pos2, q2, pseqdesc, panim, m_pPlayerInfo->gaitframe); for (i = 0; i < m_pStudioHeader->numbones; i++) { - for (int j = 0; j < NUM_LEGS_BONES; j++) + if (!strcmp(pbones[i].name, "Bip01 Spine")) + { + copy = 0; + } + else if (pbones[i].parent != -1 && !strcmp(pbones[pbones[i].parent].name, "Bip01 Pelvis")) + { + copy = 1; + } + + if (copy) { - if (strcmp(pbones[i].name, legs_bones[j])) - continue; - // setup animation only for legs bones memcpy(pos[i], pos2[i], sizeof(pos[i])); memcpy(q[i], q2[i], sizeof(q[i])); - break; } } }