L L4D2node

IsStairs

0x00722320 · 1753 bytes · __regparm3

_Z8IsStairsRK6VectorS1_13StairTestType.part.53

Decompiled

undefined (3 params)

/* IsStairs(Vector const&, Vector const&, StairTestType) [clone .part.53] */

undefined4 __regparm3 IsStairs(float *param_1,float *param_2,undefined4 param_3)

{
  float fVar1;
  float fVar2;
  float fVar3;
  float fVar4;
  float fVar5;
  bool bVar6;
  int iVar7;
  longdouble lVar8;
  float fVar9;
  float fVar10;
  float fVar11;
  float fVar12;
  float fVar13;
  float fVar14;
  float fVar15;
  double dVar16;
  float local_108;
  float local_fc;
  float local_f8;
  undefined4 local_f4;
  float local_ec;
  undefined **local_dc [4];
  float local_cc;
  float local_c8;
  float local_c4;
  undefined4 local_bc;
  undefined4 local_b8;
  float local_b4;
  float local_ac;
  float local_a8;
  undefined4 local_a4;
  float local_9c;
  float local_98;
  undefined4 local_94;
  undefined4 local_8c;
  undefined1 local_88;
  undefined1 local_87;
  Vector local_70 [12];
  Vector local_64 [8];
  float local_5c;
  float local_50;
  byte local_3c;
  char local_39;
  
  lVar8 = (longdouble)__acos_finite((double)*(float *)(nav_slope_limit._28_4_ + 0x2c));
  dVar16 = tan((double)lVar8);
  fVar1 = param_1[1];
  fVar2 = *param_1;
  fVar3 = param_2[1];
  fVar4 = *param_2;
  CTraceFilterSimple::CTraceFilterSimple
            ((CTraceFilterSimple *)local_dc,(IHandleEntity *)0x0,8,
             (_func_bool_IHandleEntity_ptr_int *)0x0);
  local_dc[0] = &PTR_ShouldHitEntity_00c54558;
  if (ABS(*param_1 - *param_2) <= ABS(param_1[1] - param_2[1])) {
    local_ec = 8.0;
    local_fc = 2.5;
    local_f8 = -8.0;
    local_108 = -2.5;
  }
  else {
    local_ec = 2.5;
    local_fc = 8.0;
    local_f8 = -2.5;
    local_108 = -8.0;
  }
  iVar7 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
  fVar12 = param_1[2];
  fVar5 = *(float *)(iVar7 + 0x38);
  local_f4 = param_3;
  if (18.0 < ABS(fVar12 - param_2[2])) {
    local_bc = 0;
    local_b8 = 0;
    local_8c = 0;
    local_94 = 0x3f000000;
    local_b4 = (fVar12 - fVar5) - (fVar5 + fVar12);
    local_c4 = fVar5 + fVar12 + 0.5;
    local_87 = local_b4 * local_b4 != 0.0;
    fVar13 = (local_fc - local_108) * 0.5;
    fVar12 = (local_ec - local_f8) * 0.5;
    fVar14 = (local_108 + local_fc) * 0.5;
    local_cc = *param_1 + fVar14;
    fVar15 = (local_f8 + local_ec) * 0.5;
    bVar6 = fVar12 * fVar12 + fVar13 * fVar13 + 0.25 < 1e-06;
    local_c8 = param_1[1] + fVar15;
    local_a4 = 0xbf000000;
    local_ac = -fVar14;
    local_a8 = -fVar15;
    local_9c = fVar13;
    local_98 = fVar12;
    local_88 = bVar6;
    (**(code **)(*enginetrace + 0x14))
              (enginetrace,&local_cc,0x202420b,(CTraceFilterSimple *)local_dc,local_70);
    if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
      DebugDrawLine(local_70,local_64,0xff,0xff,0,true,-1.0);
    }
    if ((local_39 != '\0') || ((local_3c & 1) != 0)) {
      return 0;
    }
    fVar11 = 0.0;
    do {
      fVar9 = local_5c;
      local_bc = 0;
      local_b8 = 0;
      local_8c = 0;
      local_94 = 0x3f000000;
      local_a4 = 0xbf000000;
      fVar10 = (param_2[2] - param_1[2]) * fVar11 + param_1[2];
      local_c4 = fVar5 + fVar10;
      local_cc = *param_1 + fVar14 + (*param_2 - *param_1) * fVar11;
      local_b4 = (fVar10 - fVar5) - local_c4;
      local_c4 = local_c4 + 0.5;
      local_87 = local_b4 * local_b4 != 0.0;
      local_c8 = param_1[1] + fVar15 + (param_2[1] - param_1[1]) * fVar11;
      local_ac = -fVar14;
      local_a8 = -fVar15;
      local_9c = fVar13;
      local_98 = fVar12;
      local_88 = bVar6;
      (**(code **)(*enginetrace + 0x14))
                (enginetrace,&local_cc,0x202420b,(CTraceFilterSimple *)local_dc,local_70);
      if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
        DebugDrawLine(local_70,local_64,0xff,0xff,0,true,-1.0);
      }
      if (local_39 != '\0') {
        return 0;
      }
      if ((local_3c & 1) != 0) {
        return 0;
      }
      if (fVar11 == 0.0) {
        fVar10 = param_1[2];
joined_r0x00722776:
        if (18.0 < ABS(local_5c - fVar10)) {
          return 0;
        }
      }
      else if (fVar11 == 1.0) {
        fVar10 = param_2[2];
        goto joined_r0x00722776;
      }
      if (local_50 < 0.97) {
        return 0;
      }
      fVar9 = ABS(local_5c - fVar9);
      if ((fVar9 < (float)(dVar16 * 5.0)) || (18.0 < fVar9)) {
        if (18.0 < fVar9) {
          return 0;
        }
      }
      else {
        local_f4 = 1;
      }
      fVar11 = fVar11 + 5.0 / SQRT((fVar2 - fVar4) * (fVar2 - fVar4) +
                                   (fVar1 - fVar3) * (fVar1 - fVar3));
    } while (fVar11 <= 1.0);
  }
  return local_f4;
}

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)