L L4D2node

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 into addons/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.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)