Пример #1
0
        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);
                }
            }
        }
Пример #2
0
        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);
                    }
                }
            }
        }
Пример #3
0
        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));
        }
Пример #4
0
        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);
            }
        }