Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- internal class Program
- {
- private static void <Main>$(string[] args)
- {
- Console.WriteLine("[INFO] Starting AmnesiaExtractor v2.0");
- if (args.Length != 0 || OperatingSystem.IsWindows())
- {
- if (OperatingSystem.IsMacOS())
- {
- Console.WriteLine("[WARNING] macOS is an unsupported platform");
- }
- if (args.Length == 0 || !Directory.Exists(args[0]))
- {
- if (OperatingSystem.IsWindows())
- {
- Console.WriteLine("[INFO] No directory/invalid directory specified. Defaulting to default Kid A Mnesia Exhibition install location.");
- args = new string[1] { "C:\\Program Files\\Epic Games\\KidAMnesiaExhibition" };
- if (!Directory.Exists(args[0]))
- {
- Console.WriteLine("[FATAL] Default directory does not exist.");
- Console.WriteLine("[FATAL] Please drop the folder of the game you are try to extract on to AmnesiaExtractor.exe");
- Environment.Exit(1);
- }
- }
- else
- {
- Console.WriteLine("[FATAL] Argument 0 is not a valid folder, please provide a valid folder");
- Environment.Exit(1);
- }
- }
- Game game = new Game();
- game.FindGame(args[0]);
- game.VerifyFiles();
- game.RetrieveKey();
- DefaultFileProvider defaultFileProvider = new DefaultFileProvider(Path.Combine(args[0], "Paperbag", "Content", "Paks"), SearchOption.TopDirectoryOnly);
- defaultFileProvider.Initialize();
- defaultFileProvider.SubmitKey(default(FGuid), new FAesKey(game.AesKey));
- defaultFileProvider.LoadMappings();
- defaultFileProvider.LoadLocalization();
- string text = Path.Combine(AppContext.BaseDirectory, game.GameName);
- int num = 0;
- while (Directory.Exists(text) && (args.Length <= 1 || !args.Contains("ogg")))
- {
- num++;
- text = Path.Combine(AppContext.BaseDirectory, game.GameName + " (" + num + ")");
- }
- string text2 = Path.Combine(text, "wems");
- string text3 = Path.Combine(text, "unknown");
- string text4 = Path.Combine(text, "converted");
- if (args.Length > 1 && args.Contains("debug"))
- {
- DisplayOptions.DisplayDebug = true;
- }
- Directory.CreateDirectory(text);
- Directory.CreateDirectory(text2);
- Directory.CreateDirectory(text3);
- Directory.CreateDirectory(text4);
- int num2 = 0;
- if (args.Length <= 1 || !args.Contains("ogg"))
- {
- foreach (KeyValuePair<string, GameFile> file in defaultFileProvider.Files)
- {
- num2++;
- Console.Write("\r[INFO] Scanning files for audio to export: " + num2 + "/" + defaultFileProvider.Files.Count());
- if (!file.Key.StartsWith(game.GameName + "/Content/WwiseAudio/Media") || !file.Key.EndsWith(".uasset"))
- {
- continue;
- }
- IEnumerable<UObject> enumerable = defaultFileProvider.LoadObjectExports(file.Key);
- foreach (UObject item in enumerable)
- {
- if (!item.Name.Contains("AkMediaAssetData"))
- {
- continue;
- }
- if (DisplayOptions.DisplayDebug)
- {
- Console.WriteLine("Audio asset " + item.Outer?.ToString() + " found");
- Console.WriteLine("Attempting to save WEM data...");
- }
- if (defaultFileProvider.Files.ContainsKey(file.Key.Replace(".uasset", ".ubulk")))
- {
- byte[] array = defaultFileProvider.SaveAsset(file.Key.Replace(".uasset", ".ubulk"));
- byte[] exp = defaultFileProvider.SaveAsset(file.Key.Replace(".uasset", ".uexp"));
- string text5 = file.Key.Split("/").Last().Split(".")
- .First();
- byte[] array2 = Extractor.Extract(array, exp);
- if (array2.Length == 0)
- {
- File.WriteAllBytes(Path.Combine(text3, text5 + ".unknown"), array);
- }
- else
- {
- File.WriteAllBytes(Path.Combine(text2, text5 + ".wem"), array2);
- }
- }
- else if (DisplayOptions.DisplayDebug)
- {
- Console.WriteLine("No data, skipping..");
- }
- }
- }
- Console.WriteLine();
- num2 = 0;
- foreach (KeyValuePair<string, GameFile> file2 in defaultFileProvider.Files)
- {
- num2++;
- Console.Write("\r[INFO] Scanning files for names: " + num2 + "/" + defaultFileProvider.Files.Count());
- if (!file2.Key.StartsWith(game.GameName + "/Content/WwiseAudio/Events/") || !file2.Key.EndsWith(".uasset"))
- {
- continue;
- }
- IEnumerable<UObject> enumerable2 = defaultFileProvider.LoadObjectExports(file2.Key);
- foreach (UObject item2 in enumerable2)
- {
- if (!item2.Name.Contains("AkAudioEventData"))
- {
- continue;
- }
- string value = JsonConvert.SerializeObject(item2);
- AkMediaAsset akMediaAsset = JsonConvert.DeserializeObject<AkMediaAsset>(value);
- if (akMediaAsset == null)
- {
- continue;
- }
- List<INameFinderData> list = NameFinder.FindName(akMediaAsset);
- foreach (INameFinderData item3 in list)
- {
- if (item3.Name == null || item3.Id == null)
- {
- continue;
- }
- if (DisplayOptions.DisplayDebug)
- {
- Console.WriteLine("Searching for " + item3.Id + ".wem...");
- }
- if (File.Exists(Path.Combine(text2, item3.Id + ".wem")))
- {
- if (DisplayOptions.DisplayDebug)
- {
- Console.WriteLine("Found file, renaming...");
- }
- File.Move(Path.Combine(text2, item3.Id + ".wem"), Path.Combine(text2, item3.Name + " (" + item3.Id + ").wem"));
- }
- }
- }
- }
- Console.WriteLine();
- }
- num2 = 0;
- int num3 = 0;
- int num4 = 0;
- Converter converter = new Converter();
- converter.VerifyFiles();
- converter.oggPath = text4;
- string[] files = Directory.GetFiles(text2);
- string[] array3 = files;
- foreach (string wem in array3)
- {
- num2++;
- Console.Write("\r[INFO] Converting files: " + num2 + "/" + files.Length + " (" + num3 + "/" + num2 + " failed, " + num4 + "/" + num2 + " unknown)");
- if (!args.Contains("dry"))
- {
- switch (converter.ConvertWem(wem))
- {
- case 1:
- num3++;
- break;
- case 2:
- num4++;
- break;
- }
- }
- }
- Console.WriteLine();
- Console.WriteLine("[INFO] Files saved to " + text);
- }
- Console.WriteLine("Press any key to exit...");
- Console.ReadKey();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment