L L4D2node

CTerrorGameMovement::UpdatePosition

0x004fe5f0 · 5053 bytes · __thiscall

_ZN19CTerrorGameMovement14UpdatePositionEP13CTerrorPlayerRK6VectorS4_fPS2_P10CGameTraceP12ITraceFilteriS5_

Decompiled

undefined (10 params)

/* CTerrorGameMovement::UpdatePosition(CTerrorPlayer*, Vector const&, Vector const&, float, Vector*,
   CGameTrace*, ITraceFilter*, int, Vector*) */

void __thiscall
CTerrorGameMovement::UpdatePosition
          (CTerrorGameMovement *this,CTerrorPlayer *param_1,Vector *param_2,Vector *param_3,
          float param_4,Vector *param_5,CGameTrace *param_6,ITraceFilter *param_7,int param_8,
          Vector *param_9)

{
  int *piVar1;
  uint uVar2;
  char cVar3;
  CTerrorGameMovement CVar4;
  int iVar5;
  undefined4 uVar6;
  undefined *puVar7;
  float fVar8;
  float fVar9;
  float fVar10;
  float fVar11;
  float fVar12;
  float fVar13;
  float fVar14;
  float fVar15;
  float local_c4;
  float local_c0;
  float local_bc;
  float local_b8;
  Vector *local_b4;
  float local_a8;
  float local_a4;
  float local_a0;
  float local_9c;
  float local_98;
  float local_94;
  float local_90;
  float local_8c;
  float local_88;
  float local_84;
  float local_80;
  float local_7c;
  float local_78;
  float local_74;
  float local_70;
  float local_6c;
  float local_68;
  float local_64;
  float local_5c;
  float local_58;
  float local_54;
  float local_4c;
  float local_48;
  float local_44;
  float local_3c;
  float local_38;
  float local_34;
  undefined4 local_2c;
  undefined1 local_28;
  undefined1 local_27;
  
  fVar9 = *(float *)param_3;
  local_a8 = *(float *)param_3;
  fVar12 = *(float *)param_2;
  fVar11 = *(float *)(param_3 + 8);
  fVar15 = *(float *)(param_3 + 4);
  local_a4 = *(float *)(param_3 + 4);
  local_a0 = *(float *)(param_3 + 8);
  fVar8 = *(float *)(param_2 + 8);
  fVar10 = *(float *)(param_2 + 4);
  if (param_1[0x1a90] == (CTerrorPlayer)0x0) {
    iVar5 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
    fVar14 = *(float *)(iVar5 + 0x14);
  }
  else {
    iVar5 = (**(code **)(*g_pGameRules + 0x7c))();
    fVar14 = *(float *)(iVar5 + 0x2c);
  }
  iVar5 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
  fVar13 = *(float *)(iVar5 + 0x10);
  iVar5 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
  local_9c = *(float *)(iVar5 + 0xc);
  local_98 = fVar13;
  local_94 = fVar14;
  if (param_1[0x1a90] == (CTerrorPlayer)0x0) {
    iVar5 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
    fVar14 = *(float *)(iVar5 + 0x20);
  }
  else {
    iVar5 = (**(code **)(*g_pGameRules + 0x7c))();
    fVar14 = *(float *)(iVar5 + 0x38);
  }
  iVar5 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
  fVar13 = *(float *)(iVar5 + 0x1c);
  iVar5 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
  local_90 = *(float *)(iVar5 + 0x18);
  local_84 = *(float *)param_2;
  local_b8 = vec3_origin;
  local_bc = DAT_01053d4c;
  local_80 = *(float *)(param_2 + 4);
  local_c0 = DAT_01053d50;
  local_7c = *(float *)(param_2 + 8);
  local_8c = fVar13;
  local_88 = fVar14;
  if (param_9 != (Vector *)0x0) {
    local_6c = *(float *)param_2;
    local_2c = 0;
    local_68 = *(float *)(param_2 + 4);
    local_64 = *(float *)(param_2 + 8);
    local_5c = *(float *)param_9;
    local_58 = *(float *)(param_9 + 4);
    local_54 = *(float *)(param_9 + 8);
    *(int *)(this + 2000) = *(int *)(this + 2000) + 1;
    local_27 = local_58 * local_58 + local_5c * local_5c + local_54 * local_54 != 0.0;
    local_38 = (fVar13 - local_98) * 0.5;
    local_34 = (fVar14 - local_94) * 0.5;
    local_3c = (local_90 - local_9c) * 0.5;
    local_4c = (local_90 + local_9c) * 0.5;
    local_48 = (fVar13 + local_98) * 0.5;
    local_44 = (fVar14 + local_94) * 0.5;
    local_6c = local_6c + local_4c;
    local_4c = -local_4c;
    local_64 = local_64 + local_44;
    local_68 = local_68 + local_48;
    local_48 = -local_48;
    local_28 = local_38 * local_38 + local_3c * local_3c + local_34 * local_34 < 1e-06;
    local_44 = -local_44;
    piVar1 = *(int **)(this + 0x7cc);
    if (piVar1 == (int *)0x0) {
LAB_004fed79:
      local_b4 = (Vector *)&local_6c;
      (**(code **)(*enginetrace + 0x14))(enginetrace,local_b4,param_8,param_7,param_6);
    }
    else {
      cVar3 = (**(code **)(*piVar1 + 0x10))(piVar1,&local_6c);
      if (cVar3 == '\0') goto LAB_004fed79;
      (**(code **)(*enginetrace + 0x20))
                (enginetrace,&local_6c,*(undefined4 *)(this + 0x7cc),param_8,param_7,param_6);
    }
    if ((0.0 < *(float *)(param_6 + 0x2c)) && (param_6[0x37] == (CGameTrace)0x0)) {
      local_7c = *(float *)(param_6 + 0x14);
      local_84 = *(float *)(param_6 + 0xc);
      local_c0 = local_7c - *(float *)(param_2 + 8);
      local_b8 = local_84 - *(float *)param_2;
      local_80 = *(float *)(param_6 + 0x10);
      local_bc = local_80 - *(float *)(param_2 + 4);
      local_a8 = local_a8 + local_b8;
      local_a4 = local_a4 + local_bc;
      local_a0 = local_a0 + local_c0;
    }
  }
  if (this[0x63d] == (CTerrorGameMovement)0x0) {
    local_2c = 0;
    local_5c = local_a8 - local_84;
    local_54 = local_a0 - local_7c;
    local_58 = local_a4 - local_80;
    *(int *)(this + 2000) = *(int *)(this + 2000) + 1;
    local_27 = local_5c * local_5c + local_54 * local_54 + local_58 * local_58 != 0.0;
    local_3c = (local_90 - local_9c) * 0.5;
    local_38 = (local_8c - local_98) * 0.5;
    local_34 = (local_88 - local_94) * 0.5;
    local_4c = (local_90 + local_9c) * 0.5;
    local_48 = (local_8c + local_98) * 0.5;
    local_44 = (local_88 + local_94) * 0.5;
    local_6c = local_84 + local_4c;
    local_64 = local_7c + local_44;
    local_68 = local_80 + local_48;
    local_28 = local_38 * local_38 + local_3c * local_3c + local_34 * local_34 < 1e-06;
    piVar1 = *(int **)(this + 0x7cc);
    local_4c = -local_4c;
    local_48 = -local_48;
    local_44 = -local_44;
    if (piVar1 == (int *)0x0) {
LAB_004ff339:
      local_b4 = (Vector *)&local_6c;
      (**(code **)(*enginetrace + 0x14))(enginetrace,local_b4,param_8,param_7,param_6);
      goto LAB_004fea2e;
    }
    cVar3 = (**(code **)(*piVar1 + 0x10))(piVar1,&local_6c);
    if (cVar3 == '\0') goto LAB_004ff339;
    (**(code **)(*enginetrace + 0x20))
              (enginetrace,&local_6c,*(undefined4 *)(this + 0x7cc),param_8,param_7,param_6);
    if (*(float *)(param_6 + 0x2c) <= 1.0 && *(float *)(param_6 + 0x2c) != 1.0) goto LAB_004fef78;
  }
  else {
    PlayerMovementTraceHull
              (this,(Vector *)&local_84,(Vector *)&local_a8,(Vector *)&local_9c,(Vector *)&local_90,
               param_8,param_7,param_6);
LAB_004fea2e:
    if (*(float *)(param_6 + 0x2c) <= 1.0 && *(float *)(param_6 + 0x2c) != 1.0) {
LAB_004fef78:
      if ((*(int *)(param_6 + 0x4c) != 0) && (this[0x63d] != (CTerrorGameMovement)0x0)) {
        CUtlVector<CBaseEntity*,CUtlMemory<CBaseEntity*,int>>::InsertBefore
                  ((CUtlVector<CBaseEntity*,CUtlMemory<CBaseEntity*,int>> *)(this + 0x7e8),
                   *(int *)(this + 0x7f4),(CBaseEntity **)(param_6 + 0x4c));
        (**(code **)(*IMoveHelper::sm_pSingleton + 0xc))(IMoveHelper::sm_pSingleton,param_6,param_5)
        ;
      }
      fVar14 = *(float *)(param_6 + 0x20);
      if (fVar14 < param_4) {
        *(undefined4 *)(param_6 + 0x20) = 0;
        VectorNormalize((Vector *)(param_6 + 0x18));
        fVar14 = *(float *)(param_6 + 0x20);
      }
      local_c4 = 1.0 - *(float *)(param_6 + 0x2c);
      fVar13 = (fVar9 - fVar12) * local_c4;
      fVar12 = (fVar15 - fVar10) * local_c4;
      local_78 = *(float *)(param_6 + 0xc);
      local_c4 = (fVar11 - fVar8) * local_c4;
      local_74 = *(float *)(param_6 + 0x10);
      local_70 = *(float *)(param_6 + 0x14);
      fVar9 = fVar12 * *(float *)(param_6 + 0x1c) + fVar13 * *(float *)(param_6 + 0x18) +
              fVar14 * local_c4;
      fVar13 = fVar13 - *(float *)(param_6 + 0x18) * fVar9;
      fVar12 = fVar12 - *(float *)(param_6 + 0x1c) * fVar9;
      local_c4 = local_c4 - fVar9 * fVar14;
      if (this[0x63d] == (CTerrorGameMovement)0x0) {
        local_2c = 0;
        *(int *)(this + 2000) = *(int *)(this + 2000) + 1;
        local_27 = fVar13 * fVar13 + local_c4 * local_c4 + fVar12 * fVar12 != 0.0;
        local_3c = (local_90 - local_9c) * 0.5;
        local_38 = (local_8c - local_98) * 0.5;
        local_34 = (local_88 - local_94) * 0.5;
        local_4c = (local_90 + local_9c) * 0.5;
        local_48 = (local_8c + local_98) * 0.5;
        local_44 = (local_88 + local_94) * 0.5;
        local_6c = local_78 + local_4c;
        local_4c = -local_4c;
        local_64 = local_70 + local_44;
        local_68 = local_74 + local_48;
        local_48 = -local_48;
        local_44 = -local_44;
        local_28 = local_38 * local_38 + local_3c * local_3c + local_34 * local_34 < 1e-06;
        piVar1 = *(int **)(this + 0x7cc);
        local_5c = fVar13;
        local_58 = fVar12;
        local_54 = local_c4;
        if (piVar1 != (int *)0x0) {
          cVar3 = (**(code **)(*piVar1 + 0x10))(piVar1,&local_6c);
          if (cVar3 != '\0') {
            (**(code **)(*enginetrace + 0x20))
                      (enginetrace,&local_6c,*(undefined4 *)(this + 0x7cc),param_8,param_7,param_6);
            goto LAB_004ff0ca;
          }
        }
        local_b4 = (Vector *)&local_6c;
        (**(code **)(*enginetrace + 0x14))(enginetrace,local_b4,param_8,param_7,param_6);
      }
      else {
        local_6c = local_78 + fVar13;
        local_68 = local_74 + fVar12;
        local_64 = local_70 + local_c4;
        PlayerMovementTraceHull
                  (this,(Vector *)&local_78,(Vector *)&local_6c,(Vector *)&local_9c,
                   (Vector *)&local_90,param_8,param_7,param_6);
      }
LAB_004ff0ca:
      local_b4 = (Vector *)&local_6c;
      fVar9 = *(float *)(param_6 + 0x2c);
      if (fVar9 == 0.0) {
        if (local_c4 < 0.0) {
          if (this[0x63d] == (CTerrorGameMovement)0x0) {
            local_54 = 0.0;
            local_2c = 0;
            *(int *)(this + 2000) = *(int *)(this + 2000) + 1;
            local_27 = fVar12 * fVar12 + fVar13 * fVar13 != 0.0;
            local_3c = (local_90 - local_9c) * 0.5;
            local_34 = (local_88 - local_94) * 0.5;
            local_38 = (local_8c - local_98) * 0.5;
            local_4c = (local_90 + local_9c) * 0.5;
            local_6c = local_78 + local_4c;
            local_28 = local_3c * local_3c + local_34 * local_34 + local_38 * local_38 < 1e-06;
            local_44 = (local_94 + local_88) * 0.5;
            local_48 = (local_98 + local_8c) * 0.5;
            local_64 = local_70 + local_44;
            local_4c = -local_4c;
            local_68 = local_74 + local_48;
            local_48 = -local_48;
            local_44 = -local_44;
            piVar1 = *(int **)(this + 0x7cc);
            local_5c = fVar13;
            local_58 = fVar12;
            if ((piVar1 == (int *)0x0) ||
               (cVar3 = (**(code **)(*piVar1 + 0x10))(piVar1,local_b4), cVar3 == '\0')) {
              (**(code **)(*enginetrace + 0x14))(enginetrace,local_b4,param_8,param_7,param_6);
            }
            else {
              (**(code **)(*enginetrace + 0x20))
                        (enginetrace,local_b4,*(undefined4 *)(this + 0x7cc),param_8,param_7,param_6)
              ;
            }
            fVar9 = *(float *)(param_6 + 0x2c);
            local_c4 = 0.0;
          }
          else {
            local_6c = fVar13 + local_78;
            local_68 = fVar12 + local_74;
            local_64 = local_70;
            PlayerMovementTraceHull
                      (this,(Vector *)&local_78,local_b4,(Vector *)&local_9c,(Vector *)&local_90,
                       param_8,param_7,param_6);
            local_c4 = 0.0;
            fVar9 = *(float *)(param_6 + 0x2c);
          }
          goto LAB_004ff820;
        }
      }
      else {
LAB_004ff820:
        if (1.0 <= fVar9) goto LAB_004fea40;
      }
      CVar4 = this[0x63d];
      if ((*(int *)(param_6 + 0x4c) != 0) && (CVar4 != (CTerrorGameMovement)0x0)) {
        CUtlVector<CBaseEntity*,CUtlMemory<CBaseEntity*,int>>::InsertBefore
                  ((CUtlVector<CBaseEntity*,CUtlMemory<CBaseEntity*,int>> *)(this + 0x7e8),
                   *(int *)(this + 0x7f4),(CBaseEntity **)(param_6 + 0x4c));
        (**(code **)(*IMoveHelper::sm_pSingleton + 0xc))(IMoveHelper::sm_pSingleton,param_6,param_5)
        ;
        CVar4 = this[0x63d];
      }
      fVar11 = 1.0 - *(float *)(param_6 + 0x2c);
      fVar9 = fVar12 * fVar11 * *(float *)(param_6 + 0x1c) +
              fVar13 * fVar11 * *(float *)(param_6 + 0x18) +
              fVar11 * local_c4 * *(float *)(param_6 + 0x20);
      fVar15 = fVar13 * fVar11 - *(float *)(param_6 + 0x18) * fVar9;
      local_78 = *(float *)(param_6 + 0xc);
      fVar12 = fVar12 * fVar11 - *(float *)(param_6 + 0x1c) * fVar9;
      local_74 = *(float *)(param_6 + 0x10);
      fVar9 = fVar11 * local_c4 - fVar9 * *(float *)(param_6 + 0x20);
      local_70 = *(float *)(param_6 + 0x14);
      if (CVar4 == (CTerrorGameMovement)0x0) {
        piVar1 = *(int **)(this + 0x7cc);
        local_2c = 0;
        *(int *)(this + 2000) = *(int *)(this + 2000) + 1;
        local_27 = fVar9 * fVar9 + fVar15 * fVar15 + fVar12 * fVar12 != 0.0;
        local_38 = (local_8c - local_98) * 0.5;
        local_34 = (local_88 - local_94) * 0.5;
        local_3c = (local_90 - local_9c) * 0.5;
        local_4c = (local_90 + local_9c) * 0.5;
        local_6c = local_78 + local_4c;
        local_28 = local_34 * local_34 + local_38 * local_38 + local_3c * local_3c < 1e-06;
        local_44 = (local_94 + local_88) * 0.5;
        local_48 = (local_98 + local_8c) * 0.5;
        local_64 = local_70 + local_44;
        local_4c = -local_4c;
        local_68 = local_74 + local_48;
        local_48 = -local_48;
        local_44 = -local_44;
        local_5c = fVar15;
        local_58 = fVar12;
        local_54 = fVar9;
        if ((piVar1 == (int *)0x0) ||
           (cVar3 = (**(code **)(*piVar1 + 0x10))(piVar1,local_b4), cVar3 == '\0')) {
          (**(code **)(*enginetrace + 0x14))(enginetrace,local_b4,param_8,param_7,param_6);
        }
        else {
          (**(code **)(*enginetrace + 0x20))
                    (enginetrace,local_b4,*(undefined4 *)(this + 0x7cc),param_8,param_7,param_6);
        }
      }
      else {
        local_6c = local_78 + fVar15;
        local_68 = local_74 + fVar12;
        local_64 = fVar9 + local_70;
        PlayerMovementTraceHull
                  (this,(Vector *)&local_78,local_b4,(Vector *)&local_9c,(Vector *)&local_90,param_8
                   ,param_7,param_6);
      }
    }
  }
LAB_004fea40:
  if (((((local_b8 <= -0.01) || (0.01 <= local_b8)) || (local_bc <= -0.01)) ||
      ((0.01 <= local_bc || (local_c0 <= -0.01)))) || (0.01 <= local_c0)) {
    local_6c = *(float *)(param_6 + 0xc);
    local_2c = 0;
    local_68 = *(float *)(param_6 + 0x10);
    local_64 = *(float *)(param_6 + 0x14);
    local_5c = (local_6c - local_b8) - local_6c;
    *(int *)(this + 2000) = *(int *)(this + 2000) + 1;
    local_58 = (local_68 - local_bc) - local_68;
    local_54 = (local_64 - local_c0) - local_64;
    local_27 = local_58 * local_58 + local_5c * local_5c + local_54 * local_54 != 0.0;
    local_3c = (local_90 - local_9c) * 0.5;
    local_38 = (local_8c - local_98) * 0.5;
    local_34 = (local_88 - local_94) * 0.5;
    local_4c = (local_90 + local_9c) * 0.5;
    local_6c = local_6c + local_4c;
    local_28 = local_38 * local_38 + local_3c * local_3c + local_34 * local_34 < 1e-06;
    local_44 = (local_94 + local_88) * 0.5;
    local_48 = (local_98 + local_8c) * 0.5;
    local_64 = local_64 + local_44;
    local_68 = local_68 + local_48;
    piVar1 = *(int **)(this + 0x7cc);
    local_4c = -local_4c;
    local_48 = -local_48;
    local_44 = -local_44;
    if (piVar1 != (int *)0x0) {
      cVar3 = (**(code **)(*piVar1 + 0x10))(piVar1,&local_6c);
      if (cVar3 != '\0') {
        (**(code **)(*enginetrace + 0x20))
                  (enginetrace,&local_6c,*(undefined4 *)(this + 0x7cc),param_8,param_7,param_6);
        goto LAB_004fec47;
      }
    }
    local_b4 = (Vector *)&local_6c;
    (**(code **)(*enginetrace + 0x14))(enginetrace,local_b4,param_8,param_7,param_6);
  }
LAB_004fec47:
  fVar9 = *(float *)param_2;
  fVar8 = *(float *)(param_6 + 0x14) - *(float *)(param_2 + 8);
  fVar12 = *(float *)(param_6 + 0x10);
  fVar11 = *(float *)(param_2 + 4);
  fVar15 = *(float *)(param_6 + 0xc);
  uVar6 = CMultiPlayerAnimState::GetMainActivity(*(CMultiPlayerAnimState **)(param_1 + 0x2910));
  cVar3 = CTerrorPlayer::IsMotionControlledZ(param_1,uVar6);
  if ((cVar3 == '\0') &&
     (((uVar2 = *(uint *)(param_1 + 0x33c4), uVar2 == 0xffffffff ||
       (puVar7 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar7 == (undefined *)0xfffffffc)) ||
      ((*(uint *)(puVar7 + 8) != uVar2 >> 0xc || (*(int *)(puVar7 + 4) == 0)))))) {
    fVar8 = 0.0;
  }
  if (*(float *)(gpGlobals + 0x10) <= 0.0) {
    *(float *)param_5 = vec3_origin;
    *(float *)(param_5 + 4) = DAT_01053d4c;
    *(float *)(param_5 + 8) = DAT_01053d50;
    return;
  }
  fVar10 = 1.0 / *(float *)(gpGlobals + 0x10);
  *(float *)param_5 = (fVar15 - fVar9) * fVar10;
  *(float *)(param_5 + 8) = fVar8 * fVar10;
  *(float *)(param_5 + 4) = (fVar12 - fVar11) * fVar10;
  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)