diff --git a/BizHawk.Client.Common/tools/CheatList.cs b/BizHawk.Client.Common/tools/CheatList.cs index 6a2aa24c56..9be31653a5 100644 --- a/BizHawk.Client.Common/tools/CheatList.cs +++ b/BizHawk.Client.Common/tools/CheatList.cs @@ -131,7 +131,8 @@ namespace BizHawk.Client.Common public void AddRange(IEnumerable cheats) { - _cheatList.AddRange(cheats); + _cheatList.AddRange( + cheats.Where(c => !_cheatList.Contains(c))); Changes = true; } @@ -187,7 +188,7 @@ namespace BizHawk.Client.Common public void RemoveRange(IEnumerable cheats) { - foreach (var cheat in cheats) + foreach (var cheat in cheats.ToList()) { _cheatList.Remove(cheat); } diff --git a/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.cs b/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.cs index 7620a66111..3b34dea08c 100644 --- a/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.cs +++ b/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.cs @@ -791,6 +791,34 @@ namespace BizHawk.Client.EmuHawk } } + private void FreezeSecondaries() + { + var cheats = new List(); + foreach (var address in _secondaryHighlightedAddresses) + { + var watch = Watch.GenerateWatch( + _domain, + address, + WatchSize, + Watch.DisplayType.Hex, + string.Empty, + _bigEndian); + + cheats.Add(new Cheat( + watch, + watch.Value ?? 0)); + } + + Global.CheatList.AddRange(cheats); + } + + private void UnfreezeSecondaries() + { + Global.CheatList.RemoveRange( + Global.CheatList.Where( + cheat => !cheat.IsSeparator && cheat.Domain == _domain && _secondaryHighlightedAddresses.Contains(cheat.Address.Value))); + } + private void SaveFileBinary(string path) { var file = new FileInfo(path); @@ -1348,22 +1376,12 @@ namespace BizHawk.Client.EmuHawk if (IsFrozen(HighlightedAddress.Value)) { UnFreezeAddress(HighlightedAddress.Value); + UnfreezeSecondaries(); } else { FreezeAddress(HighlightedAddress.Value); - } - } - - foreach (var addr in _secondaryHighlightedAddresses) - { - if (IsFrozen(addr)) - { - UnFreezeAddress(addr); - } - else - { - FreezeAddress(addr); + FreezeSecondaries(); } }