diff --git a/OpenRA.Game/Map/Map.cs b/OpenRA.Game/Map/Map.cs index d15b6c4629..8f0a295f26 100644 --- a/OpenRA.Game/Map/Map.cs +++ b/OpenRA.Game/Map/Map.cs @@ -648,12 +648,21 @@ namespace OpenRA toPackage.Update(file, Package.GetStream(file).ReadAllBytes()); if (!LockPreview) - toPackage.Update("map.png", SavePreview()); + { + var previewData = SavePreview(); + if (Package != toPackage || !Enumerable.SequenceEqual(previewData, Package.GetStream("map.png").ReadAllBytes())) + toPackage.Update("map.png", previewData); + } // Update the package with the new map data - var s = root.WriteToString(); - toPackage.Update("map.yaml", Encoding.UTF8.GetBytes(s)); - toPackage.Update("map.bin", SaveBinaryData()); + var textData = Encoding.UTF8.GetBytes(root.WriteToString()); + if (Package != toPackage || !Enumerable.SequenceEqual(textData, Package.GetStream("map.yaml").ReadAllBytes())) + toPackage.Update("map.yaml", textData); + + var binaryData = SaveBinaryData(); + if (Package != toPackage || !Enumerable.SequenceEqual(binaryData, Package.GetStream("map.bin").ReadAllBytes())) + toPackage.Update("map.bin", binaryData); + Package = toPackage; // Update UID to match the newly saved data diff --git a/OpenRA.Mods.Common/UpdateRules/UpdateUtils.cs b/OpenRA.Mods.Common/UpdateRules/UpdateUtils.cs index 2a55e386da..95791a1bc1 100644 --- a/OpenRA.Mods.Common/UpdateRules/UpdateUtils.cs +++ b/OpenRA.Mods.Common/UpdateRules/UpdateUtils.cs @@ -305,7 +305,14 @@ namespace OpenRA.Mods.Common.UpdateRules public static void Save(this YamlFileSet files) { foreach (var file in files) - file.Item1?.Update(file.Item2, Encoding.UTF8.GetBytes(file.Item3.WriteToString())); + { + if (file.Item1 == null) + continue; + + var textData = Encoding.UTF8.GetBytes(file.Item3.WriteToString()); + if (!Enumerable.SequenceEqual(textData, file.Item1.GetStream(file.Item2).ReadAllBytes())) + file.Item1.Update(file.Item2, textData); + } } /// Checks if node is a removal (has '-' prefix)