Setting up a HOTAS for Jump to Lightspeed | Star Wars Galaxies Restoration

Setting up a HOTAS for Jump to Lightspeed

  • Views Views: 4,465
  • Last updated Last updated:
  • One thing that Jump to Lightspeed really benefits from is using some kind of joystick. Unsurprisingly over the past 20 years the range of joysticks available has increased by a huge amount and now includes a Hands-on Throttle-and-Stick setups - or HOTAS for short. As it's name suggests, this consists of a throttle and joystick element that are both independent devices with loads of buttons and dials.

    Sadly Star Wars Galaxies only supports a single joystick device, plugging in the throttle and joystick will result them both being recognised, but with the various inputs overlaying each other and basically being unplayable. Thankfully there is a solution, however as you can imagine it requires a bit of work to configure.

    The way we solve this issue is to configure up a Virtual Joystick. This appears on your PC as a hardware device which we then tell SWG to use. We then need to map the various buttons and dials from the throttle and joystick onto the virtual joystick - so pressing button 1 on your joystick will fire button 1 on the virtual joystick, and pressing button 1 on the throttle fires button 2 on the virtual joystick (hopefully that makes some sense). Thankfully JtL doesn't have a huge number of buttons, so it's not quite as monumental as it could be.

    1. Install a Virtual Joystick Device​


    The first step is to install a virtual joystick on your computer. My recommendation is vJoy which is available off Sourceforge. Install this on your computer and load up the configuration panel. You will want to enable the Axes of X, Y, Rz and Slider. I've set buttons to 32 and POVs to 1 as I've one POV stick on my HOTAS. Click "Apply" to save these.

    <unable to upload an image of this>

    2. Install Remapping Software​


    vJoy doesn't actually do anything other than create a hardware device on your computer. You now need a piece of software that will listen to the joystick inputs and then map them through to Virtual Joystick. There's a few different options out there, but the one that I feel is the most straightforward is Joystick Gremlin. Plug your HOTAS in, install the software and load it up!

    2.1 Mapping Actions​

    Along the top of the page of Joystick Gremlin you'll have a tab for your Joystick and Throttle, one for the keyboard, one for your vJoy device, one for settings and one for plugins. We need to go through both the joystick and throttle and map the various buttons and axis to the virtual device. We'll do the X-axis on the joystick first, so make sure you're on the joystick tab and click on the "X Axis" action on the left-hand side. On the right-hand side, type in a description (this will be Pitch) and then select "Remap" in the drop down and click "Add".​
    This will add a Basic Remap option. In this case the default options are fine - "vJoy Device 1" and "X Axis" with "Absolute" positioning. We can now repeat this for the Y Axis which will be for Yaw and if your joystick has it Z Rotation (which is Roll). So far so good!​
    Now we need to remap some buttons. One clever feature in Joystick Gremlin is that pressing a button (or any item on the joystick or throttle) will automatically select it in the left-hand menu. So let's press the trigger button on the joystick and remap that to vJoy Device 1's Button 1. Continue doing the buttons you want to use - as a warning, don't go crazy mapping all the buttons JtL only needs a handful and your virtual device has been set to have 32.​

    2.2 Mapping the Throttle​

    Not going to lie, this was a horrific mess to work out how to do - but my frustration is your gain as I can impart what I've learnt so you don't need to. Most HOTAS throttles have the actual throttle configured up to be an Axis. This means that it has a range between -100 and +100 with a zero point in the middle - by it's nature it's designed so that you can set it to a value and keep it there unlike the axis on the joystick which naturally centre back to zero. JtL's throttle axis mapping is actually written to allow somebody to use a gamepad thumbstick, this means that you'd push it in one direction to nudge the speed up and pull it back to decelerate - having it in the zero position doesn't change the speed. As you can imagine the two set ups aren't compatible and you simply don't have the granular control you want from the throttle.​
    There is a solution though, we can remap the throttle axis to act as a "slider" control.​
    Back in Joystick Gremlin, select the Throttle tab. Most times your throttle will be using the "X Axis" option - if the throttle can be "split apart" then the left-hand section is likely the X-Axis and the right-hand section will be the Y-Axis. Select the "X Axis" enter a description of Throttle and hit "Remap". You want to remap this to vJoy Device 1's "Slider" option. The Slider mapping basically is a linear scale from 0-100.​
    Now head to the Settings tab and under vJoy Device #1, enter "1" as the value alongside Slider. This will ensure that when Joystick Gremlin initialises the throttle will be zeroed.​
    Lastly, head back to the Throttle tab and go remap any buttons you want to use on it.​

    2.3 Saving and Activating​

    Use the File menu at the top to save the profile - you can name it whatever you fancy in truth, but the game and HOTAS type is probably a good bet.​
    In order for your mappings to work, you will need to activate them - this means that each time you want to play JtL you'll need to load Joystick Gremlin up and have it in the background (you can have it autoload if you really want, but I personally don't think it's worth it). This is basically a matter of just clicking on the activate button at the top (it looks like a joypad).​
    To test them, up in the Tools menu there's a "Input Viewer". On vJoy Device #1, check "Axes - Current" and "Buttons + Hats" and then play around with your HOTAS. you should see the various items change (Axis 4 is the throttle and will go from 100% to 0%, this is normal!).​
    Feel free to remap more buttons and make changes - simply click on the activate button twice - once to deactivate it and once more to reactivate it. As a word of warning, when activated, pressing a button won't select items in the left-hand menu, you'll need to deactivate it to do this.​

    2.4 Response Curves​

    You may decide that you need to refine the way the joystick or throttle work. Many people like a certain amount of deadzone (and some joysticks never sit on the central point). I tend to do this on the output - if you go to the vJoy Device #1 tab, you can select one of the outputs and then add a "Responsive Curve". You can then change the curve around to add in deadzones and modify the ramp up/down. One thing that I use this for is to give me more play (and control) on the throttle at higher speeds as well as ensure that my roll starts off at zero (they're notorious for leaning to one side)​

    3. Configuring Star Wars Galaxies​

    To get this up and running in the game, the first step is to make sure the game is using the correct joystick device. This has to be done from the launcher as there's no way to configure this with the game running. Under the Play button, click the "Launcher and Game Settings" link. In the popup, then click the Game Settings button, this will open up another popup. Select the Game tab and ensure that the Enable Joystick button is selected and the drop down show "vJoy Device". Click OK on the last popup and Save on the second and then load the game up.

    The next step is the most tedious if I'm honest and that's to map all of your joystick outputs to the JtL commands under the game key mappings. What's really frustrating is that this can only be done in space - the options aren't there when you're on the ground. This means you'll need to launch into space and hope that nothing appears out of the void to attack you... Once in space, hit escape a few times to get your mouse cursor up and the menu where you need to click on "Options". From the window, select Keymappings and then the Space tab. Now unbind every mapping with a JOY binding in. Once clear, you can select an item, click "bind" and press the appropriate button or move the stick/throttle to bind that movement to the action.

    For the yaw, pitch and roll you only need to bind the item with "(axis)" in the name. For the throttle you need the one that simply says "Slider" - don't select the axis options as they won't work! Buttons should be straightforward. They're going to be fairly personal how you set it up, so

    Broadly speaking, that's now it! You should be playing JtL using a HOTAS.

    You can modify the mappings with the game running - just deactivate and reactivate within Joystick Gremlin (the benefit of virtual devices means you don't need to turn things on and off!)

    4. Mitigating the in-game deadzone​

    Star Wars Galaxies has a hard-coded deadzone for analog stick input, even if you have the deadzone set to 0 in the Options panel. This is most noticeable as a lack of fine control around the center of your stick when aiming (e.g. during a joust).

    You can mitigate this by increasing the rate at which your input ramps to higher values, by setting a response curve that looks something like this:

    image.png


    You want small inputs around the center to jump to higher input values that are above the hard-coded in-game deadzone.

    This curve can be implemented in Joystick Gremlin with the following XML:

    XML:
    <response-curve>
    <mapping type="cubic-bezier-spline">
    <control-point x="-1.0" y="-1.0"/>
    <control-point x="-0.8" y="-0.8"/>
    <control-point x="-0.062" y="-0.08"/>
    <control-point x="-0.012" y="-0.08"/>
    <control-point x="0.038" y="-0.08"/>
    <control-point x="-0.038" y="0.08"/>
    <control-point x="0.012" y="0.08"/>
    <control-point x="0.062" y="0.08"/>
    <control-point x="0.8" y="0.8"/>
    <control-point x="1.0" y="1.0"/>
    </mapping>
    <deadzone center-high="0.0" center-low="0.0" high="1.0" low="-1.0"/>
    </response-curve>