L L4D2node

UTIL_IsGroundLevel

0x00b2f530 · 1156 bytes · __cdecl

_Z18UTIL_IsGroundLevelfRK6VectorfiPK11CBaseEntityb

Decompiled

undefined (6 params)

/* UTIL_IsGroundLevel(float, Vector const&, float, int, CBaseEntity const*, bool) */

undefined1
UTIL_IsGroundLevel(float param_1,Vector *param_2,float param_3,int param_4,CBaseEntity *param_5,
                  bool param_6)

{
  float *pfVar1;
  int iVar2;
  Vector *pVVar3;
  char *pcVar4;
  int iVar5;
  float fVar6;
  float fVar7;
  float fVar8;
  float fVar9;
  float fVar10;
  float local_3b8;
  Vector *local_3b0;
  int local_3a8;
  undefined4 local_388;
  undefined4 local_384;
  float local_380;
  float local_37c;
  float local_378;
  undefined4 local_374;
  float local_36c;
  float local_368;
  float local_364;
  undefined4 local_35c;
  undefined4 local_358;
  float local_354;
  float local_34c;
  float local_348;
  undefined4 local_344;
  float local_33c;
  float local_338;
  undefined4 local_334;
  undefined4 local_32c;
  undefined1 local_328;
  undefined1 local_327;
  Vector local_310 [20];
  float local_2fc [8];
  char local_2d9 [701];
  Vector local_1c [12];
  
  local_3b0 = local_310;
  local_3b8 = -param_1;
  do {
    local_3a8 = 3;
    fVar9 = param_1 * 0.6666667 + local_3b8;
    fVar10 = (fVar9 - local_3b8) * 0.5;
    fVar7 = (fVar9 + local_3b8) * 0.5;
    pVVar3 = local_3b0;
    fVar6 = -param_1;
    do {
      local_35c = 0;
      local_358 = 0;
      local_364 = param_3 + *(float *)(param_2 + 8);
      local_32c = 0;
      fVar8 = param_1 * 0.6666667 + fVar6;
      local_334 = 0x40a00000;
      local_344 = 0xc0a00000;
      local_368 = *(float *)(param_2 + 4) + fVar7;
      local_354 = (*(float *)(param_2 + 8) - 100.0) - local_364;
      local_364 = local_364 + 5.0;
      local_327 = local_354 * local_354 != 0.0;
      local_33c = (fVar8 - fVar6) * 0.5;
      local_328 = local_33c * local_33c + fVar10 * fVar10 + 25.0 < 1e-06;
      local_34c = (fVar8 + fVar6) * 0.5;
      local_36c = *(float *)param_2 + local_34c;
      local_34c = -local_34c;
      local_348 = -fVar7;
      local_338 = fVar10;
      CTraceFilterSimple::CTraceFilterSimple
                ((CTraceFilterSimple *)&local_37c,(IHandleEntity *)param_5,8,
                 (_func_bool_IHandleEntity_ptr_int *)0x0);
      (**(code **)(*enginetrace + 0x14))
                (enginetrace,&local_36c,param_4,(CTraceFilterSimple *)&local_37c,pVVar3);
      if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
        DebugDrawLine(pVVar3,pVVar3 + 0xc,0xff,0xff,0,true,-1.0);
      }
      if (param_6) {
        local_388 = *(undefined4 *)param_2;
        local_384 = *(undefined4 *)(param_2 + 4);
        local_364 = 10.0;
        local_380 = param_3 + *(float *)(param_2 + 8);
        local_378 = local_3b8;
        local_374 = 0;
        local_37c = fVar6;
        local_36c = fVar8;
        local_368 = fVar9;
        NDebugOverlay::SweptBox
                  ((Vector *)&local_388,pVVar3 + 0xc,(Vector *)&local_37c,(Vector *)&local_36c,
                   (QAngle *)&vec3_angle,0xff,0xff,0,0xff,5.0);
      }
      pVVar3 = pVVar3 + 0x54;
      local_3a8 = local_3a8 + -1;
      fVar6 = fVar8;
    } while (local_3a8 != 0);
    local_3b0 = local_3b0 + 0xfc;
    local_3b8 = fVar9;
  } while (local_3b0 != local_1c);
  pcVar4 = local_2d9;
  iVar5 = 0;
  do {
    if (*pcVar4 != '\0') {
      return 0;
    }
    if ((*(float *)(pcVar4 + -0xb) <= 1.0 && *(float *)(pcVar4 + -0xb) != 1.0) ||
       (pcVar4[-1] != '\0')) {
      if (*(float *)(pcVar4 + -0x17) <= 0.9 && *(float *)(pcVar4 + -0x17) != 0.9) {
        return 0;
      }
      pfVar1 = local_2fc;
      iVar2 = 0;
      do {
        if ((iVar5 != iVar2) && (10.0 < ABS(*(float *)(pcVar4 + -0x23) - *pfVar1))) {
          return 0;
        }
        iVar2 = iVar2 + 1;
        pfVar1 = pfVar1 + 0x15;
      } while (iVar2 != 9);
    }
    iVar5 = iVar5 + 1;
    pcVar4 = pcVar4 + 0x54;
    if (iVar5 == 9) {
      return 1;
    }
  } while( true );
}

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)