1. Hello Guest! Did you know that we're also on Discord? You can join us here: https://discord.gg/aa578Mm.
    Dismiss Notice

Project diva homemade controllers

Discussion in 'Tutorial Area - By users for users!' started by nofutur, Jul 20, 2016.

  1. Doctopus

    Joined:
    Dec 22, 2017
    Messages:
    44
    Likes Received:
    0
    Trophy Points:
    85
    Location:
    Planet Earth
    #101 Doctopus, Nov 24, 2018
    Last edited: Dec 3, 2018
    (The interesting part is on the last half of this post.)

    So a while back I did some extra experiments on the DS4 touchpad behavior and found something informative:

    1. Swiping over the touchpad with one finger from one end to other consistently fills 20 parallelograms on a chain slide note. Compare to this, the longest single swipe I saw on the arcade slider fills about 37

    (As seen here)



    2. Sliding with two fingers synchronously fills double the parallelograms.

    3. To my surprise, the touchpad does not seem to care enough about the difference between <--> notes and -><- notes. I did a test by forging the coordinates of the touch for the touchpad using my controller board and a <--> slide got registered as <--> AND -><-. Sliding manually instead programmatically results in unpredictable behavior when intentionally sliding backwards. (hisokeee was right, the touchpad is truly awful)

    4. The touchpad does do two point tracking so if one swipe the touchpad with two fingers the swipe will be registered as a double slide.

    So it seems that using touchpad as a slider or automatically switching between analog sticks and touchpad is actually a bad idea if the controller cannot predict whether a note is a chain slide or a normal slide, since one cannot naively assume the note type just from the user input (What if the user swipes a slide note a bit longer? Is it a slide or a chain slide? What about double swiping a chain slide? How to encode double swiping to touchpad inputs? The list goes on and on...).

    It is already obvious that using LR to play slide notes is suboptimal since the swiping directions are not checked (like described on Point 3 above) and there's no way to precisely tell the game about swiping speed and distance thus the feedback on chain slide notes is far away from what an arcade slider actually does. Analog sticks have swiping directions checked but still does not have the correct feedback. Touchpad has the correct feedback but (shockingly) no stable swiping direction check, and encoding doubles could be painful. Seems that everything I could think of are bad ideas on their own if the controller cannot predict whether a note is a chain slide or a normal slide...

    And here is where things get interesting.

    There is a "forgotten" feature in Customize->Game/Control Config, so forgotten that probably nobody ever thought and touched it. "Controller Vibration", which basically utilizes the controller rumble feature to send a feedback to the player when a chain slide note is in progress.

    This is EXACTLY what I want!

    If the game tells the controller that it should vibrate, that means the current note is a chain slide note and the controller should map the current finger position to the touchpad as two synchronized points. Otherwise it is a normal slide/an empty slide and the controller maps the swiping directions to analog sticks. This way both swiping directions and swiping distance are checked by the game when needed thus gives the correct response on both chain slide notes and single/double slide notes. Thus it quickly becomes "possibly the most accurate as of now" slider replica on PS4 that I could think of.

    Whoever in SEGA that came up with the idea that "we should use controller vibration to give players feedback ONLY on chain slide notes", I am falling in love with them (metaphorically).

    So then I spent a few hours to figure out what makes the PS4 treat third-party controllers with different hardware configurations differently, and I did eventually find out how to make PS4 send rumble signals to my controller. After another few hours of modifying the firmware, I finally have a slider that "feels arcade" when I swipe on it.

    There is, however, a major limitation on this approach: it depends on a feature, i.e. rumble, that are not widely supported on off-the-shelf fightstick hardware. In fact I did not see any fightstick boards that support it, yet. (AFAIK Akishop PS360+ and Cerberus have the rumble bit set but they do not enable the output report thus get no feedback at all. That was SOOO close!) Currently my controller and some commercially available converters support parsing the rumble report, and GIMX will support it eventually as well since I notified the developers about my discovery on how to enable rumble on licensed USB controllers. It is also possible to implement it via an EXTREME padhack that involves emulating touches on the touchpad (whether using digital or analog methods) and detecting voltages on the rumble motor driver outputs. Still, this is a bad news for all fightstick board users, which also covers the majority of FT controller users/makers.

    (Actually there is another annoying flaw: no more empty sliding chime! D: But again nevertheless this is the best way to replicate a slider that I could think of now.)

    (Anyway: phase one of Project Make-Slider-Arcade-Again done, move on to the next phase)

    EDIT: use official terms like "chain slide notes" instead of inventing my own
     
  2. Doctopus

    Joined:
    Dec 22, 2017
    Messages:
    44
    Likes Received:
    0
    Trophy Points:
    85
    Location:
    Planet Earth
    #102 Doctopus, Dec 1, 2018
    Last edited: Dec 1, 2018
    (It feels like I am hijacking this thread more than I should LOL. Anyway here goes another post:)

    Also an upgrade suggestion for fight stick PCB users (if your PCB supports true analog stick inputs):

    Get yourself a 2-channel digital potentiometer (or two 1-channel digital potentiometers) and wire the potentiometer(s) to X-axis of the analog stick inputs. Also wire the Y-axis to two 50-50 voltage dividers (e.g. 10k-10k should work fine).

    After that you got a digitally controllable analog stick emulation. Now you can connect the digital input of your digital potentiometer(s) to an Arduino and use the Arduino to scan the slider input (button presses or gesture detection). This offers two benefits: configurable button behavior and no more "sliding backwards has no penalty" issue for <--> and -><- slides.

    For a 4-button slider setup, here is an example truth table for mapping the presses to sliding directions. Notice the mapping for <--> and -><- slides are more accurate than using the built-in macro feature in the game and both 1100, 0011 presses and 1010, 0101 presses map to <-<- and ->-> (unlike macros which you need to remember which is left and which is right).

    (DC means don't care, or "fine if you don't want to handle them")

    (Values for left stick and right stick are represented as 8-bit numbers. Change this if the resolution of your digital potentiometer differs)

    Code:
    0 1 2 3 | LS       RS       DC?
    --------+----------------------
    0 0 0 0 | 0x7f (|) 0x7f (|)
    0 0 0 1 | 0xff (>) 0x7f (|)
    0 0 1 0 | 0xff (>) 0x7f (|)
    0 0 1 1 | 0xff (>) 0xff (>)
    0 1 0 0 | 0x00 (<) 0x7f (|)
    0 1 0 1 | 0xff (>) 0xff (>)
    0 1 1 0 | 0xff (>) 0x00 (<)
    0 1 1 1 | 0xff (>) 0xff (>) DC
    1 0 0 0 | 0x00 (<) 0x7f (|)
    1 0 0 1 | 0x00 (<) 0xff (>)
    1 0 1 0 | 0x00 (<) 0x00 (<)
    1 0 1 1 | 0x00 (<) 0xff (>) DC
    1 1 0 0 | 0x00 (<) 0x00 (<)
    1 1 0 1 | 0x00 (<) 0xff (>) DC
    1 1 1 0 | 0x00 (<) 0x00 (<) DC
    1 1 1 1 | 0x00 (<) 0xff (>) DC
    
    Again if anyone wants more information (schematics, etc.) feel free to ask me :P
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice