Exemple #1
0
    static public DC6 Load(string filename, bool mpq = true, int textureSize = -1, bool loadAllDirections = false)
    {
        UnityEngine.Profiling.Profiler.BeginSample("DC6.DecodeDirection");
        try
        {
            Palette.LoadPalette(0);
            var bytes = mpq ? Mpq.ReadAllBytes(filename) : File.ReadAllBytes(filename);

            using (var stream = new MemoryStream(bytes))
                using (var reader = new BinaryReader(stream))
                {
                    int version1 = reader.ReadInt32();
                    var version2 = reader.ReadInt32();
                    var version3 = reader.ReadInt32();
                    if (version1 != 6 || version2 != 1 || version3 != 0)
                    {
                        Debug.LogWarning("Unknown dc6 version " + version1 + " " + version2 + " " + version3);
                        return(null);
                    }

                    DC6 dc6 = Load(stream, reader, bytes, textureSize, loadAllDirections);
                    return(dc6);
                }
        }
        finally
        {
            UnityEngine.Profiling.Profiler.EndSample();
        }
    }
Exemple #2
0
    static public DS1 Load(string filename, bool mpq = true)
    {
        string lowerFilename = filename.ToLower();

        if (cache.ContainsKey(lowerFilename))
        {
            return(cache[lowerFilename]);
        }

        UnityEngine.Profiling.Profiler.BeginSample("DS1.Load");
        try
        {
            var    sw    = System.Diagnostics.Stopwatch.StartNew();
            byte[] bytes = mpq ? Mpq.ReadAllBytes(filename) : File.ReadAllBytes(filename);
            var    ds1   = Load(bytes);
            ds1.filename = filename;
            Debug.Log(Path.GetFileName(filename) + " loaded in " + sw.ElapsedMilliseconds + " ms");
            cache[lowerFilename] = ds1;
            return(ds1);
        }
        finally
        {
            UnityEngine.Profiling.Profiler.EndSample();
        }
    }
Exemple #3
0
    static public DCC Load(string filename, bool loadAllDirections = false, bool mpq = true)
    {
        UnityEngine.Profiling.Profiler.BeginSample("DCC.Load");
        var bytes = mpq ? Mpq.ReadAllBytes(filename) : File.ReadAllBytes(filename);
        DCC dcc   = Load(filename, bytes, loadAllDirections);

        UnityEngine.Profiling.Profiler.EndSample();
        return(dcc);
    }
Exemple #4
0
    static public DT1 Load(string filename, bool mpq = true)
    {
        string lowerFilename = filename.ToLower();

        if (cache.ContainsKey(lowerFilename))
        {
            return(cache[lowerFilename]);
        }

        UnityEngine.Profiling.Profiler.BeginSample("DT1.Load");
        try
        {
            var sw    = System.Diagnostics.Stopwatch.StartNew();
            var bytes = mpq ? Mpq.ReadAllBytes(filename) : File.ReadAllBytes(filename);
            var dt1   = new DT1();
            dt1.filename = filename;

            using (var stream = new MemoryStream(bytes))
                using (var reader = new BinaryReader(stream))
                {
                    int version1 = reader.ReadInt32();
                    int version2 = reader.ReadInt32();
                    if (version1 != 7 || version2 != 6)
                    {
                        Debug.Log(string.Format("Can't read dt1 file, bad version ({0}.{1})", version1, version2));
                        return(dt1);
                    }

                    stream.Seek(260, SeekOrigin.Current);
                    ReadTiles(dt1, stream, reader, bytes);
                }

            cache[lowerFilename] = dt1;
            Debug.Log(dt1.filename + ", tiles " + dt1.tiles.Length + ", " + dt1.textures.Count + " textures, " +
                      sw.ElapsedMilliseconds + " ms");
            return(dt1);
        }
        finally
        {
            UnityEngine.Profiling.Profiler.EndSample();
        }
    }
Exemple #5
0
    static public DC6 Load(string filename, bool mpq = true, int textureSize = -1, bool loadAllDirections = false)
    {
        Palette.LoadPalette(0);
        var bytes = mpq ? Mpq.ReadAllBytes(filename) : File.ReadAllBytes(filename);

        using (var stream = new MemoryStream(bytes))
            using (var reader = new BinaryReader(stream))
            {
                int dc6_ver1 = reader.ReadInt32();
                var dc6_ver2 = reader.ReadInt32();
                var dc6_ver3 = reader.ReadInt32();
                if ((dc6_ver1 != 6) || (dc6_ver2 != 1) || (dc6_ver3 != 0))
                {
                    Debug.LogWarning("Unknown dc6 version " + dc6_ver1 + " " + dc6_ver2 + " " + dc6_ver3);
                    return(null);
                }

                return(Load(stream, reader, bytes, textureSize, loadAllDirections));
            }
    }
Exemple #6
0
    static public Color32[] LoadPalette(int act)
    {
        if (palettes.ContainsKey(act))
        {
            palette = palettes[act];
            return(palette);
        }

        palette = new Color32[256];
        var bytes = Mpq.ReadAllBytes(@"data\global\palette\ACT" + (act + 1) + @"\Pal.PL2");

        for (int i = 0; i < 256; ++i)
        {
            int  offset = i * 4;
            byte r      = bytes[offset];
            byte g      = bytes[offset + 1];
            byte b      = bytes[offset + 2];
            palette[i] = new Color32(r, g, b, 255);
        }
        palette[0]    = new Color(0, 0, 0, 0);
        palettes[act] = palette;
        return(palette);
    }
Exemple #7
0
    static public COF Load(string basePath, string token, string weaponClass, string mode)
    {
        var filename = basePath + @"\" + token + @"\cof\" + token + mode + weaponClass + ".cof";

        if (cache.ContainsKey(filename))
        {
            return(cache[filename]);
        }

        UnityEngine.Profiling.Profiler.BeginSample("COF.Load");

        COF cof = new COF();

        cof.basePath = basePath;
        cof.token    = token;
        cof.mode     = mode;

        byte[] bytes = Mpq.ReadAllBytes(filename);
        using (var stream = new MemoryStream(bytes))
            using (var reader = new BinaryReader(stream))
            {
                cof.layerCount         = reader.ReadByte();
                cof.framesPerDirection = reader.ReadByte();
                cof.directionCount     = reader.ReadByte();
                stream.Seek(25, SeekOrigin.Current);

                cof.compositLayers = new Layer[16];
                cof.layers         = new Layer[cof.layerCount];

                for (int i = 0; i < cof.layerCount; ++i)
                {
                    Layer layer = new Layer();
                    layer.index         = i;
                    layer.compositIndex = reader.ReadByte();
                    layer.name          = layerNames[layer.compositIndex];

                    layer.shadow = reader.ReadByte() != 0;
                    reader.ReadByte();

                    bool transparent = reader.ReadByte() != 0;
                    int  blendMode   = reader.ReadByte();
                    if (transparent)
                    {
                        layer.material = Materials.softAdditive;
                    }
                    else
                    {
                        layer.material = Materials.normal;
                    }

                    layer.weaponClass = System.Text.Encoding.Default.GetString(reader.ReadBytes(4), 0, 3);

                    cof.layers[i] = layer;
                    cof.compositLayers[layer.compositIndex] = layer;
                }

                stream.Seek(cof.framesPerDirection, SeekOrigin.Current);
                cof.priority = reader.ReadBytes(cof.directionCount * cof.framesPerDirection * cof.layerCount);
            }

        AnimData animData = new AnimData();

        if (AnimData.Find(token + mode + weaponClass, ref animData))
        {
            cof.frameDuration = animData.frameDuration;
            float refFrameCount = referenceFrameCount.GetValueOrDefault(token + mode, animData.framesPerDir);
            cof.frameDuration *= animData.framesPerDir / refFrameCount;
        }
        else
        {
            Debug.LogWarning("animdata not found " + (token + mode + weaponClass));
        }

        cache.Add(filename, cof);

        UnityEngine.Profiling.Profiler.EndSample();
        return(cof);
    }
Exemple #8
0
    static public DCC Load(string filename, bool loadAllDirections = false, bool mpq = true)
    {
        var bytes = mpq ? Mpq.ReadAllBytes(filename) : File.ReadAllBytes(filename);

        return(Load(filename, bytes, loadAllDirections));
    }