예제 #1
0
        public Task DumpDiscardPsAsync(IProgress <int> progress)
        {
            return(Task.Run(() =>
            {
                if (!Directory.Exists("shaderDump"))
                {
                    Directory.CreateDirectory("shaderDump");
                }

                for (var i = 0; i < _candidateIds.Count; i++)
                {
                    var id = _candidateIds[i];

                    var filename = _archive.VfsFilename(id);
                    var outputPath = "shaderDump/" + filename;

                    var binary = _archive.Get(id);
                    var disassembly = D3DCompiler.Disassemble(binary);

                    if (disassembly.Contains("discard_z"))
                    {
                        File.WriteAllBytes(outputPath, binary);
                        File.WriteAllText(outputPath + ".lst", disassembly);
                    }
                    progress.Report(i + 1);
                }
            }));
        }
예제 #2
0
        static void Extract(string archivePath, string destinationFolder)
        {
            CrafArchive archive = null;

            try
            {
                archive = CrafArchive.Open(archivePath);
                var task = archive.LoadAsync(new Progress <int>());
                task.Wait();
                archive.CloseReader();
            }
            catch (IOException)
            {
                Console.WriteLine("Could not open archive");
                Environment.Exit(-1);
            }

            var ct = archive.Count();

            try
            {
                Directory.CreateDirectory(destinationFolder);
                for (var i = 0; i < ct; i++)
                {
                    var outputPath = Path.Combine(destinationFolder, archive.DiskPath(i));
                    Console.WriteLine(string.Format("{0} ({1}/{2})", outputPath, i + 1, ct));
                    Directory.CreateDirectory(Path.GetDirectoryName(outputPath));
                    File.WriteAllBytes(outputPath, archive.Get(i));
                }
            }
            catch (IOException ex)
            {
                Console.WriteLine("Error while extracting archive");
                Console.WriteLine("Details: " + ex.Message);
                Environment.Exit(-1);
            }
        }