L L4D2node

CPropData::ParsePropFromKV

0x00498230 · 2823 bytes · __thiscall

_ZN9CPropData15ParsePropFromKVEP11CBaseEntityP22IBreakableWithPropDataP9KeyValuesS5_

Decompiled

undefined (5 params)

/* WARNING: Removing unreachable block (ram,0x0049886a) */
/* WARNING: Removing unreachable block (ram,0x00498d56) */
/* CPropData::ParsePropFromKV(CBaseEntity*, IBreakableWithPropData*, KeyValues*, KeyValues*) */

uint __thiscall
CPropData::ParsePropFromKV
          (CPropData *this,CBaseEntity *param_1,IBreakableWithPropData *param_2,KeyValues *param_3,
          KeyValues *param_4)

{
  code *pcVar1;
  code *pcVar2;
  undefined4 *puVar3;
  uint *puVar4;
  undefined *puVar5;
  float fVar6;
  char cVar7;
  char *pcVar8;
  int iVar9;
  float *pfVar10;
  int iVar11;
  int iVar12;
  int *piVar13;
  int *piVar14;
  uint uVar15;
  undefined **ppuVar16;
  longdouble lVar17;
  int aiStack_68 [3];
  int local_5c [2];
  uint local_34;
  char *local_30 [2];
  float local_28;
  float local_24;
  float local_20 [4];
  
  if (param_2 == (IBreakableWithPropData *)0x0) {
    return 3;
  }
  pcVar8 = (char *)KeyValues::GetString(param_3,"base","");
  local_34 = 0;
  if (((pcVar8 != (char *)0x0) && (*pcVar8 != '\0')) &&
     (local_34 = ParsePropFromBase(this,param_1,param_2,pcVar8), 1 < local_34)) {
    return local_34;
  }
  lVar17 = (longdouble)KeyValues::GetFloat(param_3,"blockLOS",-1.0);
  if ((int)lVar17 != -1) {
    (**(code **)(*(int *)param_2 + 0x70))();
  }
  lVar17 = (longdouble)KeyValues::GetFloat(param_3,"AIWalkable",-1.0);
  if ((int)lVar17 != -1) {
    (**(code **)(*(int *)param_2 + 0x74))();
  }
  (**(code **)(*(int *)param_2 + 0x4c))();
  piVar13 = (int *)&stack0xffffffb0;
  if (local_30[0] == (char *)0x0) {
    pcVar8 = (char *)KeyValues::GetString(param_3,"damage_table",(char *)0x0);
  }
  else {
    (**(code **)(*(int *)param_2 + 0x4c))();
    piVar13 = (int *)&stack0xffffffac;
    pcVar8 = "";
    if (local_30[0] != (char *)0x0) {
      pcVar8 = local_30[0];
    }
    pcVar8 = (char *)KeyValues::GetString(param_3,"damage_table",pcVar8);
  }
  if ((pcVar8 == (char *)0x0) || (*pcVar8 == '\0')) {
    pcVar1 = *(code **)(*(int *)param_2 + 0x48);
    piVar13[1] = 0;
    *piVar13 = (int)param_2;
    piVar13[-1] = 0x498367;
    (*pcVar1)();
  }
  else {
    pcVar1 = *(code **)(*(int *)param_2 + 0x48);
    piVar13[1] = (int)pcVar8;
    *piVar13 = (int)local_30;
    piVar13[-1] = 0x498bf1;
    AllocPooledString((char *)*piVar13);
    *piVar13 = (int)param_2;
    piVar13[1] = (int)local_30[0];
    piVar13[-1] = 0x498c00;
    (*pcVar1)();
  }
  iVar9 = *(int *)param_2;
  pcVar1 = *(code **)(iVar9 + 0x80);
  *piVar13 = (int)param_2;
  pcVar2 = *(code **)(iVar9 + 0x84);
  piVar13[-1] = 0x498378;
  iVar9 = (*pcVar2)();
  piVar13[1] = (int)"physicsmode";
  piVar13[2] = iVar9;
  *piVar13 = (int)param_3;
  piVar13[-1] = 0x49838f;
  iVar9 = KeyValues::GetInt((KeyValues *)*piVar13,(char *)piVar13[1],piVar13[2]);
  *piVar13 = (int)param_2;
  piVar13[1] = iVar9;
  piVar13[-1] = 0x498398;
  (*pcVar1)();
  piVar13[2] = 0;
  piVar13[1] = (int)"multiplayer_break";
  *piVar13 = (int)param_3;
  piVar13[-1] = 0x4983b3;
  pcVar8 = (char *)KeyValues::GetString((KeyValues *)*piVar13,(char *)piVar13[1],(char *)piVar13[2])
  ;
  if (pcVar8 != (char *)0x0) {
    if (pcVar8 == "server") {
LAB_004983dc:
      iVar9 = 1;
    }
    else {
      piVar13[1] = (int)"server";
      *piVar13 = (int)pcVar8;
      piVar13[-1] = 0x4983d1;
      iVar9 = _V_stricmp((char *)*piVar13,(char *)piVar13[1]);
      if (iVar9 == 0) goto LAB_004983dc;
      if (pcVar8 == "client") {
LAB_00498c08:
        iVar9 = 2;
      }
      else {
        *piVar13 = (int)pcVar8;
        piVar13[1] = (int)"client";
        piVar13[-1] = 0x498af7;
        iVar9 = _V_stricmp((char *)*piVar13,(char *)piVar13[1]);
        if (iVar9 == 0) goto LAB_00498c08;
        if (pcVar8 == "both") {
LAB_00498b22:
          iVar9 = 3;
        }
        else {
          piVar13[1] = (int)&DAT_00c19fe9;
          *piVar13 = (int)pcVar8;
          piVar13[-1] = 0x498b1a;
          iVar9 = _V_stricmp((char *)*piVar13,(char *)piVar13[1]);
          if (iVar9 == 0) goto LAB_00498b22;
          iVar9 = 0;
        }
      }
    }
    iVar11 = *(int *)param_2;
    piVar13[1] = iVar9;
    *piVar13 = (int)param_2;
    pcVar1 = *(code **)(iVar11 + 0x88);
    piVar13[-1] = 0x4983f0;
    (*pcVar1)();
  }
  puVar3 = *(undefined4 **)param_2;
  pcVar1 = (code *)*puVar3;
  *piVar13 = (int)param_2;
  pcVar2 = (code *)puVar3[4];
  piVar13[-1] = 0x4983fa;
  lVar17 = (longdouble)(*pcVar2)();
  piVar13[1] = (int)"dmg.bullets";
  *piVar13 = (int)param_3;
  piVar13[2] = (int)(float)lVar17;
  piVar13[-1] = 0x49841b;
  lVar17 = (longdouble)
           KeyValues::GetFloat((KeyValues *)*piVar13,(char *)piVar13[1],(float)piVar13[2]);
  *piVar13 = (int)param_2;
  piVar13[1] = (int)(float)lVar17;
  piVar13[-1] = 0x49842e;
  (*pcVar1)();
  iVar9 = *(int *)param_2;
  pcVar1 = *(code **)(iVar9 + 4);
  *piVar13 = (int)param_2;
  pcVar2 = *(code **)(iVar9 + 0x14);
  piVar13[-1] = 0x498439;
  lVar17 = (longdouble)(*pcVar2)();
  piVar13[1] = (int)"dmg.club";
  *piVar13 = (int)param_3;
  piVar13[2] = (int)(float)lVar17;
  piVar13[-1] = 0x49845a;
  lVar17 = (longdouble)
           KeyValues::GetFloat((KeyValues *)*piVar13,(char *)piVar13[1],(float)piVar13[2]);
  *piVar13 = (int)param_2;
  piVar13[1] = (int)(float)lVar17;
  piVar13[-1] = 0x49846d;
  (*pcVar1)();
  iVar9 = *(int *)param_2;
  pcVar1 = *(code **)(iVar9 + 8);
  *piVar13 = (int)param_2;
  pcVar2 = *(code **)(iVar9 + 0x18);
  piVar13[-1] = 0x498478;
  lVar17 = (longdouble)(*pcVar2)();
  piVar13[1] = (int)"dmg.explosive";
  *piVar13 = (int)param_3;
  piVar13[2] = (int)(float)lVar17;
  piVar13[-1] = 0x498499;
  lVar17 = (longdouble)
           KeyValues::GetFloat((KeyValues *)*piVar13,(char *)piVar13[1],(float)piVar13[2]);
  *piVar13 = (int)param_2;
  piVar13[1] = (int)(float)lVar17;
  piVar13[-1] = 0x4984ac;
  (*pcVar1)();
  iVar9 = *(int *)param_2;
  pcVar1 = *(code **)(iVar9 + 0xc);
  *piVar13 = (int)param_2;
  pcVar2 = *(code **)(iVar9 + 0x1c);
  piVar13[-1] = 0x4984b7;
  lVar17 = (longdouble)(*pcVar2)();
  piVar13[1] = (int)"dmg.fire";
  *piVar13 = (int)param_3;
  piVar13[2] = (int)(float)lVar17;
  piVar13[-1] = 0x4984d8;
  lVar17 = (longdouble)
           KeyValues::GetFloat((KeyValues *)*piVar13,(char *)piVar13[1],(float)piVar13[2]);
  *piVar13 = (int)param_2;
  piVar13[1] = (int)(float)lVar17;
  piVar13[-1] = 0x4984eb;
  (*pcVar1)();
  if (*(char **)(param_1 + 0x7c) == "prop_physics_override") goto LAB_00498780;
  piVar13[1] = (int)"prop_physics_override";
  *piVar13 = (int)param_1;
  piVar13[-1] = 0x49850b;
  cVar7 = CBaseEntity::ClassMatchesComplex((CBaseEntity *)*piVar13,(char *)piVar13[1]);
  if ((cVar7 != '\0') || (*(char **)(param_1 + 0x7c) == "prop_dynamic_override")) goto LAB_00498780;
  piVar13[1] = (int)"prop_dynamic_override";
  *piVar13 = (int)param_1;
  piVar13[-1] = 0x498533;
  cVar7 = CBaseEntity::ClassMatchesComplex((CBaseEntity *)*piVar13,(char *)piVar13[1]);
  if (cVar7 != '\0') goto LAB_00498780;
  iVar9 = *(int *)(param_1 + 0x100);
  piVar13[1] = (int)"health";
  piVar13[2] = iVar9;
  *piVar13 = (int)param_3;
  piVar13[-1] = 0x49855b;
  iVar9 = KeyValues::GetInt((KeyValues *)*piVar13,(char *)piVar13[1],piVar13[2]);
  if (iVar9 != *(int *)(param_1 + 0x100)) {
    iVar11 = *(int *)param_1;
    *piVar13 = (int)param_1;
    piVar13[1] = (int)(param_1 + 0x100);
    pcVar1 = *(code **)(iVar11 + 0x214);
    piVar13[-1] = 0x498581;
    (*pcVar1)();
    *(int *)(param_1 + 0x100) = iVar9;
  }
  piVar13[2] = 0;
  piVar13[1] = (int)"explosion_type";
  *piVar13 = (int)param_3;
  piVar13[-1] = 0x4985a8;
  pcVar8 = (char *)KeyValues::GetString((KeyValues *)*piVar13,(char *)piVar13[1],(char *)piVar13[2])
  ;
  if (pcVar8 != (char *)0x0) {
    if (pcVar8 != "grenade") {
      piVar13[1] = (int)"grenade";
      *piVar13 = (int)pcVar8;
      piVar13[-1] = 0x4985c6;
      iVar9 = _V_stricmp((char *)*piVar13,(char *)piVar13[1]);
      if (iVar9 != 0) {
        if (pcVar8 != "molotov") {
          *piVar13 = (int)pcVar8;
          piVar13[1] = (int)"molotov";
          piVar13[-1] = 0x498c6d;
          iVar9 = _V_stricmp((char *)*piVar13,(char *)piVar13[1]);
          if (iVar9 != 0) {
            if (pcVar8 != "fireworks") {
              piVar13[1] = (int)"fireworks";
              *piVar13 = (int)pcVar8;
              piVar13[-1] = 0x498c90;
              iVar9 = _V_stricmp((char *)*piVar13,(char *)piVar13[1]);
              if (iVar9 != 0) {
                iVar9 = *(int *)param_2;
                piVar13[1] = 0;
                *piVar13 = (int)param_2;
                pcVar1 = *(code **)(iVar9 + 0x30);
                piVar13[-1] = 0x498ca8;
                (*pcVar1)();
                goto LAB_004985ee;
              }
            }
            iVar9 = *(int *)param_2;
            piVar13[1] = 3;
            *piVar13 = (int)param_2;
            pcVar1 = *(code **)(iVar9 + 0x30);
            piVar13[-1] = 0x498d30;
            (*pcVar1)();
            *(undefined4 *)(param_1 + 0x14c) = 0x80000000;
            goto LAB_004985ee;
          }
        }
        iVar9 = *(int *)param_2;
        piVar13[1] = 2;
        *piVar13 = (int)param_2;
        pcVar1 = *(code **)(iVar9 + 0x30);
        piVar13[-1] = 0x498cc4;
        (*pcVar1)();
        *(undefined4 *)(param_1 + 0x14c) = 0x80000000;
        goto LAB_004985ee;
      }
    }
    iVar9 = *(int *)param_2;
    piVar13[1] = 1;
    *piVar13 = (int)param_2;
    pcVar1 = *(code **)(iVar9 + 0x30);
    piVar13[-1] = 0x4985e1;
    (*pcVar1)();
    *(undefined4 *)(param_1 + 0x14c) = 0x80000000;
  }
LAB_004985ee:
  iVar9 = *(int *)param_2;
  pcVar1 = *(code **)(iVar9 + 0x24);
  *piVar13 = (int)param_2;
  pcVar2 = *(code **)(iVar9 + 0x2c);
  piVar13[-1] = 0x4985f9;
  lVar17 = (longdouble)(*pcVar2)();
  piVar13[1] = (int)"explosive_damage";
  *piVar13 = (int)param_3;
  piVar13[2] = (int)(float)lVar17;
  piVar13[-1] = 0x49861a;
  lVar17 = (longdouble)
           KeyValues::GetFloat((KeyValues *)*piVar13,(char *)piVar13[1],(float)piVar13[2]);
  *piVar13 = (int)param_2;
  piVar13[1] = (int)(float)lVar17;
  piVar13[-1] = 0x49862d;
  (*pcVar1)();
  iVar9 = *(int *)param_2;
  pcVar1 = *(code **)(iVar9 + 0x38);
  *piVar13 = (int)param_2;
  pcVar2 = *(code **)(iVar9 + 0x3c);
  piVar13[-1] = 0x498638;
  lVar17 = (longdouble)(*pcVar2)();
  piVar13[1] = (int)"explosion_delay";
  *piVar13 = (int)param_3;
  piVar13[2] = (int)(float)lVar17;
  piVar13[-1] = 0x498659;
  lVar17 = (longdouble)
           KeyValues::GetFloat((KeyValues *)*piVar13,(char *)piVar13[1],(float)piVar13[2]);
  *piVar13 = (int)param_2;
  piVar13[1] = (int)(float)lVar17;
  piVar13[-1] = 0x49866c;
  (*pcVar1)();
  iVar9 = *(int *)param_2;
  piVar13[1] = (int)param_2;
  *piVar13 = (int)local_30;
  pcVar1 = *(code **)(iVar9 + 0x44);
  piVar13[-1] = 0x49867d;
  (*pcVar1)();
  *piVar13 = (int)"explosion_buildup";
  pcVar8 = local_30[0];
  if (local_30[0] == (char *)0x0) {
    pcVar8 = "";
  }
  piVar13[1] = (int)pcVar8;
  piVar13[-1] = (int)param_3;
  piVar13[-2] = 0x49869f;
  pcVar8 = (char *)KeyValues::GetString
                             ((KeyValues *)piVar13[-1],(char *)*piVar13,(char *)piVar13[1]);
  if ((pcVar8 == (char *)0x0) || (*pcVar8 == '\0')) {
    pcVar1 = *(code **)(*(int *)param_2 + 0x40);
    *piVar13 = 0;
    piVar13[-1] = (int)param_2;
    piVar13[-2] = 0x4986be;
    (*pcVar1)();
    piVar13 = piVar13 + -1;
  }
  else {
    pcVar1 = *(code **)(*(int *)param_2 + 0x40);
    *piVar13 = (int)pcVar8;
    piVar13[-1] = (int)local_30;
    piVar13[-2] = 0x498cea;
    AllocPooledString((char *)piVar13[-1]);
    piVar13[-1] = (int)param_2;
    *piVar13 = (int)local_30[0];
    piVar13[-2] = 0x498cfc;
    (*pcVar1)();
    iVar9 = *(int *)param_2;
    *piVar13 = (int)param_2;
    piVar13[-1] = (int)local_30;
    pcVar1 = *(code **)(iVar9 + 0x44);
    piVar13[-2] = 0x498d08;
    (*pcVar1)();
    pcVar8 = local_30[0];
    if (local_30[0] == (char *)0x0) {
      pcVar8 = "";
    }
    piVar13[-2] = (int)pcVar8;
    piVar13[-3] = 0x498d1b;
    CBaseEntity::PrecacheScriptSound((char *)piVar13[-2]);
    piVar13 = piVar13 + -2;
  }
  if ((*(int *)(param_1 + 0x100) != 0) &&
     (uVar15 = *(uint *)(param_1 + 0x148) & 0xfffffffd, *(uint *)(param_1 + 0x148) != uVar15)) {
    if (param_1[0x6c] == (CBaseEntity)0x0) {
      puVar4 = *(uint **)(param_1 + 0x30);
      if (puVar4 != (uint *)0x0) {
        *puVar4 = *puVar4 | 0x101;
        *piVar13 = (int)puVar4;
        piVar13[-1] = 0x4986ff;
        iVar9 = CBaseEdict::GetChangeAccessor((CBaseEdict *)*piVar13);
        *(undefined2 *)(iVar9 + 2) = 0;
      }
    }
    else {
      param_1[0x70] = (CBaseEntity)((byte)param_1[0x70] | 1);
    }
    *(uint *)(param_1 + 0x148) = uVar15;
  }
  piVar13[2] = 0;
  piVar13[1] = (int)"glow";
  *piVar13 = (int)param_3;
  piVar13[-1] = 0x498729;
  iVar9 = KeyValues::GetInt((KeyValues *)*piVar13,(char *)piVar13[1],piVar13[2]);
  if ((iVar9 != 0) &&
     (uVar15 = *(uint *)(param_1 + 0x148) | 0x8000, *(uint *)(param_1 + 0x148) != uVar15)) {
    if (param_1[0x6c] == (CBaseEntity)0x0) {
      puVar4 = *(uint **)(param_1 + 0x30);
      if (puVar4 != (uint *)0x0) {
        *puVar4 = *puVar4 | 0x101;
        *piVar13 = (int)puVar4;
        piVar13[-1] = 0x498767;
        iVar9 = CBaseEdict::GetChangeAccessor((CBaseEdict *)*piVar13);
        *(undefined2 *)(iVar9 + 2) = 0;
      }
    }
    else {
      param_1[0x70] = (CBaseEntity)((byte)param_1[0x70] | 1);
    }
    *(uint *)(param_1 + 0x148) = uVar15;
  }
LAB_00498780:
  iVar9 = *(int *)param_2;
  piVar13[1] = (int)param_2;
  *piVar13 = (int)local_30;
  pcVar1 = *(code **)(iVar9 + 0x54);
  piVar13[-1] = 0x49878c;
  (*pcVar1)();
  piVar14 = piVar13 + -1;
  if (local_30[0] == (char *)0x0) {
    piVar13[1] = 0;
    *piVar13 = (int)"breakable_model";
    piVar13[-1] = (int)param_3;
    piVar13[-2] = 0x498c2d;
    pcVar8 = (char *)KeyValues::GetString
                               ((KeyValues *)piVar13[-1],(char *)*piVar13,(char *)piVar13[1]);
  }
  else {
    iVar9 = *(int *)param_2;
    *piVar13 = (int)param_2;
    piVar13[-1] = (int)local_30;
    pcVar1 = *(code **)(iVar9 + 0x54);
    piVar13[-2] = 0x4987a6;
    (*pcVar1)();
    piVar14 = piVar13 + -2;
    piVar13[-1] = (int)"breakable_model";
    pcVar8 = "";
    if (local_30[0] != (char *)0x0) {
      pcVar8 = local_30[0];
    }
    *piVar13 = (int)pcVar8;
    piVar13[-2] = (int)param_3;
    piVar13[-3] = 0x4987cd;
    pcVar8 = (char *)KeyValues::GetString
                               ((KeyValues *)piVar13[-2],(char *)piVar13[-1],(char *)*piVar13);
  }
  if ((pcVar8 == (char *)0x0) || (*pcVar8 == '\0')) {
    pcVar1 = *(code **)(*(int *)param_2 + 0x50);
    piVar14[1] = 0;
    *piVar14 = (int)param_2;
    piVar14[-1] = 0x4987ec;
    (*pcVar1)();
  }
  else {
    pcVar1 = *(code **)(*(int *)param_2 + 0x50);
    piVar14[1] = (int)pcVar8;
    *piVar14 = (int)local_30;
    piVar14[-1] = 0x498bc9;
    AllocPooledString((char *)*piVar14);
    *piVar14 = (int)param_2;
    piVar14[1] = (int)local_30[0];
    piVar14[-1] = 0x498bd8;
    (*pcVar1)();
  }
  iVar9 = *(int *)param_2;
  pcVar1 = *(code **)(iVar9 + 0x58);
  *piVar14 = (int)param_2;
  pcVar2 = *(code **)(iVar9 + 0x5c);
  piVar14[-1] = 0x4987f7;
  iVar9 = (*pcVar2)();
  piVar14[1] = (int)"breakable_skin";
  piVar14[2] = iVar9;
  *piVar14 = (int)param_3;
  piVar14[-1] = 0x49880e;
  iVar9 = KeyValues::GetInt((KeyValues *)*piVar14,(char *)piVar14[1],piVar14[2]);
  *piVar14 = (int)param_2;
  piVar14[1] = iVar9;
  piVar14[-1] = 0x498817;
  (*pcVar1)();
  iVar9 = *(int *)param_2;
  pcVar1 = *(code **)(iVar9 + 0x60);
  *piVar14 = (int)param_2;
  pcVar2 = *(code **)(iVar9 + 100);
  piVar14[-1] = 0x498822;
  iVar9 = (*pcVar2)();
  piVar14[1] = (int)"breakable_count";
  piVar14[2] = iVar9;
  *piVar14 = (int)param_3;
  piVar14[-1] = 0x498839;
  iVar9 = KeyValues::GetInt((KeyValues *)*piVar14,(char *)piVar14[1],piVar14[2]);
  *piVar14 = (int)param_2;
  piVar14[1] = iVar9;
  piVar14[-1] = 0x498842;
  (*pcVar1)();
  if (AllocTempVector()::s_vecTemp == '\0') {
    *piVar14 = (int)&AllocTempVector()::s_vecTemp;
    piVar14[-1] = 0x498b9c;
    iVar9 = __cxa_guard_acquire();
    if (iVar9 != 0) {
      *piVar14 = (int)&AllocTempVector()::s_vecTemp;
      piVar14[-1] = 0x498bb0;
      __cxa_guard_release();
    }
  }
  if (AllocTempVector()::s_nIndex == '\0') {
    *piVar14 = (int)&AllocTempVector()::s_nIndex;
    piVar14[-1] = 0x498b6c;
    iVar9 = __cxa_guard_acquire();
    if (iVar9 != 0) {
      *piVar14 = (int)&AllocTempVector()::s_nIndex;
      AllocTempVector()::s_nIndex = 0;
      piVar14[-1] = 0x498b8a;
      __cxa_guard_release();
    }
  }
  AllocTempVector()::s_nIndex = AllocTempVector()::s_nIndex + 0x10001 & 0x7f;
  LOCK();
  UNLOCK();
  iVar9 = AllocTempVector()::s_nIndex * 0xc;
  *(float *)(AllocTempVector()::s_vecTemp + iVar9) =
       *(float *)(param_1 + 0x1a8) - *(float *)(param_1 + 0x19c);
  *(float *)(AllocTempVector()::s_vecTemp + iVar9 + 4) =
       *(float *)(param_1 + 0x1ac) - *(float *)(param_1 + 0x1a0);
  *(float *)(AllocTempVector()::s_vecTemp + iVar9 + 8) =
       *(float *)(param_1 + 0x1b0) - *(float *)(param_1 + 0x1a4);
  local_28 = *(float *)(AllocTempVector()::s_vecTemp + iVar9);
  local_24 = *(float *)(AllocTempVector()::s_vecTemp + iVar9 + 4);
  local_20[0] = *(float *)(AllocTempVector()::s_vecTemp + iVar9 + 8);
  if (local_24 <= local_28) {
    pfVar10 = &local_24;
    fVar6 = local_24;
  }
  else {
    pfVar10 = &local_28;
    fVar6 = local_28;
  }
  if (local_20[0] <= fVar6) {
    pfVar10 = local_20;
  }
  *pfVar10 = 1.0;
  ppuVar16 = &sPropdataInteractionSections;
  fVar6 = local_24 * local_28 * local_20[0] * 0.0009765625;
  iVar9 = (int)fVar6;
  if (fVar6 < (float)iVar9) {
    iVar9 = iVar9 + -1;
  }
  iVar11 = *(int *)param_2;
  *piVar14 = (int)param_2;
  iVar12 = 0;
  piVar14[1] = iVar9;
  pcVar1 = *(code **)(iVar11 + 0x68);
  piVar14[-1] = 0x49894c;
  (*pcVar1)();
  do {
    puVar5 = *ppuVar16;
    if (puVar5 != (undefined *)0x0) {
      piVar14[2] = 0;
      piVar14[1] = (int)puVar5;
      *piVar14 = (int)param_4;
      piVar14[-1] = 0x49897d;
      iVar9 = KeyValues::FindKey((KeyValues *)*piVar14,(char *)piVar14[1],SUB41(piVar14[2],0));
      if (iVar9 != 0) {
        piVar14[2] = (int)&DAT_00d539c2;
        puVar5 = ppuVar16[1];
        *piVar14 = iVar9;
        piVar14[1] = (int)puVar5;
        piVar14[-1] = 0x498998;
        pcVar8 = (char *)KeyValues::GetString
                                   ((KeyValues *)*piVar14,(char *)piVar14[1],(char *)piVar14[2]);
        if ((pcVar8 != (char *)0x0) && (*pcVar8 != '\0')) {
          puVar5 = ppuVar16[2];
          *piVar14 = (int)pcVar8;
          piVar14[1] = (int)puVar5;
          piVar14[-1] = 0x4989b0;
          iVar9 = _V_stricmp((char *)*piVar14,(char *)piVar14[1]);
          if (iVar9 == 0) {
            iVar9 = *(int *)param_2;
            piVar14[1] = iVar12;
            *piVar14 = (int)param_2;
            pcVar1 = *(code **)(iVar9 + 0x78);
            piVar14[-1] = 0x4989cc;
            (*pcVar1)();
          }
        }
      }
    }
    ppuVar16 = ppuVar16 + 3;
    iVar12 = iVar12 + 1;
  } while (iVar12 != 0x16);
  piVar14[2] = 0;
  piVar14[1] = (int)"prop_contexts";
  *piVar14 = (int)param_4;
  piVar14[-1] = 0x4989f3;
  iVar9 = KeyValues::FindKey((KeyValues *)*piVar14,(char *)piVar14[1],SUB41(piVar14[2],0));
  if (iVar9 != 0) {
    *piVar14 = iVar9;
    piVar14[-1] = 0x498a03;
    iVar9 = KeyValues::GetFirstSubKey((KeyValues *)*piVar14);
    while (iVar9 != 0) {
      while( true ) {
        *piVar14 = iVar9;
        piVar14[-1] = 0x498a26;
        iVar11 = KeyValues::GetName((KeyValues *)*piVar14);
        piVar14[2] = (int)&DAT_00d539c2;
        piVar14[1] = 0;
        *piVar14 = iVar9;
        piVar14[-1] = 0x498a40;
        iVar12 = KeyValues::GetString((KeyValues *)*piVar14,(char *)piVar14[1],(char *)piVar14[2]);
        if ((iVar12 == 0) || (iVar11 == 0)) break;
        piVar14[2] = iVar12;
        piVar14[1] = iVar11;
        *piVar14 = (int)"%s:%s";
        piVar14[-1] = 0x498a5c;
        iVar11 = UTIL_VarArgs((char *)*piVar14);
        *piVar14 = (int)param_1;
        piVar14[1] = iVar11;
        piVar14[-1] = 0x498a68;
        CBaseEntity::AddContext((CBaseEntity *)*piVar14,(char *)piVar14[1]);
        *piVar14 = iVar9;
        piVar14[-1] = 0x498a70;
        iVar9 = KeyValues::GetNextKey((KeyValues *)*piVar14);
        if (iVar9 == 0) goto LAB_00498a80;
      }
      *piVar14 = iVar9;
      piVar14[-1] = 0x498a18;
      iVar9 = KeyValues::GetNextKey((KeyValues *)*piVar14);
    }
  }
LAB_00498a80:
  uVar15 = 1;
  if (local_34 != 1) {
    piVar14[2] = 0;
    piVar14[1] = (int)"allowstatic";
    *piVar14 = (int)param_3;
    piVar14[-1] = 0x498aa6;
    iVar9 = KeyValues::GetInt((KeyValues *)*piVar14,(char *)piVar14[1],piVar14[2]);
    uVar15 = (uint)(iVar9 != 0);
  }
  return uVar15;
}

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)