diff --git a/BizHawk.Emulation/Consoles/Nintendo/N64/N64.cs b/BizHawk.Emulation/Consoles/Nintendo/N64/N64.cs index 2be861a672..11089e386d 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/N64/N64.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/N64/N64.cs @@ -54,7 +54,11 @@ namespace BizHawk.Emulation.Consoles.Nintendo.N64 Name = "Nintento 64 Controller", BoolButtons = { - "DPad R", "DPad L", "DPad D", "DPad U", "Start", "Z", "B", "A", "C Right", "C Left", "C Down", "C Up", "R", "L" + "P1 DPad R", "P1 DPad L", "P1 DPad D", "P1 DPad U", "P1 Start", "P1 Z", "P1 B", "P1 A", "P1 C Right", "P1 C Left", "P1 C Down", "P1 C Up", "P1 R", "P1 L", + "P2 DPad R", "P2 DPad L", "P2 DPad D", "P2 DPad U", "P2 Start", "P2 Z", "P2 B", "P2 A", "P2 C Right", "P2 C Left", "P2 C Down", "P2 C Up", "P2 R", "P2 L", + "P3 DPad R", "P3 DPad L", "P3 DPad D", "P3 DPad U", "P3 Start", "P3 Z", "P3 B", "P3 A", "P3 C Right", "P3 C Left", "P3 C Down", "P3 C Up", "P3 R", "P3 L", + "P4 DPad R", "P4 DPad L", "P4 DPad D", "P4 DPad U", "P4 Start", "P4 Z", "P4 B", "P4 A", "P4 C Right", "P4 C Left", "P4 C Down", "P4 C Up", "P4 R", "P4 L", + "Reset", "Power" } }; diff --git a/BizHawk.MultiClient/Config.cs b/BizHawk.MultiClient/Config.cs index 4db082c243..e732f3cb6d 100644 --- a/BizHawk.MultiClient/Config.cs +++ b/BizHawk.MultiClient/Config.cs @@ -71,6 +71,16 @@ namespace BizHawk.MultiClient SNESAutoController[2] = new SNESControllerTemplate(false); SNESAutoController[3] = new SNESControllerTemplate(false); + N64Controller[0] = new N64ButtonsTemplate(true); + N64Controller[1] = new N64ButtonsTemplate(false); + N64Controller[2] = new N64ButtonsTemplate(false); + N64Controller[3] = new N64ButtonsTemplate(false); + N64AutoController[0] = new N64ButtonsTemplate(false); + N64AutoController[1] = new N64ButtonsTemplate(false); + N64AutoController[2] = new N64ButtonsTemplate(false); + N64AutoController[3] = new N64ButtonsTemplate(false); + N64ConsoleButtons = new N64ConsoleButtonsTemplate(true); + ColecoController[0] = new ColecoVisionControllerTemplate(true); ColecoController[1] = new ColecoVisionControllerTemplate(false); ColecoAutoController[0] = new ColecoVisionControllerTemplate(false); @@ -796,6 +806,10 @@ namespace BizHawk.MultiClient public bool SNESUseRingBuffer = true; public bool SNESAlwaysDoubleSize = false; + public N64ButtonsTemplate[] N64Controller = new N64ButtonsTemplate[4]; + public N64ButtonsTemplate[] N64AutoController = new N64ButtonsTemplate[4]; + public N64ConsoleButtonsTemplate N64ConsoleButtons = new N64ConsoleButtonsTemplate(); + //TI 83 settings public TI83ControllerTemplate[] TI83Controller = new TI83ControllerTemplate[1]; @@ -1379,6 +1393,63 @@ namespace BizHawk.MultiClient } } + public class N64ButtonsTemplate : iControllerConfigObject + { + public string DPadU = "UpArrow, X1 DpadUp, X1 LStickUp"; + public string DPadD = "DownArrow, X1 DpadDown, X1 LStickDown"; + public string DPadL = "LeftArrow, X1 DpadLeft, X1 LStickLeft"; + public string DPadR = "RightArrow, X1 DpadRight, X1 LStickRight"; + public string Start = "V, X1 Start"; + public string Z = "Z, X1 A"; + public string B = "X, X1 X"; + public string A = "C"; + public string CUp = "NumberPad8, J1 RotationZ-"; + public string CDown = "NumberPad2, J1 RoationZ+"; + public string CLeft = "NumberPad4, J1 Z-"; + public string CRight = "NumberPad6, J1 Z+"; + public string L = "D"; + public string R = "F"; + + public bool Enabled = false; + + public N64ButtonsTemplate() { } + public N64ButtonsTemplate(bool defaults) + { + if (defaults) + { + SetDefaults(); + } + } + + public void SetDefaults() + { + Enabled = true; + } + } + + public class N64ConsoleButtonsTemplate : iControllerConfigObject + { + public string Power = ""; + public string Reset = ""; + public bool Enabled = false; + + public N64ConsoleButtonsTemplate() { } + public N64ConsoleButtonsTemplate(bool defaults) + { + if (defaults) + { + SetDefaults(); + } + } + + public void SetDefaults() + { + Enabled = true; + Power = ""; + Reset = ""; + } + } + public class ColecoVisionControllerTemplate : iControllerConfigObject { public string Up = ""; diff --git a/BizHawk.MultiClient/Global.cs b/BizHawk.MultiClient/Global.cs index 73c18de8b0..823c7b7816 100644 --- a/BizHawk.MultiClient/Global.cs +++ b/BizHawk.MultiClient/Global.cs @@ -73,6 +73,9 @@ namespace BizHawk.MultiClient public static Controller Commodore64Controls; public static AutofireController AutofireCommodore64Controls; + public static Controller N64Controls; + public static AutofireController AutofireN64Controls; + public static readonly Dictionary> BUTTONS = new Dictionary> { { diff --git a/BizHawk.MultiClient/MainForm.cs b/BizHawk.MultiClient/MainForm.cs index 59ae692a7e..0908891cb5 100644 --- a/BizHawk.MultiClient/MainForm.cs +++ b/BizHawk.MultiClient/MainForm.cs @@ -1501,6 +1501,137 @@ namespace BizHawk.MultiClient autofireC64Controls.BindMulti("P2 Button", Global.Config.C64AutoJoysticks[1].Button); Global.AutofireCommodore64Controls = autofireC64Controls; + + var N64Controls = new Controller(N64.N64ControllerDefinition); + + N64Controls.BindMulti("Power", Global.Config.N64ConsoleButtons.Power); + N64Controls.BindMulti("Reset", Global.Config.N64ConsoleButtons.Reset); + + N64Controls.BindMulti("P1 Up", Global.Config.N64Controller[0].DPadU); + N64Controls.BindMulti("P1 Left", Global.Config.N64Controller[0].DPadD); + N64Controls.BindMulti("P1 Right", Global.Config.N64Controller[0].DPadL); + N64Controls.BindMulti("P1 Down", Global.Config.N64Controller[0].DPadR); + N64Controls.BindMulti("P1 Start", Global.Config.N64Controller[0].Start); + N64Controls.BindMulti("P1 Z", Global.Config.N64Controller[0].Z); + N64Controls.BindMulti("P1 B", Global.Config.N64Controller[0].B); + N64Controls.BindMulti("P1 A", Global.Config.N64Controller[0].A); + N64Controls.BindMulti("P1 C Up", Global.Config.N64Controller[0].CUp); + N64Controls.BindMulti("P1 C Down", Global.Config.N64Controller[0].CDown); + N64Controls.BindMulti("P1 C Left", Global.Config.N64Controller[0].CLeft); + N64Controls.BindMulti("P1 C Right", Global.Config.N64Controller[0].CRight); + N64Controls.BindMulti("P1 L", Global.Config.N64Controller[0].L); + N64Controls.BindMulti("P1 R", Global.Config.N64Controller[0].R); + + N64Controls.BindMulti("P2 Up", Global.Config.N64Controller[1].DPadU); + N64Controls.BindMulti("P2 Left", Global.Config.N64Controller[1].DPadD); + N64Controls.BindMulti("P2 Right", Global.Config.N64Controller[1].DPadL); + N64Controls.BindMulti("P2 Down", Global.Config.N64Controller[1].DPadR); + N64Controls.BindMulti("P2 Start", Global.Config.N64Controller[1].Start); + N64Controls.BindMulti("P2 Z", Global.Config.N64Controller[1].Z); + N64Controls.BindMulti("P2 B", Global.Config.N64Controller[1].B); + N64Controls.BindMulti("P2 A", Global.Config.N64Controller[1].A); + N64Controls.BindMulti("P2 C Up", Global.Config.N64Controller[1].CUp); + N64Controls.BindMulti("P2 C Down", Global.Config.N64Controller[1].CDown); + N64Controls.BindMulti("P2 C Left", Global.Config.N64Controller[1].CLeft); + N64Controls.BindMulti("P2 C Right", Global.Config.N64Controller[1].CRight); + N64Controls.BindMulti("P2 L", Global.Config.N64Controller[1].L); + N64Controls.BindMulti("P2 R", Global.Config.N64Controller[1].R); + + N64Controls.BindMulti("P3 Up", Global.Config.N64Controller[2].DPadU); + N64Controls.BindMulti("P3 Left", Global.Config.N64Controller[2].DPadD); + N64Controls.BindMulti("P3 Right", Global.Config.N64Controller[2].DPadL); + N64Controls.BindMulti("P3 Down", Global.Config.N64Controller[2].DPadR); + N64Controls.BindMulti("P3 Start", Global.Config.N64Controller[2].Start); + N64Controls.BindMulti("P3 Z", Global.Config.N64Controller[2].Z); + N64Controls.BindMulti("P3 B", Global.Config.N64Controller[2].B); + N64Controls.BindMulti("P3 A", Global.Config.N64Controller[2].A); + N64Controls.BindMulti("P3 C Up", Global.Config.N64Controller[2].CUp); + N64Controls.BindMulti("P3 C Down", Global.Config.N64Controller[2].CDown); + N64Controls.BindMulti("P3 C Left", Global.Config.N64Controller[2].CLeft); + N64Controls.BindMulti("P3 C Right", Global.Config.N64Controller[2].CRight); + N64Controls.BindMulti("P3 L", Global.Config.N64Controller[2].L); + N64Controls.BindMulti("P3 R", Global.Config.N64Controller[2].R); + + N64Controls.BindMulti("P4 Up", Global.Config.N64Controller[3].DPadU); + N64Controls.BindMulti("P4 Left", Global.Config.N64Controller[3].DPadD); + N64Controls.BindMulti("P4 Right", Global.Config.N64Controller[3].DPadL); + N64Controls.BindMulti("P4 Down", Global.Config.N64Controller[3].DPadR); + N64Controls.BindMulti("P4 Start", Global.Config.N64Controller[3].Start); + N64Controls.BindMulti("P4 Z", Global.Config.N64Controller[3].Z); + N64Controls.BindMulti("P4 B", Global.Config.N64Controller[3].B); + N64Controls.BindMulti("P4 A", Global.Config.N64Controller[3].A); + N64Controls.BindMulti("P4 C Up", Global.Config.N64Controller[3].CUp); + N64Controls.BindMulti("P4 C Down", Global.Config.N64Controller[3].CDown); + N64Controls.BindMulti("P4 C Left", Global.Config.N64Controller[3].CLeft); + N64Controls.BindMulti("P4 C Right", Global.Config.N64Controller[3].CRight); + N64Controls.BindMulti("P4 L", Global.Config.N64Controller[3].L); + N64Controls.BindMulti("P4 R", Global.Config.N64Controller[3].R); + + Global.N64Controls = N64Controls; + + var N64AControls = new AutofireController(N64.N64ControllerDefinition); + + N64AControls.BindMulti("P1 Up", Global.Config.N64AutoController[0].DPadU); + N64AControls.BindMulti("P1 Left", Global.Config.N64AutoController[0].DPadD); + N64AControls.BindMulti("P1 Right", Global.Config.N64AutoController[0].DPadL); + N64AControls.BindMulti("P1 Down", Global.Config.N64AutoController[0].DPadR); + N64AControls.BindMulti("P1 Start", Global.Config.N64AutoController[0].Start); + N64AControls.BindMulti("P1 Z", Global.Config.N64AutoController[0].Z); + N64AControls.BindMulti("P1 B", Global.Config.N64AutoController[0].B); + N64AControls.BindMulti("P1 A", Global.Config.N64AutoController[0].A); + N64AControls.BindMulti("P1 C Up", Global.Config.N64AutoController[0].CUp); + N64AControls.BindMulti("P1 C Down", Global.Config.N64AutoController[0].CDown); + N64AControls.BindMulti("P1 C Left", Global.Config.N64AutoController[0].CLeft); + N64AControls.BindMulti("P1 C Right", Global.Config.N64AutoController[0].CRight); + N64AControls.BindMulti("P1 L", Global.Config.N64AutoController[0].L); + N64AControls.BindMulti("P1 R", Global.Config.N64AutoController[0].R); + + N64AControls.BindMulti("P2 Up", Global.Config.N64AutoController[1].DPadU); + N64AControls.BindMulti("P2 Left", Global.Config.N64AutoController[1].DPadD); + N64AControls.BindMulti("P2 Right", Global.Config.N64AutoController[1].DPadL); + N64AControls.BindMulti("P2 Down", Global.Config.N64AutoController[1].DPadR); + N64AControls.BindMulti("P2 Start", Global.Config.N64AutoController[1].Start); + N64AControls.BindMulti("P2 Z", Global.Config.N64AutoController[1].Z); + N64AControls.BindMulti("P2 B", Global.Config.N64AutoController[1].B); + N64AControls.BindMulti("P2 A", Global.Config.N64AutoController[1].A); + N64AControls.BindMulti("P2 C Up", Global.Config.N64AutoController[1].CUp); + N64AControls.BindMulti("P2 C Down", Global.Config.N64AutoController[1].CDown); + N64AControls.BindMulti("P2 C Left", Global.Config.N64AutoController[1].CLeft); + N64AControls.BindMulti("P2 C Right", Global.Config.N64AutoController[1].CRight); + N64AControls.BindMulti("P2 L", Global.Config.N64AutoController[1].L); + N64AControls.BindMulti("P2 R", Global.Config.N64AutoController[1].R); + + N64AControls.BindMulti("P3 Up", Global.Config.N64AutoController[2].DPadU); + N64AControls.BindMulti("P3 Left", Global.Config.N64AutoController[2].DPadD); + N64AControls.BindMulti("P3 Right", Global.Config.N64AutoController[2].DPadL); + N64AControls.BindMulti("P3 Down", Global.Config.N64AutoController[2].DPadR); + N64AControls.BindMulti("P3 Start", Global.Config.N64AutoController[2].Start); + N64AControls.BindMulti("P3 Z", Global.Config.N64AutoController[2].Z); + N64AControls.BindMulti("P3 B", Global.Config.N64AutoController[2].B); + N64AControls.BindMulti("P3 A", Global.Config.N64AutoController[2].A); + N64AControls.BindMulti("P3 C Up", Global.Config.N64AutoController[2].CUp); + N64AControls.BindMulti("P3 C Down", Global.Config.N64AutoController[2].CDown); + N64AControls.BindMulti("P3 C Left", Global.Config.N64AutoController[2].CLeft); + N64AControls.BindMulti("P3 C Right", Global.Config.N64AutoController[2].CRight); + N64AControls.BindMulti("P3 L", Global.Config.N64AutoController[2].L); + N64AControls.BindMulti("P3 R", Global.Config.N64AutoController[2].R); + + N64AControls.BindMulti("P4 Up", Global.Config.N64AutoController[3].DPadU); + N64AControls.BindMulti("P4 Left", Global.Config.N64AutoController[3].DPadD); + N64AControls.BindMulti("P4 Right", Global.Config.N64AutoController[3].DPadL); + N64AControls.BindMulti("P4 Down", Global.Config.N64AutoController[3].DPadR); + N64AControls.BindMulti("P4 Start", Global.Config.N64AutoController[3].Start); + N64AControls.BindMulti("P4 Z", Global.Config.N64AutoController[3].Z); + N64AControls.BindMulti("P4 B", Global.Config.N64AutoController[3].B); + N64AControls.BindMulti("P4 A", Global.Config.N64AutoController[3].A); + N64AControls.BindMulti("P4 C Up", Global.Config.N64AutoController[3].CUp); + N64AControls.BindMulti("P4 C Down", Global.Config.N64AutoController[3].CDown); + N64AControls.BindMulti("P4 C Left", Global.Config.N64AutoController[3].CLeft); + N64AControls.BindMulti("P4 C Right", Global.Config.N64AutoController[3].CRight); + N64AControls.BindMulti("P4 L", Global.Config.N64AutoController[3].L); + N64AControls.BindMulti("P4 R", Global.Config.N64AutoController[3].R); + + Global.AutofireN64Controls = N64AControls; } private static void FormDragEnter(object sender, DragEventArgs e) @@ -1700,8 +1831,6 @@ namespace BizHawk.MultiClient case "Coleco": colecoToolStripMenuItem.Visible = true; break; - default: - break; } } @@ -1725,7 +1854,6 @@ namespace BizHawk.MultiClient void NESSpeicalMenuControls() { - // ugly and hacky nESSpeicalToolStripMenuItem.Visible = false; nESSpeicalToolStripMenuItem.DropDownItems.Clear(); @@ -1804,6 +1932,10 @@ namespace BizHawk.MultiClient Global.ActiveController = Global.ColecoControls; Global.AutoFireController = Global.AutofireColecoControls; break; + case "N64": + Global.ActiveController = Global.N64Controls; + Global.AutoFireController = Global.AutofireN64Controls; + break; case "SAT": Global.ActiveController = Global.SaturnControls; Global.AutoFireController = Global.AutofireSaturnControls;