hrydgard / ppsspp

A PSP emulator for Android, Windows, Mac and Linux, written in C++. Want to contribute? Join us on Discord at https://discord.gg/5NJB6dD or just send pull requests / issues. For discussion use the forums at forums.ppsspp.org.
https://www.ppsspp.org
Other
11.19k stars 2.17k forks source link

Analog Input via Keyboard is Being Dropped While Controller is Detected #15465

Closed NABN00B closed 1 year ago

NABN00B commented 2 years ago

Game or games this happens in

None

What area of the game / PPSSPP

Since v1.12.0, the analog input doesn't work correctly via keyboard while a controller is detected. Not sure how to describe it, but it feels like it registers input on every odd frame but drops it on every even frame. At least this is what it looks like in the calibration menu and on the touch control display. In games, barely any of the input is recognized.

The issue disappears as soon as I disconnect my controller.

What should happen

Analog input via keyboard should work smoothly even while a controller is detected, like it used to up until v1.11.3.

Logs

In the video below you can see me input analog up, analog up+left and finally analog down+right.

https://user-images.githubusercontent.com/22328803/161383313-c5b4b57d-627a-4d17-83fc-ab58f60a0f81.mp4

Platform

Windows

Mobile phone model or graphics card

NVIDIA GeForce GTX 1060 3GB

PPSSPP version affected

v1.12.x

Last working version

v1.11.3

Graphics backend (3D API)

Other

Checklist

LunaMoo commented 2 years ago

That's same as #14340(about the mouse, but same), which was fixed by #14479

I can't reproduce your problem with gamepad in my system, PPSSPP still reads keyboard "analog" input even if I use real analog stick on my gamepad(xinput). Don't understand your video as it doesn't show you pressing actual gamepad analog stick at all.

Maybe you have a "floating" analog issue with your gamepad, since if it gets different input each sample it probably would override keyboard, but I guess deadzone should stop that from happening.

anr2me commented 2 years ago

@NABN00B, I think you should create 2 videos using v1.11.3 and v1.12.3 (preferably the latest dev build from https://buildbot.orphis.net/ppsspp/ in case it got fixed already), for the devs to see the difference and able to determine whether it's a bug or an intended behavior.

NABN00B commented 2 years ago

I'll let the footage speak for itself. In both videos v1.11.3 is on the left and v1.12.3-1018-g6f04f52f5 is on the right. I used the same configuration files for both versions.

In the first video, I hold analog left, then analog up+right at the same time. https://user-images.githubusercontent.com/22328803/161387476-422ab597-922e-4486-9bb1-cc6f683e47f8.mp4 (I accidentally clicked start on the touchscreen while clicking into the 12.x window, ignore that.)

In the second video, I do a full circle with my controller. Then I do up+left on keyboard in 12.x, then in 11.3. After this I disconnect my DualShock 4. I do up+left on keyboard again in 11.3, and finally all diagonals on keyboard in 12.x. https://user-images.githubusercontent.com/22328803/161387643-dd782745-0390-4971-8f95-d2e721dc60ba.mp4

I hope this helps.

EDIT: For the record, setting a higher deadzone in 12.x doesn't fix the problem.

NABN00B commented 2 years ago

I asked some people with 12.x to try reproducing the issue and received 3 responses so far. I also plugged in my old low budget controller. Here's the summary:

Player Version Controller Result
me v1.12.0; v1.12.1; v1.12.3; v1.12.3-1018-g6f04f52f5 DualShock 4 w/o DS4Windows input drops
person A v1.12.3 XOne input fine
person B v1.12.3 XOne input fine
person C v1.12.3-1018-g6f04f52f5 DualShock 4 w/o DS4Windows input drops
me v1.12.3-1018-g6f04f52f5 budget controller input fine

Although the sample size is small, the issue seems to affect DS4 users in particular.

unknownbrackets commented 2 years ago

I've used a DualShock 4 and DualShock 5 controller without this problem. Never used DS4Windows. Just checked the DS4 to be sure, and there were no issues in the latest git build. I use the drivers installed by PS Remote Play.

-[Unknown]

NABN00B commented 2 years ago

I use the drivers installed by PS Remote Play.

How can we check what drivers we have?

LunaMoo commented 2 years ago

From DS4windows site:

DS4Windows works by remapping the user’s “real” gamepad into a new, virtual / “fake” / emulated gamepad or by directly mapping the real gamepad to the user’s keyboard and mouse.

and it uses:

ViGEmBus v.1.17.333.0 driver or later (DS4Windows will install it for you)

As long as you use DS4Windows, you're emulating having Xinput gamepad and/or keyboard that's probably fine for you in most games since they typically don't use all api's, software like PPSSPP however probably sees you using direct input and xinput at the same time which maybe causes some weird interaction. Did you tried leaving just one dinput or xinput mappings? It might still not work if your "gamepad emulator" also causes the keyboard keys to be "released" constantly.

NABN00B commented 2 years ago

As long as you use DS4Windows, you're emulating having Xinput gamepad and/or keyboard that's probably fine for you in most games since they typically don't use all api's, software like PPSSPP however probably sees you using direct input and xinput at the same time which maybe causes some weird interaction. Did you tried leaving just one dinput or xinput mappings? It might still not work if your "gamepad emulator" also causes the keyboard keys to be "released" constantly.

We do not use DS4Windows (w/o = without) and I only have mappings for that one DS4 controller and the keyboard.

unknownbrackets commented 2 years ago

Start -> Device Manager -> I actually see it as "HID-compliant game controller" under Human Interface Devices. That's a generic driver, but I don't think it worked before I installed the PS Remote Play software.

Anyway, I don't use any input mapping software whatsoever, and I don't use Steam. I've heard people had issues before only while Steam was running due to its input remapping, although it has been a while. If you have any software doing input remapping, that could be causing strange behavior.

-[Unknown]

NABN00B commented 2 years ago

Just to give an update, the issue persists in v1.13.

hrydgard commented 2 years ago

I don't see this problem at all on my setup, but I'm tagging it for investigation for the next release. Sorry it didn't get fixed :/

hrydgard commented 1 year ago

By very slightly wiggling the stick of my 360 controller connected to my PC, while staying within the deadzone, I see this behavior.

I think a reasonable way around this would be to treat deadzone events specially - if the event is inside the deadzone but is not from the same device as the previous event, ignore it. That should work pretty well, I think.