diff --git a/PKHeX.Core/Saves/SaveFileMetadata.cs b/PKHeX.Core/Saves/SaveFileMetadata.cs index b2c90ae73..8667adebc 100644 --- a/PKHeX.Core/Saves/SaveFileMetadata.cs +++ b/PKHeX.Core/Saves/SaveFileMetadata.cs @@ -55,11 +55,11 @@ public sealed record SaveFileMetadata(SaveFile SAV) /// Final save file data. public byte[] Finalize(byte[] data, BinaryExportSetting setting) { - if (Footer.Length != 0 && setting.HasFlag(BinaryExportSetting.IncludeFooter)) + if (HasFooter && !setting.HasFlag(BinaryExportSetting.ExcludeFooter)) data = [..data, ..Footer]; - if (Header.Length != 0 && setting.HasFlag(BinaryExportSetting.IncludeHeader)) + if (HasHeader && !setting.HasFlag(BinaryExportSetting.ExcludeHeader)) data = [..Header, ..data]; - if (setting != BinaryExportSetting.None) + if (!setting.HasFlag(BinaryExportSetting.ExcludeFinalize)) Handler?.Finalize(data); return data; } @@ -189,11 +189,17 @@ public string GetSuggestedExtension() /// Selected export extension public BinaryExportSetting GetSuggestedFlags(string? ext = null) { + // Do everything as default var flags = BinaryExportSetting.None; - if (ext == ".dsv") - flags |= BinaryExportSetting.IncludeFooter; - if (ext == ".gci" || SAV is IGCSaveFile {MemoryCard: null} || ext == ".sram") - flags |= BinaryExportSetting.IncludeHeader; + + if (FileName is not null) + { + // Try to support a couple formats changes that the user wants to remove from the file + if (FileName.EndsWith(".dsv") && ext is not ".dsv") + flags |= BinaryExportSetting.ExcludeFooter; + else if (FileName.EndsWith(".gci") && ext is not ".gci") + flags |= BinaryExportSetting.ExcludeHeader; + } return flags; } } diff --git a/PKHeX.Core/Saves/Util/BinaryExportSetting.cs b/PKHeX.Core/Saves/Util/BinaryExportSetting.cs index 181dcca6e..8debef8b3 100644 --- a/PKHeX.Core/Saves/Util/BinaryExportSetting.cs +++ b/PKHeX.Core/Saves/Util/BinaryExportSetting.cs @@ -6,6 +6,7 @@ namespace PKHeX.Core; public enum BinaryExportSetting { None, - IncludeFooter = 1 << 0, - IncludeHeader = 1 << 1, + ExcludeFooter = 1 << 0, + ExcludeHeader = 1 << 1, + ExcludeFinalize = 1 << 2, }