L L4D2node

CTerrorGameMovement::TryOtherPlayerMove

0x004fb4d0 · 1997 bytes · __thiscall

_ZN19CTerrorGameMovement18TryOtherPlayerMoveEP13CTerrorPlayerR6VectorS3_PS2_P10CGameTrace

Decompiled

undefined (6 params)

/* CTerrorGameMovement::TryOtherPlayerMove(CTerrorPlayer*, Vector&, Vector&, Vector*, CGameTrace*)
    */

uint __thiscall
CTerrorGameMovement::TryOtherPlayerMove
          (CTerrorGameMovement *this,CTerrorPlayer *param_1,Vector *param_2,Vector *param_3,
          Vector *param_4,CGameTrace *param_5)

{
  float fVar1;
  float fVar2;
  float fVar3;
  float fVar4;
  uint uVar5;
  float *pfVar6;
  int iVar7;
  Vector *pVVar8;
  int iVar9;
  int iVar10;
  longdouble lVar11;
  float fVar12;
  float fVar13;
  float fVar14;
  float fVar15;
  int local_fc;
  uint local_f4;
  float local_f0;
  float local_ec;
  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 [4];
  float local_9c;
  float local_98;
  undefined4 local_70;
  undefined4 local_6c;
  undefined4 local_68;
  undefined4 local_64;
  undefined4 local_60;
  undefined4 local_5c;
  float local_58;
  float local_54;
  float local_50;
  undefined4 local_4c;
  CGameTrace local_48;
  CGameTrace local_47;
  undefined2 local_46;
  float local_44;
  undefined4 local_40;
  undefined2 local_3c;
  CGameTrace local_3a;
  CGameTrace local_39;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30;
  undefined4 local_2c;
  undefined2 local_28;
  undefined2 local_26;
  undefined4 local_24;
  undefined4 local_20;
  
  iVar9 = 0;
  local_c4 = 0.0;
  local_c0 = 0.0;
  local_bc = 0.0;
  local_fc = 4;
  local_f4 = 0;
  local_f0 = *(float *)(gpGlobals + 0x10);
  local_ec = 0.0;
  fVar1 = *(float *)(param_3 + 8);
  fVar2 = *(float *)param_3;
  fVar3 = *(float *)(param_3 + 4);
  fVar12 = fVar3;
  fVar13 = fVar1;
  fVar14 = fVar2;
  local_d0 = fVar2;
  local_cc = fVar3;
  local_c8 = fVar1;
  do {
    if (SQRT(fVar12 * fVar12 + fVar14 * fVar14 + fVar13 * fVar13) == 0.0) {
LAB_004fb8fa:
      if (local_ec != 0.0) {
        return local_f4;
      }
      *(undefined4 *)param_3 = vec3_origin;
      *(undefined4 *)(param_3 + 4) = DAT_01053d4c;
      *(undefined4 *)(param_3 + 8) = DAT_01053d50;
      return local_f4;
    }
    local_b8 = fVar14 * local_f0 + *(float *)param_2;
    local_b4 = fVar12 * local_f0 + *(float *)(param_2 + 4);
    local_b0 = fVar13 * local_f0 + *(float *)(param_2 + 8);
    if ((((g_bMovementOptimizations == '\0') || (param_4 == (Vector *)0x0)) ||
        (local_b8 != *(float *)param_4)) ||
       ((local_b4 != *(float *)(param_4 + 4) || (local_b0 != *(float *)(param_4 + 8))))) {
      uVar5 = (**(code **)(*(int *)this + 0x40))(this,0,param_1);
      TraceOtherPlayerBBox
                (param_1,param_2,(Vector *)&local_b8,uVar5,8,(CGameTrace *)&local_70,
                 (int *)(this + 2000));
    }
    else {
      local_70 = *(undefined4 *)param_5;
      local_6c = *(undefined4 *)(param_5 + 4);
      local_68 = *(undefined4 *)(param_5 + 8);
      local_64 = *(undefined4 *)(param_5 + 0xc);
      local_60 = *(undefined4 *)(param_5 + 0x10);
      local_5c = *(undefined4 *)(param_5 + 0x14);
      local_58 = *(float *)(param_5 + 0x18);
      local_54 = *(float *)(param_5 + 0x1c);
      local_50 = *(float *)(param_5 + 0x20);
      local_4c = *(undefined4 *)(param_5 + 0x24);
      local_48 = param_5[0x28];
      local_47 = param_5[0x29];
      local_46 = *(undefined2 *)(param_5 + 0x2a);
      local_44 = *(float *)(param_5 + 0x2c);
      local_40 = *(undefined4 *)(param_5 + 0x30);
      local_39 = param_5[0x37];
      local_3c = *(undefined2 *)(param_5 + 0x34);
      local_38 = *(undefined4 *)(param_5 + 0x38);
      local_34 = *(undefined4 *)(param_5 + 0x3c);
      local_30 = *(undefined4 *)(param_5 + 0x40);
      local_2c = *(undefined4 *)(param_5 + 0x44);
      local_3a = param_5[0x36];
      local_28 = *(undefined2 *)(param_5 + 0x48);
      local_26 = *(undefined2 *)(param_5 + 0x4a);
      local_24 = *(undefined4 *)(param_5 + 0x4c);
      local_20 = *(undefined4 *)(param_5 + 0x50);
    }
    fVar14 = local_50;
    local_ec = local_ec + local_44;
    if (local_3a != (CGameTrace)0x0) {
      *(undefined4 *)param_3 = vec3_origin;
      *(undefined4 *)(param_3 + 4) = DAT_01053d4c;
      *(undefined4 *)(param_3 + 8) = DAT_01053d50;
      return 4;
    }
    iVar10 = iVar9;
    if (0.0 < local_44) {
      iVar10 = 0;
      *(undefined4 *)param_2 = local_64;
      *(undefined4 *)(param_2 + 4) = local_60;
      *(undefined4 *)(param_2 + 8) = local_5c;
      local_d0 = *(float *)param_3;
      local_cc = *(float *)(param_3 + 4);
      local_c8 = *(float *)(param_3 + 8);
    }
    if (local_44 == 1.0) goto LAB_004fb8fa;
    lVar11 = (longdouble)(**(code **)(*(int *)this + 0x38))(this);
    fVar4 = local_44;
    fVar12 = local_50;
    uVar5 = local_f4 | 1;
    if (fVar14 <= (float)lVar11) {
      uVar5 = local_f4;
    }
    local_f4 = uVar5 | 2;
    if (local_50 != 0.0) {
      local_f4 = uVar5;
    }
    if (4 < iVar10) {
LAB_004fb8d4:
      *(undefined4 *)param_3 = vec3_origin;
      *(undefined4 *)(param_3 + 4) = DAT_01053d4c;
      *(undefined4 *)(param_3 + 8) = DAT_01053d50;
      goto LAB_004fb8fa;
    }
    iVar9 = iVar10 + 1;
    local_ac[iVar10 * 3] = local_58;
    fVar14 = local_54;
    local_ac[iVar10 * 3 + 2] = fVar12;
    local_ac[iVar10 * 3 + 1] = fVar14;
    if (((iVar9 == 1) && (param_1[0x186] == (CTerrorPlayer)0x2)) &&
       (iVar10 = CBaseEntity::GetGroundEntity((CBaseEntity *)param_1), fVar14 = local_ac[2],
       iVar10 == 0)) {
      lVar11 = (longdouble)(**(code **)(*(int *)this + 0x38))(this);
      if (fVar14 <= (float)lVar11) {
        CGameMovement::ClipVelocity
                  ((CGameMovement *)this,(Vector *)&local_d0,(Vector *)local_ac,(Vector *)&local_c4,
                   (1.0 - *(float *)(param_1 + 0x2180)) * *(float *)(sv_bounce._28_4_ + 0x2c) + 1.0)
        ;
      }
      else {
        CGameMovement::ClipVelocity
                  ((CGameMovement *)this,(Vector *)&local_d0,(Vector *)local_ac,(Vector *)&local_c4,
                   1.0);
      }
      *(float *)param_3 = local_c4;
      *(float *)(param_3 + 4) = local_c0;
      *(float *)(param_3 + 8) = local_bc;
      local_d0 = local_c4;
      local_cc = local_c0;
      local_c8 = local_bc;
    }
    else {
      iVar10 = 0;
      pVVar8 = (Vector *)local_ac;
      do {
        CGameMovement::ClipVelocity((CGameMovement *)this,(Vector *)&local_d0,pVVar8,param_3,1.0);
        iVar7 = 0;
        pfVar6 = local_ac;
        do {
          if ((iVar7 != iVar10) &&
             (pfVar6[1] * *(float *)(param_3 + 4) + *pfVar6 * *(float *)param_3 +
              pfVar6[2] * *(float *)(param_3 + 8) < 0.0)) break;
          iVar7 = iVar7 + 1;
          pfVar6 = pfVar6 + 3;
        } while (iVar7 < iVar9);
        if (iVar7 == iVar9) break;
        iVar10 = iVar10 + 1;
        pVVar8 = pVVar8 + 0xc;
      } while (iVar10 < iVar9);
      if (iVar10 == iVar9) {
        if (iVar10 != 2) goto LAB_004fb8d4;
        fVar14 = local_98 * local_ac[1] - local_9c * local_ac[2];
        fVar12 = local_ac[2] * local_ac[3] - local_98 * local_ac[0];
        fVar15 = local_9c * local_ac[0] - local_ac[1] * local_ac[3];
        fVar13 = *(float *)(param_3 + 4) * fVar12 + *(float *)param_3 * fVar14 +
                 *(float *)(param_3 + 8) * fVar15;
        fVar14 = fVar14 * fVar13;
        fVar12 = fVar12 * fVar13;
        fVar13 = fVar13 * fVar15;
        *(float *)param_3 = fVar14;
        *(float *)(param_3 + 4) = fVar12;
        *(float *)(param_3 + 8) = fVar13;
      }
      else {
        fVar14 = *(float *)param_3;
        fVar12 = *(float *)(param_3 + 4);
        fVar13 = *(float *)(param_3 + 8);
      }
      if (fVar12 * fVar3 + fVar14 * fVar2 + fVar13 * fVar1 <= 0.0) goto LAB_004fb8d4;
    }
    local_fc = local_fc + -1;
    if (local_fc == 0) goto LAB_004fb8fa;
    fVar14 = *(float *)param_3;
    fVar12 = *(float *)(param_3 + 4);
    fVar13 = *(float *)(param_3 + 8);
    local_f0 = (1.0 - fVar4) * local_f0;
  } 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)