Пример #1
0
        public static void ExtractAssets(string ff7Path, IReadOnlyList <AssetMap> requiredAssets)
        {
            // Ensure containing directory is present
            Directory.CreateDirectory(AssetBaseLocation);

            // Group by containing archive
            var archiveGroup = requiredAssets
                               .GroupBy(a => a.LgpArchiveFile)
                               .ToDictionary(g => g.Key, g => g.ToList());


            foreach (var archive in archiveGroup)
            {
                // Group by containing file
                var fileGroup = archive.Value
                                .GroupBy(f => f.FileWithinLgp)
                                .ToDictionary(g => g.Key, g => g.ToList());

                using var lgp = new LgpReader(Path.Combine(ff7Path, archive.Key));
                foreach (var file in fileGroup)
                {
                    ProcessPalettesInFile(file, lgp);
                }
            }
        }
Пример #2
0
        static void Main(string[] args)
        {
            //    var path =
            //        @"C:\Program Files (x86)\Steam\steamapps\common\FINAL FANTASY VII\data\lang-en\kernel\";
            //var reader = new KernelReader(Path.Combine(path, "KERNEL.BIN"))
            //    .MergeKernel2Data(Path.Combine(path, "kernel2.bin"));


            var lgp = new LgpReader(@"C:\Users\Shojy\Downloads\Aalis LGP+UNLGP 0.5b Compiled By Kranmer\choco\chocobo.lgp");

            Directory.CreateDirectory("img");
            foreach (var listFile in lgp.ListFiles())
            {
                if (!listFile.EndsWith(".tex"))
                {
                    continue;
                }
                Console.WriteLine(listFile);
                using (var dataStream = lgp.ExtractFile(listFile))
                    using (var fileWriter = new StreamWriter($"img\\{listFile}.png"))
                    {
                        // Save or convert file
                        try
                        {
                            var crop       = new Rectangle(0, 0, 84, 96);
                            var bmp        = TexConverter.ToBitmap(dataStream);
                            var croppedBmp = new Bitmap(84, 96);

                            using (var g = Graphics.FromImage(croppedBmp))
                            {
                                g.DrawImage(bmp, new Rectangle(0, 0, croppedBmp.Width, croppedBmp.Height),
                                            crop,
                                            GraphicsUnit.Pixel);
                            }

                            croppedBmp.Save(fileWriter.BaseStream, ImageFormat.Png);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine($"{listFile} errored:\n{ex.Message}");
                        }
                    }
            }


            Console.Write("Press any key to exit... ");
            Console.ReadKey();
        }
Пример #3
0
        private static void ProcessPalettesInFile(KeyValuePair <string, List <AssetMap> > file, LgpReader lgp)
        {
            // Group by palette
            var paletteGroup = file.Value
                               .GroupBy(p => p.ColorPalette)
                               .ToDictionary(p => p.Key, p => p.ToList());


            using var dataStream = lgp.ExtractFile(file.Key);
            foreach (var palette in paletteGroup)
            {
                ProcessFileContents(dataStream, palette);
            }
        }