L L4D2node

CTerrorPlayer::AvoidPlayers

0x004f5490 · 3838 bytes · __thiscall

_ZN13CTerrorPlayer12AvoidPlayersEP8CUserCmd

Decompiled

undefined (2 params)

/* CTerrorPlayer::AvoidPlayers(CUserCmd*) */

void __thiscall CTerrorPlayer::AvoidPlayers(CTerrorPlayer *this,CUserCmd *param_1)

{
  uint uVar1;
  uint uVar2;
  code *pcVar3;
  char cVar4;
  byte bVar5;
  int *piVar6;
  int iVar7;
  CTerrorPlayer *pCVar8;
  undefined4 uVar9;
  float *pfVar10;
  float *pfVar11;
  undefined4 uVar12;
  undefined *puVar13;
  undefined4 extraout_ECX;
  uint uVar14;
  uint *puVar15;
  uint *puVar16;
  CUserCmd *pCVar17;
  undefined4 *puVar18;
  byte bVar19;
  longdouble lVar20;
  float fVar21;
  float fVar22;
  float fVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  float fVar27;
  uint auStackY_188 [6];
  float *local_170;
  float *local_144;
  CUserCmd *local_140;
  float *local_134;
  float local_130;
  float local_128;
  float local_124;
  float local_120;
  float local_11c;
  float local_118;
  float local_114;
  float local_110;
  float local_10c;
  float local_108;
  float local_104;
  float local_100;
  float local_fc;
  float local_f8;
  float local_f4;
  float local_f0;
  float local_ec;
  float local_e8;
  float local_e4;
  undefined4 local_e0 [3];
  float local_d4;
  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;
  float local_ac;
  float local_a8;
  float local_a4;
  float local_a0;
  float local_9c;
  undefined1 local_98 [12];
  undefined1 local_8c [12];
  undefined **local_80 [4];
  float local_70;
  float local_6c;
  float local_68;
  float local_44;
  char local_3a;
  char local_39;
  
  bVar19 = 0;
  local_170 = (float *)0x4f54aa;
  cVar4 = (**(code **)(*(int *)this + 300))();
  if (cVar4 != '\0') {
    if (0.0 < *(float *)(this + 0x2e74)) {
      local_170 = (float *)0x4f54cc;
      lVar20 = (longdouble)CountdownTimer::Now();
      if ((float)lVar20 < *(float *)(this + 0x2e74)) {
        return;
      }
    }
    local_170 = (float *)0x4f54f5;
    cVar4 = CTerrorPlayerAnimState::IsHealing(*(CTerrorPlayerAnimState **)(this + 0x2910));
    if ((((cVar4 == '\0') &&
         ((((uVar14 = *(uint *)(this + 0x3e68), uVar14 == 0xffffffff ||
            (puVar13 = g_pEntityList + (uVar14 & 0xfff) * 0x10, puVar13 == (undefined *)0xfffffffc))
           || (*(uint *)(puVar13 + 8) != uVar14 >> 0xc)) || (*(int *)(puVar13 + 4) == 0)))) &&
        (((uVar1 = *(uint *)(this + 0x3e48), uVar1 == 0xffffffff ||
          (puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar13 == (undefined *)0xfffffffc)) ||
         ((*(uint *)(puVar13 + 8) != uVar1 >> 0xc || (*(int *)(puVar13 + 4) == 0)))))) &&
       (((((uVar2 = *(uint *)(this + 0x3edc), uVar2 == 0xffffffff ||
           (puVar13 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar13 == (undefined *)0xfffffffc))
          || (*(uint *)(puVar13 + 8) != uVar2 >> 0xc)) || (*(int *)(puVar13 + 4) == 0)) &&
        ((((uVar2 = *(uint *)(this + 0x3ee0), uVar2 == 0xffffffff ||
           (puVar13 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar13 == (undefined *)0xfffffffc))
          || (*(uint *)(puVar13 + 8) != uVar2 >> 0xc)) || (*(int *)(puVar13 + 4) == 0)))))) {
      if (((((uVar14 == 0xffffffff) ||
            (puVar13 = g_pEntityList + (uVar14 & 0xfff) * 0x10, puVar13 == (undefined *)0xfffffffc))
           || ((*(uint *)(puVar13 + 8) != uVar14 >> 0xc || (*(int *)(puVar13 + 4) == 0)))) &&
          (((uVar1 == 0xffffffff ||
            (puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar13 == (undefined *)0xfffffffc))
           || ((*(uint *)(puVar13 + 8) != uVar1 >> 0xc || (*(int *)(puVar13 + 4) == 0)))))) &&
         ((((uVar14 = *(uint *)(this + 0x33c4), uVar14 == 0xffffffff ||
            (puVar13 = g_pEntityList + (uVar14 & 0xfff) * 0x10, puVar13 == (undefined *)0xfffffffc))
           || (*(uint *)(puVar13 + 8) != uVar14 >> 0xc)) ||
          ((*(int *)(puVar13 + 4) == 0 || (this[0x39f1] != (CTerrorPlayer)0x0)))))) {
        local_170 = (float *)0x4f5655;
        cVar4 = (**(code **)(*(int *)this + 0x7e8))();
        if (cVar4 != '\0') {
          return;
        }
      }
      local_170 = (float *)0x4f5668;
      cVar4 = (**(code **)(*(int *)this + 0x558))();
      if (cVar4 == '\0') {
        local_170 = (float *)0x4f5678;
        piVar6 = (int *)CBaseEntity::GetTeam((CBaseEntity *)this);
        if (piVar6 != (int *)0x0) {
          if (AvoidPlayers(CUserCmd*)::vecUp == '\0') {
            local_170 = (float *)0x4f61b4;
            iVar7 = __cxa_guard_acquire();
            if (iVar7 != 0) {
              AvoidPlayers(CUserCmd*)::vecUp = 0.0;
              DAT_00fa42ac = 0.0;
              DAT_00fa42b0 = 1.0;
              local_170 = (float *)0x4f61e6;
              __cxa_guard_release();
            }
          }
          if (((byte)this[0x14d] & 8) != 0) {
            local_170 = (float *)0x4f61a3;
            CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
          }
          fVar27 = *(float *)(this + 0x2e0);
          fVar26 = *(float *)(this + 0x2e4);
          fVar24 = *(float *)(this + 0x2e8);
          local_170 = (float *)0x4f56e1;
          (**(code **)(*(int *)this + 0x5b0))();
          local_170 = &local_11c;
          auStackY_188[5] = 0x4f56f7;
          auStackY_188[5] = (**(code **)(*(int *)this + 0x5b4))();
          uVar14 = 0;
          fVar24 = fVar24 + (local_114 - local_120) * 0.5;
          local_128 = local_128 + fVar27;
          local_120 = local_120 + fVar24;
          local_114 = local_114 + fVar24;
          local_124 = local_124 + fVar26;
          local_11c = local_11c + fVar27;
          local_118 = local_118 + fVar26;
          puVar16 = auStackY_188 + 5;
          while( true ) {
            iVar7 = *piVar6;
            *puVar16 = (uint)piVar6;
            pcVar3 = *(code **)(iVar7 + 0x354);
            puVar16[-1] = 0x4f582c;
            iVar7 = (*pcVar3)();
            if (iVar7 <= (int)uVar14) break;
            iVar7 = *piVar6;
            puVar16[1] = uVar14;
            *puVar16 = (uint)piVar6;
            pcVar3 = *(code **)(iVar7 + 0x358);
            puVar16[-1] = 0x4f5843;
            pCVar8 = (CTerrorPlayer *)(*pcVar3)();
            puVar15 = puVar16;
            if ((pCVar8 != (CTerrorPlayer *)0x0) && (this != pCVar8)) {
              uVar1 = *(uint *)(pCVar8 + 0x3e68);
              if ((((uVar1 == 0xffffffff) ||
                   (((puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10,
                     puVar13 == (undefined *)0xfffffffc || (*(uint *)(puVar13 + 8) != uVar1 >> 0xc))
                    || (*(int *)(puVar13 + 4) == 0)))) &&
                  ((((uVar1 = *(uint *)(pCVar8 + 0x3e48), uVar1 == 0xffffffff ||
                     (puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10,
                     puVar13 == (undefined *)0xfffffffc)) ||
                    (*(uint *)(puVar13 + 8) != uVar1 >> 0xc)) || (*(int *)(puVar13 + 4) == 0)))) &&
                 (((uVar1 = *(uint *)(pCVar8 + 0x33c4), uVar1 == 0xffffffff ||
                   (puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10,
                   puVar13 == (undefined *)0xfffffffc)) ||
                  ((*(uint *)(puVar13 + 8) != uVar1 >> 0xc ||
                   ((*(int *)(puVar13 + 4) == 0 || (pCVar8[0x39f1] != (CTerrorPlayer)0x0)))))))) {
                iVar7 = *(int *)pCVar8;
                *puVar16 = (uint)pCVar8;
                pcVar3 = *(code **)(iVar7 + 0x7e8);
                puVar16[-1] = 0x4f581a;
                cVar4 = (*pcVar3)();
                if (cVar4 != '\0') goto LAB_004f581e;
              }
              iVar7 = *(int *)pCVar8;
              *puVar16 = (uint)pCVar8;
              pcVar3 = *(code **)(iVar7 + 0x558);
              puVar16[-1] = 0x4f58a3;
              cVar4 = (*pcVar3)();
              if ((cVar4 == '\0') && (((byte)pCVar8[0x1b4] & 4) == 0)) {
                if (((byte)pCVar8[0x14d] & 8) != 0) {
                  *puVar16 = (uint)pCVar8;
                  puVar16[-1] = 0x4f58c9;
                  CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*puVar16);
                }
                fVar22 = *(float *)(pCVar8 + 0x2e0);
                iVar7 = *(int *)pCVar8;
                fVar23 = *(float *)(pCVar8 + 0x2e4);
                fVar21 = *(float *)(pCVar8 + 0x2e8);
                *puVar16 = (uint)&local_70;
                puVar16[1] = (uint)pCVar8;
                pcVar3 = *(code **)(iVar7 + 0x5b0);
                puVar16[-1] = 0x4f5914;
                uVar9 = (*pcVar3)();
                puVar16[-1] = uVar9;
                local_110 = local_70;
                local_10c = local_6c;
                local_108 = local_68;
                iVar7 = *(int *)pCVar8;
                puVar16[-1] = (uint)&local_70;
                *puVar16 = (uint)pCVar8;
                pcVar3 = *(code **)(iVar7 + 0x5b4);
                puVar16[-2] = 0x4f594e;
                uVar9 = (*pcVar3)();
                puVar16[-2] = uVar9;
                puVar16[1] = (uint)&local_104;
                *puVar16 = (uint)&local_110;
                local_104 = local_70 + fVar22;
                puVar16[-1] = (uint)&local_11c;
                local_110 = local_110 + fVar22;
                puVar16[-2] = (uint)&local_128;
                local_100 = local_6c + fVar23;
                fVar21 = (local_68 - local_108) * 0.5 + fVar21;
                local_10c = local_10c + fVar23;
                local_108 = local_108 + fVar21;
                local_fc = fVar21 + local_68;
                puVar16[-3] = 0x4f5a11;
                cVar4 = IsBoxIntersectingBox
                                  ((Vector *)puVar16[-2],(Vector *)puVar16[-1],(Vector *)*puVar16,
                                   (Vector *)puVar16[1]);
                puVar15 = puVar16 + -2;
                if (cVar4 != '\0') {
                  iVar7 = *(int *)this;
                  puVar16[-2] = (uint)this;
                  pcVar3 = *(code **)(iVar7 + 0x778);
                  puVar16[-3] = 0x4f5a27;
                  cVar4 = (*pcVar3)();
                  if (cVar4 == '\0') {
                    iVar7 = *(int *)pCVar8;
                    puVar16[-2] = (uint)pCVar8;
                    pcVar3 = *(code **)(iVar7 + 0x778);
                    puVar16[-3] = 0x4f61f6;
                    cVar4 = (*pcVar3)();
                    if (cVar4 != '\0') {
                      return;
                    }
                  }
                  iVar7 = *(int *)this;
                  puVar16[-2] = (uint)this;
                  pcVar3 = *(code **)(iVar7 + 0x778);
                  puVar16[-3] = 0x4f5a3a;
                  cVar4 = (*pcVar3)();
                  bVar5 = 0;
                  if (cVar4 != '\0') {
                    iVar7 = *(int *)pCVar8;
                    puVar16[-2] = (uint)pCVar8;
                    pcVar3 = *(code **)(iVar7 + 0x778);
                    puVar16[-3] = 0x4f627e;
                    bVar5 = (*pcVar3)();
                    bVar5 = bVar5 ^ 1;
                  }
                  iVar7 = *(int *)pCVar8;
                  puVar16[-2] = (uint)pCVar8;
                  pcVar3 = *(code **)(iVar7 + 0x288);
                  puVar16[-3] = 0x4f5a55;
                  pfVar10 = (float *)(*pcVar3)();
                  fVar27 = *pfVar10 - fVar27;
                  fVar26 = pfVar10[1] - fVar26;
                  fVar24 = pfVar10[2] - fVar24;
                  iVar7 = *(int *)(pCVar8 + 0x194);
                  puVar16[-2] = (uint)(pCVar8 + 0x194);
                  pcVar3 = *(code **)(iVar7 + 4);
                  puVar16[-3] = 0x4f5aab;
                  pfVar10 = (float *)(*pcVar3)();
                  iVar7 = *(int *)(pCVar8 + 0x194);
                  puVar16[-2] = (uint)(pCVar8 + 0x194);
                  pcVar3 = *(code **)(iVar7 + 8);
                  puVar16[-3] = 0x4f5abf;
                  pfVar11 = (float *)(*pcVar3)();
                  fVar22 = SQRT((pfVar11[1] - pfVar10[1]) * (pfVar11[1] - pfVar10[1]) +
                                (*pfVar11 - *pfVar10) * (*pfVar11 - *pfVar10));
                  fVar23 = SQRT(fVar27 * fVar27 + fVar26 * fVar26 + fVar24 * fVar24);
                  if (fVar22 == 0.0) {
                    local_130 = (float)((uint)(float)*(int *)(player_max_separation_force._28_4_ +
                                                             0x30) & -(uint)(0.0 <= fVar23));
                  }
                  else {
                    local_130 = (fVar23 - fVar22) / -fVar22;
                    if (1.0 <= local_130) {
                      local_130 = 1.0;
                    }
                    if (local_130 <= 0.0) {
                      local_130 = 0.0;
                    }
                    local_130 = local_130 *
                                (float)*(int *)(player_max_separation_force._28_4_ + 0x30);
                  }
                  if (bVar5 != 0) {
                    local_130 = local_130 * *(float *)(sb_pushscale._28_4_ + 0x2c);
                  }
                  if (local_130 < 0.01) {
                    return;
                  }
                  if (((byte)this[0x14d] & 0x10) != 0) {
                    puVar16[-2] = (uint)this;
                    puVar16[-3] = 0x4f5bbb;
                    CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)puVar16[-2]);
                  }
                  if (*(float *)(this + 0x278) * *(float *)(this + 0x278) +
                      *(float *)(this + 0x274) * *(float *)(this + 0x274) <= 0.1) {
                    pCVar17 = param_1 + 0xc;
                    pfVar10 = &local_70;
                    for (iVar7 = 3; iVar7 != 0; iVar7 = iVar7 + -1) {
                      *pfVar10 = *(float *)pCVar17;
                      pCVar17 = pCVar17 + (uint)bVar19 * -8 + 4;
                      pfVar10 = pfVar10 + (uint)bVar19 * -2 + 1;
                    }
                    *puVar16 = (uint)&local_f8;
                    puVar16[1] = 0;
                    puVar16[-1] = 0;
                    puVar16[-2] = (uint)&local_70;
                    local_70 = 0.0;
                    puVar16[-3] = 0x4f6399;
                    AngleVectors((QAngle *)puVar16[-2],(Vector *)puVar16[-1],(Vector *)*puVar16,
                                 (Vector *)puVar16[1]);
                  }
                  else {
                    if (((byte)this[0x14d] & 0x10) != 0) {
                      puVar16[-2] = (uint)this;
                      puVar16[-3] = 0x4f5bf5;
                      CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)puVar16[-2]);
                    }
                    fVar22 = *(float *)(this + 0x278);
                    fVar23 = *(float *)(this + 0x274);
                    puVar16[-2] = (uint)&local_f8;
                    local_f4 = DAT_00fa42b0 * fVar23;
                    local_f8 = -(fVar22 * DAT_00fa42b0);
                    local_f0 = AvoidPlayers(CUserCmd*)::vecUp * fVar22 - DAT_00fa42ac * fVar23;
                    puVar16[-3] = 0x4f5c65;
                    VectorNormalize((Vector *)puVar16[-2]);
                  }
                  local_140 = param_1 + 0xc;
                  local_144 = &local_70;
                  if (fVar26 * local_f4 + fVar27 * local_f8 + fVar24 * local_f0 < 0.0) {
                    local_ec = local_f8 * local_130;
                    local_e8 = local_f4 * local_130;
                    local_e4 = local_f0 * local_130;
                  }
                  else {
                    fVar27 = -local_130;
                    local_ec = local_f8 * fVar27;
                    local_e8 = local_f4 * fVar27;
                    local_e4 = fVar27 * local_f0;
                  }
                  fVar27 = *(float *)(this + 0x1ff8);
                  if (((byte)this[0x150] & 2) != 0) {
                    puVar16[-2] = (uint)this;
                    puVar16[-3] = 0x4f6303;
                    iVar7 = CBaseEntity::GetGroundEntity((CBaseEntity *)puVar16[-2]);
                    if (iVar7 != 0) {
                      fVar27 = fVar27 * 1.3333334;
                    }
                  }
                  if (fVar27 * fVar27 <
                      local_e8 * local_e8 + local_ec * local_ec + local_e4 * local_e4) {
                    puVar16[-2] = (uint)&local_ec;
                    puVar16[-3] = 0x4f62ac;
                    VectorNormalize((Vector *)puVar16[-2]);
                    local_ec = local_ec * fVar27;
                    local_e8 = local_e8 * fVar27;
                    local_e4 = fVar27 * local_e4;
                  }
                  local_134 = &local_ec;
                  puVar18 = local_e0;
                  for (iVar7 = 3; iVar7 != 0; iVar7 = iVar7 + -1) {
                    *puVar18 = *(undefined4 *)local_140;
                    local_140 = local_140 + (uint)bVar19 * -8 + 4;
                    puVar18 = puVar18 + (uint)bVar19 * -2 + 1;
                  }
                  *puVar16 = (uint)&local_c8;
                  puVar16[-1] = (uint)&local_d4;
                  puVar16[-2] = (uint)local_e0;
                  puVar16[1] = 0;
                  local_e0[0] = 0;
                  puVar16[-3] = 0x4f5da4;
                  AngleVectors((QAngle *)puVar16[-2],(Vector *)puVar16[-1],(Vector *)*puVar16,
                               (Vector *)puVar16[1]);
                  pfVar10 = &local_bc;
                  for (iVar7 = 3; iVar7 != 0; iVar7 = iVar7 + -1) {
                    *pfVar10 = *local_134;
                    local_134 = local_134 + (uint)bVar19 * -2 + 1;
                    pfVar10 = pfVar10 + (uint)bVar19 * -2 + 1;
                  }
                  puVar16[-2] = (uint)&local_bc;
                  puVar16[-3] = 0x4f5dc8;
                  VectorNormalize((Vector *)puVar16[-2]);
                  puVar16[1] = 0;
                  *puVar16 = 8;
                  puVar16[-1] = 0;
                  puVar16[-2] = (uint)local_80;
                  puVar16[-3] = 0x4f5dea;
                  CTraceFilterSimple::CTraceFilterSimple
                            ((CTraceFilterSimple *)puVar16[-2],(IHandleEntity *)puVar16[-1],*puVar16
                             ,(_func_bool_IHandleEntity_ptr_int *)puVar16[1]);
                  iVar7 = *(int *)this;
                  local_80[0] = &PTR_ShouldHitEntity_00c54558;
                  puVar16[-1] = 0;
                  puVar16[-2] = (uint)this;
                  pcVar3 = *(code **)(iVar7 + 0x7a0);
                  puVar16[-3] = 0x4f5e04;
                  uVar9 = (*pcVar3)();
                  iVar7 = *(int *)this;
                  puVar16[-2] = (uint)local_8c;
                  puVar16[-1] = (uint)this;
                  pcVar3 = *(code **)(iVar7 + 0x5b4);
                  puVar16[-3] = 0x4f5e1f;
                  (*pcVar3)();
                  puVar16[-3] = extraout_ECX;
                  iVar7 = *(int *)this;
                  puVar16[-2] = (uint)this;
                  puVar16[-3] = (uint)local_98;
                  pcVar3 = *(code **)(iVar7 + 0x5b0);
                  puVar16[-4] = 0x4f5e2f;
                  uVar12 = (*pcVar3)();
                  puVar16[-4] = uVar12;
                  fVar26 = local_b8 * 20.0;
                  uVar14 = *(uint *)(this + 0x14c);
                  fVar27 = *(float *)(this + 0x1acc);
                  fVar24 = local_b4 * 20.0;
                  fVar22 = local_bc * 20.0;
                  if ((uVar14 & 0x800) != 0) {
                    puVar16[-4] = (uint)this;
                    puVar16[-5] = 0x4f5ea8;
                    CBaseEntity::CalcAbsolutePosition((CBaseEntity *)puVar16[-4]);
                    uVar14 = *(uint *)(this + 0x14c);
                  }
                  fVar25 = local_bc * 20.0;
                  fVar21 = local_b8 * 20.0;
                  fVar23 = local_b4 * 20.0;
                  local_a4 = fVar22 + *(float *)(this + 0x2e0);
                  local_a0 = *(float *)(this + 0x2e4) + fVar26;
                  local_9c = (*(float *)(this + 0x2e8) + fVar24) - fVar27;
                  if ((uVar14 & 0x800) != 0) {
                    puVar16[-4] = (uint)this;
                    puVar16[-5] = 0x4f5f4f;
                    CBaseEntity::CalcAbsolutePosition((CBaseEntity *)puVar16[-4]);
                  }
                  fVar27 = *(float *)(this + 0x2e0);
                  fVar26 = *(float *)(this + 0x2e4);
                  fVar24 = *(float *)(this + 0x2e8);
                  puVar16[1] = (uint)local_80;
                  puVar16[2] = (uint)local_144;
                  puVar16[-2] = (uint)local_98;
                  local_b0 = fVar25 + fVar27;
                  local_ac = fVar21 + fVar26;
                  *puVar16 = uVar9;
                  puVar16[-1] = (uint)local_8c;
                  puVar16[-3] = (uint)&local_a4;
                  puVar16[-4] = (uint)&local_b0;
                  local_a8 = fVar23 + fVar24;
                  puVar16[-5] = 0x4f5fd5;
                  UTIL_TraceHull((Vector *)puVar16[-4],(Vector *)puVar16[-3],(Vector *)puVar16[-2],
                                 (Vector *)puVar16[-1],*puVar16,(ITraceFilter *)puVar16[1],
                                 (CGameTrace *)puVar16[2]);
                  if (((1.0 <= local_44) && (local_3a == '\0')) && (local_39 == '\0')) {
                    return;
                  }
                  fVar26 = (local_c4 * local_b8 + local_c8 * local_bc + local_c0 * local_b4) *
                           local_130 + *(float *)(param_1 + 0x1c);
                  fVar27 = (local_b8 * local_d0 + local_bc * local_d4 + local_b4 * local_cc) *
                           local_130 + *(float *)(param_1 + 0x18);
                  *(float *)(param_1 + 0x1c) = fVar26;
                  *(float *)(param_1 + 0x18) = fVar27;
                  fVar24 = ABS(*(float *)(cl_forwardspeed._28_4_ + 0x2c)) / fVar27;
                  if (fVar27 <= ABS(*(float *)(cl_forwardspeed._28_4_ + 0x2c))) {
                    if (-ABS(*(float *)(cl_backspeed._28_4_ + 0x2c)) <= fVar27) {
                      fVar24 = 1.0;
                    }
                    else {
                      fVar24 = ABS(*(float *)(cl_backspeed._28_4_ + 0x2c)) / ABS(fVar27);
                    }
                  }
                  uVar14 = -(uint)(ABS(*(float *)(cl_sidespeed._28_4_ + 0x2c)) < ABS(fVar26));
                  fVar22 = (float)(~uVar14 & 0x3f800000 |
                                  (uint)(ABS(*(float *)(cl_sidespeed._28_4_ + 0x2c)) / ABS(fVar26))
                                  & uVar14);
                  if (fVar24 <= fVar22) {
                    fVar22 = fVar24;
                  }
                  *(float *)(param_1 + 0x18) = fVar27 * fVar22;
                  *(float *)(param_1 + 0x1c) = fVar26 * fVar22;
                  return;
                }
              }
            }
LAB_004f581e:
            uVar14 = uVar14 + 1;
            puVar16 = puVar15;
          }
        }
      }
    }
  }
  return;
}

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)