private void DownloadArchive(GClass32 archive) { string str = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), nameof(Citra), "nand", "00000000000000000000000000000000", "title", archive.TitleId.Low.ToLower(), archive.TitleId.High.ToLower(), "content"); Directory.CreateDirectory(str); string destinationFile = Path.Combine(str, "00000000.app.romfs"); if (System.IO.File.Exists(destinationFile)) { return; } GClass80 gclass80 = new GClass80((WebProxy)null, true, true); FrmWait frmWait = new FrmWait("Downloading system archive from: NUS...", true); gclass80.Event_5 += (EventHandler <GClass81>)((_param1, _param2) => { string temp_dir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); GClass6.smethod_5(temp_dir); Directory.CreateDirectory(temp_dir); Path.Combine(temp_dir, "game.cia"); archive.method_5(temp_dir, "game"); GClass27.smethod_11(temp_dir); ProcessStartInfo processStartInfo1 = new ProcessStartInfo() { FileName = Path.Combine(temp_dir, "PART1"), WorkingDirectory = temp_dir }; Process process1 = new Process(); process1.StartInfo = processStartInfo1; process1.EnableRaisingEvents = true; process1.Exited += (EventHandler)((sender1, e1) => { try { IEnumerable <FileInfo> potential_files = new DirectoryInfo(temp_dir).EnumerateFiles("contents.*"); if (potential_files.Count <FileInfo>() == 0) { throw new Exception("An error occured while preparing the system archive!"); } FileInfo fileInfo = potential_files.First <FileInfo>((Func <FileInfo, bool>)(x => x.Length == potential_files.Max <FileInfo>((Func <FileInfo, long>)(y => y.Length)))); ProcessStartInfo processStartInfo2 = new ProcessStartInfo() { FileName = Path.Combine(temp_dir, "3dstool.exe"), WorkingDirectory = temp_dir, Arguments = string.Format("-xvtf cfa {0} --romfs 00000000.app.romfs --romfs-auto-key", (object)fileInfo) }; Process process2 = new Process(); process2.StartInfo = processStartInfo2; process2.Exited += (EventHandler)((sender2, e2) => { string path = Path.Combine(temp_dir, "00000000.app.romfs"); using (FileStream fileStream1 = System.IO.File.Create(destinationFile)) { using (FileStream fileStream2 = System.IO.File.Open(path, FileMode.Open)) { fileStream2.Seek(4096L, SeekOrigin.Begin); for (int index = 0; (long)index < fileStream2.Length - 4096L; ++index) { int num = fileStream2.ReadByte(); fileStream1.WriteByte((byte)num); } } } GClass6.smethod_5(temp_dir); frmWait.method_0(); }); process2.EnableRaisingEvents = true; process2.Start(); } catch { } }); process1.Start(); }); gclass80.Event_6 += (EventHandler <GEventArgs0>)((sender, e) => frmWait.method_2(e.GameProgress)); gclass80.method_1(((IEnumerable <GClass30>) new GClass30[1] { (GClass30)archive }).ToList <GClass30>(), 100, 10000); int num1 = (int)frmWait.ShowDialog(); }
private void DownloadSharedFont() { string sharedFontDestination = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), nameof(Citra), "sysdata", "shared_font.bin"); if (System.IO.File.Exists(sharedFontDestination)) { return; } GClass80 gclass80 = new GClass80((WebProxy)null, true, true); FrmWait frmWait = new FrmWait("Downloading the Shared Font from NUS...", true); gclass80.Event_5 += (EventHandler <GClass81>)((_param1, _param2) => { Path.Combine(Path.GetTempPath(), "game.cia"); GClass28.gclass32_0.method_5(Path.GetTempPath(), "game"); string outputDir = Path.GetTempPath(); GClass27.smethod_11(outputDir); ProcessStartInfo processStartInfo1 = new ProcessStartInfo() { FileName = Path.Combine(outputDir, "PART1"), WorkingDirectory = outputDir }; Process process1 = new Process(); process1.StartInfo = processStartInfo1; process1.EnableRaisingEvents = true; process1.Exited += (EventHandler)((sender1, e1) => { try { ProcessStartInfo processStartInfo2 = new ProcessStartInfo() { FileName = Path.Combine(outputDir, "3dstool.exe"), WorkingDirectory = outputDir, Arguments = "-xvtf cfa contents.0000.00000000 --romfs DecryptedRomFS.bin --romfs-auto-key" }; Process process2 = new Process(); process2.StartInfo = processStartInfo2; process2.Exited += (EventHandler)((sender2, e2) => { ProcessStartInfo processStartInfo2 = new ProcessStartInfo() { FileName = "3dstool.exe", WorkingDirectory = outputDir, Arguments = "-xvtf romfs DecryptedRomFS.bin --romfs-dir ExtractedRomFS" }; Process process2 = new Process(); process2.StartInfo = processStartInfo2; process2.EnableRaisingEvents = true; process2.Exited += (EventHandler)((sender3, e3) => { byte[] buffer = new LZ11().Decompress(System.IO.File.ReadAllBytes(Path.Combine(outputDir, "ExtractedRomFS", "cbf_std.bcfnt.lz"))); Directory.CreateDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), nameof(Citra), "sysdata")); using (FileStream fileStream = System.IO.File.Create(sharedFontDestination)) { using (MemoryStream memoryStream = new MemoryStream(buffer)) { memoryStream.Seek(928L, SeekOrigin.Begin); fileStream.Write(Class3.byte_1, 0, Class3.byte_1.Length); for (int index = 0; index < 3095744; ++index) { int num = memoryStream.ReadByte(); fileStream.WriteByte((byte)num); } fileStream.Write(Class3.byte_0, 0, Class3.byte_0.Length); } } frmWait.method_0(); }); process2.Start(); }); process2.EnableRaisingEvents = true; process2.Start(); } catch { } }); process1.Start(); }); gclass80.Event_6 += (EventHandler <GEventArgs0>)((sender, e) => frmWait.method_2(e.GameProgress)); gclass80.method_1(((IEnumerable <GClass30>) new GClass30[1] { (GClass30)GClass28.gclass32_0 }).ToList <GClass30>(), 100, 10000); int num1 = (int)frmWait.ShowDialog(); }