• "Auto racing began 5 minutes after the second car was built." - Henry Ford
  1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Dear Guest. Follow RaceDepartment on Twitter, Facebook, Instagram, Twitch, Steam and YouTube.

Combined controls: do you implement this idea?

Discussion in 'Sim Racing Hardware' started by Elaphe, Oct 13, 2017.

  1. Elaphe

    Elaphe

    Messages:
    125
    Ratings:
    +25
    I've been using this for some months now and I think it's a good practice because it allows you to have more functions with the same number of buttons, thus reducing the need for many buttons on the wheel or the button box, making it simpler to use and remember, and saving buttons for any extra function you need. The idea is to map dual functions to the same button: function 1 for press and release, and function 2 for press and hold (0,5 seconds or whatever time you find ok). For this I'm using autohotkey scripts as launchers for my games. Some of the dual functions I have mapped in several sims are, for instance: pause-unpause / retire; start / restart; camera / replay; pit limit speed / pit request... Generally, you assign these function to keys on the games, and program the scripts as you need. Different games require different codes to make some things work. For instance in Assetto Corsa, it's great to have the In-game Keyboard Shortcuts Extension installed. Something basic for rFactor 2 would be this (change F5 and F6 to the keys you wish).

    $1joy5:: ; pit limit / pit request (hold)
    SetKeyDelay, 10, 50
    keywait 1joy5, T0.6
    if errorLevel
    {
    send {F5}
    return
    }
    else
    {
    send {F4}
    return
    }

    Something a bit more complex, for the pause / retire function in Assetto Corsa. As you can see, when the pause menu is displayed, you can program the mouse movement and click to unpause (cannot be done with keyboard input):

    $1joy9:: ; pause toggle / retire (hold) - In-game Keyboard Shortcuts Extension needed
    SetKeyDelay, 10, 50
    keywait 1joy9, T0.6
    if errorLevel
    {
    send ^e
    return
    }
    else
    {
    send {esc}
    sleep 200
    if (toggle := !toggle)
    return
    else
    {
    DllCall("SetCursorPos", int, 960, int, 468)
    sleep 300
    click
    DllCall("SetCursorPos", int, 960, int, 2000)
    return
    }
    }
    return

    I have also another interesting piece of code for Assetto Corsa (see example) and rFactor 2 to have one button to cycle many different cameras:

    myListLetter := ["{F1}","{F1}","{F1}","{F1}","{F1}","{F3}","{F3}","{F3}","{F6}","{F6}","{F6}","{F6}","{F6}","{F5}","{F1}"]
    numberPressed = 0
    size := myListLetter.MaxIndex()

    $1joy4:: ; cameras / replay (hold)
    SetKeyDelay, 10, 50
    keywait 1joy4, T0.6
    if errorLevel
    {
    send ^r
    return
    }
    else
    {
    numberPressed++
    if(numberPressed<=size)
    {
    }
    else
    numberPressed = 1
    letter := myListLetter[numberPressed]
    Send, %letter%
    return
    }
    return