No Time To Explain Remastered

No Time To Explain Remastered

Not enough ratings
Controller Setup Guide! (For non-XBox Controllers!)
By Cornelia Xaos
A Guide for Configuring (Through your OPERATRING SYSTEM) your controller so that No Time To Explain thinks it's an XBox Controller! This will let you play the game perfectly using whatever device you happen to have! (But the guide only goes into specifics for the Linux Operating System. You will need to find for yourself an appropriate configuration program for your hardware if you're not using Linux.. Sorry..)
   
Award
Favorite
Favorited
Unfavorite
Foreward
I want to reiterate the sentiment expressed in the branding image: this guide is primarily targeted at Linux users as, as far as I can tell, it's much easier to reconfigure the hardware on a Linux box than it is using another OS.

This does not mean that the information within is useless if you're not a Penguin. I do go over the control scheme that No Time To Explain is using for interpreting an XBox Controller so you very well could take this information and apply it to your hardware using some other kind of configuration software that allows you to remap the axis and button orderings at the driver level.
Tools You'll Need
You will need some kind of Joystick configuration software that allows you to reorder your controllers axes and buttons. I use jstest-gtk for the initial reordering, and the built-in linux command jscal-store can be used to "permanentize" your changes (however I don't go over this as I would like my controller to return to normal eventually.. :P ).

You can find jstest-gtk in your package manager if you're using linux, and you can potentially compile it from its source located at its github repo[github.com].. but I don't know if it will even work on another OS or not, so.. good luck.

Here's an example image of jstest, it's "testing" interface, and it's "mapping" interface. (The observant might notice things out of order and could probably piece together what No Time To Explain expects an XBox 360 Controller to look like.. Which I shall explain in detail in the next section.)




The XBox 360 Controller Layout
I will not be going over in detail the full layout of the XBox 360 controller (primarily because I don't know the full layout). I will only be covering the inputs used by No Time To Explain. I'm sure there's plenty of information elsewhere on the internet for specifics about Controller axes.

The Inputs Used By The Game
The following inputs are used by No Time To Explain (as far as I could find):
  • Movement Axes: Left Stick
  • Fire Axes: Right Stick
  • Jump: Left Trigger
  • Interface Buttons: A, B, Y, Right Bumper, & Left Bumper
  • Navigational Buttons: Direction Pad (Up, Down, Left, Right)

The Inputs As Organized by the XBox Controller
The XBox Controller organizes and assigns each axis an index (starting at 0 and counting up) and each button an index (starting at 0 and counting up as well). There is no necessary relationship between these axis mappings and button mappings between controllers on a single operating system or between different operating systems. Because of this, if the developer does not carefully code and test the application on multiple platforms it is uncertain if the mappings will even be correct on other systems. (Trust me. I'm a developer using Unity and I just went through this cross-platform setup recently.)

Anyways, the following is how the XBox Controller maps axes and buttons to positional indices:

Axis Indices
  • Left Stick X: 0
  • Left Stick Y: 1
  • Left Trigger: 2
  • Right Stick X: 3
  • Right Stick Y: 4
  • DPad X: 6
  • DPad Y: 7

Button Indices
  • A: 0
  • B: 1
  • Y: 3
  • Left Bumper: 6
  • Right Bumper: 7

As can be seen.. things aren't entirely obvious. The DPad, for example, is a pair of axes on the XBox 360 controller while on some systems it's not. But moving beyond the complexities of Input Abstraction, we'll now move on to how you use this information to be able to play this game with the controller of your choice.
Configuring Your Hardware

The Plan

Alrighty. So the easy / hard part of this entire debacle is to reorder the natural axis and button indices that your operating system maps to the controller. If you recall from the image I linked earlier (which is reproduced above on the right) there was some apparent reordering already happening in said image. The numbers along the left map directly to what the operating system driver decided they should be, but this causes the controls to not line up properly with what the game expects from an attached controller.

The solution is, as previously stated, to reorder these axes and buttons so that their index (which begins counting at 0!!!) aligns with that of what is expected from an XBox 360 controller. (If you're unsure where your inputs map, that is why you use some particular testing software as demonstrated in the second image I posted near the beginning of this guide.) Here's a short rundown of what exactly I changed in that image above:

Axes
The most obvious axes are the `0: ABS_X` and '1: ABS_Y` axes. These two axes control the left stick of my particular controller. What is nice, is that these two axes are nearly universally assigned to 0 and 1 respectively and don't need to be reordered.

The right stick axes for my particular controller are specifically `2: ABS_Z` and `3: ABS_RZ`. These control the horizontal and vertical axis inputs of the right stick respectively.

Finally, `5: ABS_BRAKE` is the axis associated with my Left Trigger on my particular controller.

If you look at the numbers indicated in the names, you will see that all I had to do to "fix" the axes was to move `5: ABS_BRAKE` to between `1: ABS_Y` and `2: ABS_Z`. This caused the following alignments:
  • `0: ABS_X` - Left X Axis - Index 0
  • `1: ABS_Y` - Left Y Axis - Index 1
  • `5: ABS_BRAKE` - Left Trigger - Index 2
  • `2: ABS_Z` - Right X Axis - Index 3
  • `3: ABS_RZ` - Right Y Axis - Index 4
By reordering my axes I was able to "trick" No Time To Explain into thinking it was talking to an XBox controller. I followed a similar process for the buttons, and, thankfully, I didn't have to do much there either. I merely relocated `2: BTN_C` so that the following alignments occurred:
  • `0: BTN_A` - A - Index 0
  • `1: BTN_B` - B - Index 1
  • `4: BTN_Y` - Y - Index 3
  • `6: BTN_TL` - Left Bumper - Index 6
  • '7: BTN_TR` - Right Bumper - Index 7
Conclusion
So that's it! While it's not a perfect guide for all operating systems it should point you in the right direction for locating software to fix the problem we're facing. If you have any questions feel free to ask and I'll try to respond. Also, if anyone locates any particularly useful software for reordering controller mappings on other OSes I'll link them here.

Part of how I learned how the XBox Controller behaves was through some online Unity Documentation located at their wiki. (It's been invaluable on my current project involving Unity and multiple OS and controller support.) You can find this information located here.[wiki.unity3d.com]

That about wraps it all up. Again, if anyone has any questions, feel free to ask me as I have plenty of time to explain what's going here. ;)
1 Comments
anzah1 7 Jul, 2021 @ 6:39am 
For simply forcing Steam Input from games properties was enough. Though that wasn't available back in 2017.