public static void Main(string[] args) { Console.Title = "PD_Tool"; if (args.Length == 0) { while (function != "Q") MainMenu(); Exit(); } string header; Stream reader; KKdFARC Farc; foreach (string arg in args) { Farc = new KKdFARC(); if (Directory.Exists(arg)) Farc.Pack(arg); else if (File.Exists(arg) && Path.GetExtension(arg) == ".farc") Farc.UnPack(arg, true); else if (File.Exists(arg)) { reader = File.OpenReader(arg); header = reader.ReadString(8); reader.Close(); if (header.ToUpper() == "DIVAFILE") DIVAFILE.Decrypt(arg); } } Exit(); }
public static void Processor(bool extract) { Console.Clear(); if (extract) { Console.Title = "FARC Extractor"; Program.Choose(1, "farc", out string[] fileNamesExtract); foreach (string fileExtract in fileNamesExtract) { if (fileExtract != "" && File.Exists(fileExtract)) { Console.Title = "FARC Extractor: " + Path.GetFileNameWithoutExtension(fileExtract); using (KKdFARC farc = new KKdFARC(fileExtract)) farc.Unpack(); } } return; } string file = Program.Choose(2, "", out string[] fileNames); Console.Clear(); if (file == null || file == "") { return; } Console.Title = "FARC Creator"; using (KKdFARC farc = new KKdFARC(file, true)) { Console.Title = "FARC Creator: " + Path.GetDirectoryName(file); Program.ConsoleDesign(true); Program.ConsoleDesign(" Choose type of created FARC:"); Program.ConsoleDesign(false); Program.ConsoleDesign("1. FArc (Uncompressed)"); Program.ConsoleDesign("2. FArC (Compressed)"); Program.ConsoleDesign("3. FARC [F/F2/X]"); Program.ConsoleDesign(false); Program.ConsoleDesign("R. Return to Main Menu"); Program.ConsoleDesign(false); Program.ConsoleDesign(true); Console.WriteLine(); Console.WriteLine("Choosed folder: {0}", file); Console.WriteLine(); string choose = Console.ReadLine().ToUpper(); if (choose == "1") { farc.Signature = KKdFARC.Farc.FArc; } else if (choose == "3" || choose == "4") { farc.Signature = KKdFARC.Farc.FARC; Console.Clear(); Program.ConsoleDesign(true); Program.ConsoleDesign(" Choose type of FARC:"); Program.ConsoleDesign(false); Program.ConsoleDesign("1. FARC"); Program.ConsoleDesign("2. FARC (Compressed)"); Program.ConsoleDesign("3. FARC (Encrypted)"); Program.ConsoleDesign("4. FARC (Compressed & Encrypted)"); Program.ConsoleDesign(false); Program.ConsoleDesign(true); Console.WriteLine(); choose = Console.ReadLine().ToUpper(); if (choose == "2" || choose == "4") { farc.FARCType |= KKdFARC.Type.GZip; } if (choose == "3" || choose == "4") { farc.FARCType |= KKdFARC.Type.Enc; } } else if (choose == "R") { return; } else { farc.Signature = KKdFARC.Farc.FArC; } farc.Pack(farc.Signature); } }
private static void FARCProcessor(KKdFARC farc, string choose, Format format, bool a3dcOpt) { if (!farc.HeaderReader() || !farc.HasFiles) { return; } KKdList <string> list = KKdList <string> .New; for (int i = 0; i < farc.Files.Count; i++) { string file = farc.Files[i].Name.ToLower(); if (!file.Contains("_div_") && file.EndsWith(".a3da")) { list.Add(file); } } KKdList <string> A3DAlist = KKdList <string> .New; for (int i = 0; i < farc.Files.Count; i++) { if (farc.Files[i].Name.ToLower().EndsWith(".a3da")) { A3DAlist.Add(farc.Files[i].Name); } } byte[] data = null; if (list.Count == A3DAlist.Count) { KKdA3DA a3da; for (int i = 0; i < A3DAlist.Count; i++) { using (a3da = new KKdA3DA(a3dcOpt)) { data = farc.FileReader(A3DAlist[i]); int state = a3da.A3DAReader(data); if (state == 1) { KKdFARC.FARCFile file = farc.Files[i]; a3da.Head.Format = format; file.Data = (choose == "1" || choose == "4") ? a3da.A3DAWriter() : a3da.A3DCWriter(); farc.Files[i] = file; } } } farc.Save(); return; } KKdA3DA[] a3daArray; using (KKdList <KKdA3DA> a3daList = KKdList <KKdA3DA> .NewReserve(list.Count)) { for (int i = 0; i < list.Count; i++) { KKdA3DA a3da; using (a3da = new KKdA3DA(a3dcOpt)) { data = farc.FileReader(list[i]); int state = a3da.A3DAReader(data); if (state == 1) { a3daList.Add(a3da); } } } a3daArray = a3daList.ToArray(); } for (int i = 0; i < list.Count; i++) { if (a3daArray[i].Data.PlayControl.Div == null) { continue; } int div = a3daArray[i].Data.PlayControl.Div.Value; string filename = Path.RemoveExtension(list[i]); string ext = Path.GetExtension(list[i]).ToLower(); KKdA3DA a3da; for (int i1 = 1; i1 < div; i1++) { using (a3da = new KKdA3DA(a3dcOpt)) { string file = filename + "_div_" + i1 + ext; data = farc.FileReader(file); int state = a3da.A3DAReader(data); if (state == 1) { a3daArray[i].A3DAMerger(ref a3da.Data); } } } a3daArray[i].Data.PlayControl.Div = null; } farc.Files.Capacity = 0; farc.Files.Capacity = list.Count; for (int i = 0; i < list.Count; i++) { KKdFARC.FARCFile file = default; file.Name = list[i]; a3daArray[i].Head.Format = format; file.Data = (choose == "1" || choose == "4") ? a3daArray[i].A3DAWriter() : a3daArray[i].A3DCWriter(); farc.Files.Add(file); } farc.Save(); return; }
public static void Processor(bool json) { Console.Title = "A3DA Converter"; Program.Choose(1, "a3da", out string[] fileNames); if (fileNames.Length < 1) { return; } bool mp = false; foreach (string file in fileNames) { if (file.EndsWith(".mp") || file.EndsWith(".json") || file.EndsWith(".farc")) { mp = true; break; } } bool a3dcOpt = false; Format format = Format.NULL; string choose = ""; Console.Clear(); Program.ConsoleDesign(true); Program.ConsoleDesign(" Choose type of format to export:"); Program.ConsoleDesign(false); Program.ConsoleDesign(" Tip: A3DC Opt - A3DC Optimization"); Program.ConsoleDesign(" WARNING! CHECK RESULTS AFTER CONVERTING "); Program.ConsoleDesign(false); Program.ConsoleDesign("1. A3DA [DT/AC/F]"); Program.ConsoleDesign("2. A3DC [DT/AC/F]"); Program.ConsoleDesign("3. A3DC [DT/AC/F] (A3DC Opt)"); Program.ConsoleDesign("4. A3DA [AFT/FT/M39]"); Program.ConsoleDesign("5. A3DC [AFT/FT/M39]"); Program.ConsoleDesign("6. A3DC [AFT/FT/M39] (A3DC Opt)"); Program.ConsoleDesign("7. A3DC [F2]"); Program.ConsoleDesign("8. A3DC [F2] (A3DC Opt)"); Program.ConsoleDesign("9. A3DC [MGF]"); Program.ConsoleDesign("A. A3DC [MGF] (A3DC Opt)"); Program.ConsoleDesign("B. A3DC [X]"); Program.ConsoleDesign("C. A3DC [X] (A3DC Opt)"); Program.ConsoleDesign("D. A3DC [XHD]"); Program.ConsoleDesign("E. A3DC [XHD] (A3DC Opt)"); if (!mp) { Program.ConsoleDesign($"F. {(json ? "JSON" : "MsgPack")}"); } Program.ConsoleDesign(false); Program.ConsoleDesign(true); Console.WriteLine(); choose = Console.ReadLine().ToUpper(); if (choose == "1") { format = Format.DT; } else if (choose == "2") { format = Format.F; } else if (choose == "3") { format = Format.F; a3dcOpt = true; } else if (choose == "4") { format = Format.AFT; } else if (choose == "5") { format = Format.AFT; } else if (choose == "6") { format = Format.AFT; a3dcOpt = true; } else if (choose == "7") { format = Format.F2; } else if (choose == "8") { format = Format.F2; a3dcOpt = true; } else if (choose == "9") { format = Format.MGF; } else if (choose == "A") { format = Format.MGF; a3dcOpt = true; } else if (choose == "B") { format = Format.X; } else if (choose == "C") { format = Format.X; a3dcOpt = true; } else if (choose == "D") { format = Format.XHD; } else if (choose == "E") { format = Format.XHD; a3dcOpt = true; } else if (choose == "F") { format = Format.NULL; } else { return; } int state; string filepath, ext; KKdA3DA a3da; KKdFARC farc; foreach (string file in fileNames) { filepath = Path.RemoveExtension(file); ext = Path.GetExtension(file).ToLower(); Console.Title = "A3DA Converter: " + Path.GetFileNameWithoutExtension(file); if (ext == ".farc") { using (farc = new KKdFARC(file)) FARCProcessor(farc, choose, format, a3dcOpt); } else if (ext == ".a3da") { using (a3da = new KKdA3DA(a3dcOpt)) { state = a3da.A3DAReader(filepath); if (state == 1) { if (choose == "F") { a3da.MsgPackWriter(filepath, json); } else { a3da.Head.Format = format; File.WriteAllBytes(filepath + ".a3da", (choose == "1" || choose == "4") ? a3da.A3DAWriter() : a3da.A3DCWriter()); } } } } else if (ext == ".mp" || ext == ".json") { using (a3da = new KKdA3DA(a3dcOpt)) { a3da.MsgPackReader(filepath, ext == ".json"); a3da.Head.Format = format; File.WriteAllBytes(filepath + ".a3da", (choose == "1" || choose == "4") ? a3da.A3DAWriter() : a3da.A3DCWriter()); } } } }
private static void FARCProcessor(KKdFARC farc, string choose, Format format) { if (!farc.HeaderReader()) { return; } if (!farc.HasFiles) { return; } KKdList <string> list = KKdList <string> .New; for (int i = 0; i < farc.Files.Length; i++) { if (!farc.Files[i].Name.Contains("div") && farc.Files[i].Name.EndsWith(".a3da")) { list.Add(farc.Files[i].Name); } } KKdList <string> A3DAlist = KKdList <string> .New; for (int i = 0; i < farc.Files.Length; i++) { if (farc.Files[i].Name.EndsWith(".a3da")) { A3DAlist.Add(farc.Files[i].Name); } } byte[] data = null; if (list.Count == A3DAlist.Count || (format > Format.AFT && format < Format.FT)) { KKdA3DA a3da; for (int i = 0; i < A3DAlist.Count; i++) { using (a3da = new KKdA3DA(true)) { data = farc.FileReader(A3DAlist[i]); int state = a3da.A3DAReader(data); if (state == 1) { a3da.Data._.CompressF16 = format > Format.AFT && format < Format.FT ? format == Format.MGF ? 2 : 1 : 0; a3da.Head.Format = format; farc.Files[i].Data = (choose != "1" && choose != "3") ? a3da.A3DCWriter() : a3da.A3DAWriter(); } } } farc.Save(); return; } KKdA3DA[] a3daArray; using (KKdList <KKdA3DA> a3daList = KKdList <KKdA3DA> .New) { for (int i = 0; i < list.Count; i++) { KKdA3DA a3da; using (a3da = new KKdA3DA(true)) { data = farc.FileReader(list[i]); int state = a3da.A3DAReader(data); if (state == 1) { a3daList.Add(a3da); } } } a3daArray = a3daList.ToArray(); } for (int i = 0; i < list.Count; i++) { if (a3daArray[i].Data.PlayControl.Div == null) { continue; } float Div = a3daArray[i].Data.PlayControl.Div.Value; KKdA3DA a3da; for (int i1 = 1; i1 < Div; i1++) { using (a3da = new KKdA3DA(true)) { string file = Path.GetFileNameWithoutExtension(list[i]) + "_div_" + i1 + Path.GetExtension(list[i]); data = farc.FileReader(file); int state = a3da.A3DAReader(data); if (state == 1) { a3daArray[i].A3DAMerger(ref a3da.Data); } } } a3daArray[i].Data.PlayControl.Div = null; } farc.Files = new KKdFARC.FARCFile[list.Count]; for (int i = 0; i < list.Count; i++) { farc.Files[i].Name = list[i]; a3daArray[i].Data._.CompressF16 = format > Format.AFT && format < Format.FT ? format == Format.MGF ? 2 : 1 : 0; a3daArray[i].Head.Format = format; farc.Files[i].Data = (choose != "1" && choose != "3") ? a3daArray[i].A3DCWriter() : a3daArray[i].A3DAWriter(); } farc.Save(); return; }
public static void Processor(bool json) { Console.Title = "A3DA Converter"; Program.Choose(1, "a3da", out string[] fileNames); if (fileNames.Length < 1) { return; } bool mp = false; foreach (string file in fileNames) { if (file.EndsWith(".mp") || file.EndsWith(".json") || file.EndsWith(".farc")) { mp = true; break; } } Format format = Format.NULL; string choose = ""; if (mp) { Console.Clear(); Program.ConsoleDesign(true); Program.ConsoleDesign(" Choose type of format to export:"); Program.ConsoleDesign(false); Program.ConsoleDesign("1. A3DA [DT/AC/F]"); Program.ConsoleDesign("2. A3DC [DT/AC/F]"); Program.ConsoleDesign("3. A3DA [AFT/FT] "); Program.ConsoleDesign("4. A3DC [AFT/FT] "); Program.ConsoleDesign("5. A3DC [F2] "); Program.ConsoleDesign("6. A3DC [MGF] "); Program.ConsoleDesign("7. A3DC [X] "); Program.ConsoleDesign(false); Program.ConsoleDesign(true); Console.WriteLine(); choose = Console.ReadLine(); if (choose == "1") { format = Format.DT; } else if (choose == "2") { format = Format.F; } else if (choose == "3") { format = Format.AFT; } else if (choose == "4") { format = Format.AFT; } else if (choose == "5") { format = Format.F2LE; } else if (choose == "6") { format = Format.MGF; } else if (choose == "7") { format = Format.X; } else { return; } } int state; string filepath, ext; KKdA3DA a3da; foreach (string file in fileNames) { ext = Path.GetExtension(file); filepath = file.Replace(ext, ""); ext = ext.ToLower(); Console.Title = "A3DA Converter: " + Path.GetFileNameWithoutExtension(file); if (ext == ".farc") { using (KKdFARC farc = new KKdFARC(file)) FARCProcessor(farc, choose, format); } else if (ext == ".a3da") { using (a3da = new KKdA3DA(true)) { state = a3da.A3DAReader(filepath); if (state == 1) { a3da.MsgPackWriter(filepath, json); } } } else if (ext == ".mp" || ext == ".json") { using (a3da = new KKdA3DA(true)) { a3da.MsgPackReader(filepath, ext == ".json"); a3da.Data._.CompressF16 = format > Format.AFT && format < Format.FT ? format == Format.MGF ? 2 : 1 : 0; a3da.Head.Format = format; File.WriteAllBytes(filepath + ".a3da", (choose != "1" && choose != "3") ? a3da.A3DCWriter() : a3da.A3DAWriter()); } } } }