L L4D2node

SoundInfo_t::WriteDelta

0x001ebac0 · 4429 bytes · __thiscall

_ZN11SoundInfo_t10WriteDeltaEPS_R8bf_writef

Decompiled

undefined (4 params)

/* SoundInfo_t::WriteDelta(SoundInfo_t*, bf_write&, float) */

void __thiscall
SoundInfo_t::WriteDelta(SoundInfo_t *this,SoundInfo_t *param_1,bf_write *param_2,float param_3)

{
  byte bVar1;
  SoundInfo_t SVar2;
  uint uVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  int iVar7;
  byte *pbVar8;
  uint *puVar9;
  uint uVar10;
  float fVar11;
  uint local_24;
  
  if (*(int *)(this + 0x38) == *(int *)(param_1 + 0x38)) {
    uVar10 = *(uint *)(param_2 + 0xc);
    uVar3 = *(uint *)(param_2 + 8);
    if ((int)uVar10 < (int)uVar3) {
      if (param_2[0x10] == (bf_write)0x0) {
        pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
        *pbVar8 = *pbVar8 & ~(byte)(1 << ((byte)uVar10 & 7));
        uVar3 = *(uint *)(param_2 + 8);
        uVar10 = *(int *)(param_2 + 0xc) + 1;
        *(uint *)(param_2 + 0xc) = uVar10;
LAB_001ebe9f:
        uVar6 = *(uint *)(this + 0x48);
        if (uVar6 == *(uint *)(param_1 + 0x48)) goto LAB_001ebbe8;
LAB_001ebeae:
        if ((int)uVar3 <= (int)uVar10) goto LAB_001ec578;
      }
      else {
        uVar6 = *(uint *)(this + 0x48);
        if (uVar6 == *(uint *)(param_1 + 0x48)) goto LAB_001ebbe8;
      }
      if (param_2[0x10] == (bf_write)0x0) {
        pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
        *pbVar8 = *pbVar8 | (byte)(1 << ((byte)uVar10 & 7));
        uVar3 = *(uint *)(param_2 + 8);
        uVar10 = *(int *)(param_2 + 0xc) + 1;
        *(uint *)(param_2 + 0xc) = uVar10;
        uVar6 = *(uint *)(this + 0x48);
      }
      if ((int)(uVar10 + 0xf) <= (int)uVar3) {
LAB_001ebee9:
        iVar4 = ((int)uVar10 >> 5) * 4;
        uVar10 = uVar10 & 0x1f;
        puVar9 = (uint *)(iVar4 + *(int *)param_2);
        local_24._0_1_ = (sbyte)uVar10;
        *puVar9 = *puVar9 & *(uint *)(&DAT_003f2ddc + uVar10 * 0x84) | uVar6 << (sbyte)local_24;
        iVar7 = 0x20 - uVar10;
        if (iVar7 < 0xf) {
          puVar9 = (uint *)(*(int *)param_2 + 4 + iVar4);
          *puVar9 = (&g_BitWriteMasks)[0xf - iVar7] & *puVar9 | uVar6 >> ((byte)iVar7 & 0x1f);
        }
        uVar3 = *(uint *)(param_2 + 8);
        uVar10 = *(int *)(param_2 + 0xc) + 0xf;
        *(uint *)(param_2 + 0xc) = uVar10;
        uVar5 = *(uint *)(this + 0x44);
        uVar6 = uVar3;
        if (uVar5 == *(uint *)(param_1 + 0x44)) goto LAB_001ebc30;
LAB_001ebf67:
        uVar6 = uVar3;
        if ((int)uVar3 <= (int)uVar10) goto LAB_001ebd18;
        goto LAB_001ebf6f;
      }
    }
    else {
      param_2[0x10] = (bf_write)0x1;
      if (*(int *)(this + 0x48) == *(int *)(param_1 + 0x48)) goto LAB_001ebbe8;
LAB_001ec578:
      param_2[0x10] = (bf_write)0x1;
      uVar6 = *(uint *)(this + 0x48);
      if ((int)(uVar10 + 0xf) <= (int)uVar3) goto LAB_001ebee9;
    }
    *(uint *)(param_2 + 0xc) = uVar3;
    param_2[0x10] = (bf_write)0x1;
    uVar10 = uVar3;
    uVar6 = uVar3;
    if (*(int *)(this + 0x44) == *(int *)(param_1 + 0x44)) {
LAB_001ec5a2:
      param_2[0x10] = (bf_write)0x1;
      uVar10 = uVar3;
      if (*(int *)(this + 0x3c) == *(int *)(param_1 + 0x3c)) goto LAB_001ebc80;
      param_2[0x10] = (bf_write)0x1;
      uVar3 = *(uint *)(this + 0x3c);
LAB_001ebd45:
      if ((int)(uVar10 + 3) <= (int)uVar6) goto LAB_001ec064;
LAB_001ebd50:
      *(uint *)(param_2 + 0xc) = uVar6;
      uVar10 = uVar6;
    }
    else {
LAB_001ebd18:
      param_2[0x10] = (bf_write)0x1;
      uVar5 = *(uint *)(this + 0x44);
      if ((int)(uVar10 + 9) <= (int)uVar6) goto LAB_001ebfa4;
LAB_001ebd2a:
      *(uint *)(param_2 + 0xc) = uVar6;
      param_2[0x10] = (bf_write)0x1;
      uVar10 = uVar6;
      if (*(int *)(this + 0x3c) != *(int *)(param_1 + 0x3c)) {
LAB_001ebd3e:
        param_2[0x10] = (bf_write)0x1;
        uVar3 = *(uint *)(this + 0x3c);
        goto LAB_001ebd45;
      }
    }
LAB_001ebd55:
    param_2[0x10] = (bf_write)0x1;
    SVar2 = this[0x54];
    if ((int)uVar10 < (int)uVar6) goto LAB_001ebd65;
LAB_001ec124:
    param_2[0x10] = (bf_write)0x1;
LAB_001ec128:
    iVar4 = *(int *)(this + 0x44);
  }
  else {
    uVar3 = *(uint *)(param_2 + 0xc);
    uVar10 = *(uint *)(param_2 + 8);
    if ((int)uVar3 < (int)uVar10) {
      if (param_2[0x10] == (bf_write)0x0) {
        pbVar8 = (byte *)(((int)uVar3 >> 3) + *(int *)param_2);
        *pbVar8 = *pbVar8 | (byte)(1 << ((byte)uVar3 & 7));
        uVar10 = *(uint *)(param_2 + 8);
        uVar3 = *(int *)(param_2 + 0xc) + 1;
        *(uint *)(param_2 + 0xc) = uVar3;
        if (0x1f < *(int *)(this + 0x38)) {
          if ((int)uVar10 <= (int)uVar3) goto LAB_001ebcce;
LAB_001ebdf8:
          if (param_2[0x10] == (bf_write)0x0) {
            pbVar8 = (byte *)(((int)uVar3 >> 3) + *(int *)param_2);
            *pbVar8 = *pbVar8 & ~(byte)(1 << ((byte)uVar3 & 7));
            uVar10 = *(uint *)(param_2 + 8);
            uVar3 = *(int *)(param_2 + 0xc) + 1;
            *(uint *)(param_2 + 0xc) = uVar3;
          }
          local_24 = *(uint *)(this + 0x38);
          if ((int)(uVar3 + 0xb) <= (int)uVar10) goto LAB_001ebe34;
          goto LAB_001ebce3;
        }
      }
      else if (0x1f < *(int *)(this + 0x38)) goto LAB_001ebdf8;
LAB_001ebb29:
      if ((int)uVar3 < (int)uVar10) {
        if (param_2[0x10] == (bf_write)0x0) {
          pbVar8 = (byte *)(((int)uVar3 >> 3) + *(int *)param_2);
          *pbVar8 = *pbVar8 | (byte)(1 << ((byte)uVar3 & 7));
          uVar10 = *(uint *)(param_2 + 8);
          uVar3 = *(int *)(param_2 + 0xc) + 1;
          *(uint *)(param_2 + 0xc) = uVar3;
        }
      }
      else {
        param_2[0x10] = (bf_write)0x1;
      }
      uVar6 = *(uint *)(this + 0x38);
      if ((int)uVar10 < (int)(uVar3 + 5)) goto LAB_001ebce3;
      iVar4 = ((int)uVar3 >> 5) * 4;
      uVar3 = uVar3 & 0x1f;
      puVar9 = (uint *)(*(int *)param_2 + iVar4);
      *puVar9 = *puVar9 & *(uint *)(&DAT_003f2db4 + uVar3 * 0x84) | uVar6 << (sbyte)uVar3;
      iVar7 = 0x20 - uVar3;
      if (iVar7 < 5) {
        puVar9 = (uint *)(*(int *)param_2 + 4 + iVar4);
        *puVar9 = (&g_BitWriteMasks)[5 - iVar7] & *puVar9 | uVar6 >> ((byte)iVar7 & 0x1f);
      }
      uVar3 = *(uint *)(param_2 + 8);
      uVar10 = *(int *)(param_2 + 0xc) + 5;
      *(uint *)(param_2 + 0xc) = uVar10;
      uVar6 = *(uint *)(this + 0x48);
      if (uVar6 != *(uint *)(param_1 + 0x48)) goto LAB_001ebeae;
LAB_001ebbe8:
      uVar6 = uVar3;
      if ((int)uVar3 <= (int)uVar10) goto LAB_001ebcfb;
      if (param_2[0x10] == (bf_write)0x0) {
        pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
        *pbVar8 = *pbVar8 & ~(byte)(1 << ((byte)uVar10 & 7));
        uVar3 = *(uint *)(param_2 + 8);
        uVar10 = *(int *)(param_2 + 0xc) + 1;
        *(uint *)(param_2 + 0xc) = uVar10;
        uVar5 = *(uint *)(this + 0x44);
        uVar6 = uVar3;
        if (uVar5 == *(uint *)(param_1 + 0x44)) goto LAB_001ebc30;
        goto LAB_001ebf67;
      }
      uVar5 = *(uint *)(this + 0x44);
      if (uVar5 == *(uint *)(param_1 + 0x44)) goto LAB_001ebc30;
LAB_001ebf6f:
      if (param_2[0x10] == (bf_write)0x0) {
        pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
        *pbVar8 = *pbVar8 | (byte)(1 << ((byte)uVar10 & 7));
        uVar3 = *(uint *)(param_2 + 8);
        uVar10 = *(int *)(param_2 + 0xc) + 1;
        *(uint *)(param_2 + 0xc) = uVar10;
        uVar5 = *(uint *)(this + 0x44);
      }
      uVar6 = uVar3;
      if ((int)uVar3 < (int)(uVar10 + 9)) goto LAB_001ebd2a;
LAB_001ebfa4:
      iVar4 = ((int)uVar10 >> 5) * 4;
      uVar10 = uVar10 & 0x1f;
      puVar9 = (uint *)(iVar4 + *(int *)param_2);
      *puVar9 = *puVar9 & *(uint *)(&DAT_003f2dc4 + uVar10 * 0x84) | uVar5 << (sbyte)uVar10;
      iVar7 = 0x20 - uVar10;
      if (iVar7 < 9) {
        puVar9 = (uint *)(*(int *)param_2 + 4 + iVar4);
        *puVar9 = (&g_BitWriteMasks)[9 - iVar7] & *puVar9 | uVar5 >> ((byte)iVar7 & 0x1f);
      }
      uVar6 = *(uint *)(param_2 + 8);
      uVar10 = *(int *)(param_2 + 0xc) + 9;
      *(uint *)(param_2 + 0xc) = uVar10;
      uVar3 = *(uint *)(this + 0x3c);
      if (uVar3 == *(uint *)(param_1 + 0x3c)) goto LAB_001ebc80;
LAB_001ec027:
      if ((int)uVar6 <= (int)uVar10) goto LAB_001ebd3e;
LAB_001ec02f:
      if (param_2[0x10] == (bf_write)0x0) {
        pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
        *pbVar8 = *pbVar8 | (byte)(1 << ((byte)uVar10 & 7));
        uVar6 = *(uint *)(param_2 + 8);
        uVar10 = *(int *)(param_2 + 0xc) + 1;
        *(uint *)(param_2 + 0xc) = uVar10;
        uVar3 = *(uint *)(this + 0x3c);
      }
      if ((int)uVar6 < (int)(uVar10 + 3)) goto LAB_001ebd50;
LAB_001ec064:
      iVar7 = ((int)uVar10 >> 5) * 4;
      uVar10 = uVar10 & 0x1f;
      puVar9 = (uint *)(iVar7 + *(int *)param_2);
      *puVar9 = *puVar9 & *(uint *)(&DAT_003f2dac + uVar10 * 0x84) | uVar3 << (sbyte)uVar10;
      iVar4 = 0x20 - uVar10;
      if (iVar4 < 3) {
        puVar9 = (uint *)(*(int *)param_2 + 4 + iVar7);
        *puVar9 = (&g_BitWriteMasks)[3 - iVar4] & *puVar9 | uVar3 >> ((byte)iVar4 & 0x1f);
      }
      uVar6 = *(uint *)(param_2 + 8);
      uVar10 = *(int *)(param_2 + 0xc) + 3;
      *(uint *)(param_2 + 0xc) = uVar10;
LAB_001ec0d4:
      SVar2 = this[0x55];
      if ((int)uVar6 <= (int)uVar10) goto LAB_001ebd55;
    }
    else {
      param_2[0x10] = (bf_write)0x1;
      if (*(int *)(this + 0x38) < 0x20) goto LAB_001ebb29;
LAB_001ebcce:
      param_2[0x10] = (bf_write)0x1;
      local_24 = *(uint *)(this + 0x38);
      if ((int)(uVar3 + 0xb) <= (int)uVar10) {
LAB_001ebe34:
        iVar4 = ((int)uVar3 >> 5) * 4;
        uVar3 = uVar3 & 0x1f;
        puVar9 = (uint *)(*(int *)param_2 + iVar4);
        *puVar9 = *puVar9 & *(uint *)(&DAT_003f2dcc + uVar3 * 0x84) | local_24 << (sbyte)uVar3;
        iVar7 = 0x20 - uVar3;
        if (iVar7 < 0xb) {
          puVar9 = (uint *)(*(int *)param_2 + 4 + iVar4);
          *puVar9 = (&g_BitWriteMasks)[0xb - iVar7] & *puVar9 | local_24 >> ((byte)iVar7 & 0x1f);
        }
        uVar3 = *(uint *)(param_2 + 8);
        uVar10 = *(int *)(param_2 + 0xc) + 0xb;
        *(uint *)(param_2 + 0xc) = uVar10;
        goto LAB_001ebe9f;
      }
LAB_001ebce3:
      *(uint *)(param_2 + 0xc) = uVar10;
      param_2[0x10] = (bf_write)0x1;
      uVar3 = uVar10;
      uVar6 = uVar10;
      if (*(int *)(this + 0x48) != *(int *)(param_1 + 0x48)) goto LAB_001ec578;
LAB_001ebcfb:
      param_2[0x10] = (bf_write)0x1;
      if (*(int *)(this + 0x44) != *(int *)(param_1 + 0x44)) goto LAB_001ebd18;
LAB_001ebc30:
      uVar3 = uVar10;
      if ((int)uVar6 <= (int)uVar10) goto LAB_001ec5a2;
      if (param_2[0x10] == (bf_write)0x0) {
        pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
        *pbVar8 = *pbVar8 & ~(byte)(1 << ((byte)uVar10 & 7));
        uVar6 = *(uint *)(param_2 + 8);
        uVar10 = *(int *)(param_2 + 0xc) + 1;
        *(uint *)(param_2 + 0xc) = uVar10;
        uVar3 = *(uint *)(this + 0x3c);
        if (uVar3 != *(uint *)(param_1 + 0x3c)) goto LAB_001ec027;
      }
      else {
        uVar3 = *(uint *)(this + 0x3c);
        if (uVar3 != *(uint *)(param_1 + 0x3c)) goto LAB_001ec02f;
      }
LAB_001ebc80:
      if ((int)uVar6 <= (int)uVar10) goto LAB_001ebd55;
      if (param_2[0x10] == (bf_write)0x0) {
        pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
        *pbVar8 = *pbVar8 & ~(byte)(1 << ((byte)uVar10 & 7));
        uVar6 = *(uint *)(param_2 + 8);
        uVar10 = *(int *)(param_2 + 0xc) + 1;
        *(uint *)(param_2 + 0xc) = uVar10;
        goto LAB_001ec0d4;
      }
      SVar2 = this[0x55];
    }
    if (param_2[0x10] == (bf_write)0x0) {
      if (SVar2 == (SoundInfo_t)0x0) {
        pbVar8 = (byte *)(*(int *)param_2 + ((int)uVar10 >> 3));
        *pbVar8 = *pbVar8 & ~(byte)(1 << ((byte)uVar10 & 7));
      }
      else {
        pbVar8 = (byte *)(*(int *)param_2 + ((int)uVar10 >> 3));
        *pbVar8 = *pbVar8 | (byte)(1 << ((byte)uVar10 & 7));
      }
      uVar10 = *(int *)(param_2 + 0xc) + 1;
      *(uint *)(param_2 + 0xc) = uVar10;
      SVar2 = this[0x54];
      if (*(int *)(param_2 + 8) <= (int)uVar10) goto LAB_001ec124;
    }
    else {
      SVar2 = this[0x54];
    }
LAB_001ebd65:
    if (param_2[0x10] != (bf_write)0x0) goto LAB_001ec128;
    if (SVar2 == (SoundInfo_t)0x0) {
      pbVar8 = (byte *)(*(int *)param_2 + ((int)uVar10 >> 3));
      *pbVar8 = *pbVar8 & ~(byte)(1 << ((byte)uVar10 & 7));
    }
    else {
      pbVar8 = (byte *)(*(int *)param_2 + ((int)uVar10 >> 3));
      *pbVar8 = *pbVar8 | (byte)(1 << ((byte)uVar10 & 7));
    }
    *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 1;
    iVar4 = *(int *)(this + 0x44);
  }
  if (iVar4 == 4) {
    *(undefined4 *)(this + 0x28) = 0;
    *(undefined4 *)(this + 0x50) = 0;
    *(undefined4 *)(this + 0x40) = 100;
    *(undefined4 *)(this + 0x24) = 0;
    *(undefined4 *)(this + 0x2c) = 0;
    *(undefined4 *)(this + 0x34) = 0;
    *(undefined4 *)this = 0;
    *(undefined4 *)(this + 4) = 0;
    *(undefined4 *)(this + 8) = 0;
    *(undefined4 *)(this + 0x4c) = 0xffffffff;
    return;
  }
  if (*(int *)(this + 0x34) == *(int *)(param_1 + 0x34)) {
    uVar10 = *(uint *)(param_2 + 0xc);
    uVar3 = *(uint *)(param_2 + 8);
    if ((int)uVar3 <= (int)uVar10) goto LAB_001ecb5a;
    if (param_2[0x10] == (bf_write)0x0) {
      bVar1 = (byte)uVar10;
      pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
      goto LAB_001ecaf3;
    }
LAB_001ecc0d:
    fVar11 = *(float *)(this + 0x28);
    uVar6 = uVar10;
    if (fVar11 == *(float *)(param_1 + 0x28)) goto LAB_001ec22b;
LAB_001ec798:
    uVar10 = uVar3;
    if (param_2[0x10] == (bf_write)0x0) {
      pbVar8 = (byte *)(((int)uVar6 >> 3) + *(int *)param_2);
      *pbVar8 = *pbVar8 | (byte)(1 << ((byte)uVar6 & 7));
      uVar10 = *(uint *)(param_2 + 8);
      uVar6 = *(int *)(param_2 + 0xc) + 1;
      *(uint *)(param_2 + 0xc) = uVar6;
      fVar11 = *(float *)(this + 0x28);
    }
LAB_001ec7c8:
    if ((int)uVar10 < (int)(uVar6 + 7)) {
      *(uint *)(param_2 + 0xc) = uVar10;
      param_2[0x10] = (bf_write)0x1;
      uVar3 = uVar10;
      if (*(int *)(this + 0x50) == *(int *)(param_1 + 0x50)) goto LAB_001ec8f4;
LAB_001ec943:
      param_2[0x10] = (bf_write)0x1;
      uVar6 = *(uint *)(this + 0x50);
      if ((int)(uVar10 + 9) <= (int)uVar3) goto LAB_001ec2ae;
LAB_001ec955:
      *(uint *)(param_2 + 0xc) = uVar3;
      param_2[0x10] = (bf_write)0x1;
      uVar10 = uVar3;
      if (*(int *)(this + 0x40) != *(int *)(param_1 + 0x40)) goto LAB_001ec910;
    }
    else {
      iVar4 = ((int)uVar6 >> 5) * 4;
      uVar6 = uVar6 & 0x1f;
      puVar9 = (uint *)(*(int *)param_2 + iVar4);
      uVar10 = (uint)(2.1474836e+09 <= fVar11 * 127.0);
      uVar10 = (int)(fVar11 * 127.0 - (float)(-uVar10 & 0x4f000000)) ^ uVar10 * -0x80000000;
      *puVar9 = *puVar9 & *(uint *)(&DAT_003f2dbc + uVar6 * 0x84) | uVar10 << (sbyte)uVar6;
      iVar7 = 0x20 - uVar6;
      if (iVar7 < 7) {
        puVar9 = (uint *)(*(int *)param_2 + 4 + iVar4);
        *puVar9 = (&g_BitWriteMasks)[7 - iVar7] & *puVar9 | uVar10 >> ((byte)iVar7 & 0x1f);
      }
      uVar3 = *(uint *)(param_2 + 8);
      uVar10 = *(int *)(param_2 + 0xc) + 7;
      *(uint *)(param_2 + 0xc) = uVar10;
      uVar6 = *(uint *)(this + 0x50);
      if (uVar6 == *(uint *)(param_1 + 0x50)) goto LAB_001ec87f;
LAB_001ec271:
      if ((int)uVar3 <= (int)uVar10) goto LAB_001ec943;
LAB_001ec279:
      if (param_2[0x10] == (bf_write)0x0) {
        pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
        *pbVar8 = *pbVar8 | (byte)(1 << ((byte)uVar10 & 7));
        uVar3 = *(uint *)(param_2 + 8);
        uVar10 = *(int *)(param_2 + 0xc) + 1;
        *(uint *)(param_2 + 0xc) = uVar10;
        uVar6 = *(uint *)(this + 0x50);
      }
      if ((int)uVar3 < (int)(uVar10 + 9)) goto LAB_001ec955;
LAB_001ec2ae:
      iVar4 = ((int)uVar10 >> 5) * 4;
      uVar10 = uVar10 & 0x1f;
      puVar9 = (uint *)(iVar4 + *(int *)param_2);
      local_24._0_1_ = (sbyte)uVar10;
      *puVar9 = *puVar9 & *(uint *)(&DAT_003f2dc4 + uVar10 * 0x84) | uVar6 << (sbyte)local_24;
      iVar7 = 0x20 - uVar10;
      if (iVar7 < 9) {
        puVar9 = (uint *)(*(int *)param_2 + 4 + iVar4);
        *puVar9 = (&g_BitWriteMasks)[9 - iVar7] & *puVar9 | uVar6 >> ((byte)iVar7 & 0x1f);
      }
      uVar3 = *(uint *)(param_2 + 8);
      uVar10 = *(int *)(param_2 + 0xc) + 9;
      *(uint *)(param_2 + 0xc) = uVar10;
LAB_001ec31f:
      uVar6 = *(uint *)(this + 0x40);
      if (uVar6 != *(uint *)(param_1 + 0x40)) {
        if ((int)uVar3 <= (int)uVar10) goto LAB_001ec910;
        goto LAB_001ec336;
      }
LAB_001ec990:
      if ((int)uVar10 < (int)uVar3) {
        if (param_2[0x10] == (bf_write)0x0) {
          pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
          *pbVar8 = *pbVar8 & ~(byte)(1 << ((byte)uVar10 & 7));
          uVar10 = *(int *)(param_2 + 0xc) + 1;
          uVar3 = *(uint *)(param_2 + 8);
          *(uint *)(param_2 + 0xc) = uVar10;
        }
        goto LAB_001ec3db;
      }
    }
    param_2[0x10] = (bf_write)0x1;
  }
  else {
    if (*(int *)(this + 0x34) == *(int *)(param_1 + 0x34) + 1) {
      uVar10 = *(uint *)(param_2 + 0xc);
      uVar3 = *(uint *)(param_2 + 8);
      if ((int)uVar10 < (int)uVar3) {
        if (param_2[0x10] == (bf_write)0x0) {
          pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
          *pbVar8 = *pbVar8 & ~(byte)(1 << ((byte)uVar10 & 7));
          uVar3 = *(uint *)(param_2 + 8);
          uVar10 = *(int *)(param_2 + 0xc) + 1;
          *(uint *)(param_2 + 0xc) = uVar10;
          if ((int)uVar3 <= (int)uVar10) goto LAB_001ecb5a;
        }
        if (param_2[0x10] != (bf_write)0x0) goto LAB_001ecc0d;
        bVar1 = (byte)uVar10;
        pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
LAB_001ecaf3:
        *pbVar8 = *pbVar8 | (byte)(1 << (bVar1 & 7));
        uVar3 = *(uint *)(param_2 + 8);
        uVar10 = *(int *)(param_2 + 0xc) + 1;
        *(uint *)(param_2 + 0xc) = uVar10;
        goto LAB_001ec219;
      }
LAB_001ecb5a:
      param_2[0x10] = (bf_write)0x1;
LAB_001eca59:
      uVar6 = uVar10;
      if (*(float *)(this + 0x28) != *(float *)(param_1 + 0x28)) {
LAB_001eca70:
        uVar10 = uVar3;
        param_2[0x10] = (bf_write)0x1;
        fVar11 = *(float *)(this + 0x28);
        goto LAB_001ec7c8;
      }
    }
    else {
      uVar10 = *(uint *)(param_2 + 0xc);
      uVar3 = *(uint *)(param_2 + 8);
      if ((int)uVar3 < (int)(uVar10 + 2)) {
        *(uint *)(param_2 + 0xc) = uVar3;
        param_2[0x10] = (bf_write)0x1;
        uVar10 = uVar3;
      }
      else {
        iVar4 = ((int)uVar10 >> 5) * 4;
        puVar9 = (uint *)(*(int *)param_2 + iVar4);
        *puVar9 = *puVar9 & *(uint *)(&DAT_003f2da8 + (uVar10 & 0x1f) * 0x84);
        if ((uVar10 & 0x1f) == 0x1f) {
          puVar9 = (uint *)(*(int *)param_2 + 4 + iVar4);
          *puVar9 = *puVar9 & DAT_003f2da4;
        }
        uVar3 = *(int *)(param_2 + 0xc) + 2;
        *(uint *)(param_2 + 0xc) = uVar3;
        uVar10 = *(uint *)(param_2 + 8);
      }
      uVar6 = *(uint *)(this + 0x34);
      if ((int)uVar10 < (int)(uVar3 + 10)) {
        *(uint *)(param_2 + 0xc) = uVar10;
        param_2[0x10] = (bf_write)0x1;
        uVar3 = uVar10;
        goto LAB_001eca59;
      }
      iVar4 = ((int)uVar3 >> 5) * 4;
      uVar3 = uVar3 & 0x1f;
      puVar9 = (uint *)(*(int *)param_2 + iVar4);
      *puVar9 = *puVar9 & *(uint *)(&DAT_003f2dc8 + uVar3 * 0x84) | uVar6 << (sbyte)uVar3;
      iVar7 = 0x20 - uVar3;
      if (iVar7 < 10) {
        puVar9 = (uint *)(*(int *)param_2 + 4 + iVar4);
        *puVar9 = (&g_BitWriteMasks)[10 - iVar7] & *puVar9 | uVar6 >> ((byte)iVar7 & 0x1f);
      }
      uVar3 = *(uint *)(param_2 + 8);
      uVar10 = *(int *)(param_2 + 0xc) + 10;
      *(uint *)(param_2 + 0xc) = uVar10;
LAB_001ec219:
      fVar11 = *(float *)(this + 0x28);
      if (fVar11 != *(float *)(param_1 + 0x28)) {
        uVar6 = uVar10;
        if ((int)uVar10 < (int)uVar3) goto LAB_001ec798;
        goto LAB_001eca70;
      }
    }
LAB_001ec22b:
    if ((int)uVar10 < (int)uVar3) {
      if (param_2[0x10] == (bf_write)0x0) {
        pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
        *pbVar8 = *pbVar8 & ~(byte)(1 << ((byte)uVar10 & 7));
        uVar3 = *(uint *)(param_2 + 8);
        uVar10 = *(int *)(param_2 + 0xc) + 1;
        *(uint *)(param_2 + 0xc) = uVar10;
        uVar6 = *(uint *)(this + 0x50);
        if (uVar6 != *(uint *)(param_1 + 0x50)) goto LAB_001ec271;
      }
      else {
        uVar6 = *(uint *)(this + 0x50);
        if (uVar6 != *(uint *)(param_1 + 0x50)) goto LAB_001ec279;
      }
    }
    else {
      param_2[0x10] = (bf_write)0x1;
      if (*(int *)(this + 0x50) != *(int *)(param_1 + 0x50)) goto LAB_001ec943;
    }
LAB_001ec87f:
    if ((int)uVar10 < (int)uVar3) {
      if (param_2[0x10] == (bf_write)0x0) {
        pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
        *pbVar8 = *pbVar8 & ~(byte)(1 << ((byte)uVar10 & 7));
        uVar3 = *(uint *)(param_2 + 8);
        uVar10 = *(int *)(param_2 + 0xc) + 1;
        *(uint *)(param_2 + 0xc) = uVar10;
        goto LAB_001ec31f;
      }
      uVar6 = *(uint *)(this + 0x40);
      if (uVar6 == *(uint *)(param_1 + 0x40)) goto LAB_001ec990;
LAB_001ec336:
      if (param_2[0x10] == (bf_write)0x0) {
        pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
        *pbVar8 = *pbVar8 | (byte)(1 << ((byte)uVar10 & 7));
        uVar3 = *(uint *)(param_2 + 8);
        uVar10 = *(int *)(param_2 + 0xc) + 1;
        *(uint *)(param_2 + 0xc) = uVar10;
        uVar6 = *(uint *)(this + 0x40);
      }
      if ((int)uVar3 < (int)(uVar10 + 8)) {
LAB_001ec922:
        *(uint *)(param_2 + 0xc) = uVar3;
        param_2[0x10] = (bf_write)0x1;
        uVar10 = uVar3;
        goto LAB_001ec3db;
      }
    }
    else {
LAB_001ec8f4:
      param_2[0x10] = (bf_write)0x1;
      if (*(int *)(this + 0x40) == *(int *)(param_1 + 0x40)) goto LAB_001ec990;
LAB_001ec910:
      param_2[0x10] = (bf_write)0x1;
      uVar6 = *(uint *)(this + 0x40);
      if ((int)uVar3 < (int)(uVar10 + 8)) goto LAB_001ec922;
    }
    iVar7 = ((int)uVar10 >> 5) * 4;
    uVar10 = uVar10 & 0x1f;
    puVar9 = (uint *)(iVar7 + *(int *)param_2);
    *puVar9 = *puVar9 & *(uint *)(&DAT_003f2dc0 + uVar10 * 0x84) | uVar6 << (sbyte)uVar10;
    iVar4 = 0x20 - uVar10;
    if (iVar4 < 8) {
      puVar9 = (uint *)(*(int *)param_2 + 4 + iVar7);
      *puVar9 = (&g_BitWriteMasks)[8 - iVar4] & *puVar9 | uVar6 >> ((byte)iVar4 & 0x1f);
    }
    iVar4 = *(int *)(param_2 + 0xc);
    uVar3 = *(uint *)(param_2 + 8);
    *(uint *)(param_2 + 0xc) = iVar4 + 8U;
    uVar10 = iVar4 + 8U;
  }
LAB_001ec3db:
  fVar11 = *(float *)(this + 0x2c);
  if ((((byte)this[0x44] & 0x10) != 0) && (*(float *)(this + 0x30) != param_3)) {
    fVar11 = (fVar11 + *(float *)(this + 0x30)) - param_3;
  }
  if (fVar11 == *(float *)(param_1 + 0x2c)) {
    if ((int)uVar10 < (int)uVar3) {
      if (param_2[0x10] == (bf_write)0x0) {
        pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
        *pbVar8 = *pbVar8 & ~(byte)(1 << ((byte)uVar10 & 7));
        uVar10 = *(int *)(param_2 + 0xc) + 1;
        uVar3 = *(uint *)(param_2 + 8);
        *(uint *)(param_2 + 0xc) = uVar10;
        goto LAB_001ec438;
      }
      fVar11 = *(float *)this;
      if (fVar11 == *(float *)param_1) goto LAB_001ec448;
      goto LAB_001ec700;
    }
    param_2[0x10] = (bf_write)0x1;
    if (*(float *)this == *(float *)param_1) goto LAB_001ec448;
LAB_001eca14:
    param_2[0x10] = (bf_write)0x1;
    fVar11 = *(float *)this;
LAB_001ec721:
    bf_write::WriteSBitLong(param_2,(int)(fVar11 * 0.125),0xc);
    uVar10 = *(uint *)(param_2 + 0xc);
    uVar3 = *(uint *)(param_2 + 8);
LAB_001ec47b:
    if (*(float *)(this + 4) == *(float *)(param_1 + 4)) goto LAB_001ec48d;
    if ((int)uVar10 < (int)uVar3) {
LAB_001ec6a8:
      if (param_2[0x10] == (bf_write)0x0) {
        pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
        *pbVar8 = *pbVar8 | (byte)(1 << ((byte)uVar10 & 7));
        *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 1;
      }
    }
    else {
LAB_001eca3e:
      param_2[0x10] = (bf_write)0x1;
    }
    bf_write::WriteSBitLong(param_2,(int)(*(float *)(this + 4) * 0.125),0xc);
    uVar10 = *(uint *)(param_2 + 0xc);
    uVar3 = *(uint *)(param_2 + 8);
LAB_001ec4c0:
    if (*(float *)(this + 8) != *(float *)(param_1 + 8)) {
      if ((int)uVar10 < (int)uVar3) goto LAB_001ec618;
LAB_001ec9f6:
      param_2[0x10] = (bf_write)0x1;
      goto LAB_001ec635;
    }
LAB_001ec4d2:
    if ((int)uVar10 < (int)uVar3) {
      if (param_2[0x10] == (bf_write)0x0) {
        pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
        *pbVar8 = *pbVar8 & ~(byte)(1 << ((byte)uVar10 & 7));
        uVar10 = *(int *)(param_2 + 0xc) + 1;
        uVar3 = *(uint *)(param_2 + 8);
        *(uint *)(param_2 + 0xc) = uVar10;
        if (*(int *)(this + 0x4c) == *(int *)(param_1 + 0x4c)) goto LAB_001ec66f;
        goto LAB_001ec514;
      }
      if (*(int *)(this + 0x4c) == *(int *)(param_1 + 0x4c)) goto LAB_001ec66f;
      goto LAB_001ec51c;
    }
    param_2[0x10] = (bf_write)0x1;
    if (*(int *)(this + 0x4c) == *(int *)(param_1 + 0x4c)) goto LAB_001ec66f;
  }
  else {
    if ((int)uVar10 < (int)uVar3) {
      if (param_2[0x10] == (bf_write)0x0) {
        pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
        *pbVar8 = *pbVar8 | (byte)(1 << ((byte)uVar10 & 7));
        *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 1;
      }
    }
    else {
      param_2[0x10] = (bf_write)0x1;
    }
    bf_write::WriteFloat((float)param_2);
    uVar10 = *(uint *)(param_2 + 0xc);
    uVar3 = *(uint *)(param_2 + 8);
LAB_001ec438:
    fVar11 = *(float *)this;
    if (fVar11 != *(float *)param_1) {
      if ((int)uVar3 <= (int)uVar10) goto LAB_001eca14;
LAB_001ec700:
      if (param_2[0x10] == (bf_write)0x0) {
        pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
        *pbVar8 = *pbVar8 | (byte)(1 << ((byte)uVar10 & 7));
        *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 1;
        fVar11 = *(float *)this;
      }
      goto LAB_001ec721;
    }
LAB_001ec448:
    if ((int)uVar10 < (int)uVar3) {
      if (param_2[0x10] == (bf_write)0x0) {
        pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
        *pbVar8 = *pbVar8 & ~(byte)(1 << ((byte)uVar10 & 7));
        uVar10 = *(int *)(param_2 + 0xc) + 1;
        uVar3 = *(uint *)(param_2 + 8);
        *(uint *)(param_2 + 0xc) = uVar10;
        goto LAB_001ec47b;
      }
      if (*(float *)(this + 4) == *(float *)(param_1 + 4)) goto LAB_001ec48d;
      goto LAB_001ec6a8;
    }
    param_2[0x10] = (bf_write)0x1;
    if (*(float *)(this + 4) != *(float *)(param_1 + 4)) goto LAB_001eca3e;
LAB_001ec48d:
    if ((int)uVar3 <= (int)uVar10) {
      param_2[0x10] = (bf_write)0x1;
      if (*(float *)(this + 8) != *(float *)(param_1 + 8)) goto LAB_001ec9f6;
      goto LAB_001ec4d2;
    }
    if (param_2[0x10] == (bf_write)0x0) {
      pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
      *pbVar8 = *pbVar8 & ~(byte)(1 << ((byte)uVar10 & 7));
      uVar10 = *(int *)(param_2 + 0xc) + 1;
      uVar3 = *(uint *)(param_2 + 8);
      *(uint *)(param_2 + 0xc) = uVar10;
      goto LAB_001ec4c0;
    }
    if (*(float *)(this + 8) == *(float *)(param_1 + 8)) goto LAB_001ec4d2;
LAB_001ec618:
    if (param_2[0x10] == (bf_write)0x0) {
      pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
      *pbVar8 = *pbVar8 | (byte)(1 << ((byte)uVar10 & 7));
      *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 1;
    }
LAB_001ec635:
    bf_write::WriteSBitLong(param_2,(int)(*(float *)(this + 8) * 0.125),0xc);
    uVar3 = *(uint *)(param_2 + 8);
    uVar10 = *(uint *)(param_2 + 0xc);
    if (*(int *)(this + 0x4c) == *(int *)(param_1 + 0x4c)) {
LAB_001ec66f:
      if ((int)uVar10 < (int)uVar3) {
        if (param_2[0x10] == (bf_write)0x0) {
          pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
          *pbVar8 = *pbVar8 & ~(byte)(1 << ((byte)uVar10 & 7));
          *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 1;
        }
        return;
      }
      param_2[0x10] = (bf_write)0x1;
      return;
    }
LAB_001ec514:
    if ((int)uVar10 < (int)uVar3) {
LAB_001ec51c:
      if (param_2[0x10] == (bf_write)0x0) {
        pbVar8 = (byte *)(((int)uVar10 >> 3) + *(int *)param_2);
        *pbVar8 = *pbVar8 | (byte)(1 << ((byte)uVar10 & 7));
        *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 1;
      }
      goto LAB_001ec539;
    }
  }
  param_2[0x10] = (bf_write)0x1;
LAB_001ec539:
  bf_write::WriteSBitLong(param_2,*(int *)(this + 0x4c),0xc);
  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)