Ejemplo n.º 1
0
        public TileMatrix(InstallLocation install, int fileIndex, int mapID, int width, int height)
        {
            _width       = width;
            _height      = height;
            _blockWidth  = width >> 3;
            _blockHeight = height >> 3;

            if (fileIndex != 0x7F)
            {
                var mapPath = install.GetPath("map{0}.mul", fileIndex);

                if (File.Exists(mapPath))
                {
                    _map = new FileStream(mapPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                }
                else
                {
                    mapPath = install.GetPath("map{0}LegacyMUL.uop", fileIndex);

                    if (File.Exists(mapPath))
                    {
                        _map      = new FileStream(mapPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                        _mapIndex = new UOPIndex(_map);
                    }
                }

                var indexPath = install.GetPath("staidx{0}.mul", fileIndex);

                if (File.Exists(indexPath))
                {
                    _fileIndex = new FileStream(indexPath, FileMode.Open, FileAccess.Read, FileShare.Read);
                    _reader    = new BinaryReader(_fileIndex);
                }

                var staticsPath = install.GetPath("statics{0}.mul", fileIndex);

                if (File.Exists(staticsPath))
                {
                    _staticsStream = new FileStream(staticsPath, FileMode.Open, FileAccess.Read, FileShare.Read);
                }
            }

            _emptyStaticBlock = new HuedTile[8][][];

            for (var i = 0; i < 8; ++i)
            {
                _emptyStaticBlock[i] = new HuedTile[8][];

                for (var j = 0; j < 8; ++j)
                {
                    _emptyStaticBlock[i][j] = new HuedTile[0];
                }
            }

            _invalidLandBlock = new Tile[196];
        }
Ejemplo n.º 2
0
        public TileMatrix(InstallLocation install, int fileIndex, int mapID, int width, int height)
        {
            _install     = install;
            _width       = width;
            _height      = height;
            _blockWidth  = width >> 3;
            _blockHeight = height >> 3;

            if (fileIndex != 0x7F)
            {
                string mapPath     = install.GetPath("map{0}.mul", fileIndex);
                string indexPath   = install.GetPath("staidx{0}.mul", fileIndex);
                string staticsPath = install.GetPath("statics{0}.mul", fileIndex);

                if (!File.Exists(mapPath))
                {
                    mapPath = install.GetPath("map{0}LegacyMUL.uop", fileIndex);
                }

                _map           = new FileStream(mapPath, FileMode.Open, FileAccess.Read, FileShare.Read);
                _fileIndex     = new FileStream(indexPath, FileMode.Open, FileAccess.Read, FileShare.Read);
                _staticsStream = new FileStream(staticsPath, FileMode.Open, FileAccess.Read, FileShare.Read);

                _reader = new BinaryReader(_fileIndex);
            }

            _emptyStaticBlock = new HuedTile[8][][];

            for (int i = 0; i < 8; ++i)
            {
                _emptyStaticBlock[i] = new HuedTile[8][];

                for (int j = 0; j < 8; ++j)
                {
                    _emptyStaticBlock[i][j] = new HuedTile[0];
                }
            }

            _invalidLandBlock = new Tile[196];

            _landTiles   = new Tile[_blockWidth][][];
            _staticTiles = new HuedTile[_blockWidth][][][][];

            _patch = new TileMatrixPatch(this, install, mapID);

            /*for ( int i = 0; i < m_BlockWidth; ++i )
             * {
             *  m_LandTiles[i] = new Tile[m_BlockHeight][];
             *  m_StaticTiles[i] = new Tile[m_BlockHeight][][][];
             * }*/
        }
Ejemplo n.º 3
0
        public TileMatrix(InstallLocation install, int fileIndex, int mapID, int width, int height)
        {
            _install = install;
            _width = width;
            _height = height;
            _blockWidth = width >> 3;
            _blockHeight = height >> 3;

            if (fileIndex != 0x7F)
            {
                string mapPath = install.GetPath("map{0}.mul", fileIndex);
                string indexPath = install.GetPath("staidx{0}.mul", fileIndex);
                string staticsPath = install.GetPath("statics{0}.mul", fileIndex);   

                if (!File.Exists(mapPath))
                    mapPath = install.GetPath("map{0}LegacyMUL.uop", fileIndex);
                    
                _map = new FileStream(mapPath, FileMode.Open, FileAccess.Read, FileShare.Read);
                _fileIndex = new FileStream(indexPath, FileMode.Open, FileAccess.Read, FileShare.Read);
                _staticsStream = new FileStream(staticsPath, FileMode.Open, FileAccess.Read, FileShare.Read); 

                _reader = new BinaryReader(_fileIndex);   
            }

            _emptyStaticBlock = new HuedTile[8][][];

            for (int i = 0; i < 8; ++i)
            {
                _emptyStaticBlock[i] = new HuedTile[8][];

                for (int j = 0; j < 8; ++j)
                {
                    _emptyStaticBlock[i][j] = new HuedTile[0];
                }
            }

            _invalidLandBlock = new Tile[196];

            _landTiles = new Tile[_blockWidth][][];
            _staticTiles = new HuedTile[_blockWidth][][][][];

            _patch = new TileMatrixPatch(this, install, mapID);

            /*for ( int i = 0; i < m_BlockWidth; ++i )
            {
                m_LandTiles[i] = new Tile[m_BlockHeight][];
                m_StaticTiles[i] = new Tile[m_BlockHeight][][][];
            }*/
        }
Ejemplo n.º 4
0
        public TileMatrixPatch(TileMatrix matrix, InstallLocation install, int index)
        {
            string mapDataPath = install.GetPath("mapdif{0}.mul", index);
            string mapIndexPath = install.GetPath("mapdifl{0}.mul", index);

            if (File.Exists(mapDataPath) && File.Exists(mapIndexPath))
                _landBlocks = PatchLand(matrix, mapDataPath, mapIndexPath);

            string staDataPath = install.GetPath("stadif{0}.mul", index);
            string staIndexPath = install.GetPath("stadifl{0}.mul", index);
            string staLookupPath = install.GetPath("stadifi{0}.mul", index);

            if (File.Exists(staDataPath) && File.Exists(staIndexPath) && File.Exists(staLookupPath))
                _staticBlocks = PatchStatics(matrix, staDataPath, staIndexPath, staLookupPath);
        }
Ejemplo n.º 5
0
        public Hues(InstallLocation install)
        {
            string path = install.GetPath("hues.mul");
            int index = 0;

            _hues = new Hue[3000];

            if (path != null)
            {
                using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    BinaryReader bin = new BinaryReader(fs);

                    int blockCount = (int)fs.Length / 708;

                    if (blockCount > 375)
                        blockCount = 375;

                    for (int i = 0; i < blockCount; ++i)
                    {
                        bin.ReadInt32();

                        for (int j = 0; j < 8; ++j, ++index)
                            _hues[index] = new Hue(index, bin);
                    }
                }
            }

            for (; index < 3000; ++index)
                _hues[index] = new Hue(index);
        }
Ejemplo n.º 6
0
        public TileData(InstallLocation install)
        {
            var filePath = install.GetPath("tiledata.mul");

            if (!string.IsNullOrEmpty(filePath))
            {
                using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    var x64 = fs.Length >= 3188736;
                    var bin = new BinaryReader(fs);

                    m_LandData = new LandData[0x4000];

                    for (var i = 0; i < 0x4000; ++i)
                    {
                        if ((i & 0x1F) == 0)
                        {
                            bin.ReadInt32(); // header
                        }

                        var flags = x64 ? (TileFlag)bin.ReadInt64() : (TileFlag)bin.ReadInt32();
                        bin.ReadInt16(); // skip 2 bytes -- textureID

                        m_LandData[i] = new LandData(ReadNameString(bin), flags);
                    }

                    m_ItemData    = new ItemData[0x4000];
                    m_HeightTable = new int[0x4000];

                    for (var i = 0; i < 0x4000; ++i)
                    {
                        if ((i & 0x1F) == 0)
                        {
                            bin.ReadInt32(); // header
                        }

                        var flags   = x64 ? (TileFlag)bin.ReadInt64() : (TileFlag)bin.ReadInt32();
                        int weight  = bin.ReadByte();
                        int quality = bin.ReadByte();
                        bin.ReadInt16();
                        bin.ReadByte();
                        int quantity = bin.ReadByte();
                        int anim     = bin.ReadInt16();
                        bin.ReadInt16();
                        bin.ReadByte();
                        int value  = bin.ReadByte();
                        int height = bin.ReadByte();

                        m_ItemData[i]    = new ItemData(ReadNameString(bin), flags, weight, quality, quantity, value, height, anim);
                        m_HeightTable[i] = height;
                    }
                }
            }
            else
            {
                throw new FileNotFoundException();
            }
        }
Ejemplo n.º 7
0
        public TileData(InstallLocation install)
        {
            string filePath = install.GetPath("tiledata.mul");

            if (!string.IsNullOrEmpty(filePath))
            {
                using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    BinaryReader bin = new BinaryReader(fs);

                    m_LandData = new LandData[0x4000];

                    for (int i = 0; i < 0x4000; ++i)
                    {
                        if ((i & 0x1F) == 0)
                        {
                            bin.ReadInt32(); // header
                        }

                        TileFlag flags = (TileFlag)bin.ReadInt32();
                        bin.ReadInt16(); // skip 2 bytes -- textureID

                        m_LandData[i] = new LandData(ReadNameString(bin), flags);
                    }

                    m_ItemData = new ItemData[0x4000];
                    m_HeightTable = new int[0x4000];

                    for (int i = 0; i < 0x4000; ++i)
                    {
                        if ((i & 0x1F) == 0)
                        {
                            bin.ReadInt32(); // header
                        }

                        TileFlag flags = (TileFlag)bin.ReadInt32();
                        int weight = bin.ReadByte();
                        int quality = bin.ReadByte();
                        bin.ReadInt16();
                        bin.ReadByte();
                        int quantity = bin.ReadByte();
                        int anim = bin.ReadInt16();
                        bin.ReadInt16();
                        bin.ReadByte();
                        int value = bin.ReadByte();
                        int height = bin.ReadByte();

                        m_ItemData[i] = new ItemData(ReadNameString(bin), flags, weight, quality, quantity, value, height, anim);
                        m_HeightTable[i] = height;
                    }
                }
            }
            else
            {
                throw new FileNotFoundException();
            }
        }
Ejemplo n.º 8
0
        private void Load()
        {
            string path = _install.GetPath("radarcol.mul");

            if (!File.Exists(path))
            {
                return;
            }

            FileInfo file = new FileInfo(path);

            _colors = new short[file.Length / 2];

            fixed(short *ptr = _colors)
            {
                using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
                    NativeMethods._lread(fs.SafeFileHandle, ptr, 0x10000);
            }
        }
Ejemplo n.º 9
0
        public TileMatrixPatch(TileMatrix matrix, InstallLocation install, int index)
        {
            string mapDataPath  = install.GetPath("mapdif{0}.mul", index);
            string mapIndexPath = install.GetPath("mapdifl{0}.mul", index);

            if (File.Exists(mapDataPath) && File.Exists(mapIndexPath))
            {
                _landBlocks = PatchLand(matrix, mapDataPath, mapIndexPath);
            }

            string staDataPath   = install.GetPath("stadif{0}.mul", index);
            string staIndexPath  = install.GetPath("stadifl{0}.mul", index);
            string staLookupPath = install.GetPath("stadifi{0}.mul", index);

            if (File.Exists(staDataPath) && File.Exists(staIndexPath) && File.Exists(staLookupPath))
            {
                _staticBlocks = PatchStatics(matrix, staDataPath, staIndexPath, staLookupPath);
            }
        }
Ejemplo n.º 10
0
        public Hues(InstallLocation install)
        {
            string path  = install.GetPath("hues.mul");
            int    index = 0;

            _hues = new Hue[3000];

            if (path != null)
            {
                using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    BinaryReader bin = new BinaryReader(fs);

                    int blockCount = (int)fs.Length / 708;

                    if (blockCount > 375)
                    {
                        blockCount = 375;
                    }

                    for (int i = 0; i < blockCount; ++i)
                    {
                        bin.ReadInt32();

                        for (int j = 0; j < 8; ++j, ++index)
                        {
                            _hues[index] = new Hue(index, bin);
                        }
                    }
                }
            }

            for (; index < 3000; ++index)
            {
                _hues[index] = new Hue(index);
            }
        }