CPhysConvert::InputConvertTarget
0x007a00c0 · 1120 bytes · __thiscall
_ZN12CPhysConvert18InputConvertTargetER11inputdata_t
Decompiled
undefined (2 params)
/* WARNING: Type propagation algorithm not settling */
/* CPhysConvert::InputConvertTarget(inputdata_t&) */
void __thiscall CPhysConvert::InputConvertTarget(CPhysConvert *this,inputdata_t *param_1)
{
uint uVar1;
int *piVar2;
code *pcVar3;
code *pcVar4;
int *piVar5;
char cVar6;
int *piVar7;
CBaseEntity *pCVar8;
undefined1 *puVar9;
float fVar10;
int iVar11;
int *piVar12;
undefined1 *puVar13;
char *pcVar14;
float *pfVar15;
float *pfVar16;
float fVar17;
int iVar18;
int local_828;
undefined1 *local_820 [516];
pfVar15 = (float *)&stack0xfffff7a4;
uVar1 = *(uint *)(this + 0x148);
fVar17 = (float)(uVar1 & 1);
COutputEvent::FireOutput
((COutputEvent *)(this + 0x440),*(CBaseEntity **)param_1,(CBaseEntity *)this,0.0);
pcVar14 = "";
if (*(char **)(this + 0x458) != (char *)0x0) {
pcVar14 = *(char **)(this + 0x458);
}
iVar18 = 0;
piVar7 = (int *)CGlobalEntityList::FindEntityByName
((CGlobalEntityList *)gEntList,(CBaseEntity *)0x0,pcVar14,
(CBaseEntity *)0x0,*(CBaseEntity **)param_1,
*(CBaseEntity **)(param_1 + 4),(IEntityFindFilter *)0x0);
pCVar8 = (CBaseEntity *)0x0;
do {
pcVar14 = *(char **)(this + 0xf8);
if (pcVar14 == (char *)0x0) {
pcVar14 = "";
}
pCVar8 = (CBaseEntity *)
CGlobalEntityList::FindEntityByName
((CGlobalEntityList *)gEntList,pCVar8,pcVar14,(CBaseEntity *)0x0,
*(CBaseEntity **)param_1,*(CBaseEntity **)(param_1 + 4),
(IEntityFindFilter *)0x0);
if (pCVar8 == (CBaseEntity *)0x0) {
if ((piVar7 == (int *)0x0) || (iVar18 < 1)) {
local_828 = iVar18;
if (iVar18 == 0) {
return;
}
}
else {
local_828 = 1;
}
goto LAB_007a0210;
}
iVar18 = iVar18 + 1;
local_820[iVar18] = pCVar8;
} while (iVar18 != 0x200);
local_828 = 1;
if (piVar7 == (int *)0x0) {
local_828 = iVar18;
}
LAB_007a0210:
iVar18 = 0;
do {
while (piVar2 = (int *)local_820[iVar18 + 1], *(char *)((int)piVar2 + 0x186) == '\x06') {
puVar13 = (undefined1 *)piVar2[0x1f];
*pfVar15 = (float)"ERROR phys_convert %s ! Already MOVETYPE_VPHYSICS\n";
puVar9 = &DAT_00d539c2;
if (puVar13 != (undefined1 *)0x0) {
puVar9 = puVar13;
}
iVar18 = iVar18 + 1;
pfVar15[1] = (float)puVar9;
pfVar15[-1] = 1.120476e-38;
Msg();
if (local_828 <= iVar18) {
return;
}
}
*pfVar15 = (float)piVar2;
pfVar15[-1] = 1.1204813e-38;
UnlinkFromParent((CBaseEntity *)*pfVar15);
pfVar16 = pfVar15;
if (piVar7 != (int *)0x0) {
iVar11 = *piVar2;
*pfVar15 = (float)piVar2;
pcVar3 = *(code **)(iVar11 + 0x298);
pfVar15[-1] = 1.1204841e-38;
(*pcVar3)();
pcVar3 = *(code **)(*piVar2 + 0x70);
iVar11 = *piVar7;
pfVar15[1] = (float)piVar7;
*pfVar15 = (float)local_820;
pcVar4 = *(code **)(iVar11 + 0x20);
pfVar15[-1] = 1.1204882e-38;
(*pcVar4)();
pfVar16 = pfVar15 + -1;
pfVar15[-1] = (float)piVar2;
puVar13 = &DAT_00d539c2;
if (local_820[0] != (undefined1 *)0x0) {
puVar13 = local_820[0];
}
*pfVar15 = (float)puVar13;
pfVar15[-2] = 1.1204921e-38;
(*pcVar3)();
}
iVar11 = *piVar2;
*pfVar16 = (float)piVar2;
pcVar3 = *(code **)(iVar11 + 0x1c);
pfVar16[-1] = 1.1204932e-38;
fVar10 = (float)(*pcVar3)();
iVar11 = *modelinfo;
pfVar16[1] = fVar10;
*pfVar16 = (float)modelinfo;
pcVar3 = *(code **)(iVar11 + 8);
pfVar16[-1] = 1.1204958e-38;
fVar10 = (float)(*pcVar3)();
if (fVar10 == 0.0) {
LAB_007a02fc:
pfVar16[2] = 1.4013e-45;
pfVar16[1] = -NAN;
*pfVar16 = (float)"simple_physics_prop";
pfVar16[-1] = 1.120504e-38;
piVar12 = (int *)CreateEntityByName((char *)*pfVar16,(int)pfVar16[1],*(bool *)(pfVar16 + 2));
}
else {
iVar11 = *modelinfo;
pfVar16[1] = fVar10;
*pfVar16 = (float)modelinfo;
pcVar3 = *(code **)(iVar11 + 0x2c);
pfVar16[-1] = 1.1204989e-38;
iVar11 = (*pcVar3)();
if (iVar11 != 1) goto LAB_007a02fc;
pfVar16[2] = 1.4013e-45;
pfVar16[1] = -NAN;
*pfVar16 = (float)"simple_physics_brush";
pfVar16[-1] = 1.1205741e-38;
piVar12 = (int *)CreateEntityByName((char *)*pfVar16,(int)pfVar16[1],*(bool *)(pfVar16 + 2));
}
pcVar3 = *(code **)(*piVar12 + 0x84);
iVar11 = *piVar2;
pfVar16[1] = (float)piVar2;
*pfVar16 = (float)local_820;
pcVar4 = *(code **)(iVar11 + 0x20);
pfVar16[-1] = 1.1205088e-38;
(*pcVar4)();
pfVar15 = pfVar16 + -1;
*pfVar16 = (float)"model";
pfVar16[-1] = (float)piVar12;
puVar13 = &DAT_00d539c2;
if (local_820[0] != (undefined1 *)0x0) {
puVar13 = local_820[0];
}
pfVar16[1] = (float)puVar13;
pfVar16[-2] = 1.1205147e-38;
(*pcVar3)();
if ((*(byte *)((int)piVar2 + 0x14d) & 8) != 0) {
pfVar16[-1] = (float)piVar2;
pfVar16[-2] = 1.120569e-38;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)pfVar16[-1]);
}
pfVar16[-1] = (float)piVar12;
*pfVar16 = (float)(piVar2 + 0xb8);
pfVar16[-2] = 1.120519e-38;
CBaseEntity::SetAbsOrigin((CBaseEntity *)pfVar16[-1],(Vector *)*pfVar16);
if ((*(byte *)((int)piVar2 + 0x14d) & 8) != 0) {
pfVar16[-1] = (float)piVar2;
pfVar16[-2] = 1.1205668e-38;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)pfVar16[-1]);
}
pfVar16[-1] = (float)piVar12;
*pfVar16 = (float)(piVar2 + 0xdf);
pfVar16[-2] = 1.1205234e-38;
CBaseEntity::SetAbsAngles((CBaseEntity *)pfVar16[-1],(QAngle *)*pfVar16);
iVar11 = *piVar12;
pfVar16[-1] = (float)piVar12;
pcVar3 = *(code **)(iVar11 + 100);
pfVar16[-2] = 1.1205245e-38;
(*pcVar3)();
*pfVar16 = (float)piVar12;
pfVar16[-1] = (float)piVar2;
pfVar16[1] = (float)(uint)(byte)(SUB41(fVar17,0) ^ 1);
pfVar16[-2] = 1.1205276e-38;
cVar6 = TransferPhysicsObject
((CBaseEntity *)pfVar16[-1],(CBaseEntity *)*pfVar16,*(bool *)(pfVar16 + 1));
if (cVar6 == '\0') {
pfVar16[3] = 0.0;
pfVar16[1] = 5.73972e-42;
*pfVar16 = 8.40779e-45;
pfVar16[-1] = (float)piVar12;
pfVar16[2] = fVar17;
pfVar16[-2] = 1.1205604e-38;
CBaseEntity::VPhysicsInitNormal();
if ((uVar1 & 2) != 0) {
*pfVar16 = 1.4013e-45;
pfVar16[-1] = (float)piVar12;
pfVar16[-2] = 1.1205646e-38;
CBaseEntity::SetCollisionGroup((CBaseEntity *)pfVar16[-1],(int)*pfVar16);
}
}
if ((0.0 < *(float *)(this + 0x45c)) && (piVar5 = (int *)piVar12[0x8e], piVar5 != (int *)0x0)) {
iVar11 = *piVar5;
*pfVar16 = *(float *)(this + 0x45c);
pfVar16[-1] = (float)piVar5;
pcVar3 = *(code **)(iVar11 + 0x74);
pfVar16[-2] = 1.1205349e-38;
(*pcVar3)();
}
iVar18 = iVar18 + 1;
piVar12[0x55] = piVar2[0x55];
*pfVar16 = (float)piVar12;
pfVar16[-1] = (float)piVar2;
pfVar16[-2] = 1.1205386e-38;
UTIL_TransferPoseParameters((CBaseEntity *)pfVar16[-1],(CBaseEntity *)*pfVar16);
*pfVar16 = (float)piVar12;
pfVar16[-1] = (float)piVar2;
pfVar16[-2] = 1.1205403e-38;
TransferChildren((CBaseEntity *)pfVar16[-1],(CBaseEntity *)*pfVar16);
*pfVar16 = (float)(uint)(*(ushort *)(piVar2 + 0x6d) | 4);
pfVar16[-1] = (float)(piVar2 + 0x65);
pfVar16[-2] = 1.1205447e-38;
CCollisionProperty::SetSolidFlags((CCollisionProperty *)pfVar16[-1],(int)*pfVar16);
*pfVar16 = 4.48416e-44;
pfVar16[-1] = (float)piVar2;
pfVar16[-2] = 1.1205469e-38;
CBaseEntity::AddEffects((CBaseEntity *)pfVar16[-1],(int)*pfVar16);
pfVar16[-1] = (float)piVar2;
pfVar16[-2] = 1.120548e-38;
UTIL_Remove((CBaseEntity *)pfVar16[-1]);
if (local_828 <= iVar18) {
return;
}
} while( true );
}
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.