public MCNK(char[] magic, byte[] size, byte[] content) : base(magic, size) { using (BinaryReader reader = new BinaryReader(new MemoryStream(content))) { #region read MCNKhead mcHeader.Flags = reader.ReadUInt32(); mcHeader.IndexX = reader.ReadUInt32(); mcHeader.IndexY = reader.ReadUInt32(); mcHeader.NLayers = reader.ReadUInt32(); mcHeader.NDoodadRefs = reader.ReadUInt32(); offset offset = new offset(); offset.address = reader.ReadUInt32(); mcHeader.OfsMCVT = offset; offset = new offset(); offset.address = reader.ReadUInt32(); mcHeader.OfsMCNR = offset; offset = new offset(); offset.address = reader.ReadUInt32(); mcHeader.OfsMCLY = offset; offset = new offset(); offset.address = reader.ReadUInt32(); mcHeader.OfsMCRF = offset; offset = new offset(); offset.address = reader.ReadUInt32(); mcHeader.OfsMCAL = offset; mcHeader.SizeAlpha = reader.ReadUInt32(); offset = new offset(); offset.address = reader.ReadUInt32(); mcHeader.OfsMCSH = offset; mcHeader.SizeShadow = reader.ReadUInt32(); mcHeader.Areaid = reader.ReadUInt32(); mcHeader.NMapObjRefs = reader.ReadUInt32(); mcHeader.Holes = reader.ReadUInt32(); mcHeader.GroundEffectsMap = new byte[16]; for (int x = 0; x < 16; x++) { mcHeader.GroundEffectsMap[x] = reader.ReadByte(); } mcHeader.PredTex = reader.ReadUInt32(); mcHeader.NoEffectDoodad = reader.ReadUInt32(); offset = new offset(); offset.address = reader.ReadUInt32(); mcHeader.OfsMCSE = offset; mcHeader.NSndEmitters = reader.ReadUInt32(); offset = new offset(); offset.address = reader.ReadUInt32(); mcHeader.OfsMCLQ = offset; mcHeader.SizeLiquid = reader.ReadUInt32(); mcHeader.Pos = new float[3]; mcHeader.Pos[0] = reader.ReadSingle(); mcHeader.Pos[1] = reader.ReadSingle(); mcHeader.Pos[2] = reader.ReadSingle(); offset = new offset(); offset.address = reader.ReadUInt32(); mcHeader.OfsMCCV = offset; mcHeader.Props = reader.ReadUInt32(); mcHeader.EffectId = reader.ReadUInt32(); #endregion while (reader.BaseStream.Position < reader.BaseStream.Length) { byte[] ChunkMagic = reader.ReadBytes(4); byte[] ChunkSize = reader.ReadBytes(4); byte[] ChunkContent = reader.ReadBytes(BitConverter.ToInt32(ChunkSize, 0)); string ChunkMagicString = ADT.MagicBytesToString(ChunkMagic); switch (ChunkMagicString) { case "MCVT": mcvt = new MCVT(ADT.MagicBytesToChars(ChunkMagic), ChunkSize, ChunkContent); break; case "MCCV": mccv = new MCCV(ADT.MagicBytesToChars(ChunkMagic), ChunkSize, ChunkContent); break; case "MCNR": mcnr = new MCNR(ADT.MagicBytesToChars(ChunkMagic), ChunkSize, ChunkContent, reader.ReadBytes(13)); break; case "MCLY": mcly = new MCLY(ADT.MagicBytesToChars(ChunkMagic), ChunkSize, ChunkContent); break; case "MCRF": mcrf = new MCRF(ADT.MagicBytesToChars(ChunkMagic), ChunkSize, ChunkContent); break; case "MCAL": mcal = new MCAL(ADT.MagicBytesToChars(ChunkMagic), ChunkSize, ChunkContent); break; case "MCSE": mcse = new MCSE(ADT.MagicBytesToChars(ChunkMagic), ChunkSize, ChunkContent); break; case "MCSH": mcsh = new MCSH(ADT.MagicBytesToChars(ChunkMagic), ChunkSize, ChunkContent); break; case "MCLQ": mclq = new MCLQ(ADT.MagicBytesToChars(ChunkMagic), ChunkSize, ChunkContent); break; } //Logger.log(ChunkMagicString, Logger.Direction.LEVEL2, ChunkContent.Length.ToString() + " byte"); } } //Logger.log("---", Logger.Direction.LEVEL2); }