L L4D2node

PathFollower::Climbing

0x00765c40 · 10747 bytes · __cdecl

_ZN12PathFollower8ClimbingEP8INextBotPKN4Path7SegmentERK6VectorS8_f

Decompiled

undefined (5 params)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* PathFollower::Climbing(INextBot*, Path::Segment const*, Vector const&, Vector const&, float) */

undefined1
PathFollower::Climbing
          (INextBot *param_1,Segment *param_2,Vector *param_3,Vector *param_4,float param_5)

{
  uint *puVar1;
  code *pcVar2;
  bool bVar3;
  bool bVar4;
  bool bVar5;
  bool bVar6;
  char cVar7;
  undefined1 uVar8;
  Vector *pVVar9;
  int *piVar10;
  char *pcVar11;
  int iVar12;
  int iVar13;
  float *pfVar14;
  uint uVar15;
  IHandleEntity *pIVar16;
  undefined4 uVar17;
  Vector *pVVar18;
  int *piVar19;
  int in_GS_OFFSET;
  longdouble lVar20;
  longdouble lVar21;
  longdouble lVar22;
  longdouble lVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  float fVar29;
  float fVar30;
  float fVar31;
  float fVar32;
  float local_358;
  float local_34c;
  float local_348;
  float local_328;
  float local_324;
  float local_31c;
  float local_310;
  undefined4 local_30c;
  undefined4 local_308;
  undefined4 local_304;
  undefined4 local_300;
  undefined4 local_2fc;
  undefined4 local_2f8;
  Vector *local_2f4;
  float local_2f0;
  float local_2ec;
  float local_2e8;
  float local_2e4;
  float local_2e0;
  float local_2dc;
  float local_2d8;
  float local_2d4;
  float local_2d0;
  float local_2cc;
  float local_2c8;
  float local_2c4;
  float local_2c0;
  float local_2bc;
  float local_2b8;
  float local_2b4;
  float local_2b0;
  float local_2ac;
  undefined4 local_2a8;
  undefined4 local_2a4;
  Vector *local_2a0;
  float local_29c;
  float local_298;
  float local_294;
  float local_290;
  float local_28c;
  float local_288;
  undefined **local_284 [4];
  Segment *local_274;
  undefined4 local_270;
  float local_26c;
  float local_268;
  float local_264;
  undefined4 local_25c;
  undefined4 local_258;
  float local_254;
  float local_24c;
  float local_248;
  float local_244;
  float local_23c;
  float local_238;
  float local_234;
  undefined4 local_22c;
  undefined1 local_228;
  undefined1 local_227;
  float local_21c;
  float local_218;
  float local_214;
  undefined4 local_20c;
  undefined4 local_208;
  float local_204;
  float local_1fc;
  float local_1f8;
  float local_1f4;
  float local_1ec;
  float local_1e8;
  float local_1e4;
  undefined4 local_1dc;
  undefined1 local_1d8;
  undefined1 local_1d7;
  float local_1cc;
  float local_1c8;
  float local_1c4;
  float local_1bc;
  float local_1b8;
  float local_1b4;
  float local_1ac;
  float local_1a8;
  float local_1a4;
  float local_19c;
  float local_198;
  float local_194;
  undefined4 local_18c;
  undefined1 local_188;
  undefined1 local_187;
  float local_17c;
  float local_178;
  float local_174;
  float local_16c;
  float local_168;
  float local_164;
  float local_15c;
  float local_158;
  float local_154;
  float local_14c;
  float local_148;
  float local_144;
  undefined4 local_13c;
  undefined1 local_138;
  undefined1 local_137;
  float local_12c;
  float local_128;
  float local_124;
  undefined4 local_11c;
  undefined4 local_118;
  float local_114;
  float local_10c;
  float local_108;
  float local_104;
  float local_fc;
  float local_f8;
  float local_f4;
  undefined4 local_ec;
  undefined1 local_e8;
  undefined1 local_e7;
  float local_d0;
  float local_cc;
  float local_c8;
  float local_c4;
  float local_c0;
  float local_bc;
  float local_b8;
  float local_b4;
  float local_b0;
  undefined1 local_a8;
  undefined1 local_a7;
  undefined2 local_a6;
  float local_a4;
  undefined2 local_9c;
  char local_9a;
  char local_99;
  undefined4 local_84;
  float local_7c;
  float local_78;
  float local_74;
  float local_70;
  float local_6c;
  float local_68;
  float local_64;
  float local_60;
  float local_5c;
  float local_58;
  undefined4 local_54;
  float local_50;
  float local_4c;
  undefined4 local_48;
  float local_44;
  undefined4 local_3c;
  bool local_38;
  undefined1 auStack_37 [7];
  undefined4 local_30;
  undefined1 local_24;
  undefined1 local_23;
  undefined1 local_22;
  undefined1 local_21;
  int local_20;
  
  local_30c = 0;
  local_308 = 0;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  if (_towlower == (Vector *)0x0) {
    local_2f4 = (Vector *)0x0;
  }
  else {
    (**(code **)(_towlower + 0x50))
              (_towlower,&local_30c,0,0,0,0,
               "/data/src/game/server/nextbot/path/nextbotpathfollow.cpp",0x45b,
               &Climbing(INextBot*,Path::Segment_const*,Vector_const&,Vector_const&,float)::tm_fmt,
               "(%s)%s","NextBot","PathFollower::Climbing");
    local_2f4 = _towlower;
  }
  iVar12 = _DAT_0105db00;
  local_2fc = local_30c;
  local_2f8 = local_308;
                    /* try { // try from 00765e36 to 00765e96 has its CatchHandler @ 007686e8 */
  if (((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) &&
     (iVar13 = ThreadGetCurrentId(), iVar12 == iVar13)) {
    if (*(char **)_DAT_0105d15c != "PathFollower::Climbing") {
      _DAT_0105d15c =
           (Vector *)CVProfNode::GetSubNode((char *)_DAT_0105d15c,0xcaa60e,(char *)0x0,0xca8906);
    }
    puVar1 = (uint *)(_DAT_0105d1e8 + 4 + *(int *)(_DAT_0105d15c + 0x70) * 8);
    *puVar1 = *puVar1 | 4;
    CVProfNode::EnterScope();
    DAT_0105d158 = '\0';
  }
                    /* try { // try from 00765d30 to 00765d5e has its CatchHandler @ 007686d2 */
  pVVar9 = (Vector *)(**(code **)(*(int *)param_2 + 0xc0))(param_2);
  piVar10 = (int *)(**(code **)(*(int *)param_2 + 0xc4))(param_2);
  pcVar11 = (char *)(**(code **)(*(int *)param_2 + 0xb4))(param_2);
  iVar12 = (**(code **)(*(int *)pcVar11 + 0x52c))(pcVar11);
                    /* try { // try from 00765ebd to 007660d4 has its CatchHandler @ 007686d2 */
  if ((*(int *)(NextBotAllowClimbing._28_4_ + 0x30) != 0) &&
     (pcVar11 = (char *)param_2, cVar7 = (**(code **)(*(int *)param_2 + 0xe4))(param_2),
     cVar7 != '\0')) {
    local_2e8 = 0.0;
    local_2f0 = *(float *)param_4;
    local_2ec = *(float *)(param_4 + 4);
    VectorNormalize((Vector *)&local_2f0);
    lVar20 = (longdouble)(**(code **)(*piVar10 + 0x118))(piVar10);
    fVar26 = (float)lVar20;
    pcVar11 = (char *)pVVar9;
    cVar7 = (**(code **)(*(int *)pVVar9 + 200))(pVVar9);
    if ((cVar7 == '\0') &&
       ((pcVar11 = (char *)pVVar9, cVar7 = (**(code **)(*(int *)pVVar9 + 0x118))(pVVar9),
        cVar7 == '\0' &&
        (pcVar11 = (char *)pVVar9, cVar7 = (**(code **)(*(int *)pVVar9 + 0xf8))(pVVar9),
        cVar7 != '\0')))) {
      uVar8 = 0;
      if (*(int *)(param_1 + 0x4758) == 0) goto LAB_00765d78;
      lVar20 = (longdouble)(**(code **)(*piVar10 + 0x124))(piVar10);
      local_34c = -1.0;
      piVar19 = *(int **)(param_1 + 0x4758);
      if (piVar19[6] == 2) {
                    /* try { // try from 00767d2f to 00767dcd has its CatchHandler @ 007686d2 */
        piVar19 = (int *)(**(code **)(*(int *)param_1 + 0x58))(param_1,piVar19);
        if ((piVar19 == (int *)0x0) || (*piVar19 == 0)) {
          local_34c = -1.0;
          piVar19 = *(int **)(param_1 + 0x4758);
        }
        else {
          pVVar18 = (Vector *)(**(code **)(*(int *)pVVar9 + 300))(pVVar9);
          CNavArea::GetClosestPointOnArea((CNavArea *)*piVar19,pVVar18,(Vector *)&local_7c);
          pfVar14 = (float *)(**(code **)(*(int *)pVVar9 + 300))(pVVar9);
          local_2ec = local_78 - pfVar14[1];
          local_2f0 = local_7c - *pfVar14;
          local_34c = local_74 - pfVar14[2];
          local_2e8 = 0.0;
          VectorNormalize((Vector *)&local_2f0);
          piVar19 = *(int **)(param_1 + 0x4758);
        }
      }
      if (((*(byte *)(*piVar19 + 0x55) & 0x10) != 0) ||
         ((iVar12 != 0 && ((*(byte *)(iVar12 + 0x55) & 0x10) != 0)))) {
        pcVar11 = (char *)param_2;
                    /* try { // try from 0076717b to 007671f8 has its CatchHandler @ 007686d2 */
        cVar7 = INextBot::IsDebugging((INextBot *)param_2,4);
        if (cVar7 != '\0') {
          pVVar9 = (Vector *)(**(code **)(*(int *)pVVar9 + 300))(pVVar9);
          NDebugOverlay::Cross3D(pVVar9,5.0,0,0xff,0xff,true,5.0);
          uVar17 = (**(code **)(*(int *)param_2 + 0x13c))(param_2);
          pcVar11 = "%3.2f: %s ON STAIRS\n";
          DevMsg("%3.2f: %s ON STAIRS\n",(double)*(float *)(gpGlobals + 0xc),uVar17);
        }
        goto LAB_00765d78;
      }
      pcVar11 = (char *)param_1;
      iVar12 = (**(code **)(*(int *)param_1 + 0x5c))(param_1,piVar19);
      if (iVar12 == 0) goto LAB_00765d78;
      pfVar14 = (float *)(**(code **)(*(int *)pVVar9 + 300))(pVVar9);
      iVar13 = *(int *)(param_1 + 0x4758);
      fVar29 = *(float *)(iVar13 + 8) - *pfVar14;
      fVar25 = *(float *)(iVar13 + 0xc) - pfVar14[1];
      local_2dc = *(float *)(iVar13 + 0x10) - pfVar14[2];
      local_2e4 = fVar29;
      local_2e0 = fVar25;
      lVar21 = (longdouble)VectorNormalize((Vector *)&local_2e4);
      fVar25 = SQRT(fVar25 * fVar25 + fVar29 * fVar29);
      lVar22 = (longdouble)(**(code **)(*piVar10 + 0x118))(piVar10);
      if (fVar25 - (float)lVar22 * 0.25 <= 0.0) {
        fVar29 = 0.0;
      }
      else {
        lVar22 = (longdouble)(**(code **)(*piVar10 + 0x118))(piVar10);
        fVar29 = fVar25 - (float)lVar22 * 0.25;
      }
      fVar27 = local_2dc;
      if (fVar25 <= 0.0) {
        local_328 = 0.0;
      }
      else {
        local_328 = (fVar29 / fVar25) * (float)lVar21;
      }
                    /* try { // try from 00766137 to 0076613c has its CatchHandler @ 007686f2 */
      lVar21 = (longdouble)(**(code **)(*(int *)pVVar9 + 0x154))(pVVar9);
      iVar13 = iVar12;
                    /* try { // try from 00767ded to 00767e61 has its CatchHandler @ 007686f2 */
      if (((fVar27 < (float)lVar21) &&
          (cVar7 = (**(code **)(*(int *)pVVar9 + 0x168))(pVVar9), cVar7 == '\0')) &&
         (*(int *)(*(int *)(param_1 + 0x4758) + 0x18) != 2)) {
        fVar25 = local_2e4 * local_328;
        fVar29 = local_2e0 * local_328;
        local_328 = local_328 * local_2dc;
        pcVar2 = *(code **)(*(int *)pVVar9 + 0x158);
        pfVar14 = (float *)(**(code **)(*(int *)pVVar9 + 300))(pVVar9);
        local_7c = fVar25 + *pfVar14;
        local_78 = fVar29 + pfVar14[1];
        local_74 = local_328 + pfVar14[2];
                    /* try { // try from 00767e9c to 00767ec1 has its CatchHandler @ 007686f4 */
        uVar17 = (**(code **)(*(int *)pVVar9 + 300))(pVVar9);
        pcVar11 = (char *)pVVar9;
        cVar7 = (*pcVar2)(pVVar9,uVar17,&local_7c,0,0);
        if (cVar7 != '\0') goto LAB_00765d78;
      }
      do {
        if (*(int *)(iVar13 + 0x18) == 2) {
                    /* try { // try from 00767eef to 00767ef1 has its CatchHandler @ 007686d2 */
          (**(code **)(*(int *)param_1 + 0x58))(param_1,iVar13);
          bVar4 = true;
          goto LAB_007661c4;
        }
                    /* try { // try from 00766179 to 007664c3 has its CatchHandler @ 007686d2 */
        iVar13 = (**(code **)(*(int *)param_1 + 0x58))(param_1,iVar13);
      } while ((iVar13 != 0) &&
              ((iVar12 == iVar13 ||
               (pfVar14 = (float *)(**(code **)(*(int *)pVVar9 + 300))(pVVar9),
               fVar25 = *(float *)(iVar13 + 8) - *pfVar14,
               fVar29 = *(float *)(iVar13 + 0xc) - pfVar14[1],
               fVar25 * fVar25 + fVar29 * fVar29 <= 22500.0))));
      bVar4 = false;
LAB_007661c4:
      uVar15 = (**(code **)(*piVar10 + 0x130))(piVar10);
      pIVar16 = (IHandleEntity *)(**(code **)(*(int *)param_2 + 0xb4))(param_2);
      CTraceFilterSimple::CTraceFilterSimple
                ((CTraceFilterSimple *)local_284,pIVar16,0,IgnoreActorsTraceFilterFunction);
      local_274 = param_2;
      local_284[0] = &PTR_ShouldHitEntity_00ca96c8;
      local_270 = 0;
      lVar21 = (longdouble)(**(code **)(*piVar10 + 0x118))(piVar10);
      fVar25 = (float)lVar21;
      fVar31 = fVar25 * 0.5;
      lVar21 = (longdouble)(**(code **)(*piVar10 + 0x124))(piVar10);
      lVar22 = (longdouble)(**(code **)(*(int *)pVVar9 + 0x130))(pVVar9);
      fVar30 = -fVar31;
      fVar27 = (float)lVar21 + 0.1;
      local_2d8 = fVar30;
      local_2d4 = fVar30;
      local_2d0 = (float)lVar22 + 0.1;
      pfVar14 = (float *)(**(code **)(*(int *)pVVar9 + 300))(pVVar9);
      local_2cc = *pfVar14;
      local_2c8 = pfVar14[1];
      local_2c4 = pfVar14[2];
      lVar23 = (longdouble)(**(code **)(*(int *)pVVar9 + 0x134))(pVVar9);
      local_254 = (float)lVar23;
      local_25c = 0;
      local_258 = 0;
      local_22c = 0;
      local_227 = local_254 * local_254 != 0.0;
      local_234 = (fVar27 - local_2d0) * 0.5;
      local_238 = (fVar31 - local_2d4) * 0.5;
      local_23c = (fVar31 - local_2d8) * 0.5;
      local_228 = local_23c * local_23c + local_238 * local_238 + local_234 * local_234 < 1e-06;
      local_24c = (local_2d8 + fVar31) * 0.5;
      local_248 = (local_2d4 + fVar31) * 0.5;
      local_244 = (fVar27 + local_2d0) * 0.5;
      local_26c = local_2cc + local_24c;
      local_24c = -local_24c;
      local_268 = local_2c8 + local_248;
      local_264 = local_2c4 + local_244;
      local_248 = -local_248;
      local_244 = -local_244;
      (**(code **)(*enginetrace + 0x14))
                (enginetrace,&local_26c,uVar15,(CTraceFilterSimple *)local_284,&local_d0);
      fVar29 = local_a4;
      local_328 = local_a4;
      if ((local_a4 < 1.0) || (local_99 != '\0')) {
        fVar24 = fVar25 * 0.25;
        fVar32 = local_2cc - local_2f0 * fVar24;
        fVar28 = local_2c8 - local_2ec * fVar24;
        fVar24 = local_2c4 - fVar24 * local_2e8;
                    /* try { // try from 0076655f to 00766701 has its CatchHandler @ 007686d4 */
        lVar23 = (longdouble)(**(code **)(*(int *)pVVar9 + 0x134))(pVVar9);
        local_204 = (float)lVar23;
        local_20c = 0;
        local_208 = 0;
        local_1dc = 0;
        local_1d7 = local_204 * local_204 != 0.0;
        local_1e4 = (fVar27 - local_2d0) * 0.5;
        local_1ec = (fVar31 - local_2d8) * 0.5;
        local_1e8 = (fVar31 - local_2d4) * 0.5;
        local_1fc = (local_2d8 + fVar31) * 0.5;
        local_1d8 = local_1e8 * local_1e8 + local_1ec * local_1ec + local_1e4 * local_1e4 < 1e-06;
        local_1f8 = (local_2d4 + fVar31) * 0.5;
        local_21c = fVar32 + local_1fc;
        local_1fc = -local_1fc;
        local_1f4 = (fVar27 + local_2d0) * 0.5;
        local_218 = fVar28 + local_1f8;
        local_1f8 = -local_1f8;
        local_214 = fVar24 + local_1f4;
        local_1f4 = -local_1f4;
        (**(code **)(*enginetrace + 0x14))
                  (enginetrace,&local_21c,uVar15,(CTraceFilterSimple *)local_284,&local_7c);
        if ((local_48._3_1_ == '\0') && (fVar29 < local_50)) {
                    /* try { // try from 00767f9e to 00767fd6 has its CatchHandler @ 007686d4 */
          uVar17 = (**(code **)(*(int *)param_2 + 0x13c))(param_2);
          local_24 = 0xff;
          local_23 = 0xff;
          local_22 = 0xff;
          local_21 = 0xff;
          INextBot::DebugConColorMsg
                    ((INextBot *)param_2,4,&local_24,
                     "%s backing up when looking for max ledge height\n",uVar17);
          local_a8 = (undefined1)local_54;
          local_d0 = local_7c;
          local_328 = local_50;
          local_cc = local_78;
          local_a7 = local_54._1_1_;
          local_c8 = local_74;
          local_c4 = local_70;
          local_a6 = local_54._2_2_;
          local_c0 = local_6c;
          local_bc = local_68;
          local_b8 = local_64;
          local_b4 = local_60;
          local_9c = (undefined2)local_48;
          local_b0 = local_5c;
          local_9a = local_48._2_1_;
          local_99 = local_48._3_1_;
          local_84 = local_30;
          local_2cc = fVar32;
          local_2c8 = fVar28;
          local_2c4 = fVar24;
          local_a4 = local_328;
        }
      }
                    /* try { // try from 0076671f to 00766a59 has its CatchHandler @ 007686d2 */
      lVar23 = (longdouble)(**(code **)(*(int *)pVVar9 + 0x134))(pVVar9);
      local_328 = (float)lVar23 * local_328;
      pcVar11 = (char *)pVVar9;
      lVar23 = (longdouble)(**(code **)(*(int *)pVVar9 + 0x130))(pVVar9);
      if (local_328 <= (float)lVar23) goto LAB_00765d78;
      local_18c = 0;
      local_1bc = local_2f0 * fVar26;
      local_1b8 = local_2ec * fVar26;
      local_1b4 = fVar26 * local_2e8;
      local_2b4 = local_2cc;
      local_2b0 = local_2c8;
      local_2ac = local_2c4;
      local_187 = local_1b8 * local_1b8 + local_1bc * local_1bc + local_1b4 * local_1b4 != 0.0;
      local_19c = (fVar31 - local_2d8) * 0.5;
      local_198 = (fVar31 - local_2d4) * 0.5;
      local_194 = (local_328 - local_2d0) * 0.5;
      local_188 = local_198 * local_198 + local_19c * local_19c + local_194 * local_194 < 1e-06;
      local_1ac = (local_2d8 + fVar31) * 0.5;
      local_1a8 = (local_2d4 + fVar31) * 0.5;
      local_1a4 = (local_328 + local_2d0) * 0.5;
      local_1cc = local_2cc + local_1ac;
      local_1ac = -local_1ac;
      local_1c8 = local_2c8 + local_1a8;
      local_1a8 = -local_1a8;
      local_1c4 = local_2c4 + local_1a4;
      local_1a4 = -local_1a4;
      local_2c0 = fVar31;
      local_2bc = fVar31;
      local_2b8 = local_328;
      (**(code **)(*enginetrace + 0x14))
                (enginetrace,&local_1cc,uVar15,(CTraceFilterSimple *)local_284,&local_d0);
      pcVar11 = (char *)param_2;
      cVar7 = INextBot::IsDebugging((INextBot *)param_2,4);
      if ((cVar7 != '\0') && (*(int *)(NextBotDebugClimbing._28_4_ + 0x30) != 0)) {
        pcVar11 = (char *)&local_2cc;
        local_78 = local_2ec * fVar26 + local_2c8;
        local_74 = local_2e8 * fVar26 + local_2c4;
        local_7c = fVar26 * local_2f0 + local_2cc;
        NDebugOverlay::SweptBox
                  ((Vector *)pcVar11,(Vector *)&local_7c,(Vector *)&local_2d8,(Vector *)&local_2c0,
                   (QAngle *)&vec3_angle,0xff,100,0,0xff,0.1);
      }
      if (((1.0 <= local_a4) && (local_9a == '\0')) || (local_99 != '\0')) goto LAB_00765d78;
      local_304 = 0;
      local_300 = 0;
      if (_towlower == (Vector *)0x0) {
        local_2a0 = (Vector *)0x0;
      }
      else {
                    /* try { // try from 00766b03 to 00766b05 has its CatchHandler @ 007686e6 */
        (**(code **)(_towlower + 0x50))
                  (_towlower,&local_304,0,0,0,0,
                   "/data/src/game/server/nextbot/path/nextbotpathfollow.cpp",0x539,
                   &Climbing(INextBot*,Path::Segment_const*,Vector_const&,Vector_const&,float)::
                    tm_fmt,"(%s)%s","NextBot","PathFollower::Climbing( Search for ledge to climb )")
        ;
        local_2a0 = _towlower;
      }
      iVar12 = _DAT_0105db00;
      local_2a8 = local_304;
      local_2a4 = local_300;
                    /* try { // try from 00766b47 to 00766b4b has its CatchHandler @ 007686e2 */
      if (((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) &&
         (iVar13 = ThreadGetCurrentId(), iVar12 == iVar13)) {
        if (*(char **)_DAT_0105d15c != "PathFollower::Climbing( Search for ledge to climb )") {
                    /* try { // try from 00768186 to 007681a9 has its CatchHandler @ 007686e2 */
          _DAT_0105d15c =
               (Vector *)CVProfNode::GetSubNode((char *)_DAT_0105d15c,0xcaa7b8,(char *)0x0,0xca8906)
          ;
        }
        puVar1 = (uint *)(_DAT_0105d1e8 + 4 + *(int *)(_DAT_0105d15c + 0x70) * 8);
        *puVar1 = *puVar1 | 4;
        CVProfNode::EnterScope();
        DAT_0105d158 = '\0';
      }
                    /* try { // try from 00766b63 to 00766ce3 has its CatchHandler @ 007686d6 */
      cVar7 = INextBot::IsDebugging((INextBot *)param_2,4);
      if ((cVar7 != '\0') && (*(int *)(NextBotDebugClimbing._28_4_ + 0x30) != 0)) {
        local_78 = local_2ec * fVar26 + local_2c8;
        local_74 = local_2e8 * fVar26 + local_2c4;
        local_7c = fVar26 * local_2f0 + local_2cc;
        NDebugOverlay::SweptBox
                  ((Vector *)&local_2cc,(Vector *)&local_7c,(Vector *)&local_2d8,
                   (Vector *)&local_2c0,(QAngle *)&vec3_angle,0xff,100,0,100,4.0);
        local_78 = local_2ec * 50.0 + local_2c8;
        local_74 = local_2e8 * 50.0 + local_2c4;
        local_7c = local_2f0 * 50.0 + local_2cc;
        NDebugOverlay::HorzArrow
                  ((Vector *)&local_2cc,(Vector *)&local_7c,2.0,0,0xff,0,0xff,true,4.0);
      }
      cVar7 = CGameTrace::DidHitNonWorldEntity((CGameTrace *)&local_d0);
                    /* try { // try from 00768143 to 00768148 has its CatchHandler @ 007686d6 */
      if ((cVar7 == '\0') ||
         (pcVar11 = (char *)param_2, cVar7 = (**(code **)(*(int *)param_2 + 0xe8))(param_2,local_84)
         , cVar7 != '\0')) {
                    /* try { // try from 00766cf7 to 00767146 has its CatchHandler @ 00768684 */
        cVar7 = INextBot::IsDebugging((INextBot *)param_2,4);
        if (cVar7 != '\0') {
          uVar17 = (**(code **)(*(int *)param_2 + 0x13c))(param_2);
          DevMsg("%3.2f: %s at potential ledge climb\n",(double)*(float *)(gpGlobals + 0xc),uVar17);
        }
        lVar23 = (longdouble)(**(code **)(*piVar10 + 0x118))(piVar10);
        fVar29 = (float)lVar23 * 0.5;
        local_358 = fVar29;
                    /* try { // try from 007681c5 to 00768266 has its CatchHandler @ 00768684 */
        if (((*(int *)(*(int *)(param_1 + 0x4758) + 0x18) == 2) &&
            (piVar19 = (int *)(**(code **)(*(int *)param_1 + 0x58))
                                        (param_1,*(int *)(param_1 + 0x4758)), piVar19 != (int *)0x0)
            ) && (*piVar19 != 0)) {
          local_74 = 0.0;
          local_7c = local_2f0 * fVar29;
          fVar24 = fVar29 * local_2ec;
          iVar12 = *piVar19;
          fVar27 = *(float *)(iVar12 + 0x10) - *(float *)(iVar12 + 4);
          if (fVar27 < ABS(local_7c)) {
            if (local_7c <= 0.0) {
              fVar27 = -fVar27;
            }
            iVar12 = *piVar19;
            local_7c = fVar27;
          }
          fVar27 = *(float *)(iVar12 + 0x14) - *(float *)(iVar12 + 8);
          local_78 = fVar24;
          if ((fVar27 < ABS(fVar24)) && (local_78 = fVar27, fVar24 <= 0.0)) {
            local_78 = -fVar27;
          }
          lVar23 = (longdouble)VectorNormalize((Vector *)&local_7c);
          local_358 = (float)lVar23;
          if (fVar29 <= (float)lVar23) {
            local_358 = fVar29;
          }
        }
        lVar23 = (longdouble)(**(code **)(*(int *)pVVar9 + 0x130))(pVVar9);
        bVar6 = false;
        local_294 = 0.0;
        fVar29 = (float)lVar23 * 0.5;
        bVar3 = true;
        local_348 = 0.0;
        bVar5 = false;
        local_324 = fVar26;
        local_31c = (float)lVar22 + 0.1;
        local_29c = fVar30;
        local_298 = fVar30;
        local_290 = fVar31;
        local_28c = fVar31;
        local_288 = (float)lVar21;
LAB_00766f8b:
        local_13c = 0;
        local_16c = local_2f0 * local_324;
        local_168 = local_2ec * local_324;
        local_164 = local_324 * local_2e8;
        local_137 = local_168 * local_168 + local_16c * local_16c + local_164 * local_164 != 0.0;
        local_144 = (local_288 - local_294) * 0.5;
        local_14c = (local_290 - local_29c) * 0.5;
        local_148 = (local_28c - local_298) * 0.5;
        local_15c = (local_290 + local_29c) * 0.5;
        local_158 = (local_298 + local_28c) * 0.5;
        local_154 = (local_294 + local_288) * 0.5;
        local_17c = local_2cc + local_15c;
        local_15c = -local_15c;
        local_178 = local_2c8 + local_158;
        local_174 = local_31c + local_2c4 + local_154;
        local_138 = local_148 * local_148 + local_14c * local_14c + local_144 * local_144 < 1e-06;
        local_158 = -local_158;
        local_154 = -local_154;
        (**(code **)(*enginetrace + 0x14))
                  (enginetrace,&local_17c,uVar15,(CTraceFilterSimple *)local_284,&local_d0);
        if (bVar3) {
          if (local_99 == '\0') {
            if ((local_a4 < 1.0) || (local_9a != '\0')) {
              bVar3 = 0.7 <= local_b0;
            }
            goto LAB_00766e99;
          }
          bVar3 = false;
        }
        else if (local_99 == '\0') {
LAB_00766e99:
          fVar27 = local_324 * local_a4;
          if (bVar5) {
            if (local_358 <= fVar27 - local_348) {
              local_11c = 0;
              local_118 = 0;
              local_2ac = local_bc;
              local_2b4 = local_c4;
              local_ec = 0;
              local_114 = (local_bc - fVar29) - local_bc;
              local_f4 = (local_288 - local_294) * 0.5;
              local_2b0 = local_c0;
              local_104 = (local_288 + local_294) * 0.5;
              local_e7 = local_114 * local_114 != 0.0;
              local_fc = (local_290 - local_29c) * 0.5;
              local_124 = local_bc + local_104;
              local_10c = (local_290 + local_29c) * 0.5;
              local_f8 = (local_28c - local_298) * 0.5;
              local_108 = (local_28c + local_298) * 0.5;
              local_128 = local_c0 + local_108;
              local_e8 = local_fc * local_fc + local_f4 * local_f4 + local_f8 * local_f8 < 1e-06;
              local_12c = local_c4 + local_10c;
              local_10c = -local_10c;
              local_108 = -local_108;
              local_104 = -local_104;
              (**(code **)(*enginetrace + 0x14))
                        (enginetrace,&local_12c,uVar15,(CTraceFilterSimple *)local_284,&local_d0);
              local_2b4 = local_c4;
              local_2b0 = local_c0;
              local_2ac = local_bc;
              if (((local_9a == '\0') &&
                  (((local_a4 < 1.0 || (local_99 != '\0')) && (0.7 <= local_b0)))) &&
                 (((local_34c <= 0.0 ||
                   (cVar7 = CGameTrace::DidHitWorld((CGameTrace *)&local_d0), cVar7 == '\0')) ||
                  (ABS((local_bc - local_2c4) - local_34c) <= (float)lVar20)))) {
                local_1cc = local_2b4;
                local_1c8 = local_2b0;
                local_1c4 = local_2ac;
                local_17c = local_2b4;
                local_178 = local_2b0;
                local_174 = local_2ac;
                if (fVar25 <= 4.0) goto LAB_00767a07;
                local_310 = 4.0;
                goto LAB_00767754;
              }
            }
            local_324 = local_358 + 0.1 + fVar27;
            local_348 = fVar27;
            if (local_324 <= fVar26) {
              local_324 = fVar26;
            }
          }
          else if ((local_a4 < 1.0) || (local_9a != '\0')) {
            local_324 = local_358 + 0.1 + fVar27;
            if (local_324 <= fVar26) {
              local_324 = fVar26;
            }
                    /* try { // try from 0076733b to 00767ca8 has its CatchHandler @ 00768684 */
            cVar7 = INextBot::IsDebugging((INextBot *)param_2,4);
            bVar5 = true;
            local_348 = fVar27;
            if (cVar7 != '\0') {
              DevMsg("%3.2f: Climbing - found wall.\n");
              bVar5 = true;
              if (*(int *)(NextBotDebugClimbing._28_4_ + 0x30) != 0) {
                local_78 = local_b4 * 20.0 + local_c0;
                local_74 = local_b0 * 20.0 + local_bc;
                local_7c = local_b8 * 20.0 + local_c4;
                NDebugOverlay::HorzArrow
                          ((Vector *)&local_c4,(Vector *)&local_7c,5.0,0xff,100,0,0xff,true,4.0);
                bVar5 = true;
              }
            }
          }
          else {
                    /* try { // try from 00767229 to 00767282 has its CatchHandler @ 00768684 */
            lVar21 = (longdouble)(**(code **)(*piVar10 + 0x124))(piVar10);
            if (((float)lVar21 < local_31c) && (!bVar4)) goto code_r0x0076725b;
          }
        }
        local_31c = local_31c + fVar29;
        if (local_328 <= local_31c) {
          if (bVar6) goto LAB_00767273;
          bVar6 = true;
          local_31c = local_328;
        }
        goto LAB_00766f8b;
      }
      goto LAB_0076728b;
    }
  }
  goto LAB_00765d71;
  while( true ) {
    local_2b4 = local_c4;
    local_310 = local_310 + 4.0;
    local_2b0 = local_c0;
    local_2ac = local_bc;
    if (fVar25 <= local_310) break;
LAB_00767754:
    local_6c = 0.0;
    local_68 = 0.0;
    local_3c = 0;
    local_178 = local_178 - local_2ec * 4.0;
    local_174 = local_174 - local_2e8 * 4.0;
    local_17c = local_17c - local_2f0 * 4.0;
    local_64 = (local_174 - fVar29) - local_174;
    local_44 = (local_288 - local_294) * 0.5;
    local_54 = (local_288 + local_294) * 0.5;
    local_48 = (local_28c - local_298) * 0.5;
    local_74 = local_174 + local_54;
    local_5c = (local_290 + local_29c) * 0.5;
    local_4c = (local_290 - local_29c) * 0.5;
    local_58 = (local_28c + local_298) * 0.5;
    local_78 = local_178 + local_58;
    local_7c = local_17c + local_5c;
    _local_38 = CONCAT31(CONCAT21(auStack_37._1_2_,local_64 * local_64 != 0.0),
                         local_48 * local_48 + local_4c * local_4c + local_44 * local_44 < 1e-06);
    local_5c = -local_5c;
    local_58 = -local_58;
    local_54 = -local_54;
    (**(code **)(*enginetrace + 0x14))
              (enginetrace,(Vector *)&local_7c,uVar15,(CTraceFilterSimple *)local_284,&local_d0);
    cVar7 = INextBot::IsDebugging((INextBot *)param_2,4);
    if ((cVar7 != '\0') && (*(int *)(NextBotDebugClimbing._28_4_ + 0x30) != 0)) {
      local_7c = local_17c;
      local_78 = local_178;
      local_74 = local_174 - fVar29;
      NDebugOverlay::SweptBox
                ((Vector *)&local_17c,(Vector *)&local_7c,(Vector *)&local_29c,(Vector *)&local_290,
                 (QAngle *)&vec3_angle,0xff,0,0,0xff,4.0);
    }
    if ((((1.0 <= local_a4) && (local_9a == '\0')) && (local_99 == '\0')) || (local_b0 < 0.7))
    break;
  }
LAB_00767a07:
  local_12c = local_29c;
  local_128 = local_298;
  local_2b0 = local_2ec * fVar31 + local_2b0;
  local_2b4 = fVar31 * local_2f0 + local_2b4;
  local_2ac = local_2e8 * fVar31 + local_2ac;
  local_124 = local_294;
  ILocomotion::TraceHull
            ((Vector *)&local_1cc,(Vector *)&local_2b4,(Vector *)&local_12c,(Vector *)&local_290,
             uVar15,(ITraceFilter *)local_284,(CGameTrace *)&local_d0);
  local_2ac = local_bc;
  local_74 = local_bc + 18.0;
  local_2b4 = local_c4;
  local_2b0 = local_c0;
  local_7c = local_c4;
  local_78 = local_c0;
  ILocomotion::TraceHull
            ((Vector *)&local_7c,(Vector *)&local_2b4,(Vector *)&local_29c,(Vector *)&local_290,
             uVar15,(ITraceFilter *)local_284,(CGameTrace *)&local_d0);
  if (local_99 == '\0') {
    local_2b4 = local_c4;
    local_2b0 = local_c0;
    local_2ac = local_bc;
  }
  pcVar11 = (char *)param_2;
  cVar7 = INextBot::IsDebugging((INextBot *)param_2,4);
  if ((cVar7 != '\0') && (*(int *)(NextBotDebugClimbing._28_4_ + 0x30) != 0)) {
    pcVar11 = (char *)&local_2b4;
    NDebugOverlay::SweptBox
              ((Vector *)pcVar11,(Vector *)pcVar11,(Vector *)&local_29c,(Vector *)&local_290,
               (QAngle *)&vec3_angle,0,0xff,0,0xff,4.0);
    if (0.1 < (local_2b0 - local_1c8) * (local_2b0 - local_1c8) +
              (local_2b4 - local_1cc) * (local_2b4 - local_1cc)) {
      pcVar11 = (char *)&local_1cc;
      NDebugOverlay::SweptBox
                ((Vector *)pcVar11,(Vector *)pcVar11,(Vector *)&local_29c,(Vector *)&local_290,
                 (QAngle *)&vec3_angle,0xff,0,0,0xff,4.0);
    }
  }
  uVar8 = 0;
  if (!bVar3) {
    cVar7 = INextBot::IsDebugging((INextBot *)param_2,4);
    if ((cVar7 != '\0') &&
       (DevMsg("%3.2f: STARTING LEDGE CLIMB UP\n",(double)*(float *)(gpGlobals + 0xc)),
       *(int *)(NextBotDebugClimbing._28_4_ + 0x30) != 0)) {
      NDebugOverlay::Cross3D((Vector *)&local_2b4,10.0,0,0xff,0,true,4.0);
      fVar25 = local_2f0 * fVar31;
      fVar26 = fVar31 * -local_2ec;
      local_218 = fVar31 * local_2ec + local_2c8;
      local_264 = local_2e8 * fVar31 + local_2c4;
      local_26c = fVar26 + local_2cc + fVar25;
      local_268 = fVar25 + local_218;
      local_21c = (local_2cc + fVar25) - fVar26;
      local_218 = local_218 - fVar25;
      local_1c4 = local_264 + local_31c;
      local_214 = local_264;
      local_1cc = local_26c;
      local_1c8 = local_268;
      local_17c = local_21c;
      local_178 = local_218;
      local_174 = local_1c4;
      NDebugOverlay::Triangle
                ((Vector *)&local_21c,(Vector *)&local_26c,(Vector *)&local_1cc,0xff,100,0,100,true,
                 4.0);
      NDebugOverlay::Triangle
                ((Vector *)&local_21c,(Vector *)&local_1cc,(Vector *)&local_17c,0xff,100,0,100,true,
                 4.0);
      local_12c = fVar26 + local_2b4;
      local_128 = fVar25 + local_2b0;
      local_7c = local_2b4 - fVar26;
      local_78 = local_2b0 - fVar25;
      local_124 = local_2ac;
      local_74 = local_2ac;
      NDebugOverlay::Triangle
                ((Vector *)&local_17c,(Vector *)&local_1cc,(Vector *)&local_12c,0,100,0xff,100,true,
                 4.0);
      NDebugOverlay::Triangle
                ((Vector *)&local_17c,(Vector *)&local_12c,(Vector *)&local_7c,0,100,0xff,100,true,
                 4.0);
    }
    uVar8 = (**(code **)(*(int *)pVVar9 + 0xbc))(pVVar9,&local_2b4,&local_2f0,local_84);
    pcVar11 = (char *)pVVar9;
  }
  iVar12 = _DAT_0105db00;
  if (((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) &&
     (iVar13 = ThreadGetCurrentId(), iVar12 == iVar13)) {
    pcVar11 = (char *)_DAT_0105d15c;
    cVar7 = CVProfNode::ExitScope();
    if (cVar7 != '\0') {
      _DAT_0105d15c = *(Vector **)(_DAT_0105d15c + 100);
    }
    DAT_0105d158 = _DAT_0105d15c == (Vector *)0x105d160;
  }
  if (local_2a0 != (Vector *)0x0) {
    pcVar11 = (char *)local_2a0;
    (**(code **)(local_2a0 + 0x54))(local_2a0,local_2a8,local_2a4,0,0,0);
  }
  goto LAB_00765d78;
code_r0x0076725b:
  cVar7 = INextBot::IsDebugging((INextBot *)param_2,4);
  if (cVar7 != '\0') {
    DevMsg("%3.2f: Climbing - skipping overhead climb we can walk/crawl under.\n",
           (double)*(float *)(gpGlobals + 0xc));
  }
LAB_00767273:
  cVar7 = INextBot::IsDebugging((INextBot *)param_2,4);
  pcVar11 = (char *)param_2;
  if (cVar7 != '\0') {
    pcVar11 = "%3.2f: CANT FIND LEDGE TO CLIMB\n";
                    /* try { // try from 0076830f to 0076867e has its CatchHandler @ 00768684 */
    DevMsg("%3.2f: CANT FIND LEDGE TO CLIMB\n",(double)*(float *)(gpGlobals + 0xc));
  }
LAB_0076728b:
  iVar12 = _DAT_0105db00;
  if (((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) &&
     (iVar13 = ThreadGetCurrentId(), iVar12 == iVar13)) {
    pcVar11 = (char *)_DAT_0105d15c;
    cVar7 = CVProfNode::ExitScope();
    if (cVar7 != '\0') {
      _DAT_0105d15c = *(Vector **)(_DAT_0105d15c + 100);
    }
    DAT_0105d158 = _DAT_0105d15c == (Vector *)0x105d160;
  }
  if (local_2a0 != (Vector *)0x0) {
    pcVar11 = (char *)local_2a0;
    (**(code **)(local_2a0 + 0x54))(local_2a0,local_2a8,local_2a4,0,0,0);
  }
LAB_00765d71:
  uVar8 = 0;
LAB_00765d78:
  iVar12 = _DAT_0105db00;
  if (((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) &&
     (iVar13 = ThreadGetCurrentId(pcVar11), iVar12 == iVar13)) {
    pcVar11 = (char *)_DAT_0105d15c;
    cVar7 = CVProfNode::ExitScope();
    if (cVar7 != '\0') {
      _DAT_0105d15c = *(Vector **)(_DAT_0105d15c + 100);
    }
    DAT_0105d158 = _DAT_0105d15c == (Vector *)0x105d160;
  }
  if (local_2f4 != (Vector *)0x0) {
    pcVar11 = (char *)local_2f4;
    (**(code **)(local_2f4 + 0x54))(local_2f4,local_2fc,local_2f8,0,0,0);
  }
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(pcVar11);
  }
  return uVar8;
}

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)