Analogue Input Curves

Analogue Input Curves

We've created a very flexible input system for sphereFACE, which is designed to interoperate with any kind of controller (whether joystick, gamepad, etc) in a predictable and configurable way. The system allows us to set not just controller axes, but make use of analogue inputs as buttons (such as analogue shoulder buttons).

It lets us add custom deadzones to any analogue axis, or set an activation threshold for an analogue button. It lets us stretch or scale axes, asymmetrically if needed, so you can have more sensitivity in one direction than another if you want. It lets us adjust saturation values, so you can make more rapid turns with a smaller analogue stick turn, if you want - or reduce sensitivity to get more accuracy out of the same stick range.

All this functionality is already present in the back-end, but currently hardcoded to work with the Xbox360 controller, because it's the most widely supported control system and other controllers can emulate it well. Once we add a menu, we'll be exposing all of this functionality through a controller-friendly and VR-friendly input configuration submenu, so whatever controller you prefer to use - whether it's keyboard and mouse, a console controller, a joystick or even a wheel and pedals - you'll be able to set it up however you like inside sphereFACE without needing third party remapping tools. And this is an extensible component, so it'll also be able to be plugged in to our future games, too.

Below is a debug console output of the non-linear activation functions for various bindings for the default controller, using deadzones, half-axes and custom scaling:

The top section shows a linear mapping on axis 0 from -1 to 1, which is suitable for turning left and right in a prdictable fashion.

The second shows an inverse scaled half-axis binding with a deadzone, where the negative side of the axis produces a positive output, and the positive side of the axis produces nothing - this is used in sphereFACE for accelerating the ship forward. There is a flat patch near the centre forming a deadzone, so the ship doesn't set off without moving the stick a certain distance forward first.

The third axis shows a two-part mapping for an axis that is linear in its lower half, and inverted and clamped to maximum in its upper half. This can be useful for controller setups like the Xbox360 where both shoulder buttons are bound to the positive and negative parts of the same axis, and you want each one to do something different.

And the final section shows a linear full axis mapping, again from -1 to 1, but this time with an asymmetrical deadzone which leaves less sensitivity on the negative side than the positive - useful for asymmetrical controls, or simply off-centre sticks.

All of these settings can be used to adapt the game control to any controller - no matter how unusual!