Key PointsThis is the short version. The "Too long; not going to read" version.
Let players customize the controls as they see fit. You know neither their bodies nor their minds and that means you cannot possibly make an ideal control scheme that works well for everyone. You can, and should, try. This, however, should result in merely the default setting(s).
The players should be able to create custom control schemes as they see fit.
An important and oft overlooked part of this is when the controls for multiple things are coupled together under a single input. While this happens more often in controller games, given their limited button space, it's actually quite common in general.
You need to be able to let players de-couple things. What this looks like is when you have a button that does X or Y (generally depending on context) you need to let the end user, should they so desire, have separate buttons for X and Y.
You also need to let the gamer couple things so the separate buttons you have for A and B can be combined into an "A or B" button like you had for X and Y in the previous example. Yes, this could result in incredibly stupid things. That's not your problem.
Finally, in addition to allowing players to bind commands to keys/buttons, you should let them bind them to combinations thereof. (I.e. normally the X key does this, but if I'm holding L1 it does that.)
General OverviewLet the players customize every damned control.
But-- no. Every. Single. Thing.
This is so very basic and yet triple-A publishers still get it wrong to this day. So here's the deal: you don't know.
I'm not just talking about the basics of you not knowing whether or not your player has two hands with eight fingers and two thumbs between them, as most game designers stupidly assume. (May Furiosa kick their asses.) I'm talking about everything.
You don't know how your player's parts, whichever parts they may have, operate. Assuming your player has exactly the digits you expect, you don't know how big they are, how much space they can cover, what hurts, what's comfortable, what they're used to.
There are good reasons and bad reasons for failure. Most, though not all, games are built on the assumption that the good reasons should be part of the play experience. It looks like this: You don't succeed, you restart at the last save/checkpoint/whatever, you try again.
This hinges on the idea that you, the player, are failing for a good reason. Fun curls up in a ball on the ground and dies of despondency if the player is failing for a bad reason. Bad reasons include but are by no means limited to:
- My thumb doesn't bend that way
- I've been playing games with a different control scheme and I keep on attacking when I'm trying to jump which leaves me plummeting to my death
- I can't actually mash that key because the relevant digit had a run in with frostbite
- My hand is small, I can't quite reach that button while holding down this button
- I keep on thinking this button does X because it makes sense to me even though for some ungodly reason that button does X even though only a sadist would make that button do X
- The fucking designers made the O button do twelve different things with no common thread between them and whenever I tell my character to hide she instead jumps on the nearest table and dances an Irish jig
And so forth.
All of those are things that could easily be avoided by letting the players customize their control scheme.
With a computer customization has a lot more options because there's an entire keyboard to work with, generally a mouse, and possibly other peripherals. With a console the standard controllers tend to have about as many buttons as a really cheap four-function calculator, so options are more limited but they're still there.
Coupling and Decoupling
It is common for some actions in games to be context specific. Hitting the cover button doesn't cause you take cover when there's no cover to take. You can't throw something if you have nothing to throw. It is, at best, extremely difficult to do a stealth takedown of an enemy when your character is the only being, friend or foe, within five thousand miles of the action.
Even simple straightforward buttons we take for granted, like "fire", are in fact context based. If I tell the character to fire when the character has a storm trooper rifle equipped it does not, in fact, cause the character to quick draw their Bryar pistol (technically a Bryar rifle that's been so modified and sized down it's now pistol sized) and fire that.
It makes intuitive sense to group together all of the "use weapon's primary fire" commands into a single "use the primary fire of the weapon you've got equipped right now" command that can then be bound to a single key. Thus Dark Forces has one primary fire key instead of ten. (Though whether punching someone counts as "firing" your fist is debatable.)
That's a very simple example of coupling commands into a single button and having context determine what they do.
It's also a thing that makes intuitive sense.
That said, many modern games have found it more useful to separate the Dark Forces "primary fire" command into three or more parts. Where in Dark Forces melee takes the form of choosing weapon 1 (fists) and then hitting the fire button, in a modern series like the rebooted Tomb Raider or Uncharted there's a dedicated melee key that does that and then returns you to your previous weapon when you stop hitting that key. Grenades (Dark Forces weapon 4) also tend to be given a dedicated key.
Dark Forces had "Use one of the weapons one through ten, which one determined by context," if it were like the modern examples it would have been decoupled into "Use weapon one", "Use weapon four" and "Use weapon two, three, or five through ten, which one depending on context."
Even something as simple as "use the selected weapon" has proven to be more complicated than people originally thought. But this is all still pretty simple and easy.
Where this becomes more difficult and complicated is when you've got something like the Uncharted series and you're trying to fit aim, fire (only for guns), throw grenade, punch, counter, jump, drop, hang, roll, take cover, leave cover, switch cover, use, open journal, find ally, equip weapon one, equip weapon two, find vehicle, break neck, pull off cliff, kick off cliff, shake flashlight, and so forth onto a handful of buttons.
Let's talk about cover as it's a decent example.
The way the game works, you can only take cover while standing on the ground. The way things in general work you can only drop from something when you're on something to drop from.
So it makes pragmatic sense to put these two actions together, which is what the devs do. A single button controls both and what the button does is determined by context. It doesn't get messed up because it's impossible to do one whenever it's possible to do the other.
This is a case of coupling controls at its best. A drop button is completely useless when on the ground, a cover button (in these particular games) is completely useless when not on the ground, put the two together and you've saved button space and reduced the time during which what buttons there are happen to be useless.
The cover control is also coupled with the the switch cover control which, again, works because you can't drop or take cover in situations where you can switch between two areas of cover (since you're on the ground and already in cover.)
It's then coupled with the hang off of something you were standing on top of which intuitively makes sense as a down action being grouped with drop, another down action, but runs into difficulty because there are times when it's possible to either take cover or hang off of what you're standing on and the game isn't psychic enough to know which you want, so mistakes will be made.
Then it's coupled with leave cover, which means that maybe when you were trying to safe-ishly get from one safe area to another while under fire (switch cover) you simply stand up (leave cover) and get killed by machine gun fire.
Then it's coupled with roll, which means that sometimes when you're trying to switch cover, or hang off of something, or stop being glued to the wall but still stay in one place, you dive into a forward roll and end up standing in a place you never meant to be.
This isn't an example of coupling at its worst. Not even close. If I had to pick the worst I'd probably go for the: "We made a non-lethal stealth action share a control with 'Jump up, lunge forward, murder someone in plain view of everyone in the entire county, and then just stand there while people gawk'" that can be found in certain Assassin's Creed games.
The Uncharted example is coupling at its middle. Fairly usual, about as inoffensive as these things get, and still laden with problems. "Leave cover" is the same button as "Stay in cover" (which is what the switch cover control is for) and that's more or less what you can expect from a lot of games.
This is . . . sub-optimal.
Of course, part of the reason for this sub-optimal situation is because we're talking about a console game and a controller doesn't have that many buttons.
Still, depending on one's play style some of the commands coupled into a single button might not be needed, reducing the chance for the game to fuck up, or there may be entire default buttons that never get used onto which some of the commands from an overloaded key can be placed. Or changing up which controls are coupled with which under single buttons could solve everything.
How to let players customize
In PC games it's common to allow each command-set (control over decoupling and coupling is seldom given to the players) to have two keys bound to it. This is a good thing as it allows for a player to deal with things like: I can't touch [Key One] while I'm holding [Key Two] but when I don't have to touch both at once those are totally the best keys to bind those command-sets to.
Or it can allow multiple people to use a game with their own preferred control scheme, but in that case only two.
I've already talked about the importance of allowing players to couple and decouple commands, so it should be clear that, while a command set might be default, players who want or need to should be able to customize at the level of individual commands.
Two or Three keys per command-set is good, but there's no reason it can't just be N. Control scheme profiles should exist so that you can switch from "This works best when I'm helping a seven year old play the game" to "This works best when I'm playing on my own," and even "This works best when my friend [person] is playing the game on my system."
Some game designers, to their credit, are already allowing players to create as many control schemes as they want (with the option for two inputs per command in a given scheme, no less.)
But PC games are hardly the only games. (Though what I'm about to say can go for PC games too.)
All of that does apply to console games, but console games tend to be played with controllers and controllers have limited buttons. And this is where the wonderful field of combinatorics comes in.
You see, in the art of keyboard creation there was this incredible invention called a "shift key" that, by reserving one key for altering what the others did, allowed keyboard makers to turn [X] keys into [2*X - 2] keys. Suddenly the alphabet required a mere 27 keys (26+1) instead of 52 (26*2).
Things get even more interesting when one considers that there can be multiple ways to modify what a button does instead of just one dedicated key.
In fact, people who work with controllers have long had the idea that any combination could potentially be used for a unique command. A, B, X, and Y (my keybord doesn't have squares and triangles, sorry Playstation) go from being four things to being ten by making each combination of two buttons do a unique thing that happens to be different from what any of the individual buttons do on their own..
It's not like controllers just have four buttons.
Conclusion: there's really not a shortage of buttons on a controller IF a player is willing to use combinations. Is a player willing to use combinations? Depends on the player.
Let them bind the controls to whatever buttons they want AND to whatever combination of buttons they want.