private void DumpEntries() { gvEntries.Rows.Clear(); foreach (TAHEntry entry in decrypter.Entries) { string file_name = entry.file_name; if (entry.flag % 2 == 1) { file_name += TAHFileUtils.GetExtensionFromMagic(decrypter.ExtractResource(entry)); } string ext = Path.GetExtension(file_name).ToLower(); if (ext == ".tmo") { string[] row = { entry.file_name, entry.offset.ToString(), entry.length.ToString() }; gvEntries.Rows.Add(row); } else if (ext == ".png") { string[] row = { entry.file_name, entry.offset.ToString(), entry.length.ToString() }; gvEntries.Rows.Add(row); } } }
private void DumpEntries() { gvEntries.Rows.Clear(); foreach (TAHEntry entry in decrypter.Entries) { string file_name = entry.file_name.ToLower(); if (entry.flag % 2 == 1) { file_name += TAHFileUtils.GetExtensionFromMagic(decrypter.ExtractResource(entry)); } string ext = Path.GetExtension(file_name); if (ext == ".tbn") { if (file_name.StartsWith("script/backgrounds/")) { string[] row = { entry.file_name, entry.offset.ToString(), entry.length.ToString() }; gvEntries.Rows.Add(row); } } else if (ext == ".psd") { if (file_name.StartsWith("data/icon/backgrounds/")) { string[] row = { entry.file_name, entry.offset.ToString(), entry.length.ToString() }; gvEntries.Rows.Add(row); } } else if (ext == ".tso") { if (file_name.StartsWith("data/bgmodel/")) { string[] row = { entry.file_name, entry.offset.ToString(), entry.length.ToString() }; gvEntries.Rows.Add(row); } } } }
private void bwCompress_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; Encrypter encrypter = new Encrypter(); encrypter.SourcePath = @"."; Dictionary <string, TAHEntry> entries = new Dictionary <string, TAHEntry>(); foreach (TAHEntry entry in decrypter.Entries) { string file_name = entry.file_name; if (entry.flag % 2 == 1) { file_name += TAHFileUtils.GetExtensionFromMagic(decrypter.ExtractResource(entry)); } string ext = Path.GetExtension(file_name).ToLower(); if (ext == ".tmo") { string true_file_name = Path.Combine(encrypter.SourcePath, file_name.Replace("/", @"\")); entries[true_file_name] = entry; encrypter.Add(true_file_name); } else if (ext == ".png") { string true_file_name = Path.Combine(encrypter.SourcePath, file_name.Replace("/", @"\")); entries[true_file_name] = entry; encrypter.Add(true_file_name); } } int entries_count = encrypter.Count; int current_index = 0; encrypter.GetFileEntryStream = delegate(string true_file_name) { Console.WriteLine("compressing {0}", true_file_name); TAHEntry entry = entries[true_file_name]; string ext = Path.GetExtension(true_file_name).ToLower(); Stream ret_stream = null; if (ext == ".tmo") { TMOFile tmo = new TMOFile(); MemoryStream tmo_stream = new MemoryStream(decrypter.ExtractResource(entry)); tmo.Load(tmo_stream); if (tmo.nodes[0].Path == "|W_Hips") { tmo_Transform(tmo); tmo_stream.Seek(0, SeekOrigin.Begin); tmo.Save(tmo_stream); } tmo_stream.Seek(0, SeekOrigin.Begin); ret_stream = tmo_stream; } else if (ext == ".png") { MemoryStream png_stream = new MemoryStream(decrypter.ExtractResource(entry)); ret_stream = new MemoryStream(); Process(png_stream, ret_stream); ret_stream.Seek(0, SeekOrigin.Begin); } current_index++; int percent = current_index * 100 / entries_count; worker.ReportProgress(percent); return(ret_stream); }; encrypter.Save(@"tmo-" + Path.GetFileName(source_file)); }
private void bwCompress_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; Dictionary <string, TAHEntry> entries = new Dictionary <string, TAHEntry>(); foreach (TAHEntry entry in decrypter.Entries) { string file_name = entry.file_name.ToLower(); if (entry.flag % 2 == 1) { file_name += TAHFileUtils.GetExtensionFromMagic(decrypter.ExtractResource(entry)); } string ext = Path.GetExtension(file_name); if (ext == ".tbn") { if (file_name.StartsWith("script/backgrounds/")) { entries[file_name] = entry; } } else if (ext == ".psd") { if (file_name.StartsWith("data/icon/backgrounds/")) { entries[file_name] = entry; } } else if (ext == ".tso") { if (file_name.StartsWith("data/bgmodel/")) { entries[file_name] = entry; } } } List <string> TBNPathList = GetTBNPathList(); int entries_count = TBNPathList.Count; int current_index = 0; foreach (string tbn_path in TBNPathList) { string psd_path = PngBack.GetPSDPathFromTBNPath(tbn_path); Console.WriteLine("tbn {0}", tbn_path); Console.WriteLine("psd {0}", psd_path); TAHEntry tbn_entry; if (!entries.TryGetValue(tbn_path, out tbn_entry)) { continue; } TAHEntry psd_entry; if (!entries.TryGetValue(psd_path, out psd_entry)) { continue; } MemoryStream tbn_stream = new MemoryStream(decrypter.ExtractResource(tbn_entry)); MemoryStream psd_stream = new MemoryStream(decrypter.ExtractResource(psd_entry)); PngBack back = new PngBack(); back.Load(tbn_stream, psd_stream); foreach (string str in PngBack.GetTSOPathListFromTBNFile(back.Tbn)) { string tso_path = str.ToLower(); Console.WriteLine("tso {0}", tso_path); TAHEntry tso_entry; if (entries.TryGetValue(tso_path, out tso_entry)) { back.AddTSOFile(decrypter.ExtractResource(tso_entry)); } } string png_path = Path.GetFileNameWithoutExtension(psd_path) + @".png"; back.Save(png_path); current_index++; int percent = current_index * 100 / entries_count; worker.ReportProgress(percent); } }