public override void Write(EndianBinaryWriterEx ew) { EndianBinaryWriterEx tempWritter = new EndianBinaryWriterEx(new MemoryStream(), Endianness.LittleEndian); // I don't know how else I can do this without a hardcoded size... tempWritter.Write(new ushort()); // offsetPlayer tempWritter.Write(new ushort()); // offsetCPU tempWritter.Write(new byte()); // Mode tempWritter.Write(new byte()); // SpawnItemBoxes tempWritter.WritePadding(4); UInt16 baseOffset = (UInt16)tempWritter.BaseStream.Position; EndianBinaryWriterEx sectionWritter = new EndianBinaryWriterEx(new MemoryStream(), Endianness.LittleEndian); if (Mode == ItemMode.Custom) { UInt16 offsetPlayer = baseOffset, offsetCPU = baseOffset; offsetPlayer += (UInt16)sectionWritter.BaseStream.Position; PlayerConfig.Write(sectionWritter); offsetCPU += (UInt16)sectionWritter.BaseStream.Position; CPUConfig.Write(sectionWritter); ew.Write(offsetPlayer); // offsetPlayer ew.Write(offsetCPU); // offsetCPU ew.Write((byte)Mode); ew.Write((byte)(SpawnItemBoxes ? 1 : 0)); ew.WritePadding(4); ew.Write((sectionWritter.BaseStream as MemoryStream).ToArray(), 0, (int)sectionWritter.BaseStream.Length); } else { ew.Write((ushort)0xFFFF); // offsetPlayer ew.Write((ushort)0xFFFF); // offsetCPU ew.Write((byte)Mode); ew.Write((byte)(SpawnItemBoxes ? 1 : 0)); ew.WritePadding(4); } ew.WritePadding(4); return; }