public void btnBlastToggle_Click(object sender, EventArgs e) { if (Global.Emulator is NullEmulator) { return; } if (RTC_Core.currentStashkey == null || RTC_Core.currentStashkey.blastlayer.Layer.Count == 0) { IsCorruptionApplied = false; return; } if (!IsCorruptionApplied) { IsCorruptionApplied = true; RTC_Core.currentStashkey.blastlayer.Apply(); } else { IsCorruptionApplied = false; RTC_HellgenieEngine.ClearCheats(); if (RTC_Core.lastBlastLayerBackup != null) { RTC_Core.lastBlastLayerBackup.Apply(); } } RTC_Restore.SaveRestore(); }
public static BlastUnit getBlastUnit(string _domain, long _address) { BlastUnit bu = null; switch (SelectedEngine) { case CorruptionEngine.NIGHTMARE: bu = RTC_NightmareEngine.GenerateUnit(_domain, _address); break; case CorruptionEngine.HELLGENIE: bu = RTC_HellgenieEngine.GenerateUnit(_domain, _address); break; case CorruptionEngine.DISTORTION: RTC_DistortionEngine.AddUnit(RTC_DistortionEngine.GenerateUnit(_domain, _address)); bu = RTC_DistortionEngine.GetUnit(); break; case CorruptionEngine.FREEZE: bu = RTC_FreezeEngine.GenerateUnit(_domain, _address); break; case CorruptionEngine.NONE: return(null); } return(bu); }
static void STEP_REWIND() { if (RTC_Core.ClearCheatsOnRewind) { RTC_HellgenieEngine.ClearCheats(); } RTC_TimeFlow.RewindStep(); }
public static void LOAD_GAME_BEGIN() { if (DisableRTC) { return; } isNormalAdvance = false; RTC_NetCore.HugeOperationStart(); RTC_HellgenieEngine.ClearCheats(true); RTC_PipeEngine.ClearPipes(true); }
static void STEP_REWIND() { if (DisableRTC) { return; } if (RTC_Core.ClearCheatsOnRewind) { RTC_HellgenieEngine.ClearCheats(); } if (RTC_Core.ClearPipesOnRewind) { RTC_PipeEngine.ClearPipes(); } }
public override void Apply() { try { if (!IsEnabled) { return; } MemoryDomain md = RTC_MemoryZones.getDomain(Domain); if (md == null) { return; } string cheatName = "RTC Cheat|" + Domain + "|" + address.ToString() + "|" + displayType.ToString() + "|" + bigEndian.ToString() + "|" + value.ToString() + "|" + IsEnabled.ToString() + "|" + IsFreeze.ToString(); if (!IsFreeze) { Watch somewatch = Watch.GenerateWatch(md, address, size, displayType, bigEndian, cheatName, value, 0, 0); Cheat ch = new Cheat(somewatch, value, null, true); Global.CheatList.Add(ch); RTC_HellgenieEngine.RemoveExcessCheats(); } else { RTC_Core.hexeditor.FreezeAddress(address, cheatName); RTC_FreezeEngine.RemoveExcessCheats(); } } catch (Exception ex) { MessageBox.Show("The BlastCheat apply() function threw up. \n" + "This is not a BizHawk error so you should probably send a screenshot of this to the devs\n\n" + ex.ToString()); return; } }
public static void LOAD_GAME_DONE() { if (!RTC_Core.isLoaded) { return; } if (RTC_Core.currentGameName == lastGameName) { RTC_MemoryZones.RefreshAndKeepDomains(); } RTC_HellgenieEngine.ClearCheats(); //Load Game vars into RTC_Core PathEntry pathEntry = Global.Config.PathEntries[Global.Game.System, "Savestates"] ?? Global.Config.PathEntries[Global.Game.System, "Base"]; RTC_Core.currentGameSystem = RTC_Core.EmuFolderCheck(pathEntry.SystemDisplayName); RTC_Core.currentGameName = PathManager.FilesystemSafeName(Global.Game); RTC_Core.lastOpenRom = GlobalWin.MainForm.CurrentlyOpenRom; RTC_RPC.RefreshPlugin(); if (RTC_Core.currentGameName != lastGameName) { RTC_TimeStack.Reset(); RTC_MemoryZones.AutoSelectDomains(); } if (RTC_MemoryZones.pendingSelectedDomains != null) { RTC_MemoryZones.setSelectedDomains(RTC_MemoryZones.pendingSelectedDomains); RTC_MemoryZones.pendingSelectedDomains = null; } lastGameName = RTC_Core.currentGameName; //RTC_Restore.SaveRestore(); RTC_RPC.SendToKillSwitch("UNFREEZE"); }
public static BlastUnit getBlastUnit(string _domain, long _address) { //Will generate a blast unit depending on which Corruption Engine is currently set. //Some engines like Distortion may not return an Unit depending on the current state on things. BlastUnit bu = null; switch (SelectedEngine) { case CorruptionEngine.NIGHTMARE: bu = RTC_NightmareEngine.GenerateUnit(_domain, _address); break; case CorruptionEngine.HELLGENIE: bu = RTC_HellgenieEngine.GenerateUnit(_domain, _address); break; case CorruptionEngine.DISTORTION: RTC_DistortionEngine.AddUnit(RTC_DistortionEngine.GenerateUnit(_domain, _address)); bu = RTC_DistortionEngine.GetUnit(); break; case CorruptionEngine.FREEZE: bu = RTC_FreezeEngine.GenerateUnit(_domain, _address); break; case CorruptionEngine.PIPE: bu = RTC_PipeEngine.GenerateUnit(_domain, _address); break; case CorruptionEngine.VECTOR: bu = RTC_VectorEngine.GenerateUnit(_domain, _address); break; case CorruptionEngine.NONE: return(null); } return(bu); }
private void cbSelectedEngine_SelectedIndexChanged(object sender, EventArgs e) { gbNightmareEngine.Visible = false; gbHellgenieEngine.Visible = false; gbDistortionEngine.Visible = false; gbFreezeEngine.Visible = false; gbExternalRomPlugin.Visible = false; gbMemoryZonesManagement.Visible = true; gbFreezeEngineActive.Visible = false; RTC_Core.ghForm.pnIntensity.Visible = true; btnAutoCorrupt.ForeColor = Color.OrangeRed; switch (cbSelectedEngine.SelectedItem.ToString()) { case "Nightmare Engine": RTC_Core.SelectedEngine = CorruptionEngine.NIGHTMARE; gbNightmareEngine.Visible = true; break; case "Hellgenie Engine": RTC_Core.SelectedEngine = CorruptionEngine.HELLGENIE; gbHellgenieEngine.Visible = true; break; case "Distortion Engine": RTC_Core.SelectedEngine = CorruptionEngine.DISTORTION; gbDistortionEngine.Visible = true; break; case "Freeze Engine": RTC_Core.SelectedEngine = CorruptionEngine.FREEZE; gbFreezeEngine.Visible = true; break; case "External ROM Plugin": RTC_Core.SelectedEngine = CorruptionEngine.EXTERNALROM; gbExternalRomPlugin.Visible = true; RTC_Core.AutoCorrupt = false; btnAutoCorrupt.ForeColor = Color.Silver; RTC_Core.ghForm.pnIntensity.Visible = false; break; default: break; } if (cbSelectedEngine.SelectedItem.ToString() == "External ROM Plugin") { labelBlastRadius.Visible = false; labelIntensity.Visible = false; labelIntensityTimes.Visible = false; labelErrorDelay.Visible = false; labelErrorDelaySteps.Visible = false; nmIteratorSteps.Visible = false; nmIntensity.Visible = false; track_ErrorDelay.Visible = false; track_Intensity.Visible = false; cbBlastRadius.Visible = false; gbMemoryZonesManagement.Visible = false; } else if (cbSelectedEngine.SelectedItem.ToString() == "Freeze Engine") { labelBlastRadius.Visible = true; labelIntensity.Visible = true; labelIntensityTimes.Visible = true; labelErrorDelay.Visible = true; labelErrorDelaySteps.Visible = true; nmIteratorSteps.Visible = true; nmIntensity.Visible = true; track_ErrorDelay.Visible = true; track_Intensity.Visible = true; cbBlastRadius.Visible = true; gbMemoryZonesManagement.Visible = false; gbFreezeEngineActive.Visible = true; } else { labelBlastRadius.Visible = true; labelIntensity.Visible = true; labelIntensityTimes.Visible = true; labelErrorDelay.Visible = true; labelErrorDelaySteps.Visible = true; nmIteratorSteps.Visible = true; nmIntensity.Visible = true; track_ErrorDelay.Visible = true; track_Intensity.Visible = true; cbBlastRadius.Visible = true; } RTC_HellgenieEngine.ClearCheats(); if (RTC_Core.tfForm != null && RTC_Core.tfForm.Visible) { RTC_Core.tfForm.RecalculateCorruptFactor(); } RTC_Restore.SaveRestore(); }
private void btnClearCheats_Click(object sender, EventArgs e) { RTC_HellgenieEngine.ClearCheats(); //RTC_Restore.SaveRestore(); }
private void cbSelectedEngine_SelectedIndexChanged(object sender, EventArgs e) { gbNightmareEngine.Visible = false; gbHellgenieEngine.Visible = false; gbDistortionEngine.Visible = false; gbFreezeEngine.Visible = false; gbPipeEngine.Visible = false; gbVectorEngine.Visible = false; gbExternalRomPlugin.Visible = false; pnCustomPrecision.Visible = false; RTC_Core.coreForm.btnAutoCorrupt.Visible = true; RTC_Core.ghForm.pnIntensity.Visible = true; RTC_Core.ecForm.pnGeneralParameters.Visible = true; switch (cbSelectedEngine.SelectedItem.ToString()) { case "Nightmare Engine": RTC_Core.SelectedEngine = CorruptionEngine.NIGHTMARE; gbNightmareEngine.Visible = true; pnCustomPrecision.Visible = true; break; case "Hellgenie Engine": RTC_Core.SelectedEngine = CorruptionEngine.HELLGENIE; gbHellgenieEngine.Visible = true; pnCustomPrecision.Visible = true; break; case "Distortion Engine": RTC_Core.SelectedEngine = CorruptionEngine.DISTORTION; gbDistortionEngine.Visible = true; pnCustomPrecision.Visible = true; break; case "Freeze Engine": RTC_Core.SelectedEngine = CorruptionEngine.FREEZE; gbFreezeEngine.Visible = true; pnCustomPrecision.Visible = true; break; case "Pipe Engine": RTC_Core.SelectedEngine = CorruptionEngine.PIPE; gbPipeEngine.Visible = true; pnCustomPrecision.Visible = true; break; case "Vector Engine": RTC_Core.SelectedEngine = CorruptionEngine.VECTOR; gbVectorEngine.Visible = true; break; case "External ROM Plugin": RTC_Core.SelectedEngine = CorruptionEngine.EXTERNALROM; gbExternalRomPlugin.Visible = true; RTC_Core.coreForm.AutoCorrupt = false; RTC_Core.coreForm.btnAutoCorrupt.Visible = false; RTC_Core.ecForm.pnGeneralParameters.Visible = false; RTC_Core.ghForm.pnIntensity.Visible = false; break; default: break; } RTC_Core.SendCommandToBizhawk(new RTC_Command(CommandType.REMOTE_SET_ENGINE) { objectValue = RTC_Core.SelectedEngine }); if (cbSelectedEngine.SelectedItem.ToString() == "External ROM Plugin") { labelBlastRadius.Visible = false; labelIntensity.Visible = false; labelIntensityTimes.Visible = false; labelErrorDelay.Visible = false; labelErrorDelaySteps.Visible = false; nmErrorDelay.Visible = false; nmIntensity.Visible = false; track_ErrorDelay.Visible = false; track_Intensity.Visible = false; cbBlastRadius.Visible = false; } else if (cbSelectedEngine.SelectedItem.ToString() == "Freeze Engine") { labelBlastRadius.Visible = true; labelIntensity.Visible = true; labelIntensityTimes.Visible = true; labelErrorDelay.Visible = true; labelErrorDelaySteps.Visible = true; nmErrorDelay.Visible = true; nmIntensity.Visible = true; track_ErrorDelay.Visible = true; track_Intensity.Visible = true; cbBlastRadius.Visible = true; } else { labelBlastRadius.Visible = true; labelIntensity.Visible = true; labelIntensityTimes.Visible = true; labelErrorDelay.Visible = true; labelErrorDelaySteps.Visible = true; nmErrorDelay.Visible = true; nmIntensity.Visible = true; track_ErrorDelay.Visible = true; track_Intensity.Visible = true; cbBlastRadius.Visible = true; } cbSelectedEngine.BringToFront(); RTC_HellgenieEngine.ClearCheats(); RTC_PipeEngine.ClearPipes(); }
public void btnCorrupt_Click(object sender, EventArgs e) { if (RTC_Core.coreForm.cbClearCheatsOnRewind.Checked == true) { RTC_HellgenieEngine.ClearCheats(); } if (cbAutoLoadState.Checked && btnCorrupt.Text.ToUpper() != "MERGE") { if (btnParentKeys[Convert.ToInt32(currentSelectedState)] != null) { if (!LoadState()) { return; } } else { GlobalWin.Sound.StopSound(); MessageBox.Show("There is no SaveState in the selected box,\nPress 'Switch: Save/Load State' then Press 'SAVE'"); GlobalWin.Sound.StartSound(); return; } } if (rbCorrupt.Checked) { BlastLayer bl = RTC_Core.Blast(); if (bl != null) { IsCorruptionApplied = true; } if (cbStashCorrupted.Checked) { if (bl == null) { return; } RTC_Core.currentStashkey = new StashKey(RTC_Core.GetRandomKey(), btnParentKeys[Convert.ToInt32(currentSelectedState)], bl); DontLoadSelectedStash = true; lbStashHistory.Items.Add(RTC_Core.currentStashkey); lbStashHistory.SelectedIndex = lbStashHistory.Items.Count - 1; lbStockpile.ClearSelected(); } if (cbRenderAtCorrupt.Checked) { StartRender(); } } else if (rbInject.Checked) { if (lbStashHistory.SelectedIndex == -1 && lbStockpile.SelectedIndex == -1) { return; } if (cbAutoLoadState.Checked) { if (btnParentKeys[Convert.ToInt32(currentSelectedState)] != null) { LoadState(); } else { GlobalWin.Sound.StopSound(); MessageBox.Show("There is no SaveState in the selected box,\nPress 'Switch: Save/Load State' then Press 'SAVE'"); GlobalWin.Sound.StartSound(); return; } } if (lbStashHistory.SelectedIndex != -1) { RTC_Core.currentStashkey = (lbStashHistory.SelectedItem as StashKey); RTC_Core.currentStashkey.Inject(); IsCorruptionApplied = true; } if (lbStockpile.SelectedIndex != -1) { RTC_Core.currentStashkey = (lbStockpile.SelectedItem as StashKey); RTC_Core.currentStashkey.Inject(); IsCorruptionApplied = true; } if (cbStashInjected.Checked) { if (lbStashHistory.SelectedIndex != -1) { RTC_Core.currentStashkey = new StashKey(RTC_Core.GetRandomKey(), btnParentKeys[Convert.ToInt32(currentSelectedState)], (lbStashHistory.SelectedItem as StashKey).blastlayer); } if (lbStockpile.SelectedIndex != -1) { RTC_Core.currentStashkey = new StashKey(RTC_Core.GetRandomKey(), btnParentKeys[Convert.ToInt32(currentSelectedState)], (lbStockpile.SelectedItem as StashKey).blastlayer); } DontLoadSelectedStash = true; lbStashHistory.Items.Add(RTC_Core.currentStashkey); lbStashHistory.SelectedIndex = lbStashHistory.Items.Count - 1; lbStockpile.ClearSelected(); } if (cbRenderAtCorrupt.Checked) { StartRender(); } } else if (rbOriginal.Checked) { if (lbStashHistory.SelectedIndex == -1 && lbStockpile.SelectedIndex == -1) { return; } if (lbStashHistory.SelectedIndex != -1) { RTC_Core.currentStashkey = (lbStashHistory.SelectedItem as StashKey); RTC_Core.currentStashkey.RunOriginal(); IsCorruptionApplied = false; } if (lbStockpile.SelectedIndex != -1) { RTC_Core.currentStashkey = (lbStockpile.SelectedItem as StashKey); IsCorruptionApplied = false; } } else { if (lbStockpile.SelectedItems.Count > 1) { BlastLayer bl = new BlastLayer(); foreach (StashKey item in lbStockpile.SelectedItems) { bl.Layer.AddRange(item.blastlayer.Layer); } //bl.Apply(); isStockpileSelectMultiple = false; if (cbStashCorrupted.Checked) { if (bl == null) { return; } RTC_Core.currentStashkey = new StashKey(RTC_Core.GetRandomKey(), (lbStockpile.SelectedItem as StashKey).ParentKey, bl); ApplyCurrentStashkey(); DontLoadSelectedStash = true; lbStashHistory.Items.Add(RTC_Core.currentStashkey); lbStashHistory.SelectedIndex = lbStashHistory.Items.Count - 1; lbStockpile.ClearSelected(); IsCorruptionApplied = true; } if (cbRenderAtCorrupt.Checked) { StartRender(); } } else { MessageBox.Show("Select 2 or more items from the Current Stockpile to merge."); } } RTC_Restore.SaveRestore(); }
//Generates or queries a blast layer then applies it. public static BlastLayer Blast(BlastLayer _layer) { try { if (_layer != null) { _layer.Apply(); //If the BlastLayer was provided, there's no need to generate a new one. return(_layer); } else if (RTC_Core.SelectedEngine == CorruptionEngine.EXTERNALROM) { BlastLayer romLayer = RTC_ExternalRomPlugin.GetLayer(); if (romLayer == null) { return(null); } else { romLayer.Apply(); return(romLayer); } } else { BlastLayer bl = new BlastLayer(); if (RTC_Core.SelectedEngine != CorruptionEngine.FREEZE && RTC_MemoryZones.SelectedDomains.Count == 0) { return(null); } string Domain; long MaxAdress; long RandomAdress = 0; BlastUnit bu; if (RTC_Core.SelectedEngine == CorruptionEngine.DISTORTION && RTC_DistortionEngine.CurrentAge < RTC_DistortionEngine.MaxAge) { RTC_DistortionEngine.CurrentAge++; } switch (Radius) { case BlastRadius.SPREAD: for (int i = 0; i < Intensity; i++) //Randomly spreads all corruption bytes to all selected zones { if (RTC_Core.SelectedEngine != CorruptionEngine.FREEZE) { Domain = RTC_MemoryZones.SelectedDomains[RND.Next(RTC_MemoryZones.SelectedDomains.Count)]; } else { Domain = RTC_Core.hexeditor._domain.ToString(); } MaxAdress = RTC_MemoryZones.getDomain(Domain).Size; RandomAdress = LongRandom(MaxAdress); bu = getBlastUnit(Domain, RandomAdress); if (bu != null) { bl.Layer.Add(bu); } } break; case BlastRadius.CHUNK: //Randomly spreads the corruption bytes in one randomly selected zone if (RTC_Core.SelectedEngine != CorruptionEngine.FREEZE) { Domain = RTC_MemoryZones.SelectedDomains[RND.Next(RTC_MemoryZones.SelectedDomains.Count)]; } else { Domain = RTC_Core.hexeditor._domain.ToString(); } MaxAdress = RTC_MemoryZones.getDomain(Domain).Size; for (int i = 0; i < Intensity; i++) { RandomAdress = LongRandom(MaxAdress); bu = getBlastUnit(Domain, RandomAdress); if (bu != null) { bl.Layer.Add(bu); } } break; case BlastRadius.BURST: for (int j = 0; j < 10; j++) // 10 shots of 10% chunk { if (RTC_Core.SelectedEngine != CorruptionEngine.FREEZE) { Domain = RTC_MemoryZones.SelectedDomains[RND.Next(RTC_MemoryZones.SelectedDomains.Count)]; } else { Domain = RTC_Core.hexeditor._domain.ToString(); } MaxAdress = RTC_MemoryZones.getDomain(Domain).Size; for (int i = 0; i < (int)((double)Intensity / 10); i++) { RandomAdress = LongRandom(MaxAdress); bu = getBlastUnit(Domain, RandomAdress); if (bu != null) { bl.Layer.Add(bu); } } } break; case BlastRadius.NONE: return(null); } bl.Apply(); RTC_HellgenieEngine.RemoveExcessCheats(); if (bl.Layer.Count == 0) { return(null); } else { return(bl); } } } catch (Exception ex) { MessageBox.Show("Something went wrong in the RTC Core. \n" + "This is not a BizHawk error so you should probably send a screenshot of this to the devs\n\n" + ex.ToString()); return(null); } }
private static void PreApplyStashkey() { RTC_HellgenieEngine.ClearCheats(true); RTC_PipeEngine.ClearPipes(true); }