private static void SaveAllBitmaps(string path, GfxFileReader file = null) { Console.WriteLine($"Start saving: " + path); //Parallel.For(0, gfxFile.GetImageCount(), (i) => { SaveToBitmap(path, i); }); file = file ?? gfxFile; for (int i = 0; i < file.GetImageCount(); i++) { try { SaveToBitmap(path, i, file); }catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); } } Console.WriteLine($"Saved: " + path); }
static void Main(string[] args) { Console.WriteLine("=Settler IV image exporter/importer========================="); Console.WriteLine("Place this exe in the Settler IV folder!"); Console.WriteLine("Exported images will be saved to the \"export/gfx/%GROUP%/\" folder."); Console.WriteLine("Exported sounds will be saved to the \"export/snd/\" folder. Run with --snd to extract sound files."); Console.WriteLine("============================================================"); if (args.Contains("--snd")) { // --snd argument has been passed to the exe sndFile = LoadSnd("Snd/0"); if (sndFile == null) { Console.WriteLine("Error: Cannot export sounds because 0.sil or 0.snd is not available."); } else { SaveAllSounds("Snd/0"); } } Console.WriteLine(""); Console.WriteLine("Export all: (1), Export one group: (2), Export one single image: (3), Import one image collection (4)"); Console.WriteLine(""); string choice = Console.ReadLine(); switch (choice) { case "1": AskRemoveShadowsAndAlpha(); //Parallel.For(0, 45, (i) => { // var gfx = Load("GFX/" + i); // if (gfx == null) // return; // SaveAllBitmaps("GFX/" + i, gfx); //}); for (int i = 0; i < 45; i++) { Load("GFX/" + i); SaveAllBitmaps("GFX/" + i); } break; default: case "2": { REPEAT: Console.WriteLine("What group would you like to export the images from?"); string choiceGroup = Console.ReadLine(); string path = "GFX/" + choiceGroup; if (!File.Exists(path + ".gfx")) { Console.WriteLine($"Group {path} does not exist!"); goto REPEAT; } AskRemoveShadowsAndAlpha(); Load(path); SaveAllBitmaps(path); } break; case "3": { REPEAT_SINGLE_GROUP: Console.WriteLine("What group would you like to export an image from?"); string choiceGroup = Console.ReadLine(); string path = "GFX/" + choiceGroup; if (!File.Exists(path + ".gfx")) { Console.WriteLine($"Group {path} does not exist!"); goto REPEAT_SINGLE_GROUP; } Load(path); REPEAT_SINGLE_IMAGE: Console.WriteLine($"What number has the image you want to export? This group contains: {gfxFile.GetImageCount()} images"); string choiceImage = Console.ReadLine(); int image = int.Parse(choiceImage); if (image > gfxFile.GetImageCount()) { Console.WriteLine($"There is no image nr. {image}!"); goto REPEAT_SINGLE_IMAGE; } AskRemoveShadowsAndAlpha(); SaveToBitmap(path, image, gfxFile); } break; case "4": { //IMPORT Console.WriteLine("=IMPORT====================================================="); Console.WriteLine("To import files, save them to the export/gfx/%GROUP%/%id%/ folder."); Console.WriteLine("The image collection has to be complete for the import to work"); Console.WriteLine("To see what image has what index, export the group with (1-3) in the main menu."); Console.WriteLine("Example would be: export/gfx/14/1 -> replaces the woodcutter images of the trojan"); Console.WriteLine(""); Console.WriteLine("The finished gfx (and, but not neccesary, gil) file will be saved next to this programm."); Console.WriteLine("Replace the original files in the gfx folder with the newly generated ones"); Console.WriteLine("============================================================"); Console.WriteLine(""); REPEAT_SINGLE_GROUP: Console.WriteLine("What group would you like to import a file into?"); string choiceGroup = Console.ReadLine(); string path = "GFX/" + choiceGroup; if (!File.Exists(path + ".gfx")) { Console.WriteLine($"Group {path} does not exist!"); goto REPEAT_SINGLE_GROUP; } Load(path); REPEAT_SINGLE_IMAGE: Console.WriteLine($"What number has the first image in the collection you want to import into the game files? This group contains: {gfxFile.GetImageCount()} images"); string choiceImage = Console.ReadLine(); int image = int.Parse(choiceImage); if (image > gfxFile.GetImageCount()) { Console.WriteLine($"There is no image nr. {image}!"); goto REPEAT_SINGLE_IMAGE; } //AskRemoveShadowsAndAlpha(); //SaveToBitmap(path, image, gfxFile); ImageData[] data = LoadFromBitmap(path, image, gfxFile); gfxFile.ChangeImageData(choiceGroup, image, data); } break; case "5": { //Secret test key REPEAT_SINGLE_GROUP: Console.WriteLine("What group would you like to export an image from?"); string choiceGroup = Console.ReadLine(); string path = "GFX/" + choiceGroup; if (!File.Exists(path + ".gfx")) { Console.WriteLine($"Group {path} does not exist!"); goto REPEAT_SINGLE_GROUP; } Load(path); gfxFile.RemoveDILDependence(); REPEAT_SINGLE_IMAGE: Console.WriteLine($"What number has the image you want to export? This group contains: {gfxFile.GetImageCount()} images"); string choiceImage = Console.ReadLine(); int image = int.Parse(choiceImage); if (image > gfxFile.GetImageCount()) { Console.WriteLine($"There is no image nr. {image}!"); goto REPEAT_SINGLE_IMAGE; } AskRemoveShadowsAndAlpha(); SaveToBitmap(path, image, gfxFile); } break; } Console.WriteLine(""); Console.WriteLine("======"); Console.WriteLine("FINISHED LOADING"); Console.WriteLine("You may close this app now..."); Console.WriteLine("======"); gfxFile = null; GC.Collect(); Console.ReadKey(); }