L L4D2node

CCurveData::GetIntensity

0x00ba6290 · 930 bytes · __thiscall

_ZN10CCurveData12GetIntensityEP18ICurveDataAccessorf

Decompiled

undefined (3 params)

/* CCurveData::GetIntensity(ICurveDataAccessor*, float) */

longdouble __thiscall
CCurveData::GetIntensity(CCurveData *this,ICurveDataAccessor *param_1,float param_2)

{
  char cVar1;
  float *pfVar2;
  float *pfVar3;
  int iVar4;
  undefined4 *puVar5;
  undefined4 *puVar6;
  uint uVar7;
  int iVar8;
  int iVar9;
  uint uVar10;
  int iVar11;
  float fVar12;
  float fVar13;
  float local_80;
  bool local_72;
  bool local_71;
  int local_70;
  int local_6c;
  int local_68;
  float local_64;
  undefined4 local_60;
  undefined4 local_5c;
  float local_58;
  float local_54;
  undefined4 local_50;
  float local_4c;
  float local_48;
  undefined4 local_44;
  float local_40;
  undefined4 local_3c;
  undefined4 local_38;
  Vector local_34 [4];
  float local_30;
  Vector local_28 [4];
  float local_24;
  
  cVar1 = (**(code **)(*(int *)param_1 + 4))(param_1);
  fVar12 = 0.0;
  if (cVar1 != '\0') {
    iVar4 = *(int *)(this + 0xc);
    if (0 < iVar4) {
      iVar8 = 1;
      if (3 < iVar4) {
        iVar8 = iVar4 >> 1;
      }
      iVar9 = iVar8;
      if (iVar8 <= iVar4) {
        do {
          pfVar2 = (float *)GetBoundedSample(this,param_1,iVar8,(bool *)local_28);
          pfVar3 = (float *)GetBoundedSample(this,param_1,iVar8 + 1,(bool *)local_28);
          iVar11 = 1;
          if (3 < iVar9) {
            iVar11 = iVar9 >> 1;
          }
          if (param_2 < pfVar2[1]) {
            iVar9 = -iVar11;
          }
          else {
            iVar9 = iVar11;
            if (param_2 < pfVar3[1] || param_2 == pfVar3[1]) goto LAB_00ba6358;
          }
          iVar8 = iVar8 + iVar9;
          if ((iVar4 < iVar8) || (iVar9 = iVar11, iVar8 < -1)) goto LAB_00ba6358;
        } while( true );
      }
    }
    fVar12 = 1.0;
  }
LAB_00ba6596:
  return (longdouble)fVar12;
LAB_00ba6358:
  iVar9 = iVar8 + 2;
  if (iVar4 < iVar8 + 2) {
    iVar9 = iVar4;
  }
  iVar4 = -1;
  if (-1 < iVar8 + -1) {
    iVar4 = iVar8 + -1;
  }
  puVar5 = (undefined4 *)GetBoundedSample(this,param_1,iVar4,&local_72);
  puVar6 = (undefined4 *)GetBoundedSample(this,param_1,iVar9,&local_71);
  local_60 = *puVar5;
  local_5c = 0;
  local_54 = *pfVar2;
  local_58 = pfVar2[1];
  local_50 = 0;
  local_4c = pfVar3[1];
  local_48 = *pfVar3;
  local_44 = 0;
  local_3c = *puVar6;
  local_40 = (float)puVar6[1];
  local_38 = 0;
  local_64 = (float)puVar5[1];
  if (local_72 != false) {
    local_64 = local_58;
  }
  if (local_71 != false) {
    local_40 = local_4c;
  }
  if (pfVar3[1] - pfVar2[1] <= 0.0) {
    fVar12 = 0.0;
  }
  else {
    fVar12 = (param_2 - pfVar2[1]) / (pfVar3[1] - pfVar2[1]);
    if (fVar12 <= 0.0) {
      fVar12 = 0.0;
    }
    if (1.0 <= fVar12) {
      fVar12 = 1.0;
    }
  }
  local_80 = 1.0;
  uVar10 = (uint)*(byte *)((int)pfVar3 + 9) << 7 | (uint)(*(byte *)(pfVar3 + 2) >> 1);
  uVar7 = (uint)*(byte *)((int)pfVar2 + 9) << 7 | (uint)(*(byte *)(pfVar2 + 2) >> 1);
  if (uVar7 == 0) {
    uVar7 = (**(code **)(*(int *)param_1 + 8))(param_1);
  }
  if (uVar10 == 0) {
    uVar10 = (**(code **)(*(int *)param_1 + 8))(param_1);
  }
  Interpolator_CurveInterpolatorsForType(uVar7,&local_70,&local_6c);
  Interpolator_CurveInterpolatorsForType(uVar10,&local_68,&local_70);
  fVar13 = local_54;
  if ((local_6c != 0xf) && (fVar13 = local_48, local_68 != 0xf)) {
    if (local_6c == local_68) {
      Interpolator_CurveInterpolate
                (local_6c,(Vector *)&local_64,(Vector *)&local_58,(Vector *)&local_4c,
                 (Vector *)&local_40,fVar12,local_28);
      fVar13 = local_24;
    }
    else {
      Interpolator_CurveInterpolate
                (local_6c,(Vector *)&local_64,(Vector *)&local_58,(Vector *)&local_4c,
                 (Vector *)&local_40,fVar12,local_34);
      Interpolator_CurveInterpolate
                (local_68,(Vector *)&local_64,(Vector *)&local_58,(Vector *)&local_4c,
                 (Vector *)&local_40,fVar12,local_28);
      fVar13 = (local_24 - local_30) * fVar12 + local_30;
    }
  }
  fVar12 = 0.0;
  if (0.0 <= fVar13) {
    fVar12 = fVar13;
  }
  if (1.0 <= fVar12) {
    fVar12 = local_80;
  }
  goto LAB_00ba6596;
}

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)