Example #1
0
        private void DoBuild(object o)
        {
            DisableButton();
            BuildOptions options = (BuildOptions)o;

            SetProgressBarSettings(0, 100, 1, ProgressBarStyle.Marquee);
            IPackfile packfile = null;

            switch (options.Game)
            {
            case GameSteamID.SaintsRow2:
            {
                packfile = new Packfiles.Version04.Packfile();
                break;
            }

            case GameSteamID.SaintsRowIV:
            case GameSteamID.SaintsRowGatOutOfHell:
            {
                packfile = new Packfiles.Version0A.Packfile(Path.GetExtension(options.Destination) == ".str2_pc");
                break;
            }

            default:
            {
                throw new NotImplementedException();
            }
            }

            IAssetAssemblerFile asm = null;

            AssetAssembler.IContainer thisContainer = null;

            SetText("Setting up...");

            if (Path.GetExtension(options.Destination) == ".str2_pc")
            {
                packfile.IsCondensed  = true;
                packfile.IsCompressed = true;

                if (options.Asm != null)
                {
                    using (Stream asmStream = File.OpenRead(options.Asm))
                    {
                        asm = AssetAssemblerFile.FromStream(asmStream);
                    }
                }
            }
            else
            {
                string filename = Path.GetFileName(options.Destination);
                if (OriginalPackfileInfo.OptionsList.ContainsKey(options.Game) && OriginalPackfileInfo.OptionsList[options.Game].ContainsKey(filename))
                {
                    var vppOptions = OriginalPackfileInfo.OptionsList[options.Game][filename];

                    packfile.IsCondensed  = vppOptions.Condense;
                    packfile.IsCompressed = vppOptions.Compress;
                }
            }

            if (asm != null)
            {
                string containerName = Path.GetFileNameWithoutExtension(options.Destination);

                foreach (var container in asm.Containers)
                {
                    string tempContainerName = Path.GetFileNameWithoutExtension(container.Name);
                    if (tempContainerName == containerName)
                    {
                        thisContainer = container;
                        break;
                    }
                }

                if (thisContainer == null)
                {
                    SetText("Couldn't find a container called {0} in the selected asm_pc file!", containerName);
                    SetProgressBarSettings(0, 100, 0, ProgressBarStyle.Continuous);
                    EnableButton();
                    return;
                }

                SetProgressBarSettings(0, thisContainer.PrimitiveCount, 0, ProgressBarStyle.Continuous);
                SetText("Adding files...");

                foreach (IPrimitive primitive in thisContainer.Primitives)
                {
                    string primitiveFile = Path.Combine(options.Source, primitive.Name);
                    if (!File.Exists(primitiveFile))
                    {
                        SetText("Couldn't find a container called {0} in the selected asm_pc file!", containerName);
                        SetProgressBarSettings(0, 100, 0, ProgressBarStyle.Continuous);
                        EnableButton();
                        return;
                    }

                    string filename = Path.GetFileName(primitiveFile);

                    Stream stream = File.OpenRead(primitiveFile);
                    packfile.AddFile(stream, filename);

                    string extension    = Path.GetExtension(primitiveFile);
                    string gpuExtension = "";
                    switch (extension)
                    {
                    default:
                    {
                        if (extension.StartsWith(".c"))
                        {
                            gpuExtension = ".g" + extension.Remove(0, 2);
                        }
                        break;
                    }
                    }


                    string gpuFile = Path.ChangeExtension(primitiveFile, gpuExtension);
                    if (File.Exists(gpuFile))
                    {
                        string gpuFilename = Path.GetFileName(gpuFile);
                        Stream gpuStream   = File.OpenRead(gpuFile);
                        packfile.AddFile(gpuStream, gpuFilename);
                    }

                    Step();
                }
            }
            else
            {
                string[] files = Directory.GetFiles(options.Source);

                SetProgressBarSettings(0, files.Length, 0, ProgressBarStyle.Continuous);
                SetText("Adding files...");

                foreach (string file in files)
                {
                    string filename = Path.GetFileName(file);

                    Stream stream = File.OpenRead(file);
                    packfile.AddFile(stream, filename);
                }
            }

            SetProgressBarSettings(0, 100, 0, ProgressBarStyle.Marquee);

            SetText("Writing output file: {0}", options.Destination);
            using (Stream output = File.Open(options.Destination, FileMode.Create, FileAccess.ReadWrite, FileShare.None))
            {
                packfile.Save(output);
            }

            if (asm != null)
            {
                SetText("Updating asm_pc file: {0}", options.Asm);
                packfile.Update(thisContainer);

                using (Stream asmStream = File.Create(options.Asm))
                {
                    asm.Save(asmStream);
                }
                Console.WriteLine("done.");
            }

            SetProgressBarSettings(0, 1, 1, ProgressBarStyle.Continuous);
            Step();
            SetText("Finished!");
            EnableButton();
        }
        static void Main(string[] args)
        {
            Options options = null;

            try
            {
                options = CommandLine.Parse <Options>();
            }
            catch (CommandLineException exception)
            {
                Console.WriteLine(exception.ArgumentHelp.Message);
                Console.WriteLine();
                Console.WriteLine(exception.ArgumentHelp.GetHelpText(Console.BufferWidth));

#if DEBUG
                Console.ReadLine();
#endif
                return;
            }

            IPackfile   packfile = null;
            Stream2File asm      = null;

            Console.WriteLine("Building {0} using data from {1}.", options.Output, options.Source);
            IGameInstance instance = GameInstance.GetFromString(options.Game);
            switch (instance.Game)
            {
            case GameSteamID.SaintsRow2:
                packfile = new Packfiles.Version04.Packfile();
                break;

            case GameSteamID.SaintsRowTheThird:
                throw new NotImplementedException();
                break;

            case GameSteamID.SaintsRowIV:
            case GameSteamID.SaintsRowGatOutOfHell:
                packfile = new Packfiles.Version0A.Packfile(Path.GetExtension(options.Output) == ".str2_pc");
                if (Path.GetExtension(options.Output) == ".str2_pc")
                {
                    packfile.IsCondensed  = true;
                    packfile.IsCompressed = true;
                    if (options.AsmFile != null)
                    {
                        Console.WriteLine("Will update asm_pc file {0} with data for new package.", options.AsmFile);
                        using (Stream asmStream = File.OpenRead(options.AsmFile))
                        {
                            asm = new Stream2File(asmStream);
                        }
                    }
                }
                break;

            default:
                throw new NotImplementedException();
            }

            if (options.Condensed.ToLowerInvariant() == "true")
            {
                packfile.IsCondensed = true;
            }
            else if (options.Condensed.ToLowerInvariant() == "false")
            {
                packfile.IsCondensed = false;
            }

            if (options.Compressed.ToLowerInvariant() == "true")
            {
                packfile.IsCompressed = true;
            }
            else if (options.Compressed.ToLowerInvariant() == "false")
            {
                packfile.IsCompressed = false;
            }

            Container thisContainer = null;

            if (asm != null)
            {
                string containerName = Path.GetFileNameWithoutExtension(options.Output);

                foreach (var container in asm.Containers)
                {
                    string tempContainerName = Path.GetFileNameWithoutExtension(container.Name);
                    if (tempContainerName == containerName)
                    {
                        thisContainer = container;
                        break;
                    }
                }

                if (thisContainer == null)
                {
                    throw new Exception(String.Format("Unable to find container {0} in asm_pc file {1}.", containerName, options.AsmFile));
                }

                foreach (Primitive primitive in thisContainer.Primitives)
                {
                    string primitiveFile = Path.Combine(options.Source, primitive.Name);
                    if (!File.Exists(primitiveFile))
                    {
                        Console.WriteLine("Unable to find primitive {0} for container {1}", containerName, primitive.Name);
                        continue;
                    }

                    string filename = Path.GetFileName(primitiveFile);

                    Console.Write("Adding {0}... ", filename);
                    Stream stream = File.OpenRead(primitiveFile);
                    packfile.AddFile(stream, filename);
                    Console.WriteLine("done.");

                    string extension    = Path.GetExtension(primitiveFile);
                    string gpuExtension = "";
                    switch (extension)
                    {
                    default:
                    {
                        if (extension.StartsWith(".c"))
                        {
                            gpuExtension = ".g" + extension.Remove(0, 2);
                        }
                        break;
                    }
                    }


                    string gpuFile = Path.ChangeExtension(primitiveFile, gpuExtension);
                    if (File.Exists(gpuFile))
                    {
                        string gpuFilename = Path.GetFileName(gpuFile);
                        Console.Write("Adding {0}... ", gpuFilename);
                        Stream gpuStream = File.OpenRead(gpuFile);
                        packfile.AddFile(gpuStream, gpuFilename);
                        Console.WriteLine("done.");
                    }
                }
            }
            else
            {
                string[] files = Directory.GetFiles(options.Source);
                foreach (string file in files)
                {
                    string filename = Path.GetFileName(file);

                    Console.Write("Adding {0}... ", filename);
                    Stream stream = File.OpenRead(file);
                    packfile.AddFile(stream, filename);
                    Console.WriteLine("done.");
                }
            }

            using (Stream output = File.Open(options.Output, FileMode.Create, FileAccess.ReadWrite, FileShare.None))
            {
                Console.Write("Writing packfile to {0}... ", options.Output);
                packfile.Save(output);
                Console.WriteLine("done.");
            }

            if (asm != null)
            {
                Console.Write("Updating asm_pc file {0}... ", options.AsmFile);
                packfile.Update(thisContainer);

                using (Stream asmStream = File.Create(options.AsmFile))
                {
                    asm.Save(asmStream);
                }
                Console.WriteLine("done.");
            }

#if DEBUG
            Console.ReadLine();
#endif
        }
        static void Main(string[] args)
        {
            Options options = null;

            try
            {
                options = CommandLine.Parse<Options>();
            }
            catch (CommandLineException exception)
            {
                Console.WriteLine(exception.ArgumentHelp.Message);
                Console.WriteLine();
                Console.WriteLine(exception.ArgumentHelp.GetHelpText(Console.BufferWidth));

#if DEBUG
                Console.ReadLine();
#endif
                return;
            }

            IPackfile packfile = null;
            Stream2File asm = null;

            Console.WriteLine("Building {0} using data from {1}.", options.Output, options.Source);
            IGameInstance instance = GameInstance.GetFromString(options.Game);
            switch (instance.Game)
            {
                case GameSteamID.SaintsRow2:
                    packfile = new Packfiles.Version04.Packfile();
                    break;
                case GameSteamID.SaintsRowTheThird:
                    throw new NotImplementedException();
                    break;
                case GameSteamID.SaintsRowIV:
                case GameSteamID.SaintsRowGatOutOfHell:
                    packfile = new Packfiles.Version0A.Packfile(Path.GetExtension(options.Output) == ".str2_pc");
                    if (Path.GetExtension(options.Output) == ".str2_pc")
                    {
                        packfile.IsCondensed = true;
                        packfile.IsCompressed = true;
                        if (options.AsmFile != null)
                        {
                            Console.WriteLine("Will update asm_pc file {0} with data for new package.", options.AsmFile);
                            using (Stream asmStream = File.OpenRead(options.AsmFile))
                            {
                                asm = new Stream2File(asmStream);
                            }

                        }
                    }
                    break;
                default:
                    throw new NotImplementedException();
            }

            if (options.Condensed.ToLowerInvariant() == "true")
                packfile.IsCondensed = true;
            else if (options.Condensed.ToLowerInvariant() == "false")
                packfile.IsCondensed = false;

            if (options.Compressed.ToLowerInvariant() == "true")
                packfile.IsCompressed = true;
            else if (options.Compressed.ToLowerInvariant() == "false")
                packfile.IsCompressed = false;

            Container thisContainer = null;

            if (asm != null)
            {
                string containerName = Path.GetFileNameWithoutExtension(options.Output);

                foreach (var container in asm.Containers)
                {
                    string tempContainerName = Path.GetFileNameWithoutExtension(container.Name);
                    if (tempContainerName == containerName)
                    {
                        thisContainer = container;
                        break;
                    }
                }

                if (thisContainer == null)
                    throw new Exception(String.Format("Unable to find container {0} in asm_pc file {1}.", containerName, options.AsmFile));

                foreach (Primitive primitive in thisContainer.Primitives)
                {
                    string primitiveFile = Path.Combine(options.Source, primitive.Name);
                    if (!File.Exists(primitiveFile))
                    {
                        Console.WriteLine("Unable to find primitive {0} for container {1}", containerName, primitive.Name);
                        continue;
                    }

                    string filename = Path.GetFileName(primitiveFile);

                    Console.Write("Adding {0}... ", filename);
                    Stream stream = File.OpenRead(primitiveFile);
                    packfile.AddFile(stream, filename);
                    Console.WriteLine("done.");

                    string extension = Path.GetExtension(primitiveFile);
                    string gpuExtension = "";
                    switch (extension)
                    {
                        default:
                            {
                                if (extension.StartsWith(".c"))
                                    gpuExtension = ".g" + extension.Remove(0, 2);
                                break;
                            }
                    }


                    string gpuFile = Path.ChangeExtension(primitiveFile, gpuExtension);
                    if (File.Exists(gpuFile))
                    {
                        string gpuFilename = Path.GetFileName(gpuFile);
                        Console.Write("Adding {0}... ", gpuFilename);
                        Stream gpuStream = File.OpenRead(gpuFile);
                        packfile.AddFile(gpuStream, gpuFilename);
                        Console.WriteLine("done.");
                    }
                }
            }
            else
            {
                string[] files = Directory.GetFiles(options.Source);
                foreach (string file in files)
                {
                    string filename = Path.GetFileName(file);

                    Console.Write("Adding {0}... ", filename);
                    Stream stream = File.OpenRead(file);
                    packfile.AddFile(stream, filename);
                    Console.WriteLine("done.");
                }
            }

            using (Stream output = File.Open(options.Output, FileMode.Create, FileAccess.ReadWrite, FileShare.None))
            {
                Console.Write("Writing packfile to {0}... ", options.Output);
                packfile.Save(output);
                Console.WriteLine("done.");
            }

            if (asm != null)
            {
                Console.Write("Updating asm_pc file {0}... ", options.AsmFile);
                packfile.Update(thisContainer);

                using (Stream asmStream = File.Create(options.AsmFile))
                {
                    asm.Save(asmStream);
                }
                Console.WriteLine("done.");
            }

#if DEBUG
            Console.ReadLine();
#endif
        }
        private void DoBuild(object o)
        {
            DisableButton();
            BuildOptions options = (BuildOptions)o;

            SetProgressBarSettings(0, 100, 1, ProgressBarStyle.Marquee);
            IPackfile packfile = null;

            switch (options.Game)
            {
                case GameSteamID.SaintsRow2:
                    {
                        packfile = new Packfiles.Version04.Packfile();
                        break;
                    }
                case GameSteamID.SaintsRowIV:
                case GameSteamID.SaintsRowGatOutOfHell:
                    {
                        packfile = new Packfiles.Version0A.Packfile(Path.GetExtension(options.Destination) == ".str2_pc");
                        break;
                    }
                default:
                    {
                        throw new NotImplementedException();
                    }
            }

            Stream2File asm = null;
            Stream2.Container thisContainer = null;

            SetText("Setting up...");

            if (Path.GetExtension(options.Destination) == ".str2_pc")
            {
                packfile.IsCondensed = true;
                packfile.IsCompressed = true;

                if (options.Asm != null)
                {
                    using (Stream asmStream = File.OpenRead(options.Asm))
                    {
                        asm = new Stream2File(asmStream);
                    }
                }
            }
            else
            {
                string filename = Path.GetFileName(options.Destination);
                if (OriginalPackfileInfo.OptionsList.ContainsKey(options.Game) && OriginalPackfileInfo.OptionsList[options.Game].ContainsKey(filename))
                {
                    var vppOptions = OriginalPackfileInfo.OptionsList[options.Game][filename];

                    packfile.IsCondensed = vppOptions.Condense;
                    packfile.IsCompressed = vppOptions.Compress;
                }
            }

            if (asm != null)
            {
                string containerName = Path.GetFileNameWithoutExtension(options.Destination);

                foreach (var container in asm.Containers)
                {
                    string tempContainerName = Path.GetFileNameWithoutExtension(container.Name);
                    if (tempContainerName == containerName)
                    {
                        thisContainer = container;
                        break;
                    }
                }

                if (thisContainer == null)
                {
                    SetText("Couldn't find a container called {0} in the selected asm_pc file!", containerName);
                    SetProgressBarSettings(0, 100, 0, ProgressBarStyle.Continuous);
                    EnableButton();
                    return;
                }

                SetProgressBarSettings(0, thisContainer.PrimitiveCount, 0, ProgressBarStyle.Continuous);
                SetText("Adding files...");

                foreach (Primitive primitive in thisContainer.Primitives)
                {
                    string primitiveFile = Path.Combine(options.Source, primitive.Name);
                    if (!File.Exists(primitiveFile))
                    {
                        SetText("Couldn't find a container called {0} in the selected asm_pc file!", containerName);
                        SetProgressBarSettings(0, 100, 0, ProgressBarStyle.Continuous);
                        EnableButton();
                        return;
                    }

                    string filename = Path.GetFileName(primitiveFile);

                    Stream stream = File.OpenRead(primitiveFile);
                    packfile.AddFile(stream, filename);

                    string extension = Path.GetExtension(primitiveFile);
                    string gpuExtension = "";
                    switch (extension)
                    {
                        default:
                            {
                                if (extension.StartsWith(".c"))
                                    gpuExtension = ".g" + extension.Remove(0, 2);
                                break;
                            }
                    }


                    string gpuFile = Path.ChangeExtension(primitiveFile, gpuExtension);
                    if (File.Exists(gpuFile))
                    {
                        string gpuFilename = Path.GetFileName(gpuFile);
                        Stream gpuStream = File.OpenRead(gpuFile);
                        packfile.AddFile(gpuStream, gpuFilename);
                    }

                    Step();
                }
            }
            else
            {
                string[] files = Directory.GetFiles(options.Source);

                SetProgressBarSettings(0, files.Length, 0, ProgressBarStyle.Continuous);
                SetText("Adding files...");

                foreach (string file in files)
                {
                    string filename = Path.GetFileName(file);

                    Stream stream = File.OpenRead(file);
                    packfile.AddFile(stream, filename);
                }
            }

            SetProgressBarSettings(0, 100, 0, ProgressBarStyle.Marquee);

            SetText("Writing output file: {0}", options.Destination);
            using (Stream output = File.Open(options.Destination, FileMode.Create, FileAccess.ReadWrite, FileShare.None))
            {
                packfile.Save(output);
            }

            if (asm != null)
            {
                SetText("Updating asm_pc file: {0}", options.Asm);
                packfile.Update(thisContainer);

                using (Stream asmStream = File.Create(options.Asm))
                {
                    asm.Save(asmStream);
                }
                Console.WriteLine("done.");
            }

            SetProgressBarSettings(0, 1, 1, ProgressBarStyle.Continuous);
            Step();
            SetText("Finished!");
            EnableButton();
        }