private static byte[] EncodeV1(ObjectData data) { using (FlagsBinaryWriter writer = new FlagsBinaryWriter(new MemoryStream())) { // write client version writer.Write((ushort)DatFormat.Format_1010); // write category string category = string.Empty; switch (data.Category) { case ThingCategory.Item: category = "item"; break; case ThingCategory.Outfit: category = "outfit"; break; case ThingCategory.Effect: category = "effect"; break; case ThingCategory.Missile: category = "missile"; break; } writer.Write((ushort)category.Length); writer.Write(Encoding.UTF8.GetBytes(category)); if (!ThingTypeSerializer.WriteProperties(data.ThingType, DatFormat.Format_1010, writer)) { return(null); } FrameGroup group = data.GetFrameGroup(FrameGroupType.Default); writer.Write(group.Width); writer.Write(group.Height); if (group.Width > 1 || group.Height > 1) { writer.Write(group.ExactSize); } writer.Write(group.Layers); writer.Write(group.PatternX); writer.Write(group.PatternY); writer.Write(group.PatternZ); writer.Write(group.Frames); Sprite[] sprites = data.Sprites[FrameGroupType.Default]; for (int i = 0; i < sprites.Length; i++) { Sprite sprite = sprites[i]; byte[] pixels = sprite.GetARGBPixels(); writer.Write((uint)sprite.ID); writer.Write((uint)pixels.Length); writer.Write(pixels); } return(LZMACoder.Compress(((MemoryStream)writer.BaseStream).ToArray())); } }