diff --git a/BizHawk.MultiClient/tools/CheatList.cs b/BizHawk.MultiClient/tools/CheatList.cs index 945c8edac3..e02e6dbcf0 100644 --- a/BizHawk.MultiClient/tools/CheatList.cs +++ b/BizHawk.MultiClient/tools/CheatList.cs @@ -114,6 +114,17 @@ namespace BizHawk.MultiClient return false; } + public void RemoveCheat(MemoryDomain d, int address) + { + for (int x = 0; x < cheatList.Count; x++) + { + if (cheatList[x].address == address && cheatList[x].domain.Name == d.Name) + { + cheatList.Remove(cheatList[x]); + } + } + } + public string GetCheatsPath() { string path; diff --git a/BizHawk.MultiClient/tools/Cheats.cs b/BizHawk.MultiClient/tools/Cheats.cs index ce9088b34b..be4b8cb8fa 100644 --- a/BizHawk.MultiClient/tools/Cheats.cs +++ b/BizHawk.MultiClient/tools/Cheats.cs @@ -149,6 +149,18 @@ namespace BizHawk.MultiClient CheatListView.Refresh(); } + public void RemoveCheat(Cheat c) + { + Changes(); + + Global.CheatList.RemoveCheat(c.domain, c.address); + + Global.RenderPanel.AddMessage("Cheat removed."); + if (!this.IsHandleCreated || this.IsDisposed) return; + DisplayCheatsList(); + CheatListView.Refresh(); + } + public void LoadCheatFromRecent(string file) { bool z = true; diff --git a/BizHawk.MultiClient/tools/HexEditor.cs b/BizHawk.MultiClient/tools/HexEditor.cs index be9a613ad7..cc92757f93 100644 --- a/BizHawk.MultiClient/tools/HexEditor.cs +++ b/BizHawk.MultiClient/tools/HexEditor.cs @@ -552,6 +552,73 @@ namespace BizHawk.MultiClient return -1; //Negative = no address highlighted } + private bool IsFrozen(int address) + { + return Global.CheatList.IsActiveCheat(Domain, address); + } + + private void ToggleFreeze() + { + int address = GetHighlightedAddress(); + if (IsFrozen(address)) + { + UnFreezeAddress(); + } + else + { + FreezeAddress(); + } + } + + private void UnFreezeAddress() + { + int address = GetHighlightedAddress(); + if (address >= 0) + { + Cheat c = new Cheat(); + c.address = address; + c.value = Domain.PeekByte(address); + c.domain = Domain; + Global.MainForm.Cheats1.RemoveCheat(c); + + switch (Global.Config.HexEditorDataSize) + { + default: + case 1: + break; + case 2: + Cheat c2 = new Cheat(); + c2.address = address + 1; + c2.domain = Domain; + c2.value = Domain.PeekByte(address + 1); + c2.Enable(); + Global.MainForm.Cheats1.RemoveCheat(c2); + break; + case 4: + Cheat c42 = new Cheat(); + c42.address = address + 1; + c42.domain = Domain; + c42.value = Domain.PeekByte(address + 1); + c42.Enable(); + Global.MainForm.Cheats1.RemoveCheat(c42); + Cheat c43 = new Cheat(); + c43.address = address + 2; + c43.domain = Domain; + c43.value = Domain.PeekByte(address + 2); + c43.Enable(); + Global.MainForm.Cheats1.RemoveCheat(c43); + Cheat c44 = new Cheat(); + c44.address = address + 3; + c44.domain = Domain; + c44.value = Domain.PeekByte(address + 3); + c44.Enable(); + Global.MainForm.Cheats1.RemoveCheat(c44); + break; + } + } + MemoryViewerBox.Refresh(); + } + private void FreezeAddress() { int address = GetHighlightedAddress(); @@ -885,6 +952,9 @@ namespace BizHawk.MultiClient DecrementAddress(); UpdateValues(); break; + case Keys.Space: + ToggleFreeze(); + break; } }