diff --git a/BizHawk.MultiClient/tools/CheatList.cs b/BizHawk.MultiClient/tools/CheatList.cs index 539c5e5586..945c8edac3 100644 --- a/BizHawk.MultiClient/tools/CheatList.cs +++ b/BizHawk.MultiClient/tools/CheatList.cs @@ -252,6 +252,18 @@ namespace BizHawk.MultiClient Global.MainForm.UpdateCheatStatus(); } + public void Remove(MemoryDomain domain, int address) + { + for (int x = 0; x < cheatList.Count; x++) + { + if (cheatList[x].domain == domain && cheatList[x].address == address) + { + MemoryPulse.Remove(domain, address); + cheatList.Remove(cheatList[x]); + } + } + } + public void Add(Cheat c) { cheatList.Add(c); diff --git a/BizHawk.MultiClient/tools/RamSearch.cs b/BizHawk.MultiClient/tools/RamSearch.cs index d5acf41802..c52527fc32 100644 --- a/BizHawk.MultiClient/tools/RamSearch.cs +++ b/BizHawk.MultiClient/tools/RamSearch.cs @@ -1821,6 +1821,33 @@ namespace BizHawk.MultiClient FreezeAddress(); } + private void UnfreezeAddress() + { + ListView.SelectedIndexCollection indexes = SearchListView.SelectedIndices; + if (indexes.Count > 0) + { + for (int i = 0; i < indexes.Count; i++) + { + switch (searchList[indexes[i]].type) + { + case atype.BYTE: + Global.CheatList.Remove(Domain, searchList[indexes[i]].address); + break; + case atype.WORD: + Global.CheatList.Remove(Domain, searchList[indexes[i]].address); + Global.CheatList.Remove(Domain, searchList[indexes[i]].address + 1); + break; + case atype.DWORD: + Global.CheatList.Remove(Domain, searchList[indexes[i]].address); + Global.CheatList.Remove(Domain, searchList[indexes[i]].address + 1); + Global.CheatList.Remove(Domain, searchList[indexes[i]].address + 2); + Global.CheatList.Remove(Domain, searchList[indexes[i]].address + 3); + break; + } + } + } + } + private void FreezeAddress() { ListView.SelectedIndexCollection indexes = SearchListView.SelectedIndices; @@ -1915,6 +1942,22 @@ namespace BizHawk.MultiClient { for (int x = 0; x < contextMenuStrip1.Items.Count; x++) contextMenuStrip1.Items[x].Visible = true; + + if (indexes.Count == 1) + { + if (Global.CheatList.IsActiveCheat(Domain, searchList[indexes[0]].address)) + { + contextMenuStrip1.Items[6].Text = "&Unfreeze address"; + contextMenuStrip1.Items[6].Image = + BizHawk.MultiClient.Properties.Resources.Unfreeze; + } + else + { + contextMenuStrip1.Items[6].Text = "&Freeze address"; + contextMenuStrip1.Items[6].Image = + BizHawk.MultiClient.Properties.Resources.Freeze; + } + } } } @@ -1935,7 +1978,10 @@ namespace BizHawk.MultiClient private void freezeAddressToolStripMenuItem1_Click(object sender, EventArgs e) { - FreezeAddress(); + if (sender.ToString().Contains("Unfreeze")) + UnfreezeAddress(); + else + FreezeAddress(); } private void CheckDomainMenuItems() diff --git a/BizHawk.MultiClient/tools/RamWatch.cs b/BizHawk.MultiClient/tools/RamWatch.cs index ac01e8ee52..f869f92e8b 100644 --- a/BizHawk.MultiClient/tools/RamWatch.cs +++ b/BizHawk.MultiClient/tools/RamWatch.cs @@ -1033,10 +1033,9 @@ namespace BizHawk.MultiClient if (indexes.Count == 1) { - /* if (Global.CheatList.IsActiveCheat(Domain, watchList[indexes[0]].address)) { - contextMenuStrip1.Items[4].Text = "Unfreeze address"; + contextMenuStrip1.Items[4].Text = "&Unfreeze address"; contextMenuStrip1.Items[4].Image = BizHawk.MultiClient.Properties.Resources.Unfreeze; } @@ -1046,7 +1045,6 @@ namespace BizHawk.MultiClient contextMenuStrip1.Items[4].Image = BizHawk.MultiClient.Properties.Resources.Freeze; } - */ //TODO: When Unfreeze is implemented } } @@ -1177,11 +1175,10 @@ namespace BizHawk.MultiClient private void freezeToolStripMenuItem_Click(object sender, EventArgs e) { - /* if (sender.ToString().Contains("Unfreeze")) + UnfreezeAddress(); + else FreezeAddress(); - */ - FreezeAddress(); } private int WORDGetLowerByte(int value) @@ -1269,6 +1266,33 @@ namespace BizHawk.MultiClient } } + private void UnfreezeAddress() + { + ListView.SelectedIndexCollection indexes = WatchListView.SelectedIndices; + if (indexes.Count > 0) + { + for (int i = 0; i < indexes.Count; i++) + { + switch (watchList[indexes[i]].type) + { + case atype.BYTE: + Global.CheatList.Remove(Domain, watchList[indexes[i]].address); + break; + case atype.WORD: + Global.CheatList.Remove(Domain, watchList[indexes[i]].address); + Global.CheatList.Remove(Domain, watchList[indexes[i]].address + 1); + break; + case atype.DWORD: + Global.CheatList.Remove(Domain, watchList[indexes[i]].address); + Global.CheatList.Remove(Domain, watchList[indexes[i]].address + 1); + Global.CheatList.Remove(Domain, watchList[indexes[i]].address + 2); + Global.CheatList.Remove(Domain, watchList[indexes[i]].address + 3); + break; + } + } + } + } + private void freezeAddressToolStripMenuItem_Click(object sender, EventArgs e) { FreezeAddress();