private static unsafe int PatchLand(TileMatrix matrix, string dataPath, string indexPath)
        {
            using (FileStream fsData = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.Read))
                using (FileStream fsIndex = new FileStream(indexPath, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    BinaryReader indexReader = new BinaryReader(fsIndex);

                    int count = (int)(indexReader.BaseStream.Length / 4);

                    for (int i = 0; i < count; ++i)
                    {
                        int blockID = indexReader.ReadInt32();
                        int x       = blockID / matrix.BlockHeight;
                        int y       = blockID % matrix.BlockHeight;

                        fsData.Seek(4, SeekOrigin.Current);

                        Tile[] tiles = new Tile[64];

                        fixed(Tile *pTiles = tiles)
                        NativeMethods._lread(fsData.SafeFileHandle, pTiles, 192);

                        matrix.SetLandBlock(x, y, tiles);
                    }

                    return(count);
                }
        }
        private static unsafe int PatchLand(TileMatrix matrix, string dataPath, string indexPath)
        {
            using (FileStream fsData = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.Read))
            using (FileStream fsIndex = new FileStream(indexPath, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                BinaryReader indexReader = new BinaryReader(fsIndex);

                int count = (int)(indexReader.BaseStream.Length / 4);

                for (int i = 0; i < count; ++i)
                {
                    int blockID = indexReader.ReadInt32();
                    int x = blockID / matrix.BlockHeight;
                    int y = blockID % matrix.BlockHeight;

                    fsData.Seek(4, SeekOrigin.Current);

                    Tile[] tiles = new Tile[64];

                    fixed (Tile* pTiles = tiles)
                        NativeMethods._lread(fsData.SafeFileHandle, pTiles, 192);

                    matrix.SetLandBlock(x, y, tiles);
                }

                return count;
            }
        }