diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesControllerDeck.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesControllerDeck.cs index e35e2b2489..91966424bc 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesControllerDeck.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesControllerDeck.cs @@ -37,10 +37,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES LimitAnalogChangeSensitivity = ss.LimitAnalogChangeSensitivity }; case ControllerType.SuperScope: - return new SnesSuperScopeController - { - LimitAnalogChangeSensitivity = ss.LimitAnalogChangeSensitivity - }; + return new SnesSuperScopeController(); default: throw new InvalidOperationException(); } @@ -342,15 +339,15 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES }, FloatRanges = { - new[] { -10, 0f, 10f }, - new[] { -10f, 0f, 10f } + // problem: when you're in 240 line mode, the limit on Y needs to be 240. + // when you're in 224 mode, it needs to be 224. perhaps the deck needs to account for this... + new[] { 0f, 128f, 256f }, + new[] { 0f, 0f, 240f } } }; public ControllerDefinition Definition => _definition; - public bool LimitAnalogChangeSensitivity { get; set; } = true; - public short GetState(IController controller, int index, int id) { switch (id) @@ -359,19 +356,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES return 0; case 0: var x = (int)controller.GetFloat("0X"); - if (LimitAnalogChangeSensitivity) - { - x = x.Clamp(-10, 10); - } - return (short)x; case 1: var y = (int)controller.GetFloat("0Y"); - if (LimitAnalogChangeSensitivity) - { - y = y.Clamp(-10, 10); - } - return (short)y; case 2: return (short)(controller.IsPressed("0Trigger") ? 1 : 0); diff --git a/libsnes/bsnes/snes/controller/superscope/superscope.cpp b/libsnes/bsnes/snes/controller/superscope/superscope.cpp index 8eeff0d709..ee6a312709 100644 --- a/libsnes/bsnes/snes/controller/superscope/superscope.cpp +++ b/libsnes/bsnes/snes/controller/superscope/superscope.cpp @@ -30,8 +30,6 @@ void SuperScope::enter() { //Vcounter wrapped back to zero; update cursor coordinates for start of new frame int nx = interface()->inputPoll(port, Input::Device::SuperScope, 0, (unsigned)Input::SuperScopeID::X); int ny = interface()->inputPoll(port, Input::Device::SuperScope, 0, (unsigned)Input::SuperScopeID::Y); - nx += x; - ny += y; x = max(-16, min(256 + 16, nx)); y = max(-16, min(240 + 16, ny)); offscreen = (x < 0 || y < 0 || x >= 256 || y >= (ppu.overscan() ? 240 : 225)); diff --git a/output/dll/libsneshawk-32-compatibility.dll b/output/dll/libsneshawk-32-compatibility.dll index 13071e6592..a03d577d2a 100644 Binary files a/output/dll/libsneshawk-32-compatibility.dll and b/output/dll/libsneshawk-32-compatibility.dll differ diff --git a/output/dll/libsneshawk-32-performance.dll b/output/dll/libsneshawk-32-performance.dll index 7132f38b62..88329dda94 100644 Binary files a/output/dll/libsneshawk-32-performance.dll and b/output/dll/libsneshawk-32-performance.dll differ