L L4D2node

CRagdoll2::PrepareAddSolids

0x004a2050 · 707 bytes · __cdecl

_ZN9CRagdoll216PrepareAddSolidsERK15ragdollparams_tP20cache_ragdollsolid_tiPK25cache_ragdollconstraint_tiPK24cache_ragdoll2bodypart_ti8gender_t

Decompiled

undefined (8 params)

/* CRagdoll2::PrepareAddSolids(ragdollparams_t const&, cache_ragdollsolid_t*, int,
   cache_ragdollconstraint_t const*, int, cache_ragdoll2bodypart_t const*, int, gender_t) */

void CRagdoll2::PrepareAddSolids
               (int param_1,int param_2,int param_3,undefined4 param_4,int param_5,int param_6,
               int param_7)

{
  float fVar1;
  int iVar2;
  int *piVar3;
  code *pcVar4;
  uint uVar5;
  ushort *puVar6;
  int iVar7;
  undefined4 *puVar8;
  int iVar9;
  int iVar10;
  int *piVar11;
  int *piVar12;
  matrix3x4_t *pmVar13;
  int aiStackY_94 [2];
  uint local_70;
  undefined4 local_64;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined4 local_50;
  undefined1 local_4c [60];
  
  piVar11 = (int *)&stack0xffffff74;
  puVar6 = *(ushort **)(param_1 + 0x8a4);
  puVar8 = (undefined4 *)(param_1 + 0x30);
  *(undefined4 *)(param_1 + 0x8b0) = 0xffffffff;
  uVar5 = 0;
  if (*puVar6 != 0) {
    do {
      *puVar8 = 0xffffffff;
      uVar5 = uVar5 + 1;
      puVar8 = puVar8 + 0x15;
    } while (uVar5 < *puVar6);
  }
  iVar10 = 0;
  pmVar13 = (matrix3x4_t *)(param_5 + 0x30);
  if (0 < param_6) {
    do {
      iVar10 = iVar10 + 1;
      iVar9 = *(short *)(param_3 + 0x34 + *(short *)(pmVar13 + 0x32) * 0x38) * 0x54 + param_1;
      *(int *)(iVar9 + 0x30) = (int)*(short *)(param_3 + 0x34 + *(short *)(pmVar13 + 0x30) * 0x38);
      MatrixGetColumn(pmVar13,3,(Vector *)(iVar9 + 0x14));
      fVar1 = *(float *)(param_1 + 0x8a8);
      *(float *)(iVar9 + 0x14) = fVar1 * *(float *)(iVar9 + 0x14);
      *(float *)(iVar9 + 0x18) = *(float *)(iVar9 + 0x18) * fVar1;
      *(float *)(iVar9 + 0x1c) = fVar1 * *(float *)(iVar9 + 0x1c);
      pmVar13 = pmVar13 + 100;
    } while (iVar10 != param_6);
    puVar6 = *(ushort **)(param_1 + 0x8a4);
  }
  local_70 = (uint)*puVar6;
  if (local_70 < 0x19) {
    iVar10 = *(int *)(param_1 + 0x8b8);
    *(undefined4 *)(iVar10 + 0x10) = 0;
    if (local_70 == 0) goto LAB_004a2172;
  }
  else {
    Warning();
    local_70 = 0x18;
    iVar10 = *(int *)(param_1 + 0x8b8);
    *(undefined4 *)(iVar10 + 0x10) = 0;
  }
  CUtlVector<matrix3x4_t,CUtlMemory<matrix3x4_t,int>>::GrowVector
            ((CUtlVector<matrix3x4_t,CUtlMemory<matrix3x4_t,int>> *)(iVar10 + 4),local_70);
  iVar9 = *(int *)(iVar10 + 0x10) - local_70;
  if (0 < iVar9) {
    _V_memmove((void *)(local_70 * 0x30 + (int)*(void **)(iVar10 + 4)),*(void **)(iVar10 + 4),
               iVar9 * 0x30);
  }
LAB_004a2172:
  uVar5 = 0;
  *(undefined4 *)(param_1 + 0x868) = 0;
  iVar10 = param_1 + 0x14;
  if (local_70 != 0) {
    do {
      iVar9 = (int)*(short *)(param_7 + uVar5 * 8);
      *(int *)(param_1 + 0x7f4 + uVar5 * 4) = iVar9;
      *(undefined4 *)(iVar10 + 0x10) = 0;
      *(undefined4 *)(iVar10 + 0xc) = 0;
      piVar12 = piVar11;
      if (-1 < *(short *)(param_7 + uVar5 * 8)) {
        iVar2 = *(int *)(iVar10 + 0x1c);
        iVar7 = uVar5 * 0x30 + *(int *)(*(int *)(param_1 + 0x8b8) + 4);
        piVar11[1] = iVar7;
        *piVar11 = iVar9 * 0x30 + *(int *)(param_2 + 0x2c);
        piVar11[-1] = 0x4a21f2;
        MatrixCopy((matrix3x4_t *)*piVar11,(matrix3x4_t *)piVar11[1]);
        if ((-1 < iVar2) &&
           (piVar3 = *(int **)(param_1 + 0x24 + iVar2 * 0x54), piVar3 != (int *)0x0)) {
          iVar9 = *piVar3;
          piVar11[1] = (int)piVar3;
          *piVar11 = (int)local_4c;
          pcVar4 = *(code **)(iVar9 + 0x50);
          piVar11[-1] = 0x4a2218;
          (*pcVar4)();
          piVar12 = piVar11 + -1;
          piVar11[1] = (int)&local_58;
          *piVar11 = (int)local_4c;
          piVar11[-1] = iVar10;
          piVar11[-2] = 0x4a2231;
          VectorTransform((float *)piVar11[-1],(matrix3x4_t *)*piVar11,(float *)piVar11[1]);
          *piVar11 = 3;
          local_64 = local_58;
          piVar11[-1] = (int)&local_64;
          local_60 = local_54;
          piVar11[1] = iVar7;
          local_5c = local_50;
          piVar11[-2] = 0x4a2269;
          MatrixSetColumn((Vector *)piVar11[-1],*piVar11,(matrix3x4_t *)piVar11[1]);
        }
        *(uint *)(param_1 + 0x868) = *(uint *)(param_1 + 0x868) | 1 << ((byte)uVar5 & 0x1f);
      }
      uVar5 = uVar5 + 1;
      iVar10 = iVar10 + 0x54;
      piVar11 = piVar12;
    } while (uVar5 != local_70);
  }
  *(uint *)(param_1 + 8) = local_70;
  return;
}

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)