public static void Main(string[] args) { var parser = new XASMParser(File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "main.xasm"))); var vm = new XVM(); vm.script = parser.Compile(); vm.Run(); }
/// <summary> /// Main function for extracting archives. /// </summary> static void ExtractArchive(string[] args) { GenericArchive arc; string arcname = extension.ToUpperInvariant(); Console.WriteLine("Extracting {0} file: {1}", arcname.Substring(1, arcname.Length - 1), filePath); byte[] arcdata = File.ReadAllBytes(filePath); outputPath = Path.Combine(Path.GetDirectoryName(filePath), Path.GetFileNameWithoutExtension(filePath)); switch (extension.ToLowerInvariant()) { case (".rel"): outputPath = Path.Combine(Path.GetDirectoryName(filePath), Path.GetFileNameWithoutExtension(filePath) + "_dec.rel"); Console.WriteLine("Output file: {0}", outputPath); byte[] inputData = File.ReadAllBytes(args[0]); byte[] outputData = SplitTools.HelperFunctions.DecompressREL(inputData); File.WriteAllBytes(outputPath, outputData); Console.WriteLine("File extracted!"); return; case (".pvmx"): arc = new PVMXFile(arcdata); break; case (".arcx"): arc = new ARCXFile(arcdata); break; case (".prs"): arcdata = FraGag.Compression.Prs.Decompress(arcdata); if (ARCXFile.Identify(arcdata)) { arc = new ARCXFile(arcdata); } else if (PuyoFile.Identify(arcdata) == PuyoArchiveType.Unknown) { outputPath = Path.Combine(Path.GetDirectoryName(filePath), Path.GetFileNameWithoutExtension(filePath) + ".bin"); Console.WriteLine("Output file: {0}", Path.GetFullPath(outputPath)); File.WriteAllBytes(outputPath, arcdata); Console.WriteLine("Archive extracted!"); return; } else { arc = new PuyoFile(arcdata); } break; case (".pvm"): case (".gvm"): arc = new PuyoFile(arcdata); break; case (".xvm"): arc = new XVM(arcdata); break; case (".pb"): arc = new PBFile(arcdata); break; case (".pak"): arc = new PAKFile(filePath); break; case (".dat"): arc = new DATFile(arcdata); break; case (".mdl"): arc = new MDLArchive(arcdata); break; case (".mdt"): arc = new MDTArchive(arcdata); break; case (".mld"): arc = new MLDArchive(arcdata); break; case (".mlt"): case (".gcaxmlt"): string test = System.Text.Encoding.ASCII.GetString(arcdata, 0, 4); if (test == "gcax") { arc = new gcaxMLTFile(arcdata, Path.GetFileNameWithoutExtension(filePath)); } else { arc = new MLTFile(arcdata, Path.GetFileNameWithoutExtension(filePath)); } break; default: Console.WriteLine("Unknown archive type"); return; } Console.WriteLine("Output folder: {0}", Path.GetFullPath(outputPath)); Directory.CreateDirectory(outputPath); foreach (GenericArchiveEntry entry in arc.Entries) { if (entry.Data == null) { Console.WriteLine("Entry {0} has no data", entry.Name); continue; } Console.WriteLine("Extracting file: {0}", entry.Name); if (arc is ARCXFile) { ARCXFile.ARCXEntry ARCXentry = (ARCXFile.ARCXEntry)entry; Directory.CreateDirectory(Path.Combine(outputPath, ARCXentry.Folder)); File.WriteAllBytes(Path.Combine(outputPath, ARCXentry.Folder, entry.Name), entry.Data); } else { File.WriteAllBytes(Path.Combine(outputPath, entry.Name), entry.Data); } } arc.CreateIndexFile(outputPath); Console.WriteLine("Archive extracted!"); }
public static BMPInfo[] GetTextures(string filename, out bool hasNames, string paletteFile = null) { hasNames = true; if (!File.Exists(filename)) { return(null); } GenericArchive arc; List <BMPInfo> textures = new List <BMPInfo>(); byte[] file = File.ReadAllBytes(filename); string ext = Path.GetExtension(filename).ToLowerInvariant(); switch (ext) { // Folder texture pack case ".txt": string[] files = File.ReadAllLines(filename); List <BMPInfo> txts = new List <BMPInfo>(); for (int s = 0; s < files.Length; s++) { string[] entry = files[s].Split(','); txts.Add(new BMPInfo(Path.GetFileNameWithoutExtension(entry[1]), new System.Drawing.Bitmap(Path.Combine(Path.GetDirectoryName(filename), entry[1])))); } return(txts.ToArray()); case ".pak": arc = new PAKFile(filename); string filenoext = Path.GetFileNameWithoutExtension(filename).ToLowerInvariant(); PAKFile pak = (PAKFile)arc; // Get sorted entires from the INF file if it exists List <PAKFile.PAKEntry> sorted = pak.GetSortedEntries(filenoext); arc.Entries = new List <GenericArchiveEntry>(sorted.Cast <GenericArchiveEntry>()); break; case ".pvmx": arc = new PVMXFile(file); break; case ".pb": arc = new PBFile(file); break; case ".pvr": case ".gvr": arc = new PuyoFile(ext == ".gvr"); PuyoFile parcx = (PuyoFile)arc; if (ext == ".gvr") { arc.Entries.Add(new GVMEntry(filename)); } else { arc.Entries.Add(new PVMEntry(filename)); } if (paletteFile != null) { parcx.SetPalette(Path.Combine(Path.GetDirectoryName(filename), paletteFile)); } if (parcx.PaletteRequired) { parcx.AddPaletteFromDialog(Path.GetDirectoryName(filename)); } break; case ".xvr": arc = new XVM(); arc.Entries.Add(new XVMEntry(filename)); break; case ".png": case ".jpg": case ".gif": case ".bmp": List <BMPInfo> arr = new List <BMPInfo>(); arr.Add(new BMPInfo(Path.GetFileNameWithoutExtension(filename), new System.Drawing.Bitmap(filename))); return(arr.ToArray()); case ".prs": file = FraGag.Compression.Prs.Decompress(file); goto default; case ".xvm": arc = new XVM(file); break; case ".pvm": case ".gvm": default: arc = new PuyoFile(file); PuyoFile parc = (PuyoFile)arc; if (paletteFile != null) { parc.SetPalette(Path.Combine(Path.GetDirectoryName(filename), paletteFile)); } if (parc.PaletteRequired) { parc.AddPaletteFromDialog(Path.GetDirectoryName(filename)); } break; } foreach (GenericArchiveEntry entry in arc.Entries) { textures.Add(new BMPInfo(Path.GetFileNameWithoutExtension(entry.Name), entry.GetBitmap())); } hasNames = arc.hasNameData; return(textures.ToArray()); }
/// <summary> /// Main function for automatic archive building from a folder. /// </summary> static void BuildFromFolder(string[] args) { bool createPB = false; bool createARCX = false; filePath = args[0]; compressPRS = false; for (int a = 0; a < args.Length; a++) { if (args[a] == "-prs") { compressPRS = true; } if (args[a] == "-pb") { createPB = true; } if (args[a] == "-arcx") { createARCX = true; } } // Folder mode if (Directory.Exists(filePath)) { GenericArchive arc; string indexfilename = Path.Combine(filePath, "index.txt"); if (createARCX) { CreateARCX(filePath); return; } if (!File.Exists(indexfilename)) { BuildPAK(filePath); return; } List <string> filenames = new List <string>(File.ReadAllLines(indexfilename).Where(a => !string.IsNullOrEmpty(a))); string ext = Path.GetExtension(filenames[0]).ToLowerInvariant(); if (filenames[0].Contains(",")) { string[] checkf = filenames[0].Split(','); ext = Path.GetExtension(checkf[0].ToLowerInvariant()); } switch (ext) { case ".pvr": if (createPB) { folderMode = ArchiveFromFolderMode.PB; arc = new PBFile(); } else { folderMode = ArchiveFromFolderMode.PVM; arc = new PuyoFile(); } break; case ".gvr": arc = new PuyoFile(true); folderMode = ArchiveFromFolderMode.GVM; break; case ".xvr": arc = new XVM(); folderMode = ArchiveFromFolderMode.XVM; break; case ".wav": case ".adx": folderMode = ArchiveFromFolderMode.DAT; arc = new DATFile(); break; case ".mpb": case ".mdb": case ".msb": case ".osb": case ".fpb": case ".fob": case ".fpw": case ".psr": folderMode = ArchiveFromFolderMode.MLT; arc = new MLTFile(); break; case ".gcaxmpb": case ".gcaxmsb": folderMode = ArchiveFromFolderMode.gcaxMLT; arc = new gcaxMLTFile(); break; case ".png": case ".jpg": case ".bmp": case ".dds": case ".gif": default: folderMode = ArchiveFromFolderMode.PVMX; arc = new PVMXFile(); break; } Console.WriteLine("Creating {0} archive from folder: {1}", folderMode.ToString(), filePath); int id = 0; foreach (string line in filenames) { string[] split = line.Split(','); string filename = split[0]; switch (folderMode) { case ArchiveFromFolderMode.gcaxMLT: int bIDgc = int.Parse(split[1]); arc.Entries.Add(new gcaxMLTEntry(Path.Combine(filePath, filename), bIDgc)); extension = ".mlt"; break; case ArchiveFromFolderMode.MLT: int bID = int.Parse(split[1]); int mem = int.Parse(split[2], System.Globalization.NumberStyles.HexNumber); int sz = int.Parse(split[3]); int version = 1; int revision = 1; string versionfilename = Path.Combine(filePath, "version.txt"); if (File.Exists(versionfilename)) { string[] ver = File.ReadAllLines(versionfilename); version = int.Parse(ver[0]); revision = int.Parse(ver[1]); MLTFile mlt = (MLTFile)arc; mlt.Version = (byte)version; mlt.Revision = (byte)revision; } arc.Entries.Add(new MLTEntry(Path.Combine(filePath, filename), bID, mem, sz)); extension = ".mlt"; break; case ArchiveFromFolderMode.DAT: arc.Entries.Add(new DATEntry(Path.Combine(filePath, filename))); extension = ".dat"; break; case ArchiveFromFolderMode.PVM: arc.Entries.Add(new PVMEntry(Path.Combine(filePath, filename))); extension = ".pvm"; break; case ArchiveFromFolderMode.GVM: arc.Entries.Add(new GVMEntry(Path.Combine(filePath, filename))); extension = ".gvm"; break; case ArchiveFromFolderMode.PB: PBFile pbf = (PBFile)arc; arc.Entries.Add(new PBEntry(Path.Combine(filePath, filename), pbf.GetCurrentOffset(id, filenames.Count))); extension = ".pb"; break; case ArchiveFromFolderMode.PVMX: extension = ".pvmx"; filename = split[1]; int width = 0; int height = 0; uint gbix = uint.Parse(split[0]); if (split.Length > 2) { width = int.Parse(split[2].Split('x')[0]); height = int.Parse(split[2].Split('x')[1]); } arc.Entries.Add(new PVMXEntry(Path.GetFileName(filename), gbix, File.ReadAllBytes(Path.Combine(filePath, filename)), width, height)); break; case ArchiveFromFolderMode.XVM: arc.Entries.Add(new XVMEntry(Path.Combine(filePath, filename))); extension = ".xvm"; break; default: extension = ".bin"; break; } Console.WriteLine("Added entry {0}: {1}", id.ToString(), filename); id++; } byte[] data = arc.GetBytes(); outputPath = Path.GetFullPath(filePath) + extension; if (compressPRS) { Console.WriteLine("Compressing to PRS..."); data = FraGag.Compression.Prs.Compress(data); outputPath = Path.ChangeExtension(outputPath, ".PRS"); } Console.WriteLine("Output file: {0}", outputPath); File.WriteAllBytes(outputPath, data); } }