L L4D2node

CTongue::TestBend

0x00840850 · 1713 bytes · __cdecl

_ZN7CTongue8TestBendERK6VectorS2_

Decompiled

undefined (2 params)

/* CTongue::TestBend(Vector const&, Vector const&) */

undefined4 CTongue::TestBend(Vector *param_1,Vector *param_2)

{
  uint uVar1;
  int iVar2;
  int *piVar3;
  CBaseEdict *pCVar4;
  Vector *pVVar5;
  int iVar6;
  int iVar7;
  char *pcVar8;
  undefined *puVar9;
  undefined4 uVar10;
  float fVar11;
  float fVar12;
  float fVar13;
  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;
  float local_e0;
  undefined **local_dc [4];
  float local_cc;
  float local_c8;
  float local_c4;
  float local_bc;
  float local_b8;
  float local_b4;
  undefined4 local_ac;
  undefined4 local_a8;
  undefined4 local_a4;
  undefined4 local_9c;
  undefined4 local_98;
  undefined4 local_94;
  undefined4 local_8c;
  undefined1 local_88;
  undefined1 local_87;
  Vector local_70 [12];
  float local_64;
  float local_60;
  float local_5c;
  float local_44;
  int *local_24;
  
  uVar1 = *(uint *)(param_1 + 0x44c);
  if ((((uVar1 != 0xffffffff) &&
       (puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 != (undefined *)0xfffffffc)) &&
      (*(uint *)(puVar9 + 8) == uVar1 >> 0xc)) &&
     (((iVar2 = *(int *)(puVar9 + 4), iVar2 != 0 &&
       (uVar1 = *(uint *)(iVar2 + 0x33c0), uVar1 != 0xffffffff)) &&
      ((puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 != (undefined *)0xfffffffc &&
       ((*(uint *)(puVar9 + 8) == uVar1 >> 0xc &&
        (piVar3 = *(int **)(puVar9 + 4), piVar3 != (int *)0x0)))))))) {
    pVVar5 = param_1 + 0x544;
    if (0 < *(int *)(param_1 + 0x534)) {
      pVVar5 = param_1 + (*(int *)(param_1 + 0x534) * 3 + -3) * 4 + 0x4bc;
    }
    fVar11 = *(float *)pVVar5;
    fVar12 = *(float *)(pVVar5 + 4);
    fVar13 = *(float *)(pVVar5 + 8);
    CTraceFilterSimple::CTraceFilterSimple
              ((CTraceFilterSimple *)local_dc,(IHandleEntity *)0x0,0,
               (_func_bool_IHandleEntity_ptr_int *)0x0);
    local_88 = 1;
    local_dc[0] = &PTR_ShouldHitEntity_00c54558;
    local_8c = 0;
    local_bc = *(float *)param_2 - fVar11;
    local_b8 = *(float *)(param_2 + 4) - fVar12;
    local_b4 = *(float *)(param_2 + 8) - fVar13;
    local_94 = 0;
    local_98 = 0;
    local_9c = 0;
    local_87 = local_b8 * local_b8 + local_bc * local_bc + local_b4 * local_b4 != 0.0;
    local_a4 = 0;
    local_a8 = 0;
    local_ac = 0;
    local_cc = fVar11;
    local_c8 = fVar12;
    local_c4 = fVar13;
    (**(code **)(*enginetrace + 0x14))
              (enginetrace,(Vector *)&local_cc,0x2006083,(CTraceFilterSimple *)local_dc,local_70);
    if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
      DebugDrawLine(local_70,(Vector *)&local_64,0xff,0,0,true,-1.0);
    }
    if (((local_44 < 1.0) && (local_24 != piVar3)) &&
       ((local_24 == (int *)0x0 || (iVar6 = (**(code **)(*local_24 + 0x144))(local_24), iVar6 == 0))
       )) {
      if (9 < *(int *)(param_1 + 0x534)) {
        return 1;
      }
      local_10c = local_64 - fVar11;
      local_108 = local_60 - fVar12;
      local_104 = local_5c - fVar13;
      local_100 = local_64 - *(float *)(param_1 + 0x4a0);
      local_fc = local_60 - *(float *)(param_1 + 0x4a4);
      local_f8 = local_5c - *(float *)(param_1 + 0x4a8);
      VectorNormalize((Vector *)&local_10c);
      VectorNormalize((Vector *)&local_100);
      local_f4 = local_f8 * local_108 - local_fc * local_104;
      local_f0 = local_104 * local_100 - local_f8 * local_10c;
      local_ec = local_fc * local_10c - local_108 * local_100;
      VectorNormalize((Vector *)&local_f4);
      local_e8 = local_ec * local_108 - local_f0 * local_104;
      local_e4 = local_104 * local_f4 - local_ec * local_10c;
      local_e0 = local_f0 * local_10c - local_108 * local_f4;
      VectorNormalize((Vector *)&local_e8);
      iVar6 = *(int *)(param_1 + 0x534);
      fVar11 = *(float *)(TongueBendPointDeflection._28_4_ + 0x2c);
      pVVar5 = param_1 + iVar6 * 0xc + 0x4bc;
      fVar12 = local_e4 * fVar11 + local_60;
      fVar13 = local_e0 * fVar11 + local_5c;
      fVar11 = fVar11 * local_e8 + local_64;
      local_cc = fVar11;
      local_c8 = fVar12;
      local_c4 = fVar13;
      iVar7 = memcmp(pVVar5,(Vector *)&local_cc,0xc);
      if (iVar7 != 0) {
        if (param_1[0x6c] == (Vector)0x0) {
          pCVar4 = *(CBaseEdict **)(param_1 + 0x30);
          if (pCVar4 != (CBaseEdict *)0x0) {
            *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
            iVar6 = CBaseEdict::GetChangeAccessor(pCVar4);
            *(undefined2 *)(iVar6 + 2) = 0;
            fVar12 = local_c8;
            fVar13 = local_c4;
            fVar11 = local_cc;
          }
        }
        else {
          param_1[0x70] = (Vector)((byte)param_1[0x70] | 1);
        }
        *(float *)pVVar5 = fVar11;
        *(float *)(pVVar5 + 4) = fVar12;
        *(float *)(pVVar5 + 8) = fVar13;
        iVar6 = *(int *)(param_1 + 0x534);
      }
      if (param_1[0x6c] == (Vector)0x0) {
        pCVar4 = *(CBaseEdict **)(param_1 + 0x30);
        if (pCVar4 != (CBaseEdict *)0x0) {
          *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
          iVar7 = CBaseEdict::GetChangeAccessor(pCVar4);
          *(undefined2 *)(iVar7 + 2) = 0;
        }
      }
      else {
        param_1[0x70] = (Vector)((byte)param_1[0x70] | 1);
      }
      uVar10 = TongueDebug._28_4_;
      *(int *)(param_1 + 0x534) = iVar6 + 1;
      if (*(int *)(uVar10 + 0x30) != 0) {
        uVar10 = 0;
        uVar1 = *(uint *)(iVar2 + 0x33c0);
        if (((uVar1 != 0xffffffff) &&
            (puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 != (undefined *)0xfffffffc)) &&
           (*(uint *)(puVar9 + 8) == uVar1 >> 0xc)) {
          uVar10 = *(undefined4 *)(puVar9 + 4);
        }
        if (local_24 == (int *)0x0) {
          pcVar8 = "world";
        }
        else {
          pcVar8 = "";
          if ((char *)local_24[0x1f] != (char *)0x0) {
            pcVar8 = (char *)local_24[0x1f];
          }
        }
        (**(code **)(*(int *)param_1 + 0x394))
                  (param_1,uVar10,"Tongue bending on %s at %.0f,%.0f,%.0f",pcVar8,(double)local_cc,
                   (double)local_c8,(double)local_c4);
        NDebugOverlay::Cross3D((Vector *)&local_cc,5.0,0xff,0,0,true,30.0);
      }
    }
    return 0;
  }
  return 1;
}

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)