diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/A78Schema.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/A78Schema.cs index 5119e53a2a..3556fd2783 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/A78Schema.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/A78Schema.cs @@ -14,12 +14,37 @@ namespace BizHawk.Client.EmuHawk { public IEnumerable GetPadSchemas() { - yield return StandardController(1); - yield return StandardController(2); + switch ((Global.Emulator as Atari7800).ControlAdapter.ControlType.Name) + { + case "Atari 7800 Joystick Controller": + yield return JoystickController(1); + yield return JoystickController(2); + break; + case "Atari 7800 Paddle Controller": + PaddleController(1); + PaddleController(2); + break; + case "Atari 7800 Keypad Controller": + break; + case "Atari 7800 Driving Controller": + break; + case "Atari 7800 Booster Grip Controller": + break; + case "Atari 7800 ProLine Joystick Controller": + yield return ProLineController(1); + yield return ProLineController(2); + break; + case "Atari 7800 Light Gun Controller": + yield return LightGunController(1); + yield return LightGunController(2); + break; + } + + yield return ConsoleButtons(); } - private static PadSchema StandardController(int controller) + private static PadSchema ProLineController(int controller) { return new PadSchema { @@ -79,6 +104,119 @@ namespace BizHawk.Client.EmuHawk }; } + private static PadSchema JoystickController(int controller) + { + return new PadSchema + { + DisplayName = "Player " + controller, + IsConsole = false, + DefaultSize = new Size(174, 74), + MaxSize = new Size(174, 74), + Buttons = new[] + { + new PadSchema.ButtonScema + { + Name = "P" + controller + " Up", + DisplayName = "", + Icon = Properties.Resources.BlueUp, + Location = new Point(23, 15), + Type = PadSchema.PadInputType.Boolean + }, + new PadSchema.ButtonScema + { + Name = "P" + controller + " Down", + DisplayName = "", + Icon = Properties.Resources.BlueDown, + Location = new Point(23, 36), + Type = PadSchema.PadInputType.Boolean + }, + new PadSchema.ButtonScema + { + Name = "P" + controller + " Left", + DisplayName = "", + Icon = Properties.Resources.Back, + Location = new Point(2, 24), + Type = PadSchema.PadInputType.Boolean + }, + new PadSchema.ButtonScema + { + Name = "P" + controller + " Right", + DisplayName = "", + Icon = Properties.Resources.Forward, + Location = new Point(44, 24), + Type = PadSchema.PadInputType.Boolean + }, + new PadSchema.ButtonScema + { + Name = "P" + controller + " Trigger", + DisplayName = "1", + Location = new Point(120, 24), + Type = PadSchema.PadInputType.Boolean + } + } + }; + } + + private static PadSchema PaddleController(int controller) + { + return new PadSchema + { + DisplayName = "Player " + controller, + IsConsole = false, + DefaultSize = new Size(250, 74), + Buttons = new[] + { + new PadSchema.ButtonScema + { + Name = "P" + controller + " Paddle", + DisplayName = "Paddle", + Location = new Point(23, 15), + Type = PadSchema.PadInputType.FloatSingle + }, + new PadSchema.ButtonScema + { + Name = "P" + controller + " Trigger", + DisplayName = "1", + Location = new Point(12, 90), + Type = PadSchema.PadInputType.Boolean + } + } + }; + } + + private static PadSchema LightGunController(int controller) + { + return new PadSchema + { + DisplayName = "Light Gun", + IsConsole = false, + DefaultSize = new Size(356, 260), + MaxSize = new Size(356, 260), + Buttons = new[] + { + new PadSchema.ButtonScema + { + Name = "P" + controller + " VPos", + Location = new Point(14, 17), + Type = PadSchema.PadInputType.TargetedPair, + TargetSize = new Size(256, 240), + SecondaryNames = new [] + { + "P" + controller + " HPos", + "P" + controller + " Trigger", + } + }, + new PadSchema.ButtonScema + { + Name = "P" + controller + " Trigger", + DisplayName = "Trigger", + Location = new Point(284, 17), + Type = PadSchema.PadInputType.Boolean + } + } + }; + } + private static PadSchema ConsoleButtons() { return new PadSchema diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/7800/Atari7800.cs b/BizHawk.Emulation.Cores/Consoles/Atari/7800/Atari7800.cs index f20c055d94..ebc43d4c74 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/7800/Atari7800.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/7800/Atari7800.cs @@ -156,7 +156,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari7800 } #endregion - Atari7800Control ControlAdapter; + public Atari7800Control ControlAdapter; public ControllerDefinition ControllerDefinition { get; private set; } public IController Controller { get; set; } @@ -254,8 +254,6 @@ namespace BizHawk.Emulation.Cores.Atari.Atari7800 theMachine.InputState.InputPollCallback = CoreComm.InputCallback.Call; ControlAdapter = new Atari7800Control(theMachine); - if (ControlAdapter.ControlType.Name != "Atari 7800 ProLine Joystick Controller") - throw new Exception("For now, only Atari 7800 ProLine Joystick games are supported."); ControllerDefinition = ControlAdapter.ControlType; avProvider.ConnectToMachine(theMachine, GameInfo); diff --git a/output/defctrl.json b/output/defctrl.json index 9d7c5e0076..36287b4c8e 100644 --- a/output/defctrl.json +++ b/output/defctrl.json @@ -213,6 +213,37 @@ "P2 Trigger": "NumberPad1, J1 B4, X1 Y", "P2 Trigger 2": "NumberPad3, J1 B3, X1 B" }, + "Atari 7800 Joystick Controller": { + "Power": "", + "Reset": "D, J1 B9, X1 Back", + "Select": "S, J1 B10, X1 Start", + "Pause": "", + "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 Trigger": "Z, J1 B1, X1 X", + "P1 Trigger 2": "X, J1 B2, X1 A", + "P2 Up": "NumberPad8, J1 RotationZ-, X1 RStickUp", + "P2 Down": "NumberPad2, J1 RotationZ+, X1 RStickDown", + "P2 Left": "NumberPad4, J1 Z-, X1 RStickLeft", + "P2 Right": "NumberPad6, J1 Z+, X1 RStickRight", + "P2 Trigger": "NumberPad1, J1 B4, X1 Y" + }, + "Atari 7800 Light Gun Controller": { + "Power": "", + "Reset": "D, J1 B9, X1 Back", + "Select": "S, J1 B10, X1 Start", + "Pause": "", + "P1 Trigger": "WMouse L" + }, + "Atari 7800 Paddle Controller": { + "Power": "", + "Reset": "D, J1 B9, X1 Back", + "Select": "S, J1 B10, X1 Start", + "Pause": "", + "P2 Trigger": "NumberPad1, J1 B4, X1 Y" + }, "Commodore 64 Controller": { "P1 Up": "NumberPad8, J1 POV1U, X1 DpadUp, X1 LStickUp", "P1 Down": "NumberPad2, J1 POV1D, X1 DpadDown, X1 LStickDown", @@ -805,6 +836,25 @@ "Deadzone": 0.0 } }, + "Atari 7800 Paddle Controller": { + "P1 Paddle": { + "Value": "WMouse X", + "Mult": 1.0, + "Deadzone": 0.0 + } + }, + "Atari 7800 Light Gun Controller": { + "P1 VPos": { + "Value": "WMouse Y", + "Mult": 1.0, + "Deadzone": 0.0 + }, + "P1 HPos": { + "Value": "WMouse X", + "Mult": 1.0, + "Deadzone": 0.0 + } + }, "Nintento 64 Controller": { "P1 X Axis": { "Value": "J1 X",