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 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.