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(); }