xerpi / ds4vita

Use a DS4 on your PSVita
175 stars 34 forks source link

Sticks moving slow #9

Open MartinWillem opened 7 years ago

MartinWillem commented 7 years ago

I've succesfully installed ds4vita and all the buttons work correctly except for the sticks (mainly the left one). In games where you move your character arround with the left stick (like persona 4) the character walks very slow when you go certain directions and when you turn arround.

parkerlreed commented 7 years ago

Try this https://drive.google.com/open?id=0B2cSlWc2yl7Eend3VG56XzQxSkE

This line has been edited to replace the 32 with a 1 https://github.com/xerpi/ds4vita/blob/master/main.c#L256

As per @xerpi this should be more responsive and possibly fix the issue. (It fixes steering in NFS Most Wanted for me)

xerpi commented 7 years ago

Try the latest version: https://github.com/xerpi/ds4vita/releases

zany130 commented 7 years ago

I have the same issue on the latest version

zany130 commented 7 years ago

Sorry for the double coment. Actually for me it's just when I push the stick forward

MartinWillem commented 7 years ago

I'm still experiencing the same issue with the newest version. To be more specific the issues happens when I play ratchet and clank collection. When turning the de sticks in a circular way from bottom to right to top the character keeps moving to the right, the same thing happens when rotating it the other way but then the character moves the other way, i have tried editing the threshold for the x an y axis's of the ds4 controller and this improved the issue a little but not much.

xerpi commented 7 years ago

I'll try to fix it asap, but I'm very busy these days...

MartinWillem commented 7 years ago

Sorry if I sounded like I was pressuring you, it's already very good how far the mod has come. Take your time!

xerpi commented 7 years ago

Can you try this version? https://github.com/xerpi/ds4vita/releases/tag/1.1

circletile commented 7 years ago

Not sure if this is the same issue as above, but I'm seeing an issue in Trails of Cold Steel where using the left analog stick for menu or character movement produces unexpected results. Regardless of stick angle, the game acts like the tilt angle is periodically being read as zero, causing awkward slowdowns or stops of character or cursor movement. The right analog stick appears unaffected, nor am I seeing issues with other buttons.

xerpi commented 7 years ago

@circletile by tilt do you mean the gyroscope/accelerometer tilt?

circletile commented 7 years ago

Sorry for the delay. I meant to say it is the angle of the left analog stick, not gyro/accel. I still need to make sure there isn't interference from other plugins, but the only other 3rd party plugin I'm running is scorpeg/Button-Swap. I'll try a few different games as well to make sure it isn't just this title.

circletile commented 7 years ago

Retested without any other 3rd party plugins loaded, and with a few other games including Gravity Rush. When in menus, the cursor will stutter or reset to its default position (depends on the menu or game) and when in gameplay, character movements controlled by the left analog stick will erratically stop or slow down (ie. run to walk speed). The problem may not be exclusive to left analog stick inputs, but so far the right analog stick does not demonstrate any obvious input issues. Also, accuracy of the direction of the character/cursor when using analog sticks is not an issue. When using the vita's built-in analog sticks, character/cursor actions respond as expected, even with the DS4 controller connected via bluetooth.

To ensure I don't have a faulty controller, I connected the DS4 to my PC and used DS4Windows to check for analog stick input errors or jitter. I was unable to find problems within the test utility or on PC games. I also have not seen input problems when using the DS4 on a PSTV that does not run taihen.

kwonyoong commented 7 years ago

Exactly same issue as "circletile" here. (latest version) I have two controllers (New Dualshock4). So I've tested all of them. And they have same issue.

For example when I play games using analog stick, my character moves and stops randomly and repeatedly. I guess the value of analog stick input goes to 0 repeatedly for some reason.

This issue occurs whatever game I play. Even when I play PC games via the Moonlight Vita, same issue occurs. Of course when I use vita's own analog stick, no issues at all.

kwonyoong commented 7 years ago

Retested using older versions. version 1.1, 1.01 have issues that I've mentioned above. But on version 1.0 there are no issues. It works properly.

Maybe the reason is "Reduce ksceCtrlSetAnalogEmulation delay (should improve analog sensibility)"? Since it is a new feature on 1.01 and related to analog stick.

xerpi commented 7 years ago

@kwonyoong thanks for testing. If you can compile, can you try to change the last parameter (the 1) of this function call: https://github.com/xerpi/ds4vita/blob/master/main.c#L269 to different values? On version 1.0 it was set to 32, but then changed to 1 on version 1.0. Some key values to try would be 8, 16, 32, 64, 128 and 256.

circletile commented 7 years ago

I can also retest, just need to set up a VitaSDK build environment.

kwonyoong commented 7 years ago

@xerpi Sorry but I don't know about programming or development. I hope someone who can compile make the value change!

By the way, thanks for this useful plugin xerpi :)

circletile commented 7 years ago

I compiled and tested builds using values of 8, 16, 32, 64, 128, and 256. The two tests I performed were holding the left analog stick in fixed directions for 30 seconds each, and rotating the left analog stick in slow circles for the same duration. As before, and for all these tests, the right analog stick was/is unaffected.

What I found is that a value of 8 improved movement stalling in single-direction tests somewhat, and a value of 16 in single-direction tests corrects the issue completely. For stick rotation tests however, improvements were noticed up to values of 16, but did not further improve for values 32 through 256.

I did however notice a pattern emerge during rotation tests. For values of 16 through 256, character movement in rotation tests would not go "full stop" as the original issue appeared in the single-direction 1 and 8 value tests. Instead, character movement would appear to "reduce speed" at certain points during stick rotation. I eventually found that when the analog stick is moved to a NW/SW/SE/NE direction, no matter what position the stick was in previously, the game character's movement speed would reduce to "walk" speed instead of the expected "run" speed, as if the stick was not being held at full tilt.

My guess here is that the original issue was resolved with a value of 16, but I have now found a different issue where the left analog stick tilt value might be getting calculated incorrectly when its direction is near multiples of 45 degrees. Not sure how this could be though since it looks like both analog stick inputs are being processed in a similar manner.

kwonyoong commented 7 years ago

https://www.youtube.com/watch?v=V1LumKuy1-o

I don't know how to compile but I want to help you to solve this issue. So I recorded a clip to show you what happens on version 1.1 and 1.0

On version 1.1 (Parameter : 1), you can see the value of analog stick input goes to 0 repeatedly and randomly. But on version 1.0 (Parameter : 32), I don't see any issue.

@circletile performed slow rotation test so I performed too.

To record this clip I used Moonlight-vita and Dolphin Emulator's controller setup page.

silentjoe commented 6 years ago

I also get this same behavior as kwonyoong and circletile. The problem manifests itself for me in fighting games. Specifically left analog stick with quarter circle forward has poor input (left down, left down forward, left forward). However the opposite (right down, right down forward, right forward) is completely okay. Please help. Thanks.

xerpi commented 6 years ago

I'll try to work on that soon.

xerpi commented 6 years ago

Can you try this version? https://transfer.sh/a7HcG/ds4vita.skprx

circletile commented 6 years ago

Stutter issue is gone, but the diagonal movement issue still persists. Might be more appropriate to describe the slow/walk issue as if there were a 4-way rhombus joystick restrictor plate in use on the left stick, where the magnitude is limited in non-cardinal stick directions. Right stick is still unaffected (full range of motion) however.

xerpi commented 6 years ago

Thanks for the detailed explanation! I think the diagonal problem happens because I check X and Y coordinates separately for a threshold when I should use the hypotenuse of them (√(x²+y²)) instead. I'll post an update when I get back home.

xerpi commented 6 years ago

Managed to have some time to try the hypotenuse thing: https://transfer.sh/fwny7/ds4vita.skprx Hope this fixes it!

circletile commented 6 years ago

Tried out the new build; its really close to full function now. the only points where the game reads the stick as not at full-tilt is in 45/135/225/315 degree positions with about +/- 5 degree tolerance. Wish I had a raw value readout to see what direction & magnitude the game is actually being handed.

Does the Vita read analog sticks as true circles (polar coordinates) or as squares (X/Y coordinates)? In the case of X/Y, maybe that the hypotenuse interpolation is falling a bit short of the field boundary corners and needs an extra "push" to be read as full tilt when near 45/135/225/315 degree positions. Maybe there's a dead zone value its expecting to be added to each of X and Y, causing the position read to fall short of what games would consider full tilt in these positions?

xerpi commented 6 years ago

You can check the joystick values with https://github.com/SMOKE5/VitaTester/releases

The joystick values are reported as cartesian X and Y coordinates (and not angle+magnitude polar coordinates). The values range [0, 255] and the part inside the circle but outside of the square of the following picture is reported as 0 or 255, being (128, 128) the center. 25qw2s3 That's the default joystick mode, games can change into a circle-inside-square mode instead of square-inside-circle.

psxdsx commented 6 years ago

I am noticing my character in Persona 4 walking when pulling the left analog stick directly down. It is a narrow range maybe like 15 degrees. But I am running 3.65 enso, not sure if that will make a difference.

XDNZ commented 6 years ago

Not sure if this is the same issue, but I was playing Resistance Burning Skies and using the right analog stick on the DS4 for aiming, aiming to the left would be fine but aiming to the right would be slower than aiming to the left. I tried restarting the controller/console but it would stay the same or just swap the direction that the aiming is slow in. This problem doesn't happen when using the analog sticks on the vita, both directions move the same amount when aiming. Unfortunately don't have any other games to test with. Running 3.68 on a Vita 2000 if that matters.

realNZZN commented 2 years ago

This is still an issue, happens 100% of the time when the stick is pointing down but sometimes affects the entire bottom half of the stick's movement which can be temporarily fixed by spinning the stick on the vita