DebugDrawContactPoints
0x0077d9a0 · 662 bytes · __cdecl
_Z22DebugDrawContactPointsP14IPhysicsObject
Decompiled
undefined (1 param)
/* DebugDrawContactPoints(IPhysicsObject*) */
void DebugDrawContactPoints(IPhysicsObject *param_1)
{
undefined1 *puVar1;
int iVar2;
code *pcVar3;
char cVar4;
int *piVar5;
int *piVar6;
undefined1 *puVar7;
undefined1 *puVar8;
IPhysicsObject **ppIVar9;
int in_GS_OFFSET;
longdouble lVar10;
int aiStack_1a4 [2];
IPhysicsObject *local_19c;
int local_198;
float local_194;
int local_190 [2];
int iStack_188;
float local_184 [5];
IPhysicsObject *local_170;
double local_16c;
float local_164;
undefined1 *local_160;
float local_15c;
float local_158;
float local_154;
float local_150;
float local_14c;
float local_148;
undefined4 local_144;
undefined4 local_140;
undefined4 local_13c;
float local_138;
float local_134;
float local_130;
undefined1 local_12c [5];
undefined1 local_127 [263];
int local_20;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
local_170 = param_1;
local_19c = param_1;
piVar5 = (int *)(**(code **)(*(int *)param_1 + 0x144))();
ppIVar9 = &local_19c;
while( true ) {
iVar2 = *piVar5;
*ppIVar9 = (IPhysicsObject *)piVar5;
pcVar3 = *(code **)(iVar2 + 8);
ppIVar9[-1] = (IPhysicsObject *)0x77dbf5;
cVar4 = (*pcVar3)();
iVar2 = *piVar5;
if (cVar4 == '\0') break;
ppIVar9[1] = (IPhysicsObject *)&local_15c;
*ppIVar9 = (IPhysicsObject *)piVar5;
pcVar3 = *(code **)(iVar2 + 0x14);
ppIVar9[-1] = (IPhysicsObject *)0x77d9f0;
(*pcVar3)();
iVar2 = *piVar5;
ppIVar9[1] = (IPhysicsObject *)&local_150;
*ppIVar9 = (IPhysicsObject *)piVar5;
pcVar3 = *(code **)(iVar2 + 0x18);
ppIVar9[-1] = (IPhysicsObject *)0x77da02;
(*pcVar3)();
ppIVar9[2] = (IPhysicsObject *)&local_138;
ppIVar9[1] = (IPhysicsObject *)&local_144;
ppIVar9[7] = (IPhysicsObject *)0x0;
ppIVar9[6] = (IPhysicsObject *)0x20;
ppIVar9[5] = (IPhysicsObject *)0x0;
ppIVar9[4] = (IPhysicsObject *)0xff;
ppIVar9[3] = (IPhysicsObject *)0x0;
*ppIVar9 = (IPhysicsObject *)&local_15c;
local_138 = 1.0;
local_134 = 1.0;
local_130 = 1.0;
local_144 = 0xbf800000;
local_140 = 0xbf800000;
local_13c = 0xbf800000;
ppIVar9[-1] = (IPhysicsObject *)0x77da7c;
NDebugOverlay::Box((Vector *)*ppIVar9,(Vector *)ppIVar9[1],(Vector *)ppIVar9[2],(int)ppIVar9[3],
(int)ppIVar9[4],(int)ppIVar9[5],(int)ppIVar9[6],(float)ppIVar9[7]);
*ppIVar9 = (IPhysicsObject *)&local_15c;
ppIVar9[1] = (IPhysicsObject *)&local_138;
ppIVar9[6] = (IPhysicsObject *)0x0;
ppIVar9[5] = (IPhysicsObject *)0x0;
ppIVar9[4] = (IPhysicsObject *)0x0;
ppIVar9[3] = (IPhysicsObject *)0xff;
ppIVar9[2] = (IPhysicsObject *)0x0;
local_138 = local_15c - local_150 * 20.0;
local_134 = local_158 - local_14c * 20.0;
local_130 = local_154 - local_148 * 20.0;
ppIVar9[-1] = (IPhysicsObject *)0x77db14;
NDebugOverlay::Line((Vector *)*ppIVar9,(Vector *)ppIVar9[1],(int)ppIVar9[2],(int)ppIVar9[3],
(int)ppIVar9[4],SUB41(ppIVar9[5],0),(float)ppIVar9[6]);
iVar2 = *piVar5;
ppIVar9[1] = (IPhysicsObject *)0x1;
*ppIVar9 = (IPhysicsObject *)piVar5;
pcVar3 = *(code **)(iVar2 + 0xc);
ppIVar9[-1] = (IPhysicsObject *)0x77db24;
piVar6 = (int *)(*pcVar3)();
iVar2 = *piVar6;
*ppIVar9 = (IPhysicsObject *)piVar6;
pcVar3 = *(code **)(iVar2 + 0x48);
ppIVar9[-1] = (IPhysicsObject *)0x77db2c;
piVar6 = (int *)(*pcVar3)();
iVar2 = *piVar5;
*ppIVar9 = (IPhysicsObject *)piVar5;
pcVar3 = *(code **)(iVar2 + 0x38);
ppIVar9[-1] = (IPhysicsObject *)0x77db36;
lVar10 = (longdouble)(*pcVar3)();
*ppIVar9 = (IPhysicsObject *)piVar6;
local_164 = (float)lVar10;
local_16c = (double)local_164;
ppIVar9[-1] = (IPhysicsObject *)0x77db5a;
local_164 = (float)CBaseEntity::GetDebugName((CBaseEntity *)*ppIVar9);
iVar2 = *piVar6;
ppIVar9[1] = (IPhysicsObject *)piVar6;
*ppIVar9 = (IPhysicsObject *)&local_160;
pcVar3 = *(code **)(iVar2 + 0x20);
ppIVar9[-1] = (IPhysicsObject *)0x77db72;
(*pcVar3)();
puVar1 = (undefined1 *)piVar6[0x1f];
*ppIVar9 = (IPhysicsObject *)"%s (%s): %s [%0.2f]";
puVar7 = local_160;
if (local_160 == (undefined1 *)0x0) {
puVar7 = &DAT_00d539c2;
}
*(double *)(ppIVar9 + 4) = local_16c;
puVar8 = &DAT_00d539c2;
if (puVar1 != (undefined1 *)0x0) {
puVar8 = puVar1;
}
ppIVar9[3] = (IPhysicsObject *)local_164;
ppIVar9[2] = (IPhysicsObject *)puVar7;
ppIVar9[1] = (IPhysicsObject *)puVar8;
ppIVar9[-1] = (IPhysicsObject *)local_12c;
ppIVar9[-2] = (IPhysicsObject *)0x77dbc3;
CFmtStrN<256>::CFmtStrN((CFmtStrN<256> *)ppIVar9[-1],(char *)*ppIVar9);
ppIVar9[-1] = (IPhysicsObject *)&local_15c;
*ppIVar9 = (IPhysicsObject *)local_127;
ppIVar9[2] = (IPhysicsObject *)0x0;
ppIVar9[1] = (IPhysicsObject *)0x0;
ppIVar9[-2] = (IPhysicsObject *)0x77dbe5;
NDebugOverlay::Text((Vector *)ppIVar9[-1],(char *)*ppIVar9,SUB41(ppIVar9[1],0),(float)ppIVar9[2]
);
iVar2 = *piVar5;
ppIVar9[-1] = (IPhysicsObject *)piVar5;
pcVar3 = *(code **)(iVar2 + 0x34);
ppIVar9[-2] = (IPhysicsObject *)0x77dbed;
(*pcVar3)();
ppIVar9 = ppIVar9 + -1;
}
ppIVar9[1] = (IPhysicsObject *)0x1;
*ppIVar9 = (IPhysicsObject *)piVar5;
pcVar3 = *(code **)(iVar2 + 0x30);
ppIVar9[-1] = (IPhysicsObject *)0x77dc0d;
(*pcVar3)();
iVar2 = *(int *)local_170;
ppIVar9[1] = (IPhysicsObject *)piVar5;
*ppIVar9 = local_170;
pcVar3 = *(code **)(iVar2 + 0x148);
ppIVar9[-1] = (IPhysicsObject *)0x77dc22;
(*pcVar3)();
if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
return;
}
/* WARNING: Subroutine does not return */
ppIVar9[-1] = (IPhysicsObject *)&UNK_0077dc3b;
__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.