private void StateHistoryIntegrityCheckMenuItem_Click(object sender, EventArgs e) { if (!Emulator.DeterministicEmulation) { if (MessageBox.Show("The emulator is not deterministic. It might fail even if the difference isn't enough to cause a desync.\nContinue with check?", "Not Deterministic", MessageBoxButtons.YesNo) == DialogResult.No) { return; } } GoToFrame(0); int lastState = 0; int goToFrame = CurrentTasMovie.TasStateManager.LastEmulatedFrame; do { Mainform.FrameAdvance(); if (CurrentTasMovie.TasStateManager.HasState(Emulator.Frame)) { byte[] state = (byte[])StatableEmulator.SaveStateBinary().Clone(); // Why is this cloning it? byte[] greenzone = CurrentTasMovie.TasStateManager[Emulator.Frame].Value; if (!state.SequenceEqual(greenzone)) { MessageBox.Show("Bad data between frames " + lastState + " and " + Emulator.Frame); return; } lastState = Emulator.Frame; } }while (Emulator.Frame < goToFrame); MessageBox.Show("Integrity Check passed"); }
public void LoadState(KeyValuePair <int, Stream> state) { StatableEmulator.LoadStateBinary(new BinaryReader(state.Value)); if (state.Key == 0 && CurrentTasMovie.StartsFromSavestate) { Emulator.ResetCounters(); } UpdateOtherTools(); }
private void StartNewProjectFromNowMenuItem_Click(object sender, EventArgs e) { if (AskSaveChanges()) { int index = Emulator.Frame; TasMovie newProject = CurrentTasMovie.ConvertToSavestateAnchoredMovie( index, (byte[])StatableEmulator.SaveStateBinary().Clone()); GlobalWin.MainForm.PauseEmulator(); LoadFile(new FileInfo(newProject.Filename), true); } }
public void LoadState(KeyValuePair <int, byte[]> state) { StatableEmulator.LoadStateBinary(new BinaryReader(new MemoryStream(state.Value.ToArray()))); if (state.Key == 0 && CurrentTasMovie.StartsFromSavestate) { Emulator.ResetCounters(); } _hackyDontUpdate = true; GlobalWin.Tools.UpdateBefore(); GlobalWin.Tools.UpdateAfter(); _hackyDontUpdate = false; }
public void LoadState(KeyValuePair <int, byte[]> state) { using var ms = new MemoryStream(state.Value); using var br = new BinaryReader(ms); StatableEmulator.LoadStateBinary(br); if (state.Key == 0 && CurrentTasMovie.StartsFromSavestate) { Emulator.ResetCounters(); } _hackyDontUpdate = true; Tools.UpdateBefore(); Tools.UpdateAfter(); _hackyDontUpdate = false; }
private void StartNewProjectFromNowMenuItem_Click(object sender, EventArgs e) { if (TasView.SelectedRows.Count() == 1 && !CurrentTasMovie.StartsFromSavestate) { if (AskSaveChanges()) { int index = TasView.SelectedRows.First(); GoToFrame(index); TasMovie newProject = CurrentTasMovie.ConvertToSavestateAnchoredMovie( index, (byte[])StatableEmulator.SaveStateBinary().Clone()); GlobalWin.MainForm.PauseEmulator(); LoadFile(new FileInfo(newProject.Filename)); } } }