CRagdollProp::InitRagdoll
0x00798dd0 · 1891 bytes · __thiscall
_ZN12CRagdollProp11InitRagdollERK6VectoriS2_P11matrix3x4_tS4_fibb
Decompiled
undefined (10 params)
/* CRagdollProp::InitRagdoll(Vector const&, int, Vector const&, matrix3x4_t*, matrix3x4_t*, float,
int, bool, bool) */
void __thiscall
CRagdollProp::InitRagdoll
(CRagdollProp *this,Vector *param_1,int param_2,Vector *param_3,matrix3x4_t *param_4,
matrix3x4_t *param_5,float param_6,int param_7,bool param_8,bool param_9)
{
ragdoll_t *prVar1;
float fVar2;
int *piVar3;
code *pcVar4;
code *pcVar5;
int iVar6;
undefined4 uVar7;
long lVar8;
undefined4 uVar9;
matrix3x4_t *pmVar10;
int iVar11;
int *piVar12;
undefined1 *puVar13;
CRagdollProp *pCVar14;
int *piVar15;
CRagdollProp *pCVar16;
int in_GS_OFFSET;
double dVar17;
double dVar18;
int aiStack_9f4 [2];
undefined1 *local_9a8;
undefined1 local_9a4 [20];
undefined1 local_990 [12];
undefined4 local_984;
undefined4 local_980;
undefined4 local_97c;
undefined4 local_974;
undefined4 local_970;
undefined4 local_96c;
CRagdollProp *local_964;
int local_960;
int *local_95c;
undefined4 local_958;
undefined4 local_954;
undefined4 local_950;
undefined4 local_94c;
undefined4 local_948;
undefined4 local_944;
undefined4 local_940;
int local_93c;
matrix3x4_t *local_938;
undefined4 local_934;
byte local_930;
undefined1 local_92c [5];
undefined1 local_927 [263];
char local_820 [2048];
int local_20;
piVar15 = (int *)&stack0xfffff614;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
CBaseEntity::SetCollisionGroup((CBaseEntity *)this,param_7);
if (param_7 == 3) {
CBaseEntity::ThinkSet((_func_void *)local_9a4,(float)this,(char *)SetDebrisThink);
}
CBaseEntity::SetMoveType();
CCollisionProperty::SetSolid();
CCollisionProperty::SetSolidFlags
((CCollisionProperty *)(this + 0x194),(uint)(*(ushort *)(this + 0x1b4) | 3));
if (this[0x105] != (CRagdollProp)0x1) {
(**(code **)(*(int *)this + 0x224))();
this[0x105] = (CRagdollProp)0x1;
}
local_964 = this;
local_958 = (**(code **)(*(int *)this + 0x1c))();
local_960 = (**(code **)(*modelinfo + 0x18))();
piVar12 = *(int **)(this + 0x13e0);
if (piVar12 == (int *)0x0) {
iVar6 = CBaseEntity::GetModel((CBaseEntity *)this);
if (iVar6 == 0) {
piVar12 = *(int **)(this + 0x13e0);
}
else {
CBaseAnimating::LockStudioHdr((CBaseAnimating *)this);
piVar12 = *(int **)(this + 0x13e0);
}
local_95c = (int *)0x0;
if (piVar12 == (int *)0x0) goto LAB_00798ee8;
}
local_95c = (int *)0x0;
if (*piVar12 != 0) {
local_95c = piVar12;
}
LAB_00798ee8:
local_934 = 0x3f800000;
local_948 = *(undefined4 *)param_1;
local_944 = *(undefined4 *)(param_1 + 4);
local_93c = param_2;
local_940 = *(undefined4 *)(param_1 + 8);
local_954 = *(undefined4 *)param_3;
local_930 = (byte)(*(uint *)(this + 0x148) >> 0xf) & 1;
local_950 = *(undefined4 *)(param_3 + 4);
prVar1 = (ragdoll_t *)(this + 0x13f8);
local_94c = *(undefined4 *)(param_3 + 8);
local_938 = param_5;
RagdollCreate(prVar1,(ragdollparams_t *)&local_964,physenv);
RagdollApplyAnimationAsVelocity(prVar1,param_4,param_5,param_6);
piVar12 = (int *)&stack0xfffff614;
if ((*(char **)(this + 0x1ea0) != (char *)0x0) &&
(iVar6 = _V_strlen(*(char **)(this + 0x1ea0)), piVar12 = (int *)&stack0xfffff614, 0 < iVar6)) {
while( true ) {
piVar15[1] = 0x800;
*piVar15 = (int)local_820;
piVar15[-1] = 0x7990bb;
iVar6 = nexttoken((char *)*piVar15,piVar15[1],(char *)piVar15[2],(char)piVar15[3]);
piVar12 = piVar15;
if (local_820[0] == '\0') break;
piVar15[2] = 10;
piVar15[1] = 0;
*piVar15 = (int)local_820;
piVar15[-1] = 0x7990e8;
lVar8 = strtol((char *)*piVar15,(char **)piVar15[1],piVar15[2]);
piVar15[2] = iVar6;
piVar15[3] = 0x2c;
piVar15[1] = 0x800;
*piVar15 = (int)local_820;
piVar15[-1] = 0x79910c;
uVar9 = nexttoken((char *)*piVar15,piVar15[1],(char *)piVar15[2],(char)piVar15[3]);
if (lVar8 < *(int *)(this + 0x13f8)) {
if (local_820[0] != '\0') {
*piVar15 = (int)local_990;
piVar15[1] = (int)local_820;
piVar15[-1] = 0x799145;
UTIL_StringToVector((float *)*piVar15,(char *)piVar15[1]);
iVar6 = *(int *)(this + lVar8 * 4 + 0x1be4);
*piVar15 = (int)local_990;
pmVar10 = param_5 + iVar6 * 0x30;
piVar15[1] = (int)pmVar10;
piVar15[-1] = 0x799170;
AngleMatrix((QAngle *)*piVar15,(matrix3x4_t *)piVar15[1]);
pCVar16 = this + lVar8 * 0x54 + 0x1404;
iVar6 = *(int *)(pCVar16 + 0x1c);
if (iVar6 < 0) {
if (((byte)this[0x14d] & 8) != 0) {
*piVar15 = (int)this;
piVar15[-1] = 0x799510;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar15);
}
local_984 = *(undefined4 *)(this + 0x2e0);
local_980 = *(undefined4 *)(this + 0x2e4);
local_97c = *(undefined4 *)(this + 0x2e8);
}
else {
piVar15[2] = (int)&local_984;
iVar6 = *(int *)(this + iVar6 * 4 + 0x1be4);
*piVar15 = (int)pCVar16;
piVar15[1] = (int)(param_5 + iVar6 * 0x30);
piVar15[-1] = 0x7991b9;
VectorTransform((float *)*piVar15,(matrix3x4_t *)piVar15[1],(float *)piVar15[2]);
}
*piVar15 = (int)&local_984;
piVar15[1] = 3;
piVar15[2] = (int)pmVar10;
piVar15[-1] = 0x7991d9;
MatrixSetColumn((Vector *)*piVar15,piVar15[1],(matrix3x4_t *)piVar15[2]);
piVar3 = *(int **)(pCVar16 + 0xc);
iVar6 = *piVar3;
piVar15[2] = 1;
piVar15[1] = (int)pmVar10;
*piVar15 = (int)piVar3;
pcVar4 = *(code **)(iVar6 + 0xc0);
piVar15[-1] = 0x7991f9;
(*pcVar4)();
}
}
else {
if (((byte)this[0x14d] & 8) == 0) {
dVar18 = (double)*(float *)(this + 0x2e8);
LAB_00799010:
dVar17 = (double)*(float *)(this + 0x2e4);
}
else {
*piVar15 = (int)this;
piVar15[-1] = 0x7993c0;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar15);
dVar18 = (double)*(float *)(this + 0x2e8);
if (((byte)this[0x14d] & 8) == 0) goto LAB_00799010;
*piVar15 = (int)this;
piVar15[-1] = 0x7993e8;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar15);
dVar17 = (double)*(float *)(this + 0x2e4);
if (((byte)this[0x14d] & 8) != 0) {
*piVar15 = (int)this;
piVar15[-1] = 0x799420;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar15);
}
}
*(double *)(piVar15 + 6) = dVar18;
*(double *)(piVar15 + 4) = dVar17;
fVar2 = *(float *)(this + 0x2e0);
*piVar15 = (int)local_92c;
piVar15[1] = (int)"(%f, %f, %f)";
*(double *)(piVar15 + 2) = (double)fVar2;
piVar15[-1] = 0x799053;
CFmtStrN<256>::CFmtStrN((CFmtStrN<256> *)*piVar15,(char *)piVar15[1]);
iVar6 = *(int *)this;
*piVar15 = (int)&local_9a8;
piVar15[1] = (int)this;
pcVar4 = *(code **)(iVar6 + 0x20);
piVar15[-1] = 0x799065;
(*pcVar4)();
piVar12 = piVar15 + -1;
piVar15[-1] = (int)this;
puVar13 = &DAT_00d539c2;
if (local_9a8 != (undefined1 *)0x0) {
puVar13 = local_9a8;
}
piVar15[-2] = 0x79907b;
uVar7 = CBaseEntity::GetDebugName((CBaseEntity *)piVar15[-1]);
piVar15[-1] = (int)"Bad ragdoll pose in entity %s, model (%s) at %s, model changed?\n";
piVar15[1] = (int)puVar13;
piVar15[2] = (int)local_927;
*piVar15 = uVar7;
piVar15[-2] = 0x799099;
Warning();
}
*(undefined4 *)((int)piVar12 + 0xc) = 0x2c;
*(undefined4 *)((int)piVar12 + 8) = uVar9;
piVar15 = piVar12;
}
}
if (param_8) {
iVar6 = *(int *)this;
*piVar12 = (int)this;
pcVar4 = *(code **)(iVar6 + 0x1c);
piVar12[-1] = 0x799488;
iVar6 = (*pcVar4)();
piVar12[3] = 0;
piVar12[2] = iVar6;
iVar6 = local_960;
piVar12[4] = (uint)param_9;
piVar12[1] = iVar6;
*piVar12 = (int)prVar1;
piVar12[-1] = 0x7994b7;
RagdollActivate((ragdoll_t *)*piVar12,(vcollide_t *)piVar12[1],piVar12[2],
(CCallQueue *)piVar12[3],SUB41(piVar12[4],0));
}
pCVar16 = this + 0x1410;
iVar6 = 0;
pCVar14 = this + 0x1edc;
if (0 < *(int *)(this + 0x13f8)) {
do {
iVar11 = *(int *)pCVar16;
if (iVar11 != 0) {
piVar12[2] = iVar6;
piVar12[1] = iVar11;
*piVar12 = (int)this;
piVar12[-1] = 0x7992d5;
UpdateNetworkDataFromVPhysics
((CRagdollProp *)*piVar12,(IPhysicsObject *)piVar12[1],piVar12[2]);
pcVar4 = *(code **)(*g_pPhysSaveRestoreManager + 4);
iVar11 = *(int *)this;
*piVar12 = (int)this;
pcVar5 = *(code **)(iVar11 + 0x1c);
piVar12[-1] = 0x7992ed;
iVar11 = (*pcVar5)();
piVar12[2] = iVar11;
piVar12[1] = *(int *)pCVar16;
*piVar12 = (int)g_pPhysSaveRestoreManager;
piVar12[-1] = 0x799307;
(*pcVar4)();
piVar15 = *(int **)(pCVar16 + 4);
if (piVar15 == (int *)0x0) {
pcVar4 = *(code **)(*physcollision + 0x60);
iVar11 = **(int **)pCVar16;
*piVar12 = (int)*(int **)pCVar16;
pcVar5 = *(code **)(iVar11 + 300);
piVar12[-1] = 0x79933b;
iVar11 = (*pcVar5)();
piVar12[5] = (int)&vec3_angle;
piVar12[3] = iVar11;
piVar12[2] = (int)(pCVar14 + 0x120);
piVar12[4] = (int)&vec3_origin;
piVar12[1] = (int)pCVar14;
*piVar12 = (int)physcollision;
piVar12[-1] = 0x79936d;
(*pcVar4)();
}
else {
iVar11 = *piVar15;
piVar12[1] = (int)&local_984;
*piVar12 = (int)piVar15;
pcVar4 = *(code **)(iVar11 + 0x4c);
piVar12[-1] = 0x799248;
(*pcVar4)();
*(undefined4 *)pCVar14 = local_984;
*(undefined4 *)(pCVar14 + 4) = local_980;
*(undefined4 *)(pCVar14 + 8) = local_97c;
*(undefined4 *)(pCVar14 + 0x120) = local_974;
*(undefined4 *)(pCVar14 + 0x124) = local_970;
*(undefined4 *)(pCVar14 + 0x128) = local_96c;
}
}
iVar6 = iVar6 + 1;
pCVar16 = pCVar16 + 0x54;
pCVar14 = pCVar14 + 0xc;
} while (iVar6 < *(int *)(this + 0x13f8));
}
iVar6 = *(int *)(this + 0x1410);
*piVar12 = (int)this;
piVar12[1] = iVar6;
piVar12[-1] = 0x799392;
CBaseEntity::VPhysicsSetObject((CBaseEntity *)*piVar12,(IPhysicsObject *)piVar12[1]);
*piVar12 = (int)this;
piVar12[-1] = 0x79939a;
CalcRagdollSize((CRagdollProp *)*piVar12);
if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
return;
}
/* WARNING: Subroutine does not return */
piVar12[-1] = (int)&UNK_0079954c;
__stack_chk_fail();
}
SourceMod gamedata
paste intoaddons/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.
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.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.