L L4D2node

CCSGameMovement::HandleFastDuck

0x00430810 · 2748 bytes · __thiscall

_ZN15CCSGameMovement14HandleFastDuckEb

Decompiled

undefined (2 params)

/* CCSGameMovement::HandleFastDuck(bool) */

undefined4 __thiscall CCSGameMovement::HandleFastDuck(CCSGameMovement *this,bool param_1)

{
  IHandleEntity *pIVar1;
  code *pcVar2;
  bool bVar3;
  int iVar4;
  float *pfVar5;
  undefined4 uVar6;
  int *piVar7;
  float fVar8;
  float fVar9;
  float fVar10;
  float fVar11;
  float fVar12;
  float fVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float local_104;
  float local_fc;
  float local_f8;
  float local_e8;
  float local_e4;
  float local_e0;
  CTraceFilterSimple local_dc [16];
  float local_cc;
  float local_c8;
  float local_c4;
  undefined4 local_bc;
  undefined4 local_b8;
  float local_b4;
  float local_ac;
  float local_a8;
  float local_a4;
  float local_9c;
  float local_98;
  float local_94;
  undefined4 local_8c;
  undefined1 local_88;
  undefined1 local_87;
  Vector local_70 [12];
  Vector local_64 [32];
  float local_44;
  char local_3a;
  char local_39;
  
  if (param_1) {
    iVar4 = (**(code **)(*g_pGameRules + 0x7c))();
    local_f8 = *(float *)(iVar4 + 0x3c);
    local_fc = *(float *)(iVar4 + 0x40);
    local_104 = *(float *)(iVar4 + 0x44);
    iVar4 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
    local_e4 = *(float *)(iVar4 + 0x24);
    local_e0 = *(float *)(iVar4 + 0x28);
    local_e8 = *(float *)(iVar4 + 0x2c);
    iVar4 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
    pfVar5 = (float *)(iVar4 + 0x30);
  }
  else {
    pfVar5 = (float *)(**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
    local_f8 = *pfVar5;
    local_fc = pfVar5[1];
    local_104 = pfVar5[2];
    iVar4 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
    local_e4 = *(float *)(iVar4 + 0xc);
    local_e0 = *(float *)(iVar4 + 0x10);
    local_e8 = *(float *)(iVar4 + 0x14);
    iVar4 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
    pfVar5 = (float *)(iVar4 + 0x18);
  }
  fVar9 = *pfVar5;
  fVar12 = pfVar5[1];
  fVar15 = pfVar5[2];
  pfVar5 = (float *)(**(code **)(**(int **)(this + 4) + 0x250))(*(int **)(this + 4));
  iVar4 = *(int *)(this + 8);
  fVar18 = (*pfVar5 - local_f8) + *(float *)(iVar4 + 0x9c);
  fVar16 = (pfVar5[1] - local_fc) + *(float *)(iVar4 + 0xa0);
  fVar8 = (pfVar5[2] - local_104) + *(float *)(iVar4 + 0xa4);
  if (param_1) {
    pIVar1 = *(IHandleEntity **)(this + 4);
    uVar6 = (**(code **)(*(int *)this + 0x40))(this,0,0);
    local_bc = 0;
    local_b8 = 0;
    local_b4 = 0.0;
    local_8c = 0;
    local_87 = 0;
    local_94 = (fVar15 - local_e8) * 0.5;
    local_9c = (fVar9 - local_e4) * 0.5;
    local_98 = (fVar12 - local_e0) * 0.5;
    local_ac = (local_e4 + fVar9) * 0.5;
    local_88 = local_94 * local_94 + local_9c * local_9c + local_98 * local_98 < 1e-06;
    local_a8 = (local_e0 + fVar12) * 0.5;
    local_a4 = (fVar15 + local_e8) * 0.5;
    local_cc = fVar18 + local_ac;
    local_c8 = fVar16 + local_a8;
    local_c4 = local_a4 + fVar8;
    local_ac = -local_ac;
    local_a8 = -local_a8;
    local_a4 = -local_a4;
    CTraceFilterSimple::CTraceFilterSimple
              (local_dc,pIVar1,8,(_func_bool_IHandleEntity_ptr_int *)0x0);
    (**(code **)(*enginetrace + 0x14))(enginetrace,&local_cc,uVar6,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_3a == '\0') {
      if (local_39 != '\0') {
        return 0;
      }
      if (local_44 == 0.0) {
        return 0;
      }
      CBaseEntity::AddFlag(*(CBaseEntity **)(this + 4),2);
LAB_00431152:
      piVar7 = *(int **)(this + 4);
      if (param_1 != (bool)(char)piVar7[0x6a4]) {
        (**(code **)(piVar7[0x690] + 4))(piVar7 + 0x690,piVar7 + 0x6a4);
        *(bool *)(piVar7 + 0x6a4) = param_1;
        piVar7 = *(int **)(this + 4);
      }
      if (*(char *)((int)piVar7 + 0x1a91) != '\0') {
        (**(code **)(piVar7[0x690] + 4))(piVar7 + 0x690,(int)piVar7 + 0x1a91);
        *(undefined1 *)((int)piVar7 + 0x1a91) = 0;
        piVar7 = *(int **)(this + 4);
      }
      if (*(char *)((int)piVar7 + 0x1a92) != '\0') {
        (**(code **)(piVar7[0x690] + 4))(piVar7 + 0x690,(int)piVar7 + 0x1a92);
        *(undefined1 *)((int)piVar7 + 0x1a92) = 0;
        piVar7 = *(int **)(this + 4);
      }
      if (piVar7[0x6a5] != 0) {
        (**(code **)(piVar7[0x690] + 4))(piVar7 + 0x690,piVar7 + 0x6a5);
        piVar7[0x6a5] = 0;
        piVar7 = *(int **)(this + 4);
      }
      pcVar2 = *(code **)(*piVar7 + 0x254);
      uVar6 = (**(code **)(*(int *)this + 0x24))(this,param_1);
      (*pcVar2)(*(undefined4 *)(this + 4),uVar6);
      iVar4 = *(int *)(this + 8);
      *(float *)(iVar4 + 0x9c) = fVar18;
      *(float *)(iVar4 + 0xa0) = fVar16;
      *(float *)(iVar4 + 0xa4) = fVar8;
      return 1;
    }
  }
  else {
    pIVar1 = *(IHandleEntity **)(this + 4);
    fVar10 = *(float *)(pIVar1 + 0x1acc);
    uVar6 = (**(code **)(*(int *)this + 0x40))(this,0,0);
    local_bc = 0;
    local_b8 = 0;
    local_b4 = (fVar8 - fVar10) - fVar8;
    local_8c = 0;
    local_87 = local_b4 * local_b4 != 0.0;
    fVar13 = (fVar9 - local_e4) * 0.5;
    fVar11 = (fVar12 - local_e0) * 0.5;
    fVar10 = (fVar15 - local_e8) * 0.5;
    fVar19 = (fVar9 + local_e4) * 0.5;
    fVar17 = (fVar12 + local_e0) * 0.5;
    fVar12 = fVar18 + fVar19;
    fVar14 = fVar16 + fVar17;
    bVar3 = fVar13 * fVar13 + fVar10 * fVar10 + fVar11 * fVar11 < 1e-06;
    fVar15 = (fVar15 + local_e8) * 0.5;
    fVar9 = fVar15 + fVar8;
    fVar19 = -fVar19;
    fVar17 = -fVar17;
    fVar15 = -fVar15;
    local_cc = fVar12;
    local_c8 = fVar14;
    local_c4 = fVar9;
    local_ac = fVar19;
    local_a8 = fVar17;
    local_a4 = fVar15;
    local_9c = fVar13;
    local_98 = fVar11;
    local_94 = fVar10;
    local_88 = bVar3;
    CTraceFilterSimple::CTraceFilterSimple
              (local_dc,pIVar1,8,(_func_bool_IHandleEntity_ptr_int *)0x0);
    (**(code **)(*enginetrace + 0x14))(enginetrace,&local_cc,uVar6,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_3a == '\0') && (local_39 == '\0')) && (local_44 != 1.0)) {
      pIVar1 = *(IHandleEntity **)(this + 4);
      uVar6 = (**(code **)(*(int *)this + 0x40))(this,0,0);
      local_bc = 0;
      local_b8 = 0;
      local_b4 = 0.0;
      local_8c = 0;
      local_87 = 0;
      local_cc = fVar12;
      local_c8 = fVar14;
      local_c4 = fVar9;
      local_ac = fVar19;
      local_a8 = fVar17;
      local_a4 = fVar15;
      local_9c = fVar13;
      local_98 = fVar11;
      local_94 = fVar10;
      local_88 = bVar3;
      CTraceFilterSimple::CTraceFilterSimple
                (local_dc,pIVar1,8,(_func_bool_IHandleEntity_ptr_int *)0x0);
      (**(code **)(*enginetrace + 0x14))(enginetrace,&local_cc,uVar6,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_3a == '\0') && (local_39 == '\0')) && (local_44 == 1.0)) {
        CBaseEntity::RemoveFlag(*(CBaseEntity **)(this + 4),2);
        goto LAB_00431152;
      }
    }
  }
  return 0;
}

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)