L L4D2node

CBaseServer::WriteDeltaEntities

0x001ed830 · 5909 bytes · __thiscall

_ZN11CBaseServer18WriteDeltaEntitiesEP11CBaseClientP12CClientFrameS3_R8bf_write

Decompiled

undefined (5 params)

/* CBaseServer::WriteDeltaEntities(CBaseClient*, CClientFrame*, CClientFrame*, bf_write&) */

void __thiscall
CBaseServer::WriteDeltaEntities
          (CBaseServer *this,CBaseClient *param_1,CClientFrame *param_2,CClientFrame *param_3,
          bf_write *param_4)

{
  CClientFrame *pCVar1;
  bool bVar2;
  bf_write *pbVar3;
  CFrameSnapshot *pCVar4;
  CFrameSnapshot *pCVar5;
  char cVar6;
  char cVar7;
  uint uVar8;
  undefined4 *puVar9;
  undefined4 uVar10;
  byte *pbVar11;
  uint uVar12;
  void *pvVar13;
  int iVar14;
  uint uVar15;
  uint uVar16;
  uint uVar17;
  int iVar18;
  int iVar19;
  PackedEntity *pPVar20;
  uint *puVar21;
  int iVar22;
  int iVar23;
  CBaseClient *pCVar24;
  byte bVar25;
  undefined8 uVar26;
  void **ppvVar27;
  char *pcVar28;
  int *piVar29;
  CUtlMemory<int,int> *local_1a8;
  uint local_1a0;
  bf_write local_192;
  void *local_188;
  int local_184 [5];
  undefined **local_170;
  char local_16c;
  CClientFrame *local_168;
  CClientFrame *local_164;
  int local_160;
  uint local_15c;
  uint local_158;
  uint local_154;
  uint local_150;
  undefined4 local_14c;
  undefined4 local_148;
  bf_write *local_144;
  undefined4 local_140;
  undefined4 *local_13c;
  PackedEntity *local_138;
  uint local_134 [64];
  CFrameSnapshot *local_34;
  CFrameSnapshot *local_30;
  CFrameSnapshot *local_2c;
  CBaseServer *local_28;
  int local_24;
  bool local_20;
  
  bVar25 = 0;
  local_24 = 0;
  puVar21 = local_134;
  for (iVar14 = 0x40; iVar14 != 0; iVar14 = iVar14 + -1) {
    *puVar21 = 0;
    puVar21 = puVar21 + 1;
  }
  local_15c = 0xffffffff;
  local_158 = 0xffffffff;
  local_154 = 0xffffffff;
  local_14c = 0;
  local_144 = param_4;
  local_148 = 0;
  local_170 = &PTR__CEntityWriteInfo_002c04d8;
  local_28 = this;
  local_164 = param_2;
  local_30 = *(CFrameSnapshot **)(param_2 + 0x118);
  local_2c = *(CFrameSnapshot **)(param_1 + 0x104);
  local_140 = *(undefined4 *)(param_1 + 0x34);
  cVar6 = (**(code **)(*(int *)this + 0x70))(this);
  if (cVar6 == '\0') {
    local_20 = true;
    if (param_3 != (CClientFrame *)0x0) goto LAB_001ed8ed;
LAB_001eda2c:
    local_16c = '\0';
    local_168 = (CClientFrame *)0x0;
    local_34 = (CFrameSnapshot *)0x0;
  }
  else {
    local_20 = 1 < DAT_003b7f64;
    if (param_3 == (CClientFrame *)0x0) goto LAB_001eda2c;
LAB_001ed8ed:
    local_34 = *(CFrameSnapshot **)(param_3 + 0x118);
    local_16c = '\x01';
    local_168 = param_3;
  }
  local_150 = 0;
  if (*(int *)(param_1 + 0x108) == -1) {
    pCVar24 = param_1 + 0x10c;
    for (iVar14 = 0x40; iVar14 != 0; iVar14 = iVar14 + -1) {
      *(undefined4 *)pCVar24 = 0;
      pCVar24 = pCVar24 + (uint)bVar25 * -8 + 4;
    }
    *(CBaseClient **)(param_2 + 0x10c) = param_1 + 0x10c;
  }
  uVar15 = *(uint *)(local_144 + 0xc);
  if (*(int *)(local_144 + 8) < (int)(uVar15 + 6)) {
    *(int *)(local_144 + 0xc) = *(int *)(local_144 + 8);
    local_144[0x10] = (bf_write)0x1;
  }
  else {
    iVar14 = ((int)uVar15 >> 5) * 4;
    uVar15 = uVar15 & 0x1f;
    puVar21 = (uint *)(*(int *)local_144 + iVar14);
    *puVar21 = *puVar21 & *(uint *)(&DAT_003f2db8 + uVar15 * 0x84) | 0x1a << (sbyte)uVar15;
    iVar18 = 0x20 - uVar15;
    if (iVar18 < 6) {
      puVar21 = (uint *)(*(int *)local_144 + 4 + iVar14);
      *puVar21 = (&g_BitWriteMasks)[6 - iVar18] & *puVar21 | 0x1aU >> ((byte)iVar18 & 0x1f);
    }
    *(int *)(local_144 + 0xc) = *(int *)(local_144 + 0xc) + 6;
  }
  uVar15 = *(uint *)(local_30 + 0xc);
  uVar16 = *(uint *)(local_144 + 0xc);
  if (*(int *)(local_144 + 8) < (int)(uVar16 + 0xb)) {
    *(int *)(local_144 + 0xc) = *(int *)(local_144 + 8);
    local_144[0x10] = (bf_write)0x1;
  }
  else {
    iVar18 = ((int)uVar16 >> 5) * 4;
    uVar16 = uVar16 & 0x1f;
    puVar21 = (uint *)(*(int *)local_144 + iVar18);
    *puVar21 = *puVar21 & *(uint *)(&DAT_003f2dcc + uVar16 * 0x84) | uVar15 << (sbyte)uVar16;
    iVar14 = 0x20 - uVar16;
    if (iVar14 < 0xb) {
      puVar21 = (uint *)(*(int *)local_144 + 4 + iVar18);
      *puVar21 = (&g_BitWriteMasks)[0xb - iVar14] & *puVar21 | uVar15 >> ((byte)iVar14 & 0x1f);
    }
    *(int *)(local_144 + 0xc) = *(int *)(local_144 + 0xc) + 0xb;
  }
  if (local_16c == '\0') {
    uVar15 = *(uint *)(local_144 + 0xc);
    if (*(int *)(local_144 + 8) <= (int)uVar15) {
      local_144[0x10] = (bf_write)0x1;
      goto LAB_001eda60;
    }
    if (local_144[0x10] == (bf_write)0x0) {
      pbVar11 = (byte *)(((int)uVar15 >> 3) + *(int *)local_144);
      *pbVar11 = *pbVar11 & ~(byte)(1 << ((byte)uVar15 & 7));
      *(int *)(local_144 + 0xc) = *(int *)(local_144 + 0xc) + 1;
      goto LAB_001eda60;
    }
    iVar14 = *(int *)(param_1 + 0x20c);
LAB_001eda7d:
    puVar21 = (uint *)(*(int *)local_144 + ((int)uVar15 >> 5) * 4);
    *puVar21 = *puVar21 & (&DAT_003f2da4)[(uVar15 & 0x1f) * 0x21] | iVar14 << (sbyte)(uVar15 & 0x1f)
    ;
    *(int *)(local_144 + 0xc) = *(int *)(local_144 + 0xc) + 1;
  }
  else {
    iVar14 = *(int *)(local_144 + 0xc);
    if (iVar14 < *(int *)(local_144 + 8)) {
      if (local_144[0x10] == (bf_write)0x0) {
        pbVar11 = (byte *)((iVar14 >> 3) + *(int *)local_144);
        *pbVar11 = *pbVar11 | (byte)(1 << ((byte)iVar14 & 7));
        *(int *)(local_144 + 0xc) = *(int *)(local_144 + 0xc) + 1;
      }
    }
    else {
      local_144[0x10] = (bf_write)0x1;
    }
    bf_write::WriteLong(local_144,*(long *)(local_168 + 8));
LAB_001eda60:
    iVar14 = *(int *)(param_1 + 0x20c);
    uVar15 = *(uint *)(local_144 + 0xc);
    if ((int)uVar15 < *(int *)(local_144 + 8)) goto LAB_001eda7d;
    *(int *)(local_144 + 0xc) = *(int *)(local_144 + 8);
    local_144[0x10] = (bf_write)0x1;
  }
  iVar14 = *(int *)local_144;
  uVar15 = *(uint *)(local_144 + 0xc);
  local_192 = local_144[0x10];
  uVar16 = *(uint *)(local_144 + 8);
  if ((int)uVar16 < (int)(uVar15 + 0x20)) {
    *(uint *)(local_144 + 0xc) = uVar16;
    local_144[0x10] = (bf_write)0x1;
  }
  else {
    iVar18 = ((int)uVar15 >> 5) * 4;
    puVar21 = (uint *)(iVar14 + iVar18);
    *puVar21 = *puVar21 & *(uint *)(&DAT_003f2e20 + (uVar15 & 0x1f) * 0x84);
    iVar23 = 0x20 - (uVar15 & 0x1f);
    if (iVar23 != 0x20) {
      puVar21 = (uint *)(*(int *)local_144 + 4 + iVar18);
      *puVar21 = *puVar21 & (&g_BitWriteMasks)[0x20 - iVar23];
    }
    *(int *)(local_144 + 0xc) = *(int *)(local_144 + 0xc) + 0x20;
  }
  iVar18 = *(int *)(local_144 + 0xc);
  cVar6 = CBaseClient::IsTracing(param_1);
  if (cVar6 != '\0') {
    CBaseClient::TraceNetworkData(param_1,param_4,"Delta Entities Overhead");
  }
  if (g_pLocalNetworkBackdoor != 0) {
LAB_001edb54:
    iVar23 = *(int *)(local_144 + 0xc);
    uVar8 = uVar15 + 0xb;
    if ((int)uVar16 < (int)uVar8) {
      local_192 = (bf_write)0x1;
      uVar15 = uVar16 + 0x14;
      uVar8 = uVar16;
    }
    else {
      iVar22 = ((int)uVar15 >> 5) * 4;
      uVar17 = uVar15 & 0x1f;
      puVar21 = (uint *)(iVar14 + iVar22);
      *puVar21 = *puVar21 & *(uint *)(&DAT_003f2dcc + uVar17 * 0x84) | local_150 << (sbyte)uVar17;
      iVar19 = 0x20 - uVar17;
      if (iVar19 < 0xb) {
        puVar21 = (uint *)(iVar14 + 4 + iVar22);
        *puVar21 = (&g_BitWriteMasks)[0xb - iVar19] & *puVar21 | local_150 >> ((byte)iVar19 & 0x1f);
      }
      uVar15 = uVar15 + 0x1f;
    }
    if ((int)uVar16 < (int)uVar15) {
      local_192 = (bf_write)0x1;
      iVar18 = *(int *)(param_1 + 0x108);
      uVar15 = uVar16;
    }
    else {
      uVar17 = uVar8 & 0x1f;
      iVar19 = ((int)uVar8 >> 5) * 4;
      puVar21 = (uint *)(iVar14 + iVar19);
      *puVar21 = *puVar21 & *(uint *)(&DAT_003f2df0 + uVar17 * 0x84) |
                 iVar23 - iVar18 << (sbyte)uVar17;
      iVar22 = 0x20 - uVar17;
      if (iVar22 < 0x14) {
        puVar21 = (uint *)(iVar14 + 4 + iVar19);
        *puVar21 = (&g_BitWriteMasks)[0x14 - iVar22] & *puVar21 |
                   (uint)(iVar23 - iVar18) >> ((byte)iVar22 & 0x1f);
      }
      iVar18 = *(int *)(param_1 + 0x108);
    }
    if ((iVar18 == -1) &&
       (((0 < local_24 || (local_16c == '\0')) && (local_2c != (CFrameSnapshot *)0x0)))) {
      if (((int)uVar15 < (int)uVar16) && (local_192 == (bf_write)0x0)) {
        pbVar11 = (byte *)(iVar14 + ((int)uVar15 >> 3));
        *pbVar11 = *pbVar11 | (byte)(1 << ((byte)uVar15 & 7));
      }
      *(undefined4 *)(param_1 + 0x108) = *(undefined4 *)(param_2 + 8);
    }
    else if (((int)uVar15 < (int)uVar16) && (local_192 == (bf_write)0x0)) {
      pbVar11 = (byte *)(iVar14 + ((int)uVar15 >> 3));
      *pbVar11 = *pbVar11 & ~(byte)(1 << ((byte)uVar15 & 7));
    }
    if (cVar6 != '\0') {
      CBaseClient::TraceNetworkData(param_1,param_4,"Delta Finish");
    }
    return;
  }
  if ((local_168 == (CClientFrame *)0x0) || (local_15c = local_15c + 1, 0x7ff < (int)local_15c)) {
LAB_001eef40:
    local_15c = 9999;
  }
  else {
    iVar19 = (int)local_15c >> 5;
    pCVar1 = local_168 + iVar19 * 4 + 0xc;
    uVar8 = *(uint *)pCVar1 & (&GetStartBitMask(int)::g_StartMask)[local_15c & 0x1f];
    iVar23 = iVar19;
    if (uVar8 == 0) {
      iVar23 = iVar19 + 1;
      uVar8 = *(uint *)(pCVar1 + 4);
      if (iVar23 != 0x40) {
        do {
          if (uVar8 != 0) goto LAB_001edf44;
          uVar8 = *(uint *)(pCVar1 + iVar23 * 4 + iVar19 * -4 + 4);
          iVar23 = iVar23 + 1;
        } while (iVar23 != 0x40);
      }
      goto LAB_001eef40;
    }
LAB_001edf44:
    iVar23 = iVar23 * 0x20;
    if ((uVar8 & 0xff) == 0) {
      uVar17 = uVar8 >> 8 & 0xff;
      if (uVar17 == 0) {
        uVar17 = uVar8 >> 0x10 & 0xff;
        if (uVar17 == 0) {
          if (uVar8 >> 0x18 == 0) goto LAB_001eef40;
          local_15c = iVar23 + 0x18 +
                      *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT + (uVar8 >> 0x18) * 4);
        }
        else {
          local_15c = iVar23 + 0x10 +
                      *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT + uVar17 * 4);
        }
      }
      else {
        local_15c = iVar23 + 8 +
                    *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT + uVar17 * 4);
      }
    }
    else {
      local_15c = iVar23 + *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT +
                                   (uVar8 & 0xff) * 4);
    }
    if ((int)local_15c < 0) goto LAB_001eef40;
  }
  local_158 = local_158 + 1;
  if ((int)local_158 < 0x800) {
    iVar19 = (int)local_158 >> 5;
    pCVar1 = local_164 + iVar19 * 4 + 0xc;
    uVar8 = *(uint *)pCVar1 & (&GetStartBitMask(int)::g_StartMask)[local_158 & 0x1f];
    iVar23 = iVar19;
    if (uVar8 == 0) {
      iVar23 = iVar19 + 1;
      uVar8 = *(uint *)(pCVar1 + 4);
      if (iVar23 != 0x40) {
        do {
          if (uVar8 != 0) goto LAB_001edff4;
          uVar8 = *(uint *)(pCVar1 + iVar23 * 4 + iVar19 * -4 + 4);
          iVar23 = iVar23 + 1;
        } while (iVar23 != 0x40);
      }
    }
    else {
LAB_001edff4:
      iVar23 = iVar23 * 0x20;
      if ((uVar8 & 0xff) == 0) {
        uVar17 = uVar8 >> 8 & 0xff;
        if (uVar17 == 0) {
          uVar17 = uVar8 >> 0x10 & 0xff;
          if (uVar17 == 0) {
            if (uVar8 >> 0x18 == 0) goto LAB_001eecf4;
            local_158 = iVar23 + 0x18 +
                        *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT + (uVar8 >> 0x18) * 4
                                );
          }
          else {
            local_158 = iVar23 + 0x10 +
                        *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT + uVar17 * 4);
          }
        }
        else {
          local_158 = iVar23 + 8 +
                      *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT + uVar17 * 4);
        }
      }
      else {
        local_158 = iVar23 + *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT +
                                     (uVar8 & 0xff) * 4);
      }
      if (-1 < (int)local_158) goto LAB_001ee042;
    }
  }
LAB_001eecf4:
  local_158 = 9999;
LAB_001ee042:
  if (local_15c == 9999) goto LAB_001ee268;
LAB_001ee050:
  if (local_158 != 9999) goto LAB_001ee2b0;
  local_138 = (PackedEntity *)0x0;
  do {
    puVar9 = (undefined4 *)
             CFrameSnapshotManager::GetPackedEntity
                       ((CFrameSnapshotManager *)framesnapshotmanager,local_34,local_15c);
    do {
      local_13c = puVar9;
      SV_DetermineUpdateType((CEntityWriteInfo *)&local_170);
      pbVar3 = local_144;
      uVar17 = local_158;
      uVar8 = local_15c;
      if (local_160 == 1) {
        if (local_16c == '\0') {
          bVar2 = false;
        }
        else {
          bVar2 = false;
          if (((*(int *)(*(int *)(local_30 + 8) + local_15c * 0xc) == 0) &&
              ((int)local_15c < *(int *)(local_34 + 0xc))) &&
             (*(int *)(*(int *)(local_34 + 8) + local_15c * 0xc) != 0)) {
            bVar2 = true;
            local_134[(int)local_15c >> 5] =
                 local_134[(int)local_15c >> 5] | 1 << ((byte)local_15c & 0x1f);
          }
        }
        bf_write::WriteUBitVar(local_144,(local_15c - local_154) - 1);
        iVar23 = *(int *)(pbVar3 + 0xc);
        if (iVar23 < *(int *)(pbVar3 + 8)) {
          if (pbVar3[0x10] == (bf_write)0x0) {
            pbVar11 = (byte *)((iVar23 >> 3) + *(int *)pbVar3);
            *pbVar11 = *pbVar11 | (byte)(1 << ((byte)iVar23 & 7));
            iVar23 = *(int *)(pbVar3 + 0xc) + 1;
            *(int *)(pbVar3 + 0xc) = iVar23;
            if (*(int *)(pbVar3 + 8) <= iVar23) goto LAB_001ee68e;
          }
          if (pbVar3[0x10] == (bf_write)0x0) {
            if (bVar2) {
              pbVar11 = (byte *)(*(int *)pbVar3 + (iVar23 >> 3));
              *pbVar11 = *pbVar11 | (byte)(1 << ((byte)iVar23 & 7));
            }
            else {
              pbVar11 = (byte *)(*(int *)pbVar3 + (iVar23 >> 3));
              *pbVar11 = *pbVar11 & ~(byte)(1 << ((byte)iVar23 & 7));
            }
            *(int *)(pbVar3 + 0xc) = *(int *)(pbVar3 + 0xc) + 1;
          }
        }
        else {
LAB_001ee68e:
          pbVar3[0x10] = (bf_write)0x1;
        }
        local_150 = local_150 + 1;
        local_154 = uVar8;
        if ((local_168 != (CClientFrame *)0x0) &&
           (local_15c = local_15c + 1, (int)local_15c < 0x800)) {
          iVar19 = (int)local_15c >> 5;
          pCVar1 = local_168 + iVar19 * 4 + 0xc;
          uVar8 = *(uint *)pCVar1 & (&GetStartBitMask(int)::g_StartMask)[local_15c & 0x1f];
          iVar23 = iVar19;
          if (uVar8 == 0) {
            iVar23 = iVar19 + 1;
            uVar8 = *(uint *)(pCVar1 + 4);
            if (iVar23 != 0x40) {
              do {
                if (uVar8 != 0) goto LAB_001ee700;
                uVar8 = *(uint *)(pCVar1 + iVar23 * 4 + iVar19 * -4 + 4);
                iVar23 = iVar23 + 1;
              } while (iVar23 != 0x40);
            }
          }
          else {
LAB_001ee700:
            iVar23 = iVar23 * 0x20;
            if ((uVar8 & 0xff) == 0) {
              uVar17 = uVar8 >> 8 & 0xff;
              if (uVar17 == 0) {
                uVar17 = uVar8 >> 0x10 & 0xff;
                if (uVar17 == 0) {
                  if (uVar8 >> 0x18 == 0) goto LAB_001ee750;
                  local_15c = iVar23 + 0x18 +
                              *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT +
                                      (uVar8 >> 0x18) * 4);
                }
                else {
                  local_15c = iVar23 + 0x10 +
                              *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT + uVar17 * 4);
                }
              }
              else {
                local_15c = iVar23 + 8 +
                            *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT + uVar17 * 4);
              }
            }
            else {
              local_15c = iVar23 + *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT +
                                           (uVar8 & 0xff) * 4);
            }
            if (-1 < (int)local_15c) goto LAB_001ee220;
          }
        }
LAB_001ee750:
        local_15c = 9999;
      }
      else {
        if (local_160 < 2) {
          if (local_160 != 0) goto LAB_001ee220;
          bf_write::WriteUBitVar(local_144,(local_158 - local_154) - 1);
          iVar23 = *(int *)(pbVar3 + 0xc);
          if (iVar23 < *(int *)(pbVar3 + 8)) {
            if (pbVar3[0x10] == (bf_write)0x0) {
              pbVar11 = (byte *)((iVar23 >> 3) + *(int *)pbVar3);
              *pbVar11 = *pbVar11 & ~(byte)(1 << ((byte)iVar23 & 7));
              iVar23 = *(int *)(pbVar3 + 0xc) + 1;
              *(int *)(pbVar3 + 0xc) = iVar23;
              if (*(int *)(pbVar3 + 8) <= iVar23) goto LAB_001ee327;
            }
            if (pbVar3[0x10] == (bf_write)0x0) {
              pbVar11 = (byte *)((iVar23 >> 3) + *(int *)pbVar3);
              *pbVar11 = *pbVar11 | (byte)(1 << ((byte)iVar23 & 7));
              *(int *)(pbVar3 + 0xc) = *(int *)(pbVar3 + 0xc) + 1;
            }
          }
          else {
LAB_001ee327:
            pbVar3[0x10] = (bf_write)0x1;
          }
          local_150 = local_150 + 1;
          local_154 = uVar17;
          piVar29 = (int *)(*(int *)(local_30 + 8) + local_158 * 0xc);
          puVar9 = (undefined4 *)*piVar29;
          if (puVar9 == (undefined4 *)0x0) {
            Host_Error("SV_CreatePacketEntities: GetEntServerClass failed for ent %d.\n",local_158);
          }
          local_1a0 = puVar9[3];
          if (*(int *)(local_28 + 0xf8) <= (int)local_1a0) {
            ConMsg("pClass->m_ClassID(%i) >= %i\n",local_1a0,*(int *)(local_28 + 0xf8));
            local_1a0 = puVar9[3];
          }
          iVar23 = *(int *)(local_28 + 0xfc);
          uVar8 = *(uint *)(local_144 + 0xc);
          if (*(int *)(local_144 + 8) < (int)(iVar23 + uVar8)) {
            *(int *)(local_144 + 0xc) = *(int *)(local_144 + 8);
            local_144[0x10] = (bf_write)0x1;
          }
          else {
            iVar19 = ((int)uVar8 >> 5) * 4;
            uVar8 = uVar8 & 0x1f;
            puVar21 = (uint *)(iVar19 + *(int *)local_144);
            local_1a8._0_1_ = (sbyte)uVar8;
            *puVar21 = local_1a0 << (sbyte)local_1a8 |
                       *puVar21 & (&g_BitWriteMasks)[uVar8 * 0x21 + iVar23];
            iVar22 = 0x20 - uVar8;
            if (iVar22 < iVar23) {
              puVar21 = (uint *)(*(int *)local_144 + 4 + iVar19);
              *puVar21 = (&g_BitWriteMasks)[iVar23 - iVar22] & *puVar21 |
                         local_1a0 >> ((byte)iVar22 & 0x1f);
            }
            *(int *)(local_144 + 0xc) = *(int *)(local_144 + 0xc) + iVar23;
          }
          uVar8 = piVar29[1];
          uVar17 = *(uint *)(local_144 + 0xc);
          pPVar20 = *(PackedEntity **)(local_144 + 8);
          if ((int)pPVar20 < (int)(uVar17 + 10)) {
            *(PackedEntity **)(local_144 + 0xc) = pPVar20;
            local_144[0x10] = (bf_write)0x1;
            if (local_16c != '\0') goto LAB_001eea5c;
LAB_001ee4d6:
            piVar29 = local_184;
            ppvVar27 = &local_188;
            cVar7 = GetClassBaseline((ServerClass *)local_28,(void **)pPVar20,(int *)local_28);
            if (cVar7 == '\0') {
              Error("SV_WriteEnterPVS: missing instance baseline for \'%s\'.",*puVar9,ppvVar27,
                    piVar29);
            }
            if (local_188 == (void *)0x0) {
              Error("SV_WriteEnterPVS: missing pFromData for \'%s\'.",*puVar9,ppvVar27,piVar29);
            }
            uVar8 = local_184[0] * 8;
          }
          else {
            iVar23 = ((int)uVar17 >> 5) * 4;
            uVar17 = uVar17 & 0x1f;
            puVar21 = (uint *)(iVar23 + *(int *)local_144);
            iVar19 = 0x20 - uVar17;
            pPVar20 = (PackedEntity *)
                      (*puVar21 & *(uint *)(&DAT_003f2dc8 + uVar17 * 0x84) | uVar8 << (sbyte)uVar17)
            ;
            *puVar21 = (uint)pPVar20;
            if (iVar19 < 10) {
              puVar21 = (uint *)(*(int *)local_144 + 4 + iVar23);
              pPVar20 = (PackedEntity *)
                        ((&g_BitWriteMasks)[10 - iVar19] & *puVar21 | uVar8 >> ((byte)iVar19 & 0x1f)
                        );
              *puVar21 = (uint)pPVar20;
            }
            *(int *)(local_144 + 0xc) = *(int *)(local_144 + 0xc) + 10;
            if (local_16c == '\0') goto LAB_001ee4d6;
LAB_001eea5c:
            uVar26 = CFrameSnapshotManager::GetPackedEntity
                               ((CFrameSnapshotManager *)framesnapshotmanager,local_2c,local_158);
            piVar29 = (int *)uVar26;
            pPVar20 = (PackedEntity *)((ulonglong)uVar26 >> 0x20);
            if ((piVar29 == (int *)0x0) ||
               (pPVar20 = local_138, (void *)*piVar29 != *(void **)local_138)) goto LAB_001ee4d6;
            local_188 = (void *)piVar29[9];
            uVar8 = piVar29[10] & 0x7fffffff;
          }
          if (*(int *)(local_164 + 0x10c) != 0) {
            puVar21 = (uint *)(*(int *)(local_164 + 0x10c) + ((int)local_158 >> 5) * 4);
            *puVar21 = *puVar21 | 1 << ((byte)local_158 & 0x1f);
          }
          if (*(int *)(local_138 + 0x28) < 0) {
            pvVar13 = (void *)UncompressPackedEntity(local_28,local_138,local_184);
          }
          else {
            pvVar13 = *(void **)(local_138 + 0x24);
            local_184[0] = *(int *)(local_138 + 0x28);
          }
          iVar23 = SendTable_WriteAllDeltaProps
                             ((SendTable *)puVar9[1],local_188,uVar8,pvVar13,local_184[0],
                              (int)*(void **)(local_138 + 8),local_144);
          local_24 = local_24 + iVar23;
          if (local_158 == local_15c) {
            if (local_168 == (CClientFrame *)0x0) {
              local_15c = 9999;
              goto LAB_001ee5a5;
            }
            uVar8 = local_158 + 1;
            if (0x7ff < (int)uVar8) {
LAB_001eecc0:
              local_15c = 9999;
              goto LAB_001ee5a5;
            }
            iVar19 = (int)uVar8 >> 5;
            uVar8 = (&GetStartBitMask(int)::g_StartMask)[uVar8 & 0x1f];
            iVar23 = iVar19 * 4;
            pCVar1 = local_168 + iVar23 + 0xc;
            uVar17 = uVar8 & *(uint *)pCVar1;
            iVar22 = iVar19;
            if (uVar17 == 0) {
              uVar17 = *(uint *)(pCVar1 + 4);
              iVar22 = iVar19 + 1;
              if (iVar22 != 0x40) {
                do {
                  if (uVar17 != 0) goto LAB_001eebac;
                  uVar17 = *(uint *)(pCVar1 + iVar22 * 4 + iVar19 * -4 + 4);
                  iVar22 = iVar22 + 1;
                } while (iVar22 != 0x40);
              }
              goto LAB_001eecc0;
            }
LAB_001eebac:
            iVar22 = iVar22 * 0x20;
            if ((uVar17 & 0xff) == 0) {
              uVar12 = uVar17 >> 8 & 0xff;
              if (uVar12 == 0) {
                uVar12 = uVar17 >> 0x10 & 0xff;
                if (uVar12 == 0) {
                  if (uVar17 >> 0x18 == 0) goto LAB_001eecc0;
                  local_15c = iVar22 + 0x18 +
                              *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT +
                                      (uVar17 >> 0x18) * 4);
                }
                else {
                  local_15c = iVar22 + 0x10 +
                              *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT + uVar12 * 4);
                }
              }
              else {
                local_15c = iVar22 + 8 +
                            *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT + uVar12 * 4);
              }
            }
            else {
              local_15c = iVar22 + *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT +
                                           (uVar17 & 0xff) * 4);
            }
            if ((int)local_15c < 0) goto LAB_001eecc0;
          }
          else {
LAB_001ee5a5:
            local_158 = local_158 + 1;
            if (0x7ff < (int)local_158) goto LAB_001ee640;
            uVar8 = (&GetStartBitMask(int)::g_StartMask)[local_158 & 0x1f];
            iVar19 = (int)local_158 >> 5;
            iVar23 = iVar19 * 4;
          }
          pCVar1 = local_164 + iVar23 + 0xc;
          uVar8 = uVar8 & *(uint *)pCVar1;
          if (uVar8 == 0) {
            iVar23 = iVar19 + 1;
            uVar8 = *(uint *)(pCVar1 + 4);
            if (iVar23 != 0x40) {
              iVar22 = iVar19 * -4;
              do {
                iVar19 = iVar23;
                if (uVar8 != 0) goto LAB_001ee600;
                uVar8 = *(uint *)(pCVar1 + iVar23 * 4 + iVar22 + 4);
                iVar23 = iVar23 + 1;
              } while (iVar23 != 0x40);
            }
          }
          else {
LAB_001ee600:
            uVar17 = uVar8 & 0xff;
            iVar19 = iVar19 * 0x20;
            if (uVar17 != 0) goto LAB_001ee20b;
            uVar17 = uVar8 >> 8 & 0xff;
            if (uVar17 == 0) {
              uVar17 = uVar8 >> 0x10 & 0xff;
              if (uVar17 == 0) {
                if (uVar8 >> 0x18 == 0) goto LAB_001ee640;
                local_158 = iVar19 + 0x18 +
                            *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT +
                                    (uVar8 >> 0x18) * 4);
              }
              else {
                local_158 = iVar19 + 0x10 +
                            *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT + uVar17 * 4);
              }
            }
            else {
              local_158 = iVar19 + 8 +
                          *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT + uVar17 * 4);
            }
LAB_001ee212:
            if (-1 < (int)local_158) goto LAB_001ee220;
          }
        }
        else if (local_160 == 2) {
          if ((local_168 == (CClientFrame *)0x0) ||
             (local_15c = local_15c + 1, 0x7ff < (int)local_15c)) {
LAB_001eeac0:
            local_15c = 9999;
          }
          else {
            iVar19 = (int)local_15c >> 5;
            pCVar1 = local_168 + iVar19 * 4 + 0xc;
            uVar8 = *(uint *)pCVar1 & (&GetStartBitMask(int)::g_StartMask)[local_15c & 0x1f];
            iVar23 = iVar19;
            if (uVar8 == 0) {
              iVar23 = iVar19 + 1;
              uVar8 = *(uint *)(pCVar1 + 4);
              if (iVar23 != 0x40) {
                do {
                  if (uVar8 != 0) goto LAB_001ee7cc;
                  uVar8 = *(uint *)(pCVar1 + iVar23 * 4 + iVar19 * -4 + 4);
                  iVar23 = iVar23 + 1;
                } while (iVar23 != 0x40);
              }
              goto LAB_001eeac0;
            }
LAB_001ee7cc:
            iVar23 = iVar23 * 0x20;
            if ((uVar8 & 0xff) == 0) {
              uVar17 = uVar8 >> 8 & 0xff;
              if (uVar17 == 0) {
                uVar17 = uVar8 >> 0x10 & 0xff;
                if (uVar17 == 0) {
                  if (uVar8 >> 0x18 == 0) goto LAB_001eeac0;
                  local_15c = iVar23 + 0x18 +
                              *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT +
                                      (uVar8 >> 0x18) * 4);
                }
                else {
                  local_15c = iVar23 + 0x10 +
                              *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT + uVar17 * 4);
                }
              }
              else {
                local_15c = iVar23 + 8 +
                            *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT + uVar17 * 4);
              }
            }
            else {
              local_15c = iVar23 + *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT +
                                           (uVar8 & 0xff) * 4);
            }
            if ((int)local_15c < 0) goto LAB_001eeac0;
          }
          local_158 = local_158 + 1;
          if ((int)local_158 < 0x800) {
            iVar19 = (int)local_158 >> 5;
            pCVar1 = local_164 + iVar19 * 4 + 0xc;
            uVar17 = *(uint *)pCVar1 & (&GetStartBitMask(int)::g_StartMask)[local_158 & 0x1f];
            if (uVar17 != 0) goto joined_r0x001ee88c;
            iVar23 = iVar19 + 1;
            uVar17 = *(uint *)(pCVar1 + 4);
            if (iVar23 != 0x40) {
              iVar22 = iVar19 * -4;
              do {
                iVar19 = iVar23;
                if (uVar17 != 0) goto joined_r0x001ee88c;
                uVar17 = *(uint *)(pCVar1 + iVar23 * 4 + iVar22 + 4);
                iVar23 = iVar23 + 1;
              } while (iVar23 != 0x40);
            }
          }
        }
        else {
          if (local_160 != 3) goto LAB_001ee220;
          if ((local_168 == (CClientFrame *)0x0) ||
             (local_15c = local_15c + 1, 0x7ff < (int)local_15c)) {
LAB_001eead0:
            local_15c = 9999;
          }
          else {
            iVar19 = (int)local_15c >> 5;
            pCVar1 = local_168 + iVar19 * 4 + 0xc;
            uVar8 = *(uint *)pCVar1 & (&GetStartBitMask(int)::g_StartMask)[local_15c & 0x1f];
            iVar23 = iVar19;
            if (uVar8 == 0) {
              iVar23 = iVar19 + 1;
              uVar8 = *(uint *)(pCVar1 + 4);
              if (iVar23 != 0x40) {
                do {
                  if (uVar8 != 0) goto LAB_001ee124;
                  uVar8 = *(uint *)(pCVar1 + iVar23 * 4 + iVar19 * -4 + 4);
                  iVar23 = iVar23 + 1;
                } while (iVar23 != 0x40);
              }
              goto LAB_001eead0;
            }
LAB_001ee124:
            iVar23 = iVar23 * 0x20;
            if ((uVar8 & 0xff) == 0) {
              uVar17 = uVar8 >> 8 & 0xff;
              if (uVar17 == 0) {
                uVar17 = uVar8 >> 0x10 & 0xff;
                if (uVar17 == 0) {
                  if (uVar8 >> 0x18 == 0) goto LAB_001eead0;
                  local_15c = iVar23 + 0x18 +
                              *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT +
                                      (uVar8 >> 0x18) * 4);
                }
                else {
                  local_15c = iVar23 + 0x10 +
                              *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT + uVar17 * 4);
                }
              }
              else {
                local_15c = iVar23 + 8 +
                            *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT + uVar17 * 4);
              }
            }
            else {
              local_15c = iVar23 + *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT +
                                           (uVar8 & 0xff) * 4);
            }
            if ((int)local_15c < 0) goto LAB_001eead0;
          }
          local_158 = local_158 + 1;
          if ((int)local_158 < 0x800) {
            iVar23 = (int)local_158 >> 5;
            pCVar1 = local_164 + iVar23 * 4 + 0xc;
            uVar17 = *(uint *)pCVar1 & (&GetStartBitMask(int)::g_StartMask)[local_158 & 0x1f];
            iVar19 = iVar23;
            if (uVar17 == 0) {
              iVar19 = iVar23 + 1;
              uVar17 = *(uint *)(pCVar1 + 4);
              if (iVar19 != 0x40) {
                do {
                  if (uVar17 != 0) goto joined_r0x001ee88c;
                  uVar17 = *(uint *)(pCVar1 + iVar19 * 4 + iVar23 * -4 + 4);
                  iVar19 = iVar19 + 1;
                } while (iVar19 != 0x40);
              }
              goto LAB_001ee640;
            }
joined_r0x001ee88c:
            iVar19 = iVar19 * 0x20;
            if ((uVar17 & 0xff) != 0) {
              local_158 = iVar19 + *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT +
                                           (uVar17 & 0xff) * 4);
              goto LAB_001ee212;
            }
            uVar8 = uVar17 >> 8 & 0xff;
            if (uVar8 != 0) {
              local_158 = iVar19 + 8 +
                          *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT + uVar8 * 4);
              goto LAB_001ee212;
            }
            uVar8 = uVar17 >> 0x10 & 0xff;
            if (uVar8 != 0) {
              local_158 = iVar19 + 0x10 +
                          *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT + uVar8 * 4);
              goto LAB_001ee212;
            }
            uVar17 = uVar17 >> 0x18;
            iVar19 = iVar19 + 0x18;
            if (uVar17 == 0) goto LAB_001ee640;
LAB_001ee20b:
            local_158 = iVar19 + *(int *)(FirstBitInWord(unsigned_int,int)::firstBitLUT + uVar17 * 4
                                         );
            goto LAB_001ee212;
          }
        }
LAB_001ee640:
        local_158 = 9999;
      }
LAB_001ee220:
      if (cVar6 != '\0') {
        if (local_160 == 1) {
          uVar10 = *(undefined4 *)*local_13c;
          pcVar28 = "leave [%s]";
        }
        else if (local_160 == 2) {
          piVar29 = *(int **)(local_13c[2] * 0x10 + DAT_003b8174 + 8);
          uVar10 = (**(code **)(*piVar29 + 0xc))(piVar29);
          pcVar28 = "delta [%s]";
        }
        else {
          if (local_160 != 0) goto LAB_001ee250;
          piVar29 = *(int **)((int)*(void **)(local_138 + 8) * 0x10 + DAT_003b8174 + 8);
          uVar10 = (**(code **)(*piVar29 + 0xc))(piVar29);
          pcVar28 = "enter [%s]";
        }
        CBaseClient::TraceNetworkData(param_1,param_4,pcVar28,uVar10);
      }
LAB_001ee250:
      if (local_15c != 9999) goto LAB_001ee050;
LAB_001ee268:
      pCVar5 = local_30;
      pCVar4 = local_34;
      if (local_158 == 9999) {
        uVar8 = 0;
        if (local_16c == '\0') goto LAB_001ee27f;
        local_184[0] = 0;
        local_184[1] = 0;
        local_184[2] = 0;
        local_184[3] = 0;
        local_184[4] = 0;
        local_188 = (void *)0x0;
        iVar23 = *(int *)(local_30 + 0xc);
        if (*(int *)(local_30 + 0xc) < *(int *)(local_34 + 0xc)) {
          iVar23 = *(int *)(local_34 + 0xc);
        }
        if (iVar23 < 1) {
          uVar8 = 0;
          goto LAB_001eee67;
        }
        uVar8 = local_15c & 0xffff0000;
        goto LAB_001eede0;
      }
LAB_001ee2b0:
      local_138 = (PackedEntity *)
                  CFrameSnapshotManager::GetPackedEntity
                            ((CFrameSnapshotManager *)framesnapshotmanager,local_30,local_158);
      puVar9 = (undefined4 *)0x0;
    } while (local_15c == 9999);
  } while( true );
LAB_001eede0:
  do {
    uVar17 = 1 << ((byte)local_188 & 0x1f);
    if (((local_134[(uint)local_188 >> 5] & uVar17) == 0) &&
       ((*(uint *)(local_164 + ((uint)local_188 >> 5) * 4 + 0xc) & uVar17) == 0)) {
      if ((*(int *)(*(int *)(pCVar5 + 8) + (int)local_188 * 0xc) != 0) ||
         ((*(int *)(pCVar4 + 0xc) <= (int)local_188 ||
          (*(int *)(*(int *)(pCVar4 + 8) + (int)local_188 * 0xc) == 0)))) {
        if ((local_164 == (CClientFrame *)0x0) || (*(int *)(pCVar5 + 0x30) < 1)) goto LAB_001eee50;
        if (local_188 != (void *)**(int **)(pCVar5 + 0x24)) {
          iVar19 = 0;
          do {
            iVar19 = iVar19 + 1;
            if (iVar19 == *(int *)(pCVar5 + 0x30)) goto LAB_001eee50;
          } while (local_188 != (void *)(*(int **)(pCVar5 + 0x24))[iVar19]);
          if (iVar19 == -1) goto LAB_001eee50;
        }
      }
      CUtlVector<int,CUtlMemory<int,int>>::InsertBefore
                ((CUtlVector<int,CUtlMemory<int,int>> *)local_184,uVar8,(int *)&local_188);
      uVar8 = local_184[3];
    }
LAB_001eee50:
    local_188 = (void *)((int)local_188 + 1);
  } while ((int)local_188 < iVar23);
LAB_001eee67:
  local_1a8 = (CUtlMemory<int,int> *)local_184;
                    /* try { // try from 001eee74 to 001eef27 has its CatchHandler @ 001ef00e */
  bf_write::WriteUBitVar(local_144,uVar8);
  uVar8 = local_184[3];
  if (0 < local_184[3]) {
    iVar19 = 0;
    iVar23 = -1;
    do {
      iVar22 = *(int *)(local_184[0] + iVar19 * 4);
      bf_write::WriteUBitVar(local_144,iVar22 - iVar23);
      iVar19 = iVar19 + 1;
      iVar23 = iVar22;
      uVar8 = local_184[3];
    } while (iVar19 < local_184[3]);
  }
  local_184[3] = 0;
  CUtlMemory<int,int>::Purge(local_1a8);
  local_184[4] = local_184[0];
  CUtlMemory<int,int>::Purge(local_1a8);
LAB_001ee27f:
  if (cVar6 != '\0') {
    CBaseClient::TraceNetworkData(param_1,param_4,"Delta: [%d] deletions",uVar8);
  }
  goto LAB_001edb54;
}

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)