diff --git a/demboyz/netmessages/netcontants.h b/demboyz/netmessages/netcontants.h index abc1919..45df39a 100644 --- a/demboyz/netmessages/netcontants.h +++ b/demboyz/netmessages/netcontants.h @@ -9,8 +9,8 @@ enum constants // was 96000 NET_MAX_PAYLOAD = 288000, // largest message size in bytes - // was 17 - NET_MAX_PAYLOAD_BITS = 19, // 2^NET_MAX_PAYLOAD_BITS > NET_MAX_PAYLOAD + NET_MAX_PAYLOAD_BITS_OLD = 17, // for old demos + NET_MAX_PAYLOAD_BITS = 19, // 2^NET_MAX_PAYLOAD_BITS > NET_MAX_PAYLOAD // table index is sent in log2(MAX_TABLES) bits MAX_TABLES = 32, // Table id is 4 bits diff --git a/demboyz/netmessages/svc_tempentities.cpp b/demboyz/netmessages/svc_tempentities.cpp index 5a236bf..133db6e 100644 --- a/demboyz/netmessages/svc_tempentities.cpp +++ b/demboyz/netmessages/svc_tempentities.cpp @@ -9,7 +9,14 @@ namespace NetHandlers bool SVC_TempEntities_BitRead_Internal(bf_read& bitbuf, SourceGameContext& context, NetMsg::SVC_TempEntities* data) { data->numEntries = bitbuf.ReadUBitLong(EVENT_INDEX_BITS); - data->dataLengthInBits = bitbuf.ReadUBitLong(NET_MAX_PAYLOAD_BITS); + if (context.protocol > 23) + { + data->dataLengthInBits = bitbuf.ReadVarInt32(); + } + else + { + data->dataLengthInBits = bitbuf.ReadUBitLong(NET_MAX_PAYLOAD_BITS_OLD); + } data->data.reset(new uint8_t[math::BitsToBytes(data->dataLengthInBits)]); bitbuf.ReadBits(data->data.get(), data->dataLengthInBits); return !bitbuf.IsOverflowed(); @@ -18,7 +25,14 @@ namespace NetHandlers bool SVC_TempEntities_BitWrite_Internal(bf_write& bitbuf, SourceGameContext& context, NetMsg::SVC_TempEntities* data) { bitbuf.WriteUBitLong(data->numEntries, EVENT_INDEX_BITS); - bitbuf.WriteUBitLong(data->dataLengthInBits, NET_MAX_PAYLOAD_BITS); + if (context.protocol > 23) + { + bitbuf.WriteVarInt32(data->dataLengthInBits); + } + else + { + bitbuf.WriteUBitLong(data->dataLengthInBits, NET_MAX_PAYLOAD_BITS_OLD); + } bitbuf.WriteBits(data->data.get(), data->dataLengthInBits); return !bitbuf.IsOverflowed(); }