Intro to Advanced Joystick Configs - Part 2
Note: This is part 2 of a series. If you haven’t already installed all the required tools, go check out part 1 first.
Just need the configs? go to the TL;DR
Getting familiar with Joystick Gremlin
The keystone to our entire setup is Joystick Gremlin (JG). JG allows you to remap inputs from your devices to other inputs on your system. For example, you can configure it so with you press the trigger button on your left joystick, it presses the Shift key on your keyboard. This opens an entire array of possibilities that we’ll only begin to touch on.
In this guide, we’ll be configuring a profile for a single game, Star Citizen. Also, we’ll be basing this guide on two Thrustmaster T16000M joysticks and TWCS Throttle, but the concepts being discussed here apply to any game and any input device.
Philosophy
When configuring input devices, I prefer to keep the game as close to a default configuration as possible. This means if I uninstall/reinstall, or move between machines, I just have to have my JG profiles, and I don’t have to worry about re-configuring within the game more than I have to.
This means that I also prefer to rebind physical joystick buttons to emit keyboard commands for the default key bindings rather than configure joystick buttons within the game.
Planning it out
Before we start configuring JG and Star Citizen, it’s good to come up with a plan. One of the easiest ways I’ve found is to use Diagrams.net
You can copy mine from here, and edit it with Diagrams.net. I label the physical input with the in-game action on top, and the keyboard or joystick output on the bottom. As you can see, most of my inputs map to keyboard commands, with only a few joystick buttons (J1, J2, J3, etc). It’s also useful to have the action map handy when creating your configuration.
Joystick Gremlin Configuration
Identifying Devices
First, we’re going to configure the two joysticks. There is a small controller icon under the menu bar that can be black or green. This is the Activate button. When activated, the button will be green and will process all inputs as configured. To work on our configuration, though, we’re going to deactivate JG, making sure the button is black.
In JG we have two tabs for our joysticks. The way to tell them apart is select of the tabs, then move the left and right joysticks one at a time. When moving or pressing buttons, JG will select the physical input on the left side that corresponds with the input you’re creating on your joystick. When you’ve determined which joystick is which, use the Device Label field under the tabs as a reminder.
Mapping Axes
One of the more complex mappings are the axes. We’ll be mapping the roll, pitch and yaw axes from our left and right joysticks onto a single vJoy device. We’ll be using this standardized frame reference1.
On your right joystick:
- Move the stick to determine the pitch (front to back) physical input (it will be Axis 2)
- Enter “Pitch” into the Action Description box
- Select Remap from the action (left) dropdown, and click Add
- In the new Remap action form, choose vJoy Device 1, Axis Y
Repeat these steps for roll (side to side) to the X axis and yaw (twist) to the Z axis
On your left joystick we’ll be configuring strafe forward/back, left/right and up/down. Follow the same steps from above, except on your left joystick and mapping:
- Forward/Back -> vJoy Device 1, Axis X Rotation
- Left/Right -> vJoy Device 1, Axis Y Rotation
- Up/Down -> vJoy Device 1, Axis Z Rotation
Testing it out
To test our configuration, open the Monitor vJoy application. Ensure to activate JG by clicking the activate
button which turns it green. You should also see Status: Running and Active
in the bottom left of the JG window.
Now when you move your left and right joysticks, you should see the corresponding axis move in the vJoy monitor.
Inverting axes
If we loaded this up right now and tried it out in Star Citizen we’d find that the strafe Forward/Back and Up/Down would be reversed. Rather than fixing this in game, we can fix it in JG by inverting the curve. To do that:
- Select the Strafe Forward/Back action
- Within the Remap action that has already been configured, select Responsive Curve from the action dropdown and click Add
- Click the invert button in the Response Curve action form
Repeat the steps for the Strafe Up/Down input
Doubling up inputs
I want to be able to strafe in all directions from my throttle as well. To do this I just had to bind the axes on the throttle to the same axes that I bound my left controller to. Since the game will be configured just to use the rotational axes, it doesn’t matter which physical input is the one manipulating the virtual interface. This is how I’m able to control the same functions from multiple devices at once.
Mapping Hats
In order to use the hats like other buttons, you need to configure them first.
- Select the Hat 1 on the right stick
- Select Hat Buttons from the containers dropdown (to the right of the actions dropdown) and click Add
You can now treat the individual directions of the hat as buttons using the following instructions.
Mapping Buttons
Joystick buttons can be mapped in two different ways (for our use case). If we’re mapping a physical button to a vJoy button (for instance the trigger on the right stick), this would use the remap action.
- Find the right trigger physical input but clicking Button 1 on the left, or by physically pressing the trigger button while the Right joystick tab is selected
- Select the Remap action and click Add
- Configure the Remap form to vJoy Device 1 and Button 1
If we’re mapping a physical input to a keyboard command, then we use the map to keyboard action.
- Find the Gimbal Mode button on the left joystick by physically pressing the bottom right-most button on the right side buttong group while the Left joystick tab is selected (Button 10)
- Select the Map to Keyboard action and click Add
- Press the Record keys button in the Map to Keyboard form
- Press G on your keyboard and release
Continue this process for every physical button you’d like to configure.
Configuring Star Citizen
At this point, you should have every physical button that you want to configure either remap’d to the vJoy device, or to a keyboard press. Now we’ll go into Star Citizen and do some final configurations.
Ensure that JG is in the active state. The Activate button should be green and the Status at the bottom left of the window should be Running and Active.
Resetting to SC defaults
First, we’ll reset the Star Citizen configuration.
- Delete your USER folder (within your RSI installation folder
RSI\StarCitizen\LIVE\USER
) - Launch Star Citizen
Note: It is my preference to unbind the mouse from pitch/yaw which allows you to look around with the mouse without worrying about the ship moving. To do this, after you’ve reset the controls, in Options > KEYBINDINGS > ADVANCED CONTROLS CUZTOMIZATION make sure you’re on the Keyboard / Mouse configuration in the bottom right, then expand Flight - Movement and clear Pitch and Yaw by selecting the item with a left click, then right-clicking on the item
Now all of the keyboard mappings we’ve created in JG should match up to their in-game equivalents.
Configuring Joystick Inputs
In Options > KEYBINDINGS > ADVANCED CONTROLS CUSTOMIZATION menu, use the right arrow in the bottom right button that currently says Keyboard / Mouse to select Joystick / HOTAS. None of the built-in control profiles match our purpose, so we’re going to completely clear the joystick configuration, and configure the vJoy inputs that we’ve configured. There are also a few things that don’t have a keyboard command configured by default, so we’ve set them to a joystick button.
- Click the button on the right that says > CONTROL PROFILES
- Scroll down and choose Clear All Device Bindings
- For each Joystick listed on the left side, choose the button next to it that says None and change it to JoyStick
Note: Sometimes the clear all device bindings profile doesn’t actually clear everything. Make sure to go through each category and ensure that all device bindings are cleared, or set to your liking.
Now that the controls are cleared, we must assign certain bindings using the following table. Do this by clicking on the item twice, then moving the joystick in the desired axis, or pressing the intended button. Use your joystick configuration map for a reference.
Note: You will get a message that things have already been bound and if that’s ok. Always press yes.
Group | Action | Binding |
---|---|---|
Vehicles - Seats and operator Modes | Look Behind | Button 19 |
Vehicles - Cockpit | Open All Doors | Button 27 |
Close All Doors | Button 29 | |
Vehicles - View | Look left / right | Z-Axis |
Look up / down | Y-Axis | |
Flight - Movement | Pitch | Y-Axis |
Yaw | Z-Axis | |
Roll | X-Axis | |
Strafe up / down | Z-Axis Rotation | |
Strafe left / right | Y-Axis Rotation | |
Throttle forward / back | X-Axis Rotation | |
Speed Limiter (Abs.) | Slider 1 | |
Acceleration Limiter Up / Down (Abs.) | Slider 2 (Dial) | |
G-force safety (Toggle) | Button 30 | |
Vehicles - Mining | Fire Mining Laster (Toggle) | Button 1 |
Switch Mining Laser (Toggle) | Button 2 | |
Increase / Decrease Mining Laser Power | Slider 2 (Dial) | |
Turret - Movement | Pitch | Y-Axis |
Yaw | X-Axis | |
Vehicle - Weapons | Fire Weapon Group 1 | Button 1 |
Fire Weapon Group 2 | Button 3 | |
Vehicle - Missiles | Launch Missiles (Tap) | Button 1 |
Cycle Next Missile Type | Button 3 | |
Ground Vehicle - General | Look left / right | X-Axis |
Look up / down | Y-Axis | |
Look behind | Button 19 | |
Fire Weapon Group 1 | Button 1 | |
Fire Weapon Group 2 | Button 3 | |
Open All Doors | Button 27 | |
Close All Doors | Button 29 | |
Ground Vehicle - Movement | Drive Forward / Backward | X-Axis Rotation |
Turn Left / Right | Z-Axis | |
Pitch Up /Down | Y-Axis | |
Social - General | Re-spawn | Button 1 |
Saving the Configuration for Later Use
In Star Citizen, you can save your current configuration as a control profile to reload later. At the main menu:
- Choose OPTIONS, then the KEYBINDINGS tab and click ADVANCED CONTROLS CUSTOMIZATION
- Click the button on the right that says > CONTROL PROFILES
- Click ‘Save Control Settings’
- Enter a name for your control setup, and click Save
- Copy the control settings profile from the
RSI\StarCitizen\LIVE\USER\Client\0\Controls\Mappings
folder.
Whenever you need to delete your USER folder, simply copy the
layout_*_exported.yml back into the USER\Client\0\Controls\Mappings
folder and
use the CONTROL PROFILES button in Star Citizen like you did to load the
advanced keyboard controls above.
Next Steps
Advanced Axis Curves
In my configuration, I use a custom response curve for the Speed Limiter axis (Z-Axis on the Throttle mapped to Slider) so that I can have more precise control over the lower 1/8th of the limiter region. This is done the same way we inverted the axes above, except we configure it at as Cubic Bezier Spline curve and use the control points to adjust the response curve to our liking. This is very much personal preference, but you can see what I’ve done for the speed limiter as a reference. (You’ll note that this is also inverted, which is the way SC requires it)
Future Thoughts
Now that we’ve got our base JG profiles configured and can play the game, we can start tweaking the configuration for specific situations in the game. In a future guide we’ll cover creating custom modes for mining, a director mode and a precision mode for dogfighting that will give us better accuracy while firing weapons.
Need Help? Have an issue/comment? Feel free to join my Discord: https://discord.gg/CVBMxJq