L L4D2node

CParticleSystemDictionary::DestroyExistingElement

0x00bd26f0 · 3235 bytes · __thiscall

_ZN25CParticleSystemDictionary22DestroyExistingElementEP11CDmxElement

Decompiled

undefined (2 params)

/* CParticleSystemDictionary::DestroyExistingElement(CDmxElement*) */

void __thiscall
CParticleSystemDictionary::DestroyExistingElement
          (CParticleSystemDictionary *this,CDmxElement *param_1)

{
  CUtlMemory<CParticleOperatorInstance*,int> *pCVar1;
  CUtlMemory<CParticleOperatorInstance*,int> *pCVar2;
  CUtlMemory<CParticleOperatorInstance*,int> *pCVar3;
  CUtlMemory<CParticleOperatorInstance*,int> *pCVar4;
  CUtlMemory<CParticleOperatorInstance*,int> *pCVar5;
  CUtlMemory<CParticleOperatorInstance*,int> *pCVar6;
  undefined4 *puVar7;
  undefined4 *puVar8;
  CParticleCollection *this_00;
  char cVar9;
  undefined4 uVar10;
  int *piVar11;
  CParticleSystemDictionary *pCVar12;
  UniqueId_t *pUVar13;
  uint uVar14;
  int iVar15;
  int iVar16;
  undefined4 *puVar17;
  ushort local_1e [7];
  
  uVar10 = CDmxElement::GetName(param_1);
  piVar11 = (int *)CDmxElement::GetAttribute(param_1,"preventNameBasedLookup");
  if (piVar11 == (int *)0x0) {
    CDmxElement::GetValue<bool>(char_const*)::defaultValue = 0;
  }
  else if (*piVar11 == 4) {
    if (*(char *)piVar11[2] != '\0') {
      iVar16 = *(int *)(this + 0x58);
      pUVar13 = (UniqueId_t *)CDmxElement::GetId(param_1);
      if (iVar16 < 1) {
        return;
      }
      iVar15 = 0;
      while( true ) {
        cVar9 = IsUniqueIdEqual((UniqueId_t *)(*(int *)(*(int *)(this + 0x4c) + iVar15 * 4) + 0x2c8)
                                ,pUVar13);
        if (cVar9 != '\0') break;
        iVar15 = iVar15 + 1;
        if (iVar15 == iVar16) {
          return;
        }
      }
      puVar17 = (undefined4 *)(iVar15 * 4 + *(int *)(this + 0x4c));
      puVar7 = (undefined4 *)*puVar17;
      if (0 < *(int *)(this + 0x58)) {
        iVar16 = *(int *)(this + 0x58) + -1;
        if (iVar16 != iVar15) {
          *puVar17 = *(undefined4 *)(*(int *)(this + 0x4c) + iVar16 * 4);
          iVar16 = *(int *)(this + 0x58) + -1;
        }
        *(int *)(this + 0x58) = iVar16;
      }
      if (puVar7 == (undefined4 *)0x0) {
        return;
      }
      this_00 = (CParticleCollection *)puVar7[0x56];
      while (this_00 != (CParticleCollection *)0x0) {
        CParticleCollection::UnlinkFromDefList(this_00);
        this_00 = (CParticleCollection *)puVar7[0x56];
      }
      if (0 < (int)puVar7[0xc5]) {
        iVar16 = 0;
        do {
          piVar11 = *(int **)(puVar7[0xc2] + iVar16 * 4);
          if (piVar11 != (int *)0x0) {
            (**(code **)(*piVar11 + 0x80))(piVar11);
          }
          iVar16 = iVar16 + 1;
        } while (iVar16 < (int)puVar7[0xc5]);
      }
      pCVar1 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 0xc2);
      puVar7[0xc5] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar1);
      puVar7[0xc6] = puVar7[0xc2];
      if (0 < (int)puVar7[0xca]) {
        iVar16 = 0;
        do {
          piVar11 = *(int **)(puVar7[199] + iVar16 * 4);
          if (piVar11 != (int *)0x0) {
            (**(code **)(*piVar11 + 0x80))(piVar11);
          }
          iVar16 = iVar16 + 1;
        } while (iVar16 < (int)puVar7[0xca]);
      }
      pCVar2 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 199);
      puVar7[0xca] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar2);
      puVar7[0xcb] = puVar7[199];
      if (0 < (int)puVar7[0xcf]) {
        iVar16 = 0;
        do {
          piVar11 = *(int **)(puVar7[0xcc] + iVar16 * 4);
          if (piVar11 != (int *)0x0) {
            (**(code **)(*piVar11 + 0x80))(piVar11);
          }
          iVar16 = iVar16 + 1;
        } while (iVar16 < (int)puVar7[0xcf]);
      }
      pCVar3 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 0xcc);
      puVar7[0xcf] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar3);
      puVar7[0xd0] = puVar7[0xcc];
      if (0 < (int)puVar7[0xd4]) {
        iVar16 = 0;
        do {
          piVar11 = *(int **)(puVar7[0xd1] + iVar16 * 4);
          if (piVar11 != (int *)0x0) {
            (**(code **)(*piVar11 + 0x80))(piVar11);
          }
          iVar16 = iVar16 + 1;
        } while (iVar16 < (int)puVar7[0xd4]);
      }
      pCVar4 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 0xd1);
      puVar7[0xd4] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar4);
      puVar7[0xd5] = puVar7[0xd1];
      if (0 < (int)puVar7[0xd9]) {
        iVar16 = 0;
        do {
          piVar11 = *(int **)(puVar7[0xd6] + iVar16 * 4);
          if (piVar11 != (int *)0x0) {
            (**(code **)(*piVar11 + 0x80))(piVar11);
          }
          iVar16 = iVar16 + 1;
        } while (iVar16 < (int)puVar7[0xd9]);
      }
      pCVar5 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 0xd6);
      puVar7[0xd9] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar5);
      puVar7[0xda] = puVar7[0xd6];
      if (0 < (int)puVar7[0xde]) {
        iVar16 = 0;
        do {
          piVar11 = *(int **)(puVar7[0xdb] + iVar16 * 4);
          if (piVar11 != (int *)0x0) {
            (**(code **)(*piVar11 + 0x80))(piVar11);
          }
          iVar16 = iVar16 + 1;
        } while (iVar16 < (int)puVar7[0xde]);
      }
      puVar7[0xde] = 0;
      pCVar6 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 0xdb);
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar6);
      puVar7[0x101] = 0;
      puVar7[0xdf] = puVar7[0xdb];
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xfe));
      puVar7[0x102] = puVar7[0xfe];
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xfe));
      puVar7[0xfc] = 0;
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xf9));
      puVar7[0xfd] = puVar7[0xf9];
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xf9));
      puVar7[0xf7] = 0;
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xf4));
      puVar7[0xf8] = puVar7[0xf4];
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xf4));
      puVar7[0xf2] = 0;
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xef));
      puVar7[0xf3] = puVar7[0xef];
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xef));
      puVar7[0xed] = 0;
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xea));
      puVar7[0xee] = puVar7[0xea];
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xea));
      puVar7[0xe8] = 0;
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xe5));
      puVar7[0xe9] = puVar7[0xe5];
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xe5));
      puVar7[0xe3] = 0;
      CUtlMemory<ParticleChildrenInfo_t,int>::Purge
                ((CUtlMemory<ParticleChildrenInfo_t,int> *)(puVar7 + 0xe0));
      puVar7[0xe4] = puVar7[0xe0];
      CUtlMemory<ParticleChildrenInfo_t,int>::Purge
                ((CUtlMemory<ParticleChildrenInfo_t,int> *)(puVar7 + 0xe0));
      puVar7[0xde] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar6);
      puVar7[0xdf] = puVar7[0xdb];
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar6);
      puVar7[0xd9] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar5);
      puVar7[0xda] = puVar7[0xd6];
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar5);
      puVar7[0xd4] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar4);
      puVar7[0xd5] = puVar7[0xd1];
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar4);
      puVar7[0xcf] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar3);
      puVar7[0xd0] = puVar7[0xcc];
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar3);
      puVar7[0xca] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar2);
      puVar7[0xcb] = puVar7[199];
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar2);
      puVar7[0xc5] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar1);
      puVar7[0xc6] = puVar7[0xc2];
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar1);
      CUtlMemory<unsigned_char,int>::Purge((CUtlMemory<unsigned_char,int> *)(puVar7 + 0xbe));
      piVar11 = (int *)puVar7[0xa0];
      if (piVar11 != (int *)0x0) {
        if ((undefined4 *)puVar7[0x9f] == (undefined4 *)0x0) {
          if ((undefined4 *)*piVar11 == puVar7 + 0x9e) {
            iVar16 = puVar7[0x9e];
            *piVar11 = iVar16;
            if (iVar16 != 0) {
              *(undefined4 *)(iVar16 + 4) = 0;
            }
          }
        }
        else {
          *(undefined4 *)puVar7[0x9f] = puVar7[0x9e];
          if (puVar7[0x9e] != 0) {
            *(undefined4 *)(puVar7[0x9e] + 4) = puVar7[0x9f];
          }
        }
        puVar7[0x9f] = 0;
        puVar7[0x9e] = 0;
        puVar7[0xa0] = 0;
      }
      CMaterialReference::~CMaterialReference((CMaterialReference *)(puVar7 + 0x51));
      puVar17 = (undefined4 *)*puVar7;
      while (puVar17 != (undefined4 *)0x0) {
        puVar8 = (undefined4 *)*puVar17;
        puVar17[1] = 0;
        *puVar17 = 0;
        puVar17[2] = 0;
        puVar17 = puVar8;
      }
      *puVar7 = 0;
      operator_delete(puVar7);
      return;
    }
  }
  else {
    CDmxAttribute::GetValue<bool>()::defaultValue = 0;
  }
  pCVar12 = this + 0x14;
  CUtlSymbolTable::Find((char *)local_1e);
  if (local_1e[0] != 0xffff) {
    CUtlSymbolTable::AddString((char *)local_1e);
    uVar14 = (uint)local_1e[0];
    if (*(int *)(this + 0xc) <= (int)uVar14) {
      pCVar12 = (CParticleSystemDictionary *)(uVar14 + 1);
      CUtlVector<CParticleSystemDefinition*,CUtlMemory<CParticleSystemDefinition*,int>>::EnsureCount
                ((CUtlVector<CParticleSystemDefinition*,CUtlMemory<CParticleSystemDefinition*,int>>
                  *)this,(int)pCVar12);
    }
    puVar7 = *(undefined4 **)(*(int *)this + uVar14 * 4);
    if (puVar7 != (undefined4 *)0x0) {
      while ((CParticleCollection *)puVar7[0x56] != (CParticleCollection *)0x0) {
        CParticleCollection::UnlinkFromDefList((CParticleCollection *)puVar7[0x56]);
      }
      if (0 < (int)puVar7[0xc5]) {
        iVar16 = 0;
        do {
          piVar11 = *(int **)(puVar7[0xc2] + iVar16 * 4);
          if (piVar11 != (int *)0x0) {
            (**(code **)(*piVar11 + 0x80))(piVar11,pCVar12,uVar10);
          }
          iVar16 = iVar16 + 1;
        } while (iVar16 < (int)puVar7[0xc5]);
      }
      pCVar1 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 0xc2);
      puVar7[0xc5] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar1);
      puVar7[0xc6] = puVar7[0xc2];
      if (0 < (int)puVar7[0xca]) {
        iVar16 = 0;
        do {
          piVar11 = *(int **)(puVar7[199] + iVar16 * 4);
          if (piVar11 != (int *)0x0) {
            (**(code **)(*piVar11 + 0x80))(piVar11);
          }
          iVar16 = iVar16 + 1;
        } while (iVar16 < (int)puVar7[0xca]);
      }
      pCVar2 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 199);
      puVar7[0xca] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar2);
      puVar7[0xcb] = puVar7[199];
      if (0 < (int)puVar7[0xcf]) {
        iVar16 = 0;
        do {
          piVar11 = *(int **)(puVar7[0xcc] + iVar16 * 4);
          if (piVar11 != (int *)0x0) {
            (**(code **)(*piVar11 + 0x80))(piVar11);
          }
          iVar16 = iVar16 + 1;
        } while (iVar16 < (int)puVar7[0xcf]);
      }
      pCVar3 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 0xcc);
      puVar7[0xcf] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar3);
      puVar7[0xd0] = puVar7[0xcc];
      if (0 < (int)puVar7[0xd4]) {
        iVar16 = 0;
        do {
          piVar11 = *(int **)(puVar7[0xd1] + iVar16 * 4);
          if (piVar11 != (int *)0x0) {
            (**(code **)(*piVar11 + 0x80))(piVar11);
          }
          iVar16 = iVar16 + 1;
        } while (iVar16 < (int)puVar7[0xd4]);
      }
      pCVar4 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 0xd1);
      puVar7[0xd4] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar4);
      puVar7[0xd5] = puVar7[0xd1];
      if (0 < (int)puVar7[0xd9]) {
        iVar16 = 0;
        do {
          piVar11 = *(int **)(puVar7[0xd6] + iVar16 * 4);
          if (piVar11 != (int *)0x0) {
            (**(code **)(*piVar11 + 0x80))(piVar11);
          }
          iVar16 = iVar16 + 1;
        } while (iVar16 < (int)puVar7[0xd9]);
      }
      pCVar5 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 0xd6);
      puVar7[0xd9] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar5);
      puVar7[0xda] = puVar7[0xd6];
      if (0 < (int)puVar7[0xde]) {
        iVar16 = 0;
        do {
          piVar11 = *(int **)(puVar7[0xdb] + iVar16 * 4);
          if (piVar11 != (int *)0x0) {
            (**(code **)(*piVar11 + 0x80))(piVar11);
          }
          iVar16 = iVar16 + 1;
        } while (iVar16 < (int)puVar7[0xde]);
      }
      puVar7[0xde] = 0;
      pCVar6 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 0xdb);
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar6);
      puVar7[0x101] = 0;
      puVar7[0xdf] = puVar7[0xdb];
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xfe));
      puVar7[0x102] = puVar7[0xfe];
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xfe));
      puVar7[0xfc] = 0;
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xf9));
      puVar7[0xfd] = puVar7[0xf9];
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xf9));
      puVar7[0xf7] = 0;
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xf4));
      puVar7[0xf8] = puVar7[0xf4];
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xf4));
      puVar7[0xf2] = 0;
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xef));
      puVar7[0xf3] = puVar7[0xef];
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xef));
      puVar7[0xed] = 0;
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xea));
      puVar7[0xee] = puVar7[0xea];
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xea));
      puVar7[0xe8] = 0;
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xe5));
      puVar7[0xe9] = puVar7[0xe5];
      CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xe5));
      puVar7[0xe3] = 0;
      CUtlMemory<ParticleChildrenInfo_t,int>::Purge
                ((CUtlMemory<ParticleChildrenInfo_t,int> *)(puVar7 + 0xe0));
      puVar7[0xe4] = puVar7[0xe0];
      CUtlMemory<ParticleChildrenInfo_t,int>::Purge
                ((CUtlMemory<ParticleChildrenInfo_t,int> *)(puVar7 + 0xe0));
      puVar7[0xde] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar6);
      puVar7[0xdf] = puVar7[0xdb];
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar6);
      puVar7[0xd9] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar5);
      puVar7[0xda] = puVar7[0xd6];
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar5);
      puVar7[0xd4] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar4);
      puVar7[0xd5] = puVar7[0xd1];
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar4);
      puVar7[0xcf] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar3);
      puVar7[0xd0] = puVar7[0xcc];
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar3);
      puVar7[0xca] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar2);
      puVar7[0xcb] = puVar7[199];
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar2);
      puVar7[0xc5] = 0;
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar1);
      puVar7[0xc6] = puVar7[0xc2];
      CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar1);
      CUtlMemory<unsigned_char,int>::Purge((CUtlMemory<unsigned_char,int> *)(puVar7 + 0xbe));
      piVar11 = (int *)puVar7[0xa0];
      if (piVar11 != (int *)0x0) {
        if ((undefined4 *)puVar7[0x9f] == (undefined4 *)0x0) {
          if ((undefined4 *)*piVar11 == puVar7 + 0x9e) {
            iVar16 = puVar7[0x9e];
            *piVar11 = iVar16;
            if (iVar16 != 0) {
              *(undefined4 *)(iVar16 + 4) = 0;
            }
          }
        }
        else {
          *(undefined4 *)puVar7[0x9f] = puVar7[0x9e];
          if (puVar7[0x9e] != 0) {
            *(undefined4 *)(puVar7[0x9e] + 4) = puVar7[0x9f];
          }
        }
        puVar7[0x9f] = 0;
        puVar7[0x9e] = 0;
        puVar7[0xa0] = 0;
      }
      CMaterialReference::~CMaterialReference((CMaterialReference *)(puVar7 + 0x51));
      puVar17 = (undefined4 *)*puVar7;
      while (puVar17 != (undefined4 *)0x0) {
        puVar8 = (undefined4 *)*puVar17;
        puVar17[1] = 0;
        *puVar17 = 0;
        puVar17[2] = 0;
        puVar17 = puVar8;
      }
      *puVar7 = 0;
      operator_delete(puVar7);
    }
    CUtlSymbolTable::AddString((char *)local_1e);
    uVar14 = (uint)local_1e[0];
    if ((int)uVar14 < *(int *)(this + 0xc)) {
      *(undefined4 *)(*(int *)this + uVar14 * 4) = 0;
    }
    else {
      CUtlVector<CParticleSystemDefinition*,CUtlMemory<CParticleSystemDefinition*,int>>::EnsureCount
                ((CUtlVector<CParticleSystemDefinition*,CUtlMemory<CParticleSystemDefinition*,int>>
                  *)this,uVar14 + 1);
      *(undefined4 *)(*(int *)this + uVar14 * 4) = 0;
    }
  }
  return;
}

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)