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 intoaddons/sourcemod/gamedata/<your_plugin>.txt
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.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.