Beispiel #1
0
        public MCSE ReadMCSESubChunk(BlizzHeader subchunk, BinaryReader subbin)
        {
            MCSE sechunk = new MCSE();

            sechunk.raw = subbin.ReadBytes((int)subchunk.Size);
            return(sechunk);
        }
Beispiel #2
0
        private MCSE ReadMCSESubChunk(uint size, BinaryReader bin)
        {
            MCSE sechunk = new MCSE()
            {
                raw = bin.ReadBytes((int)size)
            };

            return(sechunk);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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();
        }