public override void Write(FileWriter writer) { writer.SetByteOrder(true); writer.WriteSignature(Magic); if (!IsBigEndian) { writer.Write((ushort)0xFFFE); } else { writer.Write((ushort)0xFEFF); } writer.SetByteOrder(IsBigEndian); writer.Write(HeaderSize); writer.Write(Version); writer.Write(uint.MaxValue); //Reserve space for file size later writer.Write(ushort.MaxValue); //Reserve space for section count later writer.Seek(2); //padding int sectionCount = 0; WriteSection(writer, "pat1", AnimationTag, () => AnimationTag.Write(writer, this)); sectionCount++; WriteSection(writer, "pai1", AnimationInfo, () => AnimationInfo.Write(writer, this)); sectionCount++; foreach (var section in UnknownSections) { WriteSection(writer, section.Signature, section, () => section.Write(writer, this)); sectionCount++; } //Write the total section count using (writer.TemporarySeek(0x10, System.IO.SeekOrigin.Begin)) { writer.Write((ushort)sectionCount); } //Write the total file size using (writer.TemporarySeek(0x0C, System.IO.SeekOrigin.Begin)) { writer.Write((uint)writer.BaseStream.Length); } }