L L4D2node

CRagdoll2::AddSolids

0x004a1040 · 1040 bytes · __cdecl

_ZN9CRagdoll29AddSolidsERK15ragdollparams_tP20cache_ragdollsolid_tiPK25cache_ragdollconstraint_tiPK24cache_ragdoll2bodypart_ti8gender_t

Decompiled

undefined (8 params)

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

void CRagdoll2::AddSolids
               (int param_1,undefined4 *param_2,int param_3,undefined4 param_4,int param_5,
               int param_6,short *param_7)

{
  int iVar1;
  float fVar2;
  short sVar3;
  int iVar4;
  code *pcVar5;
  uint uVar6;
  undefined4 uVar7;
  int *piVar8;
  int iVar9;
  ushort *puVar10;
  undefined4 *puVar11;
  int iVar12;
  matrix3x4_t *pmVar13;
  int *piVar14;
  int iVar15;
  int aiStackY_e4 [2];
  uint local_b8;
  uint local_b0;
  short *local_a4;
  uint local_a0;
  undefined4 local_94;
  undefined4 local_90;
  undefined4 local_8c;
  undefined4 local_88;
  undefined4 local_84;
  undefined4 local_80;
  undefined1 local_7c [48];
  undefined1 local_4c [60];
  
  uVar6 = 0;
  piVar14 = (int *)&stack0xffffff24;
  puVar10 = *(ushort **)(param_1 + 0x8a4);
  puVar11 = (undefined4 *)(param_1 + 0x30);
  *(undefined4 *)(param_1 + 0x8b0) = 0xffffffff;
  if (*puVar10 != 0) {
    do {
      *puVar11 = 0xffffffff;
      uVar6 = uVar6 + 1;
      puVar11 = puVar11 + 0x15;
    } while (uVar6 < *puVar10);
  }
  if (0 < param_6) {
    iVar15 = 0;
    pmVar13 = (matrix3x4_t *)(param_5 + 0x30);
    do {
      iVar15 = iVar15 + 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));
      fVar2 = *(float *)(param_1 + 0x8a8);
      *(float *)(iVar9 + 0x14) = fVar2 * *(float *)(iVar9 + 0x14);
      *(float *)(iVar9 + 0x18) = *(float *)(iVar9 + 0x18) * fVar2;
      *(float *)(iVar9 + 0x1c) = fVar2 * *(float *)(iVar9 + 0x1c);
      pmVar13 = pmVar13 + 100;
    } while (iVar15 != param_6);
    puVar10 = *(ushort **)(param_1 + 0x8a4);
  }
  iVar15 = *(int *)(g_cv_phys2_freeze_ragdolls._28_4_ + 0x30);
  local_b0 = (uint)*puVar10;
  if (local_b0 < 0x19) {
    if (local_b0 == 0) {
      local_b8 = 0;
      goto LAB_004a1420;
    }
  }
  else {
    Warning();
    local_b0 = 0x18;
  }
  local_a0 = 0;
  iVar9 = param_1 + 0x14;
  local_a4 = param_7;
  do {
    sVar3 = *local_a4;
    *(int *)(param_1 + 0x7f4 + local_a0 * 4) = (int)sVar3;
    *(undefined4 *)(iVar9 + 0x10) = 0;
    *(undefined4 *)(iVar9 + 0xc) = 0;
    if (-1 < *local_a4) {
      iVar12 = *(int *)(local_a4 + 2);
      if (iVar12 < 0) {
        iVar12 = 0;
      }
      iVar1 = local_a0 * 4;
      iVar4 = *(int *)(iVar9 + 0x1c);
      piVar14[1] = (int)local_7c;
      *piVar14 = sVar3 * 0x30 + param_2[0xb];
      piVar14[-1] = 0x4a1300;
      MatrixCopy((matrix3x4_t *)*piVar14,(matrix3x4_t *)piVar14[1]);
      if ((-1 < iVar4) && (piVar8 = *(int **)(param_1 + 0x24 + iVar4 * 0x54), piVar8 != (int *)0x0))
      {
        iVar4 = *piVar8;
        piVar14[1] = (int)piVar8;
        *piVar14 = (int)local_4c;
        pcVar5 = *(code **)(iVar4 + 0x50);
        piVar14[-1] = 0x4a1329;
        (*pcVar5)();
        piVar14[1] = (int)&local_88;
        *piVar14 = (int)local_4c;
        piVar14[-1] = iVar9;
        piVar14[-2] = 0x4a1345;
        VectorTransform((float *)piVar14[-1],(matrix3x4_t *)*piVar14,(float *)piVar14[1]);
        piVar14[1] = (int)local_7c;
        local_94 = local_88;
        *piVar14 = 3;
        local_90 = local_84;
        piVar14[-1] = (int)&local_94;
        local_8c = local_80;
        piVar14[-2] = 0x4a138c;
        MatrixSetColumn((Vector *)piVar14[-1],*piVar14,(matrix3x4_t *)piVar14[1]);
        piVar14 = piVar14 + -1;
      }
      iVar4 = *g_pPhys2World;
      piVar14[6] = 0;
      piVar14[4] = 0x15 - (uint)(iVar15 == 0);
      piVar14[5] = 0;
      uVar7 = *(undefined4 *)(param_1 + 0x8a8);
      piVar14[2] = (int)local_7c;
      piVar14[3] = uVar7;
      uVar7 = *(undefined4 *)(*(int *)(*(int *)(param_1 + 0x8a4) + 8) + iVar1);
      *piVar14 = (int)g_pPhys2World;
      piVar14[1] = uVar7;
      pcVar5 = *(code **)(iVar4 + 0x54);
      piVar14[-1] = 0x4a13de;
      piVar8 = (int *)(*pcVar5)();
      if (piVar8 == (int *)0x0) {
        uVar7 = *(undefined4 *)(*(int *)(*(int *)(param_1 + 0x8a4) + 0x20) + iVar1);
        *piVar14 = (int)"Ragdoll2: Cannot create body part %s\n";
        piVar14[1] = uVar7;
        piVar14[-1] = 0x4a140a;
        Warning();
      }
      else {
        iVar4 = *piVar8;
        sVar3 = local_a4[1];
        *piVar14 = (int)piVar8;
        piVar14[1] = (int)sVar3;
        pcVar5 = *(code **)(iVar4 + 0x8c);
        piVar14[-1] = 0x4a11b9;
        (*pcVar5)();
        iVar4 = *piVar8;
        piVar14[1] = 8;
        *piVar14 = (int)piVar8;
        pcVar5 = *(code **)(iVar4 + 0x58);
        piVar14[-1] = 0x4a11c9;
        (*pcVar5)();
        iVar4 = *piVar8;
        uVar7 = *param_2;
        *piVar14 = (int)piVar8;
        piVar14[1] = uVar7;
        pcVar5 = *(code **)(iVar4 + 0xc);
        piVar14[-1] = 0x4a11da;
        (*pcVar5)();
        iVar4 = *piVar8;
        uVar7 = *(undefined4 *)(*(int *)(*(int *)(param_1 + 0x8a4) + 0x20) + iVar1);
        piVar14[1] = (int)"ragdoll%d %s";
        *piVar14 = (int)piVar8;
        piVar14[3] = uVar7;
        piVar14[2] = s_globalCount;
        pcVar5 = *(code **)(iVar4 + 0x3c);
        piVar14[-1] = 0x4a120a;
        (*pcVar5)();
        fVar2 = *(float *)(param_3 + 4 + iVar12 * 0x38);
        iVar12 = *piVar8;
        *piVar14 = (int)piVar8;
        piVar14[1] = (int)SQRT(fVar2);
        pcVar5 = *(code **)(iVar12 + 0x80);
        piVar14[-1] = 0x4a1232;
        (*pcVar5)();
        iVar12 = (int)*(char *)(*(int *)(param_1 + 0x8a4) + 0x40);
        if (iVar12 < 0) {
          iVar12 = 1;
        }
        iVar1 = *piVar8;
        *piVar14 = (int)piVar8;
        piVar14[1] = iVar12;
        pcVar5 = *(code **)(iVar1 + 0x98);
        piVar14[-1] = 0x4a1255;
        (*pcVar5)();
        if (s_pRecorder != (int *)0x0) {
          iVar12 = *s_pRecorder;
          piVar14[1] = (int)piVar8;
          *piVar14 = (int)s_pRecorder;
          pcVar5 = *(code **)(iVar12 + 8);
          piVar14[-1] = 0x4a126a;
          (*pcVar5)();
        }
        *(int **)(iVar9 + 0x10) = piVar8;
        iVar12 = *piVar8;
        *piVar14 = (int)piVar8;
        pcVar5 = *(code **)(iVar12 + 0x60);
        piVar14[-1] = 0x4a1275;
        uVar7 = (*pcVar5)();
        *(undefined4 *)(iVar9 + 0xc) = uVar7;
      }
    }
    local_a0 = local_a0 + 1;
    iVar9 = iVar9 + 0x54;
    local_a4 = local_a4 + 4;
    local_b8 = local_b0;
  } while (local_a0 < local_b0);
LAB_004a1420:
  *(uint *)(param_1 + 8) = local_b8;
  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)