static void Main(string[] args) { UndertaleData data = UndertaleIO.Read(new FileStream(@"C:\Program Files (x86)\Steam\steamapps\common\undertale\data.win", FileMode.Open)); //UndertaleIO.Write(new FileStream("newdata.win", FileMode.Create), data); UndertaleDebugData debug = DebugDataGenerator.GenerateDebugData(data, DebugDataMode.Decompiled); using (FileStream stream = new FileStream("data.yydebug", FileMode.Create)) { using (UndertaleWriter writer = new UndertaleWriter(stream)) { debug.FORM.Serialize(writer); } } }
private async Task SaveFile(string filename) { if (Data == null || Data.UnsupportedBytecodeVersion) { return; } if (IsGMS2 == Visibility.Visible) { MessageBox.Show("This is not yet fully stable and may break. You have been warned.", "GMS2 game", MessageBoxButton.OK, MessageBoxImage.Warning); } LoaderDialog dialog = new LoaderDialog("Saving", "Saving, please wait..."); dialog.Owner = this; FilePath = filename; if (System.IO.Path.GetDirectoryName(FilePath) != System.IO.Path.GetDirectoryName(filename)) { CloseChildFiles(); } DebugDataMode debugMode = DebugDataMode.NoDebug; if (!Data.GeneralInfo.DisableDebugger) // TODO: I think the game itself can also use the .yydebug file on crash reports { DebugDataDialog debugDialog = new DebugDataDialog(); debugDialog.Owner = this; debugDialog.ShowDialog(); debugMode = debugDialog.Result; // TODO: Add an option to generate debug data for just selected scripts (to make running faster / make the full assembly not take forever to load) } Task t = Task.Run(() => { try { using (var stream = new FileStream(filename, FileMode.Create)) { UndertaleIO.Write(stream, Data); } if (debugMode != DebugDataMode.NoDebug) { Debug.WriteLine("Generating debugger data..."); UndertaleDebugData debugData = DebugDataGenerator.GenerateDebugData(Data, debugMode); using (FileStream stream = new FileStream(System.IO.Path.ChangeExtension(FilePath, ".yydebug"), FileMode.Create)) { using (UndertaleWriter writer = new UndertaleWriter(stream)) { debugData.FORM.Serialize(writer); } } } } catch (Exception e) { MessageBox.Show("An error occured while trying to save:\n" + e.Message, "Save error", MessageBoxButton.OK, MessageBoxImage.Error); } Dispatcher.Invoke(() => { dialog.Hide(); }); }); dialog.ShowDialog(); await t; }