What are these controllers?
3Dconnexion creates six-degrees-of-freedom controllers for the CAD and graphics industry. They are widely used by engineers and designers because the controllers allow them to easily navigate 3D space in their favorite CAD programs. They are solidly built and very accurate. They are not a cheap joystick-like controller, that’s for sure. The accuracy and solid build makes these controllers excellent for gaming.
Are you affiliated with 3Dconnexion?
No. But we support their efforts to make their controllers more accessible to developers through their excellent SDK and support. We don’t sell controllers either. We just enjoy using them.
Do I require a 3Dconnexion controller to use ControlMyJoystick?
No. But you can still use voice commands even if you don’t have a controller.
Which controllers are supported?
You can use any controller which is supported by 3Dconnexion’s 3DxWare10 software. Here is the list:
– SpaceMouse® Enterprise
– SpacePilot® Pro
– SpaceMouse® Pro Wireless
– SpaceMouse® Pro
– SpaceMouse® Wireless
– SpaceNavigator® for Notebooks
You can optionally use a 3Dconnexion controller as a source of triggers and axis data. They have been selling these for years for use with CAD and other 3D design apps, and they are really nice to use for games – especially where six degrees of freedom is needed: up/down/right/left/forward/backward plus rotation around all axis. Let’s take a look at what is involved with getting these controllers to work with ControlMyJoystick and games. From here on it, we’ll refer to them as ‘controllers’.
You must install the 3DxWare driver software, which is available from the 3Dconnexion website. This software has some good practice apps so you can get to a feel of how to use the controller. It also has a Menu app that pops up when you press certain button on the controller. This Menu app can be used to configure the controller for use with an application. You tweak axis orientation and sensitivities and remap the buttons to perform different actions.
For each app you are running when you open the Menu, the Menu app will use an existing .xml from this folder:
or it doesn’t exist, a new .xml file will be created in:
If you go to a game and use the controller and it’s Menu app, it will create a new .xml file if it does not already exist. Take a look at the .xml file and you will see definitions for axis sensitivities, button mapping and more. You can manually edit the .xml file or use the Menu app to modify the settings in the file.
Getting it to work without ControlMyJoystick
3DxWare installs a 3DConnexion KMJ driver (Keyboard, Mouse, Joystick). This allows the controller to emulate a keyboard, mouse and joystick. You can see it working if you use the Chrome browser and find that you can scroll with the controller. It is reading the Chrome.xml and sending commands to Chrome. The main limitations for using it in-game are:
– No user-adjustable curve support or curve switching while in-game.
– Incomplete joystick emulation.
– No support for a proper deadzone or trim.
– No jitter reduction (from shaky hands).
– No way to launch macro’s with buttons.
So, it really isn’t meant to be used in games this way. You can get close by hacking the .xml files, but it still doesn’t get you to a point where it feels like an effective controller.
Working with ControlMyJoystick
You still need to install the 3DxWare driver. And when you install ControlMyJoystick the installer will add a controlmyjoystick.xml to the following folder:
This controlmyjoystick.xml file holds critical configuration settings to allow it to be used as a joystick. ControlMyJoystick also allows you to:
Specify a sensitivity (response) curve per axis. This is done via curve presets and a drag and drop curve node screen.
Specify axis inversion, trim and deadzone.
Set an overall jitter reduction for all games.
Create axis curve groups so that you can have different response curves for different gaming phases, such as landing and combat. You can use a macro to switch between these axis curve groups while in-game.
The install also adds a Tetherscript Virtual Controller driver. ControlMyJoystick will take controller axis data, apply curves to it, and then pass it through to the Tetherscript Virtual Controller driver. Then game then needs to read the joystick axis and button data from this driver. This can be tricky because the game may be able to see both the KMJ driver as well as the Tetherscript Virtual Controller driver. You can either disable the KMJ driver (not a great solution, since you may want to use the controller for something else, like CAD), or you can use ControlMyJoystick’s special voice-activated axis binding commands or the non-voice binding commands in the Joystick menu. This will ensure that the game is listening to the Tetherscript Virtual Controller instead of KMJ.
Enabling 3DxWare Support
In ControlMyJoystick, go to the Input menu, and select the 3DxWare item. This will bring up a configuration screen:
– Enabled – Check this box to allow ControlMyJoystick to communicate with the controller. This is what you will see in the log when you enable the controller.
– Show Axis Values – Check this box to show the real controller axis values in the 3DxWare sidebar panel.
– Smoothing – Check this box to reduce the jitter or shake that is caused by shaky hands. Since the controller ‘puck’ moves very small distances physically, any amount of shake can be magnified. Using smoothing introduces a bit of controller lag, with the higher Depth values causing more lag since it goes back and averages controller axis values to the specified Depth. So a depth of five will average the last five axis values. Default value is two. You can compare the raw axis input data with the smoothed data in the curve editing screen – it will show on the bottom response indicators. One will be jittery, the other will be less jittery.
– Tap Trigger – You can set the sensitivity and timing of tap recognition. Tapping is recognized on the controller puck Z axis only. You can use these taps as a trigger.
NOTE: You don’t have to use voice to bind axis or buttons. You can instead use the Joystick menu or the Test menu item in the Joystick sidebar popup menu.
– Bind Button – Speak this phrase while the game is ‘active’ or ‘focused’ to send the currently select joystick button press to the game.
– Next Button – Bind the next joystick button in the list.
– Previous Button – Bind the previous joystick button in the list.
– Axis Translation and Axis Rotation Binding – Translation is the side to side- forward and backward and up and down motion of the controller puck. Twisting the controller around an axis is rotation. Just like the joystick buttons, you need to use voice commands to bind controller axis movement to your game. You can create your own binding commands if you like. Just enter the commands in the screen shown above. Why, do you ask, are we using voice to bind joystick buttons? It’s because the some games may be listening to the KMJ driver instead of the ControlMyJoystick driver. By ensuring the game is ‘active’, and using the voice commands, it will bind to the ControlMyJoystick driver instead. Other games allow you to specify which driver to use, which makes binding easier.
Try moving the controller puck and you will see the axis indicators move in the 3DxWare sidebar panel.
Double-click on an axis, in this example, TX (Translation along the X axis) to bring up the curve editor. This will edit the TX curve.
These curves are what really makes using the 3Dconnexion controllers in games a real treat. To adjust a curve, click and drag one of the squares which is located along the curve line. You can’t remove or add squares. the curve shown above is a preset available from right-clicking on the curve display area. It is called ‘Soft – No Explicit Deadzone’. You can tweak this curve and you can reset it back to a flat line with the Reset button.
Try moving the controller puck along the TX axis (move the puck from side to side or left to right). You will see the small axis value indicators moving just below the curve display area. The top indicator is the raw, uncurved data directly from the controller. The bottom indicator is the raw data after it has had the curve and smoothing applied to it. Try checking the invert box, and you will see how it works.
You can also edit the curve while the game is running, so if, for example, an axis is too sensitive, you can bring up ControlMyJoystick and adjust the curve, then swap back to the game to test it out. No need to restart the game or ControlMyJoystick.
– Invert – Check this box to reverse the axis values. Some games allow axis inversion, and you can do it there if necessary, or here.
– Trim – You may have a controller that is miscalibrated and doesn’t seem to return to center when you take your hand off the controller. You can set a positive or negative trim value to ‘zero’ the axis value.
– Deadzone – You can set a value here so that any movement of the controller puck within the deadzone value of center will be considered as center. Most curves will have a deadzone of some kind since that without it, the controller is just too sensitive around the center position. Setting a deadzone this way is called an non-explicit deadzone. An explicit deadzone can be achieved by setting the deadzone to zero, and then by dragging the near-center curve nodes down to zero. Either way, it’s a deadzone and both techniques give the same results.
– Digital – Click on this button to bring up the a window where you can send keystrokes to the game when you move the controller along the axis. This allows you to configure digital-joystick-like behavior where you can map a key in-game to scroll whenever the axis goes positive or negative, and to stop scrolling when it returns to zero. You can do this for each axis. This is useful for games where you need to scroll alot (like on a map, or overhead kind of game). Users often map the WASD keys for this, and you can do the same here.
– Reset – Sets the curve to a flat line on x1.
– Mirror – Check this box so that when you drag a node curve, the corresponding node on the other side of center will also move to the same value.
– << < > >> – Use these buttons to move the entire curve up or down.
– Close – Click this to save the curve.
You can also right-click on the curve display area to get a popup menu. From there you can do a reset, set a preset curve and copy and paste curves.
Axis Curve Groups
When you create a profile, a Default axis group will be created and all your curve edits will be in that group. You can rename the group, or create a new group by right-clicking in the axis group list. You can switch between groups by clicking on an axis group or by changing it with a script command. So, by using your voice or a controller button, you can change the active axis group and use different curves. This is very useful for different phases of a game, such as landing or combat.