physics_budget
0x0077f4c0 · 1688 bytes · __cdecl
_ZL14physics_budgetRK8CCommand
Decompiled
undefined (1 param)
/* physics_budget(CCommand const&) */
void physics_budget(CCommand *param_1)
{
code *pcVar1;
int *piVar2;
undefined1 *puVar3;
int iVar4;
char cVar5;
int iVar6;
undefined4 uVar7;
void *pvVar8;
undefined1 *puVar9;
int iVar10;
int **ppiVar11;
int **ppiVar12;
int in_GS_OFFSET;
longdouble lVar13;
float fVar14;
double dVar15;
undefined4 uStack_1b0;
int *local_1ac;
size_t sStack_1a8;
undefined1 auStack_1a4 [8];
undefined1 auStack_19c [8];
undefined8 uStack_194;
int **local_180;
float local_17c;
float local_178;
double local_174;
undefined8 local_16c;
undefined8 local_164;
int *local_154;
undefined4 local_150;
undefined4 local_14c;
int local_148;
int *local_144;
void *local_140;
int local_13c;
int local_138;
int local_134;
void *local_130;
undefined1 local_12c [5];
undefined1 local_127 [263];
int local_20;
ppiVar12 = &local_1ac;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
uStack_1b0 = 0x77f4dc;
cVar5 = UTIL_IsCommandIssuedByServerAdmin();
ppiVar11 = &local_1ac;
if (cVar5 == '\0') goto LAB_0077f4e0;
local_1ac = physenv;
uStack_1b0 = 0x77f508;
iVar6 = (**(code **)(*physenv + 0xb8))();
local_154 = (int *)0x0;
local_164 = (double)CONCAT44(local_164._4_4_,iVar6);
local_150 = 0;
local_14c = 0;
local_148 = 0;
local_144 = (int *)0x0;
if (iVar6 == 0) {
local_180 = &local_154;
}
else {
iVar4 = -((iVar6 * 4 + 0xfU & 0xfffffff0) + 0x10);
iVar10 = *physenv;
*(int **)((int)&local_1ac + iVar4) = physenv;
*(int *)((int)&sStack_1a8 + iVar4) = (int)&local_180 + iVar4;
/* try { // try from 0077f57e to 0077f5fb has its CatchHandler @ 0077fb5b */
pcVar1 = *(code **)(iVar10 + 0xbc);
local_180 = &local_154;
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77f584;
(*pcVar1)();
iVar10 = 0;
local_180 = &local_154;
if (0 < iVar6) {
do {
piVar2 = *(int **)((int)&local_180 + iVar4 + iVar10 * 4);
iVar6 = *piVar2;
*(int **)((int)&local_1ac + iVar4) = piVar2;
pcVar1 = *(code **)(iVar6 + 0x48);
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77f5ab;
local_140 = (void *)(*pcVar1)();
if (local_140 != (void *)0x0) {
if (local_148 < 1) {
LAB_0077f5e0:
*(int *)((int)&sStack_1a8 + iVar4) = local_148;
*(void ***)(auStack_1a4 + iVar4) = &local_140;
*(int ***)((int)&local_1ac + iVar4) = local_180;
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77f5fc;
CUtlVector<CBaseEntity*,CUtlMemory<CBaseEntity*,int>>::InsertBefore
(*(CUtlVector<CBaseEntity*,CUtlMemory<CBaseEntity*,int>> **)
((int)&local_1ac + iVar4),*(int *)((int)&sStack_1a8 + iVar4),
*(CBaseEntity ***)(auStack_1a4 + iVar4));
}
else if (local_140 != (void *)*local_154) {
iVar6 = 0;
do {
iVar6 = iVar6 + 1;
if (iVar6 == local_148) goto LAB_0077f5e0;
} while (local_140 != (void *)local_154[iVar6]);
if (iVar6 < 0) goto LAB_0077f5e0;
}
}
iVar10 = iVar10 + 1;
} while ((float)iVar10 != (float)local_164);
}
ppiVar12 = (int **)((int)&local_1ac + iVar4);
if (local_148 != 0) {
local_140 = (void *)0x0;
local_13c = 0;
local_138 = 0;
local_134 = 0;
local_130 = (void *)0x0;
g_Collisions[0x164] = 1;
/* try { // try from 0077f652 to 0077fb0f has its CatchHandler @ 0077fb78 */
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77f657;
lVar13 = (longdouble)Plat_FloatTime();
local_164._4_4_ = (undefined4)((ulonglong)(double)lVar13 >> 0x20);
local_164 = (double)CONCAT44(local_164._4_4_,(float)lVar13);
iVar6 = *physenv;
*(undefined4 *)((int)&sStack_1a8 + iVar4) = 0x3c888889;
*(int **)((int)&local_1ac + iVar4) = physenv;
pcVar1 = *(code **)(iVar6 + 0x8c);
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77f68d;
(*pcVar1)();
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77f692;
lVar13 = (longdouble)Plat_FloatTime();
iVar6 = local_148;
local_16c = (double)lVar13;
dVar15 = (double)(float)local_164;
local_134 = 0;
if (local_148 != 0) {
if ((local_13c < local_148) && (-1 < local_138)) {
if (local_138 == 0) {
if (local_13c == 0) {
if (local_148 < 9) {
local_13c = 8;
goto LAB_0077fab8;
}
local_13c = 8;
}
do {
local_13c = local_13c * 2;
} while (local_13c < local_148);
}
else {
for (local_13c = ((local_148 + -1) / local_138 + 1) * local_138; local_13c < local_148;
local_13c = (local_13c + local_148) / 2) {
}
}
LAB_0077fab8:
iVar10 = local_13c << 2;
if (local_140 == (void *)0x0) {
*(int *)((int)&local_1ac + iVar4) = iVar10;
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77fb34;
local_140 = malloc(*(size_t *)((int)&local_1ac + iVar4));
goto LAB_0077f774;
}
*(void **)((int)&local_1ac + iVar4) = local_140;
*(int *)((int)&sStack_1a8 + iVar4) = iVar10;
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77fad7;
pvVar8 = realloc(*(void **)((int)&local_1ac + iVar4),*(size_t *)((int)&sStack_1a8 + iVar4)
);
iVar10 = local_134;
local_140 = pvVar8;
local_130 = pvVar8;
local_134 = iVar6 + local_134;
if ((0 < iVar6) && (0 < iVar10)) {
*(void **)((int)&sStack_1a8 + iVar4) = pvVar8;
*(int *)(auStack_1a4 + iVar4) = iVar10 << 2;
*(void **)((int)&local_1ac + iVar4) = (void *)((int)pvVar8 + iVar6 * 4);
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77fb10;
_V_memmove(*(void **)((int)&local_1ac + iVar4),*(void **)((int)&sStack_1a8 + iVar4),
*(int *)(auStack_1a4 + iVar4));
}
}
else {
LAB_0077f774:
local_134 = iVar6;
local_130 = local_140;
}
if (0 < local_148) {
iVar6 = 0;
local_164 = (double)((ulonglong)local_164 & 0xffffffff00000000);
fVar14 = (float)((double)lVar13 - dVar15);
while( true ) {
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77f79d;
lVar13 = (longdouble)Plat_FloatTime();
local_16c._0_4_ = (float)lVar13;
local_16c._4_4_ = (undefined4)((ulonglong)(double)lVar13 >> 0x20);
iVar10 = *physenv;
*(undefined4 *)((int)&sStack_1a8 + iVar4) = 0x3c888889;
*(int **)((int)&local_1ac + iVar4) = physenv;
pcVar1 = *(code **)(iVar10 + 0x8c);
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77f7d3;
(*pcVar1)();
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77f7d8;
lVar13 = (longdouble)Plat_FloatTime();
local_174 = (double)lVar13;
fVar14 = fVar14 - ((float)lVar13 - (float)local_16c);
local_16c = (double)CONCAT44(local_16c._4_4_,(float)lVar13 - (float)local_16c);
if (fVar14 <= 1e-05) {
fVar14 = 1e-05;
}
if (1.0 <= fVar14) {
fVar14 = 1.0;
}
*(float *)((int)local_140 + iVar6 * 4) = fVar14;
fVar14 = (float)local_164 + *(float *)((int)local_140 + iVar6 * 4);
iVar6 = iVar6 + 1;
local_164 = (double)CONCAT44(local_164._4_4_,fVar14);
if (local_148 <= iVar6) break;
if (0 < iVar6) {
iVar10 = 0;
do {
uVar7 = *(undefined4 *)(local_154[iVar10] + 0x238);
*(int *)((int)&local_1ac + iVar4) = local_154[iVar10];
*(undefined4 *)((int)&sStack_1a8 + iVar4) = uVar7;
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77f86b;
PhysForceEntityToSleep
(*(CBaseEntity **)((int)&local_1ac + iVar4),
*(IPhysicsObject **)((int)&sStack_1a8 + iVar4));
iVar10 = iVar10 + 1;
} while (iVar10 != iVar6);
}
fVar14 = (float)local_16c;
}
if (fVar14 <= 0.001) {
fVar14 = 0.001;
}
if (0 < local_148) {
iVar6 = 0;
local_17c = fVar14 * 1000.0;
local_178 = 1.0 / fVar14;
do {
local_16c = (double)CONCAT44(local_16c._4_4_,
local_178 * *(float *)((int)local_140 + iVar6 * 4));
iVar10 = local_154[iVar6];
if ((*(byte *)(iVar10 + 0x14d) & 8) == 0) {
local_164 = (double)*(float *)(iVar10 + 0x2e8);
LAB_0077f8eb:
local_174 = (double)*(float *)(iVar10 + 0x2e4);
}
else {
*(int *)((int)&local_1ac + iVar4) = iVar10;
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77fa2d;
CBaseEntity::CalcAbsolutePosition(*(CBaseEntity **)((int)&local_1ac + iVar4));
local_164 = (double)*(float *)(iVar10 + 0x2e8);
iVar10 = local_154[iVar6];
if ((*(byte *)(iVar10 + 0x14d) & 8) == 0) goto LAB_0077f8eb;
*(int *)((int)&local_1ac + iVar4) = iVar10;
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77fa5e;
CBaseEntity::CalcAbsolutePosition(*(CBaseEntity **)((int)&local_1ac + iVar4));
local_174 = (double)*(float *)(iVar10 + 0x2e4);
iVar10 = local_154[iVar6];
if ((*(byte *)(iVar10 + 0x14d) & 8) != 0) {
*(int *)((int)&local_1ac + iVar4) = iVar10;
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77fa8f;
CBaseEntity::CalcAbsolutePosition(*(CBaseEntity **)((int)&local_1ac + iVar4));
}
}
dVar15 = local_174;
*(double *)((int)&uStack_194 + iVar4) = local_164;
*(double *)(auStack_19c + iVar4) = dVar15;
fVar14 = *(float *)(iVar10 + 0x2e0);
*(char **)((int)&sStack_1a8 + iVar4) = "(%f, %f, %f)";
*(undefined1 **)((int)&local_1ac + iVar4) = local_12c;
*(double *)(auStack_1a4 + iVar4) = (double)fVar14;
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77f941;
CFmtStrN<256>::CFmtStrN
(*(CFmtStrN<256> **)((int)&local_1ac + iVar4),
*(char **)((int)&sStack_1a8 + iVar4));
local_164 = (double)((float)local_16c * 100.0);
fVar14 = local_17c * (float)local_16c;
*(int *)((int)&local_1ac + iVar4) = local_154[iVar6];
local_16c = (double)fVar14;
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77f98e;
uVar7 = CBaseEntity::GetDebugName(*(CBaseEntity **)((int)&local_1ac + iVar4));
dVar15 = local_16c;
puVar3 = *(undefined1 **)(local_154[iVar6] + 0x7c);
*(double *)(auStack_19c + iVar4 + 4) = local_164;
*(double *)(auStack_1a4 + iVar4 + 4) = dVar15;
*(undefined4 *)(auStack_1a4 + iVar4) = uVar7;
*(char **)((int)&local_1ac + iVar4) = "%s (%s): %.3fms (%.3f%%) @ %s\n";
puVar9 = &DAT_00d539c2;
if (puVar3 != (undefined1 *)0x0) {
puVar9 = puVar3;
}
*(undefined1 **)((int)&sStack_1a8 + iVar4) = puVar9;
*(undefined1 **)((int)&uStack_194 + iVar4 + 4) = local_127;
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77f9de;
Msg();
iVar6 = iVar6 + 1;
} while (iVar6 < local_148);
}
}
}
g_Collisions[0x164] = 0;
*(void ***)((int)&local_1ac + iVar4) = &local_140;
local_134 = 0;
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77f6f4;
CUtlMemory<float,int>::Purge(*(CUtlMemory<float,int> **)((int)&local_1ac + iVar4));
pvVar8 = local_140;
*(void ***)((int)&local_1ac + iVar4) = &local_140;
local_130 = pvVar8;
*(undefined4 *)((int)&uStack_1b0 + iVar4) = 0x77f708;
CUtlMemory<float,int>::Purge(*(CUtlMemory<float,int> **)((int)&local_1ac + iVar4));
ppiVar12 = (int **)((int)&local_1ac + iVar4);
}
}
ppiVar11 = local_180;
local_148 = 0;
*ppiVar12 = (int *)local_180;
ppiVar12[-1] = (int *)0x77f720;
CUtlMemory<CBaseEntity*,int>::Purge((CUtlMemory<CBaseEntity*,int> *)*ppiVar12);
piVar2 = local_154;
*ppiVar12 = (int *)ppiVar11;
local_144 = piVar2;
ppiVar12[-1] = (int *)0x77f734;
CUtlMemory<CBaseEntity*,int>::Purge((CUtlMemory<CBaseEntity*,int> *)*ppiVar12);
ppiVar11 = ppiVar12;
LAB_0077f4e0:
if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
return;
}
/* WARNING: Subroutine does not return */
*(undefined1 **)((int)ppiVar11 + -4) = &LAB_0077fb78;
__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.