OutputVPhysicsDebugInfo
0x0077f2d0 · 471 bytes · __cdecl
_ZL23OutputVPhysicsDebugInfoP11CBaseEntity
Decompiled
undefined (1 param)
/* OutputVPhysicsDebugInfo(CBaseEntity*) */
void OutputVPhysicsDebugInfo(CBaseEntity *param_1)
{
int *piVar1;
code *pcVar2;
int iVar3;
undefined4 uVar4;
int iVar5;
int iVar6;
int *piVar8;
int *piVar9;
undefined1 *puVar10;
int aiStackY_1064 [2];
undefined1 *local_1040 [4];
int local_1030 [5];
int *local_101c [1027];
int iVar7;
piVar8 = (int *)&stack0xffffefa4;
piVar9 = (int *)&stack0xffffefa4;
if (param_1 != (CBaseEntity *)0x0) {
CBaseEntity::GetDebugName(param_1);
Msg();
local_1030[0] = 0;
local_1030[1] = 0;
local_1030[2] = 0;
local_1030[3] = 0;
local_1030[4] = 0;
/* try { // try from 0077f38a to 0077f4a4 has its CatchHandler @ 0077f4a7 */
CCollisionEvent::GetListOfPenetratingEntities
((CCollisionEvent *)g_Collisions,param_1,(CUtlVector *)local_1030);
iVar5 = 0;
if (0 < local_1030[3]) {
do {
piVar1 = *(int **)(local_1030[0] + iVar5 * 4);
iVar7 = *piVar1;
piVar8[1] = (int)piVar1;
*piVar8 = (int)local_1040;
pcVar2 = *(code **)(iVar7 + 0x20);
piVar8[-1] = 0x77f3bd;
(*pcVar2)();
piVar9 = piVar8 + -1;
puVar10 = local_1040[0];
if (local_1040[0] == (undefined1 *)0x0) {
puVar10 = &DAT_00d539c2;
}
piVar8[-1] = *(undefined4 *)(local_1030[0] + iVar5 * 4);
piVar8[-2] = 0x77f3e1;
uVar4 = CBaseEntity::GetDebugName((CBaseEntity *)piVar8[-1]);
piVar8[1] = (int)puVar10;
*piVar8 = uVar4;
piVar8[-1] = (int)" penetration with entity %s (%s)\n";
piVar8[-2] = 0x77f3f5;
Msg();
iVar5 = iVar5 + 1;
piVar8 = piVar8 + -1;
} while (iVar5 < local_1030[3]);
}
iVar5 = *(int *)param_1;
piVar9[2] = 0x400;
piVar9[1] = (int)local_101c;
*piVar9 = (int)param_1;
pcVar2 = *(code **)(iVar5 + 0x2b8);
piVar9[-1] = 0x77f423;
iVar5 = (*pcVar2)();
if (iVar5 != 0) {
if (iVar5 < 2) {
iVar5 = *local_101c[0];
*piVar9 = (int)local_101c[0];
pcVar2 = *(code **)(iVar5 + 0x14c);
piVar9[-1] = 0x77f4a5;
(*pcVar2)();
}
else {
iVar7 = 0;
do {
iVar6 = iVar7 + 1;
piVar9[2] = iVar5;
piVar9[1] = iVar6;
*piVar9 = (int)"Object %d (of %d) =========================\n";
piVar9[-1] = 0x77f447;
Msg();
iVar3 = *local_101c[iVar7];
*piVar9 = (int)local_101c[iVar7];
pcVar2 = *(code **)(iVar3 + 0x14c);
piVar9[-1] = 0x77f456;
(*pcVar2)();
iVar7 = iVar6;
} while (iVar6 != iVar5);
}
}
local_1030[3] = 0;
*piVar9 = (int)local_1030;
piVar9[-1] = 0x77f472;
CUtlMemory<CBaseEntity*,int>::Purge((CUtlMemory<CBaseEntity*,int> *)*piVar9);
local_1030[4] = local_1030[0];
*piVar9 = (int)local_1030;
piVar9[-1] = 0x77f48c;
CUtlMemory<CBaseEntity*,int>::Purge((CUtlMemory<CBaseEntity*,int> *)*piVar9);
}
return;
}
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.