public override byte[] GetChunkBytes() { using (var stream = new MemoryStream()) { using (var writer = new BinaryWriter(stream)) { writer.Write((uint)Flags); writer.WriteVector2UInt(Index); writer.Write(Layers); writer.Write(NumberDoodadRefs); var positionOffsetMCVT = BaseStream.Position; writer.Write(0); var positionOffsetMCNR = BaseStream.Position; writer.Write(0); var positionOffsetMCLY = BaseStream.Position; writer.Write(0); var positionOffsetMCRF = BaseStream.Position; writer.Write(0); var positionOffsetMCAL = BaseStream.Position; writer.Write(0); writer.Write(SizeShadow); var positionOffsetMCSH = BaseStream.Position; writer.Write(0); writer.Write(SizeShadow); writer.Write(AreaId); writer.Write(NumberMapObjectRefs); writer.Write(Holes); writer.Write(HolesPadding); for (int i = 0; i < 16; i++) { writer.Write(ReallyLowQualityTextureingMap[i]); } writer.Write(PredTex); writer.Write(NumberEffectDoodads); var positionOffsetMCSE = BaseStream.Position; writer.Write(0); writer.Write(NumberSoundEmitters); var positionOffsetMCLQ = BaseStream.Position; writer.Write(0); writer.Write(SizeLiquid); writer.WriteVector3Float(Position); var positionOffsetMCCV = BaseStream.Position; writer.Write(0); writer.Write(Unused1); writer.Write(Unused2); // Subchunks var positionMCVT = BaseStream.Position; BaseStream.Position = positionOffsetMCVT; writer.Write(positionMCVT); BaseStream.Position = positionMCVT; writer.Write(MCVT.GetChunkHeaderBytes()); writer.Write(MCVT.GetChunkBytes()); var positionMCNR = BaseStream.Position; BaseStream.Position = positionOffsetMCNR; writer.Write(positionMCNR); BaseStream.Position = positionMCNR; writer.Write(MCNR.GetChunkHeaderBytes()); writer.Write(MCNR.GetChunkBytes()); var positionMCLY = BaseStream.Position; BaseStream.Position = positionOffsetMCLY; writer.Write(positionMCLY); BaseStream.Position = positionMCLY; writer.Write(MCLY.GetChunkHeaderBytes()); writer.Write(MCLY.GetChunkBytes()); var positionMCRF = BaseStream.Position; BaseStream.Position = positionOffsetMCRF; writer.Write(positionMCRF); BaseStream.Position = positionMCRF; writer.Write(MCRF.GetChunkHeaderBytes()); writer.Write(MCRF.GetChunkBytes()); // if WDT var positionMCAL = BaseStream.Position; BaseStream.Position = positionOffsetMCAL; writer.Write(positionMCAL); BaseStream.Position = positionMCAL; writer.Write(MCAL.GetChunkHeaderBytes()); writer.Write(MCAL.GetChunkBytes()); if (SizeShadow > 8 && Flags.HasFlag(MCNKFlags.HasMCSH)) { var positionMCSH = BaseStream.Position; BaseStream.Position = positionOffsetMCSH; writer.Write(positionMCSH); BaseStream.Position = positionMCSH; writer.Write(MCSH.GetChunkHeaderBytes()); writer.Write(MCSH.GetChunkBytes()); } if (NumberSoundEmitters > 0) { var positionMCSE = BaseStream.Position; BaseStream.Position = positionOffsetMCSE; writer.Write(positionMCSE); BaseStream.Position = positionMCSE; writer.Write(MCSE.GetChunkHeaderBytes()); writer.Write(MCSE.GetChunkBytes()); } if (SizeLiquid > 0) { var positionMCLQ = BaseStream.Position; BaseStream.Position = positionOffsetMCLQ; writer.Write(positionMCLQ); BaseStream.Position = positionMCLQ; writer.Write(MCLQ.GetChunkHeaderBytes()); writer.Write(MCLQ.GetChunkBytes()); } var positionMCCV = BaseStream.Position; BaseStream.Position = positionOffsetMCCV; writer.Write(positionMCCV); BaseStream.Position = positionMCCV; writer.Write(MCCV.GetChunkHeaderBytes()); writer.Write(MCCV.GetChunkBytes()); } return(stream.ToArray()); } }