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 intoaddons/sourcemod/gamedata/<your_plugin>.txt
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.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.