public MCSE ReadMCSESubChunk(BlizzHeader subchunk, BinaryReader subbin) { MCSE sechunk = new MCSE(); sechunk.raw = subbin.ReadBytes((int)subchunk.Size); return(sechunk); }
private MCSE ReadMCSESubChunk(uint size, BinaryReader bin) { MCSE sechunk = new MCSE() { raw = bin.ReadBytes((int)size) }; return(sechunk); }
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); }
public MCNK(byte[] chunkBytes, WDT.WDT wdt) : base(chunkBytes) { Flags = (MCNKFlags)ReadUInt32(); Index = this.ReadVector2UInt(); Layers = ReadUInt32(); NumberDoodadRefs = ReadUInt32(); OffsetMCVT = ReadUInt32(); OffsetMCNR = ReadUInt32(); OffsetMCLY = ReadUInt32(); OffsetMCRF = ReadUInt32(); OffsetMCAL = ReadUInt32(); SizeAlpha = ReadUInt32(); OffsetMCSH = ReadUInt32(); SizeShadow = ReadUInt32(); AreaId = ReadUInt32(); NumberMapObjectRefs = ReadUInt32(); Holes = ReadUInt16(); HolesPadding = ReadUInt16(); // Maybe change this to two longs like in https://bitbucket.org/mugadr_m/kotlin-wow/src/378f3fdec7fff325f52560fc2cce64c946cf57ab/editor/src/main/kotlin/ch/cromon/wow/io/files/map/wotlk/MapChunk.kt?at=master&fileviewer=file-view-default#MapChunk.kt-37 for (int i = 0; i < 16; i++) { ReallyLowQualityTextureingMap[i] = ReadByte(); } PredTex = ReadUInt32(); NumberEffectDoodads = ReadUInt32(); OffsetMCSE = ReadUInt32(); NumberSoundEmitters = ReadUInt32(); OffsetMCLQ = ReadUInt32(); SizeLiquid = ReadUInt32(); Position = this.ReadVector3Float(); OffsetMCCV = ReadUInt32(); Unused1 = ReadUInt32(); Unused2 = ReadUInt32(); if (OffsetMCVT > 0) { BaseStream.Position = OffsetMCVT; MCVT = new MCVT(ReadBytes((int)MCVT.ChunkSize)); } if (OffsetMCNR > 0) { BaseStream.Position = OffsetMCNR; MCNR = new MCNR(ReadBytes((int)MCNR.ChunkSize)); } if (OffsetMCLY > 0) { BaseStream.Position = OffsetMCLY; MCLY = new MCLY(ReadBytes((int)MCLY.ChunkSize)); } if (OffsetMCRF > 0) { BaseStream.Position = OffsetMCRF; MCRF = new MCRF(ReadBytes((int)MCRF.ChunkSize), this); } // TODO: && No WDT file? if (OffsetMCAL > 0 && wdt != null) { BaseStream.Position = OffsetMCAL; MCAL = new MCAL(ReadBytes((int)MCAL.ChunkSize), this, wdt); } if (OffsetMCSH > 0 && SizeShadow > 8 && Flags.HasFlag(MCNKFlags.HasMCSH)) { BaseStream.Position = OffsetMCSH; MCSH = new MCSH(ReadBytes((int)MCSH.ChunkSize)); } if (OffsetMCSE > 0 && NumberSoundEmitters > 0) { BaseStream.Position = OffsetMCSE; MCSE = new MCSE(ReadBytes((int)MCSE.ChunkSize), this); } if (OffsetMCLQ > 0 && SizeLiquid > 0) { BaseStream.Position = OffsetMCLQ; MCLQ = new MCLQ(ReadBytes((int)MCLQ.ChunkSize), this); } if (OffsetMCCV > 0) { BaseStream.Position = OffsetMCCV; MCCV = new MCCV(ReadBytes((int)MCCV.ChunkSize)); } Close(); }