DeadZones: Part Six

We’re now making the most of the useful range of inputs from the controller, cutting off the noisey extremities of input. At this point, I feel like we’re at the “good enough” point for most games which need analogue input. Depending on the design, you might want to go a step further to improve the feel, though.

Currently we have a deflection magnitude vs. output magnitude which looks like this (in red. Old, scribbled out offensive crap in black):

The deadzone defines the beginning of “zero” output, and the gradient increases such that max deflection is max output.

While we’ve gotten rid of the sudden valley around the deadzone, we’ve also somewhat crunched the useful range of inputs into to the remainder of space after the deadzone are has been removed.

What this means, in terms of feel, is that we’ve now got a limited physical deflection area to serve the purpose of “fine control”: a ring of less than 5mm width on the controller which signifies the “mid ground”. Having fine precision is half the point of an analogue control system (even though most games don’t make much use of it other than to acknowledge it exists through walk/run cycle animation blending or unnecessary stealth sections. Nor should they feel the need to use it if it serves no useful purpose.).

Now that we have a gradual relationship from the DeadZone to full deflection, we certainly have something more kinaesthetically pleasing than having the speed jerk up out of nowhere when we cross the haptically invisible DeadZone. Unfortunately, the introduction or “attack” of the slope is still sudden. It’s like skate boarding into a 45 degree ramp: sure, it’s not a brick wall anymore (i.e. the deadzone threshold), but the transition is still very noticeable.

Not only do we worry about the transition, but also we need to worry that the remaining physical range of analogue input serves its purpose, and feels like it’s a true representation of the ergonomic affordances of the input. We need some way of giving the player access to a generous range of low speed inputs for fine tuning. Here’s an intentionally bad example of this which (true story) was actually suggested to me, and I had to be really polite about it, and say “No. Please don’t. I like working here. I don’t want to have to hurt anyone.”:

“This deadzone’s in a right state.” “What do you suppose you’ll do about it?” “… Make it worse.”

We don’t want to introduce lots of stepped “mid way” dead zones to approximate “fine control”, as we’ll just have that “invisible threshold” issue that we had with the main dead zone, but multiplied by however many thresholds you choose to have. Trying to find the sweet spot for your analogue input is going to be harder, because you’ll be jumping between speeds which are just a little too fast, or a little too slow (like following NPCs in any first person FPS ever). Where this is a ziggurat, we need a pyramid – a smooth, unstuttering continuous dynamic, which maps nicely into the mind as a simple relationship.

But as mentioned before, we don’t want to feel too much of a beginning of a ramp up as we cross it. Instead, (and this seems to be the industry standard) we could gradually introduce that slope, like a half pipe, as opposed to a straight ramp.

//Power Curves.
 float axisPower = 2.0f;
 float circularPower = 2.0f;

//Use this method for doing a per-axis power curve (not recommended)
 StickInput.x = Mathf.Sign(StickInput.x) * Mathf.Abs(Mathf.Pow(StickInput.x, axisPower));
 StickInput.y = Mathf.Sign(StickInput.y) * Mathf.Abs(Mathf.Pow(StickInput.y, axisPower));

//Use this method for power curving the pure deflection.
 StickInput = StickInput.normalized * Mathf.Pow(StickInput.magnitude, circularPower);
Reminder: I’ve made all the deadzones 0.5 for clarity, but practically, they should be about 0.3

We should divert to a little physiological explanation: When we’re first playing a game, we have no real muscle memory. As a result, our thumbs tend to “search” rather than “choose” the correct pressure on the stick, comparing the fast feedback loop of feel (the pressure of our thumbs on the stick) with the slower loop of visual feedback from the game. Comparing these two inputs (haptic and visual) creates a relationship in our brain (leading to virtual proprioception – our sense of being in a virtual space).

The visual feed back tells us when the haptic feedback is just right for our current purposes, but we are slower to react to it (~100ms for visual processing vs basically instantaneous for haptic feedback): the controller itself can’t tell the player they’ve struck the correct balance – it’s just telling the player “your thumb is here, pushing with this pressure while your avatar/crosshair is moving that fast on screen”, and so we can match that pressure with the in game behavior.

Your thumbs are essentially performing a “divide and conquer search” to find the appropriate pressure to maintain that perfect turn rate in a racing game, or track an enemy as they move across the screen. Since both input and output are gradual continuum, the relationship between the speed in the game and thumb pressure need to line up, too. When this happens, there’s an intuitive connection between thumb pressure and in game speeds, which allow you to increase and release pressure, and feel a consistently correspondent change on screen.

While the thumb-side of the search is using one of the quickest pieces of brain matter you’ve got (the motor cortex), the search is still held up by having to wait for visual feedback. The human search algorithm is repeating as fast as the player can see. But this eventually develops into a  Bayesian Probability model: this is the essence of your muscle memory – hotwiring your brain with your thumbs so that you’re eventually “hard wired” to know the relationship between your thumb pressure and the on screen movement. If you’re at all interested in this sort of thing, it’s better for me to leave you with this video.

Since the thumb “searches” the breadth of possible pressures to find the right spot, the “kink” in the “sudden ramp” version of the game is a real annoyance: the relationship between in game speed and stick deflection feels very arbitrarily split, with no haptics to tell us where the split begins. With the curved version of the deflection graph, as our thumb pushes out, the speed output comes in tangentially to the “flat” of deadzone. There’s no sense of it “starting” abruptly. It’s as if the relationship is continuous – No kink in the feel. It’s a seamless transition from nothing to something.

It also helps that the curve is providing a large area of low speed movement, so that you have a decent “pallette” of low speeds to choose from. And yes, it does cap out suddenly, but, as luck would have it, we have actual physical feedback in the pad (the circular restrictor plate) to tell the player that they’ve hit a limit.

This is actually rather elegant: We’re working the feel of controller into the very fabric of how the game behaves.

One principle we can take from this is that making intuitive controls can often be achieved by trying to make the outcome of the controls a one to one relationship with the controller itself. And this has a lot of implications when it comes to regarding discreet vs. continuous verbs and controls.

One thought on “DeadZones: Part Six

  1. Hey, thanks for writing this series! I had never fully realized how subtle all this controller stuff can be. The way you explain it all makes a lot of sense. Will definitely be applying it to future games!

Leave a Reply to Jan Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>