Beispiel #1
0
        static void PatchCanvas(string srcCanvas, string srcFolder, string dstCanvas)
        {
            Console.WriteLine("Patching {0}...", Path.GetFileName(srcCanvas));

            double scale = NEW_WIDTH / (double)OLD_WIDTH;

            var canvas = new LwgCanvas(srcCanvas);

            canvas.Width  = (int)(canvas.Width * scale);
            canvas.Height = (int)(canvas.Height * scale);

            foreach (var file in Directory.GetFiles(srcFolder))
            {
                string path = Path.GetFileNameWithoutExtension(file);

                if (!file.EndsWith(".png"))
                {
                    continue;
                }

                canvas.ReplaceImage(
                    path,
                    WcgImage.FromImage(file)
                    );

                var item = canvas.GetEntry(path);

                if (item.Flag == 0)
                {
                    item.Flag = byte.MaxValue;
                }

                item.X = (int)(item.X * scale);
                item.Y = (int)(item.Y * scale);
            }

            canvas.Save(dstCanvas);
        }
Beispiel #2
0
        static void DealWithFile(string path)
        {
            string parentDir = Path.GetDirectoryName(path);
            string target    = Path.Combine(parentDir, Path.GetFileNameWithoutExtension(path));

            if (File.Exists(path))
            {
                if (path.EndsWith(".wcg"))
                {
                    // -> Convert to PNG
                    WCG2PNG(path, target + ".png");
                }
                else if (path.EndsWith(".lwg"))
                {
                    var canvas = LwgCanvas.FromFile(path);
                    canvas.ExportToDirectory(target);

                    Console.WriteLine("Extracted {0} to {1}", Path.GetFileName(path), target);
                }
                else if (path.EndsWith(".xfl"))
                {
                    var archive = XflArchive.FromFile(path);
                    archive.ExtractToDirectory(target);

                    Console.WriteLine("Extracted {0} to {1}", Path.GetFileNameWithoutExtension(path), target);
                }
                else if (path.EndsWith(".gsc"))
                {
                    target += ".txt";

                    var scenario = TransFile.FromGSC(path);
                    scenario.Save(target);

                    Console.WriteLine("Extracted {0} to {1}", Path.GetFileNameWithoutExtension(path), target);
                }
                else if (path.EndsWith(".txt"))
                {
                    target += ".gsc";

                    var scenario = TransFile.FromFile(path);
                    var gsc      = scenario.ToGSC(target);

                    gsc.Save(target);
                }
                else if (path.EndsWith(".png") || path.EndsWith(".jpg") || path.EndsWith(".bmp"))
                {
                    PNG2WCG(path, target + ".wcg");
                }
                else if (path.EndsWith(".wav"))
                {
                    WAV2OGG(path);
                }
                else
                {
                    Console.Error.WriteLine("Unsupported file format.");
                }
            }
            else if (Directory.Exists(path))
            {
                if (File.Exists(Path.Combine(path, ".meta.xml")))
                {
                    // -> Pack LWG
                    target += ".lwg";

                    var canvas = LwgCanvas.FromDirectory(path, true);
                    canvas.Save(target);
                }
                else
                {
                    // -> Pack XFL
                    target += ".xfl";

                    var archive = new XflArchive();
                    archive.AddDirectory(path);
                    archive.Save(target);
                }

                Console.WriteLine("Packed {0} to {1}", Path.GetFileName(path), target);
            }
            else
            {
                Console.Error.WriteLine("\"{0}\" is not a valid file resource!", path);
            }
        }