private void ControlsToolStripMenuItemClick(object sender, EventArgs e) { if (_engine != null) _engine.Pause(); var cnt = new Frm_ControlsSettings(); cnt.ShowDialog(this); if (_engine != null) { if (cnt.OK) { var manager = new InputManager(Handle); var joy1 = new Joypad(manager); joy1.A.Input = Program.Settings.CurrentControlProfile.Player1A; joy1.B.Input = Program.Settings.CurrentControlProfile.Player1B; joy1.Up.Input = Program.Settings.CurrentControlProfile.Player1Up; joy1.Down.Input = Program.Settings.CurrentControlProfile.Player1Down; joy1.Left.Input = Program.Settings.CurrentControlProfile.Player1Left; joy1.Right.Input = Program.Settings.CurrentControlProfile.Player1Right; joy1.Select.Input = Program.Settings.CurrentControlProfile.Player1Select; joy1.Start.Input = Program.Settings.CurrentControlProfile.Player1Start; var joy2 = new Joypad(manager); joy2.A.Input = Program.Settings.CurrentControlProfile.Player2A; joy2.B.Input = Program.Settings.CurrentControlProfile.Player2B; joy2.Up.Input = Program.Settings.CurrentControlProfile.Player2Up; joy2.Down.Input = Program.Settings.CurrentControlProfile.Player2Down; joy2.Left.Input = Program.Settings.CurrentControlProfile.Player2Left; joy2.Right.Input = Program.Settings.CurrentControlProfile.Player2Right; joy2.Select.Input = Program.Settings.CurrentControlProfile.Player2Select; joy2.Start.Input = Program.Settings.CurrentControlProfile.Player2Start; _engine.SetupInput(manager, joy1, joy2); } _engine.Resume(); } }
public void OpenRom(string romPath) { _romFileName = romPath; if (File.Exists(romPath)) { #region Check if archive var extension = Path.GetExtension(romPath); if (extension != null && extension.ToLower() != ".nes") { try { _extractor = new SevenZipExtractor(romPath); } catch { } if (_extractor.ArchiveFileData.Count == 1) { if ( _extractor.ArchiveFileData[0].FileName.Substring( _extractor.ArchiveFileData[0].FileName.Length - 4, 4).ToLower() == ".nes") { _extractor.ExtractArchive(Path.GetTempPath()); romPath = Path.GetTempPath() + _extractor.ArchiveFileData[0].FileName; } } else { var ar = new ArchivesForm(_extractor.ArchiveFileData.Select(file => file.FileName).ToArray()); ar.ShowDialog(this); if (ar.Ok) { string[] fil = { ar.SelectedRom }; _extractor.ExtractFiles(Path.GetTempPath(), fil); romPath = Path.GetTempPath() + ar.SelectedRom; } else { return; } } } #endregion #region Check the rom var header = new NesHeaderReader(romPath); if (header.ValidRom) { if (!header.SupportedMapper()) { MessageBox.Show("Can't load rom:\n" + romPath + "\n\nUNSUPPORTED MAPPER # " + header.MemoryMapper); return; } } else { MessageBox.Show("Can't load rom:\n" + romPath + "\n\nRom is damaged or not an INES format file"); return; } #endregion //Exit current thread if (_engine != null) { _engine.ShutDown(); _engine = null; } if (_gameThread != null) { _gameThread.Abort(); } //Start new nes !! if (Program.Settings.PaletteFormat == null) Program.Settings.PaletteFormat = new PaletteFormat(); _engine = new NesEngine(Program.Settings.TV, Program.Settings.PaletteFormat); _engine.PauseToggle += NesPauseToggle; if (_engine.LoadRom(romPath)) { #region Setup input var manager = new InputManager(Handle); var joy1 = new Joypad(manager); joy1.A.Input = Program.Settings.CurrentControlProfile.Player1A; joy1.B.Input = Program.Settings.CurrentControlProfile.Player1B; joy1.Up.Input = Program.Settings.CurrentControlProfile.Player1Up; joy1.Down.Input = Program.Settings.CurrentControlProfile.Player1Down; joy1.Left.Input = Program.Settings.CurrentControlProfile.Player1Left; joy1.Right.Input = Program.Settings.CurrentControlProfile.Player1Right; joy1.Select.Input = Program.Settings.CurrentControlProfile.Player1Select; joy1.Start.Input = Program.Settings.CurrentControlProfile.Player1Start; var joy2 = new Joypad(manager); joy2.A.Input = Program.Settings.CurrentControlProfile.Player2A; joy2.B.Input = Program.Settings.CurrentControlProfile.Player2B; joy2.Up.Input = Program.Settings.CurrentControlProfile.Player2Up; joy2.Down.Input = Program.Settings.CurrentControlProfile.Player2Down; joy2.Left.Input = Program.Settings.CurrentControlProfile.Player2Left; joy2.Right.Input = Program.Settings.CurrentControlProfile.Player2Right; joy2.Select.Input = Program.Settings.CurrentControlProfile.Player2Select; joy2.Start.Input = Program.Settings.CurrentControlProfile.Player2Start; _engine.SetupInput(manager, joy1, joy2); #endregion #region Output //Set the size switch (Program.Settings.Size.ToLower()) { case "x1": Size = new Size(265, 305); FormBorderStyle = FormBorderStyle.FixedDialog; statusStrip1.SizingGrip = false; break; case "x2": Size = new Size(521, 529); FormBorderStyle = FormBorderStyle.FixedDialog; statusStrip1.SizingGrip = false; break; case "stretch": FormBorderStyle = FormBorderStyle.Sizable; statusStrip1.SizingGrip = true; break; } //The output devices var mon = new SoundDeviceGeneral16(statusStrip1) { Stereo = Program.Settings.Stereo }; switch (Program.Settings.GFXDevice) { case GraphicDevices.Gdi: var gdi = new VideoGdi(Program.Settings.TV, panel1); _engine.SetupOutput(gdi, mon); break; case GraphicDevices.GdiHiRes: var gdih = new VideoGdiHiRes(Program.Settings.TV, panel1, _engine.Memory.Map.Cartridge.RomPath, _engine.Memory.Map.Cartridge.ChrPages); _engine.SetupOutput(gdih, mon); break; case GraphicDevices.SlimDx: var sl = new VideoSlimDx(Program.Settings.TV, panel1, _engine.Memory.Map.Cartridge.Multi); _engine.SetupOutput(sl, mon); break; default: Program.Settings.GFXDevice = GraphicDevices.SlimDx; var sl1 = new VideoSlimDx(Program.Settings.TV, panel1, _engine.Memory.Map.Cartridge.Multi); _engine.SetupOutput(sl1, mon); break; } if (_engine.Ppu.OutputDevice.SupportFullScreen) _engine.Ppu.OutputDevice.FullScreen = Program.Settings.Fullscreen; //Audio _engine.SoundEnabled = Program.Settings.SoundEnabled; _engine.Apu.Square1Enabled = Program.Settings.Square1; _engine.Apu.Square2Enabled = Program.Settings.Square2; _engine.Apu.DMCEnabled = Program.Settings.DMC; _engine.Apu.TriangleEnabled = Program.Settings.Triangle; _engine.Apu.NoiseEnabled = Program.Settings.Noize; _engine.Apu.VRC6P1Enabled = Program.Settings.VRC6Pulse1; _engine.Apu.VRC6P2Enabled = Program.Settings.VRC6Pulse2; _engine.Apu.VRC6SawToothEnabled = Program.Settings.VRC6Sawtooth; _engine.Apu.SetVolume(Program.Settings.Volume); #endregion #region Misc _engine.Ppu.NoLimiter = Program.Settings.NoLimiter; _engine.AutoSaveSram = Program.Settings.AutoSaveSRAM; #endregion //Launch _myThreadCreator = _engine.Run; _gameThread = new Thread(_myThreadCreator); _gameThread.Start(); timer_FPS.Start(); StatusLabel4_status.BackColor = Color.Green; StatusLabel4_status.Text = "ON"; //Add to the recent AddRecent(romPath); RefreshRecents(); //Set the name Text = "My Nes - " + Path.GetFileNameWithoutExtension(romPath); } else { MessageBox.Show("Can't load rom:\n" + romPath + "\n\nRom is damaged or not an INES format file !!"); if (_engine != null) { _engine.ShutDown(); _engine = null; } if (_gameThread != null) { _gameThread.Abort(); } return; } } }
public void SetupInput(InputManager manager, Joypad joy1, Joypad joy2) { Memory.InputManager = manager; Memory.Joypad1 = joy1; Memory.Joypad2 = joy2; }