internal FanCutCommon(FormMain formMain, string gameName, string assetsPath, List<TimelineSave> timelineSaves, string sha1Hash) { _formMain = formMain; _gameName = gameName; _assetsPath = assetsPath; _timelineSaves = timelineSaves; NesEmu.EMUHardReseted += onCoreHardReseted; layoutFormMain(); OpenFileDialog romOpenFileDialog = new OpenFileDialog(); romOpenFileDialog.Title = string.Format("Open {0} ROM", gameName); romOpenFileDialog.Filter = "NES ROM (*.nes) | *.nes"; bool isROMSelected = false; while (!isROMSelected) { if (romOpenFileDialog.ShowDialog(formMain) == DialogResult.OK) { StringBuilder romHashString; using (FileStream romFileStream = new FileStream(romOpenFileDialog.FileName, FileMode.Open)) { using (BufferedStream romBufferedStream = new BufferedStream(romFileStream)) { using (SHA1Managed romSHA1 = new SHA1Managed()) { byte[] romHash = romSHA1.ComputeHash(romBufferedStream); romHashString = new StringBuilder(romHash.Length * 2); foreach (byte b in romHash) romHashString.AppendFormat("{0:X2}", b); } } } if (romHashString.ToString() == sha1Hash) { isROMSelected = true; formMain.OpenRom(romOpenFileDialog.FileName); } else MessageBox.Show("You must load the proper ROM for this FanCut.", "ROM Mismatch"); } else { isROMSelected = true; Application.Exit(); } } }