private void MessageSound() { if (!demo.ConvertNetworkProtocol() || demo.NetworkProtocol > 43) { parser.MessageSound(); return; } Int32 messageStartOffset = parser.BitBuffer.CurrentByte; // read message parser.BitBuffer.Endian = BitBuffer.EndianType.Big; BitWriter bitWriter = new BitWriter(); UInt32 flags = parser.BitBuffer.ReadUnsignedBits(9); bitWriter.WriteUnsignedBits(flags, 9); if ((flags & (1 << 0)) != 0) // volume { bitWriter.WriteUnsignedBits(parser.BitBuffer.ReadUnsignedBits(8), 8); } if ((flags & (1 << 1)) != 0) // attenuation * 64 { bitWriter.WriteUnsignedBits(parser.BitBuffer.ReadUnsignedBits(8), 8); } bitWriter.WriteUnsignedBits(parser.BitBuffer.ReadUnsignedBits(3), 3); // channel bitWriter.WriteUnsignedBits(parser.BitBuffer.ReadUnsignedBits(11), 11); // edict number if ((flags & (1 << 2)) != 0) // sound index (short) { bitWriter.WriteUnsignedBits(parser.BitBuffer.ReadUnsignedBits(16), 16); } else // sound index (byte) { bitWriter.WriteUnsignedBits(parser.BitBuffer.ReadUnsignedBits(8), 8); } bitWriter.WriteVectorCoord(true, parser.BitBuffer.ReadVectorCoord(true)); // position if ((flags & (1 << 3)) != 0) // pitch { bitWriter.WriteUnsignedBits(parser.BitBuffer.ReadUnsignedBits(8), 8); } parser.BitBuffer.SkipRemainingBits(); parser.BitBuffer.Endian = BitBuffer.EndianType.Little; // insert new message ReWriteMessage(messageStartOffset, bitWriter.Data); }
private void MessageSound() { if (!demo.ConvertNetworkProtocol() || demo.NetworkProtocol > 43) { parser.MessageSound(); return; } Int32 messageStartOffset = parser.BitBuffer.CurrentByte; // read message parser.BitBuffer.Endian = BitBuffer.EndianType.Big; BitWriter bitWriter = new BitWriter(); UInt32 flags = parser.BitBuffer.ReadUnsignedBits(9); bitWriter.WriteUnsignedBits(flags, 9); if ((flags & (1 << 0)) != 0) // volume { bitWriter.WriteUnsignedBits(parser.BitBuffer.ReadUnsignedBits(8), 8); } if ((flags & (1 << 1)) != 0) // attenuation * 64 { bitWriter.WriteUnsignedBits(parser.BitBuffer.ReadUnsignedBits(8), 8); } bitWriter.WriteUnsignedBits(parser.BitBuffer.ReadUnsignedBits(3), 3); // channel bitWriter.WriteUnsignedBits(parser.BitBuffer.ReadUnsignedBits(11), 11); // edict number if ((flags & (1 << 2)) != 0) // sound index (short) { bitWriter.WriteUnsignedBits(parser.BitBuffer.ReadUnsignedBits(16), 16); } else // sound index (byte) { bitWriter.WriteUnsignedBits(parser.BitBuffer.ReadUnsignedBits(8), 8); } bitWriter.WriteVectorCoord(true, parser.BitBuffer.ReadVectorCoord(true)); // position if ((flags & (1 << 3)) != 0) // pitch { bitWriter.WriteUnsignedBits(parser.BitBuffer.ReadUnsignedBits(8), 8); } parser.BitBuffer.SkipRemainingBits(); parser.BitBuffer.Endian = BitBuffer.EndianType.Little; // insert new message ReWriteMessage(messageStartOffset, bitWriter.Data); }