private void MessageSpawnBaseline() { if (!demo.ConvertNetworkProtocol()) { parser.MessageSpawnBaseline(); return; } Int32 messageStartOffset = parser.BitBuffer.CurrentByte; BitWriter bitWriter = new BitWriter(); // read message into new message if (demo.NetworkProtocol <= 43) { parser.BitBuffer.Endian = BitBuffer.EndianType.Big; } while (true) { UInt32 entityIndex = parser.BitBuffer.ReadUnsignedBits(11); bitWriter.WriteUnsignedBits(entityIndex, 11); if (entityIndex == (1 << 11) - 1) // all 1's { break; } UInt32 entityType = parser.BitBuffer.ReadUnsignedBits(2); bitWriter.WriteUnsignedBits(entityType, 2); String entityTypeString; if ((entityType & 1) != 0) { if (entityIndex > 0 && entityIndex <= demo.MaxClients) { entityTypeString = "entity_state_player_t"; } else { entityTypeString = "entity_state_t"; } } else { entityTypeString = "custom_entity_state_t"; } HalfLifeDeltaStructure deltaStructure = parser.GetDeltaStructure(entityTypeString); HalfLifeDelta delta = deltaStructure.CreateDelta(); Byte[] bitmaskBytes; deltaStructure.ReadDelta(parser.BitBuffer, delta, out bitmaskBytes); if (demo.Game != null) { demo.Game.ConvertPacketEntititiesCallback(delta, entityTypeString, demo.GameVersion); } deltaStructure.WriteDelta(bitWriter, delta, bitmaskBytes); } UInt32 footer = parser.BitBuffer.ReadUnsignedBits(5); // should be all 1's bitWriter.WriteUnsignedBits(footer, 5); if (footer != (1 << 5) - 1) { throw new ApplicationException("Bad svc_spawnbaseline footer."); } UInt32 nExtraData = parser.BitBuffer.ReadUnsignedBits(6); bitWriter.WriteUnsignedBits(nExtraData, 6); HalfLifeDeltaStructure entityStateStructure = parser.GetDeltaStructure("entity_state_t"); for (Int32 i = 0; i < nExtraData; i++) { HalfLifeDelta delta = entityStateStructure.CreateDelta(); Byte[] bitmaskBytes; entityStateStructure.ReadDelta(parser.BitBuffer, delta, out bitmaskBytes); entityStateStructure.WriteDelta(bitWriter, delta, bitmaskBytes); } parser.BitBuffer.Endian = BitBuffer.EndianType.Little; parser.BitBuffer.SkipRemainingBits(); // insert new message ReWriteMessage(messageStartOffset, bitWriter.Data); }