One of the big aims of DirectX 8 is to make Windows a more user-friendly operating system for gamers, and an important part of that is detecting and configuring controllers - flight sticks, joypads, steering wheels and so on.
Enter DirectInput Mapper
Microsoft's solution is a new feature for the DirectInput API, the part of DirectX which handles the passing of information about the buttons you press on your controllers to the game.
Called DirectInput Mapper (we'll call it DIM for short), it is intended to make it easier for gamers to configure their controllers in-game, as well as making it easier for developers to support controllers in their games, and for hardware vendors to make sure their controllers work with a wider range of software. Which is all very well, but how does it work?
Essentially DIM uses a series of default configs which are provided for each controller by the manufacturer along with drivers for the device, one for each genre of game. For example, the major actions required for your average driving game are steer left, steer right, accelerate, brake and gear shifting. These are "priority 1" controls, without which you won't get far in a game.
There are also "priority 2" controls, which are "added value", but not absolutely necessary for a controller which supports that genre. For example, having extra buttons to switch viewpoints or bring up a map of the course might be nice, but it's certainly not essential to the game.
So when you play a Formula One sim, the game can simply ask DirectInput which devices are attached to the computer, and then set up your config using the most appropriate controller(s) and their default settings for all of the standard actions for that genre.
Nice But DIM
The clever part is that DIM can also take account of the user's control preferences when setting up a config. For example, if you have more than one controller which would suit a given game, DirectInput can tell which you used most recently and suggest that the game uses it as default.
User configs are also stored for each game, and these can then be used as a basis for default configs of other games of the same genre which are installed later. And preferences can be stored seperately for each user if you share your PC, allowing the system to automatically set up different default configs on the same game for different users based on their past choices in similar games.
To allow more flexibility, hardware manufacturers can create specific default configs for individual games as well as for entire genres. This config information will then be installed with DirectX 8 as standard for any controllers whose manufacturers get the information to Microsoft in time for inclusion. They can also be added later on through Windows Update, or by installing them from the driver disk when the user adds in a new controller.
Of course, not everybody has the latest new-fangled controller, so if DirectInput fails to find any appropriate hardware for a particular game it will fall back to using the keyboard and/or mouse for control. For example, if you try playing a driving game without a steering wheel, DirectInput could resort to using the keyboard, and choose to map the arrow keys to steering and acceleration controls as default.
While this funky behind the scenes stuff is all very exciting, what the users will actually see of it at the end of the day is simpy the in-game config interface.
Microsoft have created a default GUI for the config system which can be easily added into DirectX games, allowing the player to adjust the default configs to their own personal taste. The default interface shows a little picture of the controller in question, allowing you to easily identify it even if you have half a dozen gamepads lying strewn around your computer and can't remember which one is which.
The system then allows you to select which actions are mapped to which buttons, displaying it all on the picture of the controller. So even if you don't know which of the many bits sticking out of a bizarrely shaped controller is classed as button 1, you can still see at a glance which button does what, and change it if necessary.
DIM also comes with a simple API to allow game developers to create their own frontend for the system, adjusting it to fit in with the rest of their game interface. So no doubt we can expect id Software, if they bother to use the system at all, to change the beautiful graphics-driven default interface into a text-based keyboard-controlled nightmare.
Which brings us to the first limitation of the system - the games and controllers have to support it. If you plug in a controller which DIM can't recognise, you won't get any pretty pictures in the config system and it will fall back to a good old text based system, and the default settings may be a bit hit and miss.
Luckily most games are based around DirectX to some extent these days, so hopefully we can expect fairly widespread support for the system in future. And Microsoft are already working with the major manufacturers (Saitek, Logitech, Guillemot, Gravis etc) to make sure that all their leading devices support DIM.
The main limitations though are that DIM only supports input, so there's no easy fix for force feedback support, and that it can't handle macros and button combinations. For example, if you want to bind something to CTRL-R, you will have to do it the old fashioned way. This may well change with DirectX 9 next year though.
We will have to wait and see how well it actually works in practice, but certainly from what we have seen of it so far DIM looks quite promising, particularly for casual gamers who don't know their joypads from their joysticks and their hats from their throttles.
DirectInput might be the dullest part of DirectX, but it is also one of the most important. With DirectX 8 Microsoft are giving it a much-needed overhaul to make things more user-friendly for gamers, as well as to make it easier for hardware manufacturers and game developers to support each others products. Which has to be a good thing.