L L4D2node

CBaseAnimating::GetSkeleton

0x005e9ac0 · 657 bytes · __thiscall

_ZN14CBaseAnimating11GetSkeletonEP10CStudioHdrRK11matrix3x4_tP6VectorP17QuaternionAlignedi

Decompiled

undefined (6 params)

/* CBaseAnimating::GetSkeleton(CStudioHdr*, matrix3x4_t const&, Vector*, QuaternionAligned*, int) */

void __thiscall
CBaseAnimating::GetSkeleton
          (CBaseAnimating *this,CStudioHdr *param_1,matrix3x4_t *param_2,Vector *param_3,
          QuaternionAligned *param_4,int param_5)

{
  CBaseAnimating *pCVar1;
  int iVar2;
  CUtlMemory<ikcontextikrule_t,int> *this_00;
  int in_GS_OFFSET;
  CIKContext local_1080 [4092];
  int local_84 [3];
  int local_78;
  int local_74;
  undefined4 local_70 [3];
  undefined4 local_64;
  undefined4 local_60;
  int local_20;
  
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  if (param_1 != (CStudioHdr *)0x0) {
    InitPose(param_1,param_3,param_4,param_5);
    pCVar1 = this + 0x498;
    AccumulatePose(param_1,*(CIKContext **)(this + 0x480),param_3,(Quaternion *)param_4,
                   *(int *)(this + 0x494),*(float *)(this + 0x490),(float *)pCVar1,param_5,1.0,
                   *(float *)(gpGlobals + 0xc));
    if (*(int *)(this + 0x480) == 0) {
      CalcAutoplaySequences
                (param_1,(CIKContext *)0x0,param_3,(Quaternion *)param_4,(float *)pCVar1,param_5,
                 *(float *)(gpGlobals + 0xc));
    }
    else {
      CIKContext::CIKContext(local_1080);
                    /* try { // try from 005e9be4 to 005e9c29 has its CatchHandler @ 005e9d55 */
      CIKContext::Init(local_1080,param_1,param_2,*(float *)(gpGlobals + 0xc),0,param_5);
      CalcAutoplaySequences
                (param_1,local_1080,param_3,(Quaternion *)param_4,(float *)pCVar1,param_5,
                 *(float *)(gpGlobals + 0xc));
      local_64 = 0;
      CUtlMemory<ikcontextikrule_t,int>::Purge((CUtlMemory<ikcontextikrule_t,int> *)local_70);
      local_60 = local_70[0];
      CUtlMemory<ikcontextikrule_t,int>::Purge((CUtlMemory<ikcontextikrule_t,int> *)local_70);
      local_78 = local_78 + -1;
      if (-1 < local_78) {
        iVar2 = local_78 * 0x14;
        do {
          local_78 = local_78 + -1;
          this_00 = (CUtlMemory<ikcontextikrule_t,int> *)(local_84[0] + iVar2);
          iVar2 = iVar2 + -0x14;
          *(undefined4 *)(this_00 + 0xc) = 0;
          CUtlMemory<ikcontextikrule_t,int>::Purge(this_00);
          *(undefined4 *)(this_00 + 0x10) = *(undefined4 *)this_00;
          CUtlMemory<ikcontextikrule_t,int>::Purge(this_00);
        } while (local_78 != -1);
      }
      local_78 = 0;
      CUtlMemory<CUtlVector<ikcontextikrule_t,CUtlMemory<ikcontextikrule_t,int>>,int>::Purge
                ((CUtlMemory<CUtlVector<ikcontextikrule_t,CUtlMemory<ikcontextikrule_t,int>>,int> *)
                 local_84);
      local_74 = local_84[0];
      CUtlMemory<CUtlVector<ikcontextikrule_t,CUtlMemory<ikcontextikrule_t,int>>,int>::Purge
                ((CUtlMemory<CUtlVector<ikcontextikrule_t,CUtlMemory<ikcontextikrule_t,int>>,int> *)
                 local_84);
    }
    CalcBoneAdj(param_1,param_3,(Quaternion *)param_4,(float *)(this + 0x4f8),param_5);
  }
  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}

SourceMod gamedata

paste into addons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)

Just a Signatures{} block, ready to drop into a gamedata file. Wire it up in your plugin however you like - SDKCall, DHooks, raw memory ops, or anything else.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)