In a slight change of plans I am taking the game down an action game direction. The first thing I wanted to do was play with keyboard and controller input. This brings me back to a problem I have faced more than a few times:

What are the most natural controls for a game with an isometric camera but fps movement mechanics?

The biggest problem is strafing. If you aren't looking in the same direction as your avatar you may find it difficult to know which button to press to move in the desired direction.

if you have ideas: twitter me

Seriously. If this is a solved problem feel free to tweet at me at @CatchCo (or the twitter icon in my site header).

in the following gifs...

You will see lots of movement. I am pressing this sequence of keys 4 times over (one for each cardinal direction).

1. Forward
2. Back
3. Left
4. Right
5. Turn

The gif will show the resulting movement of the character.

absolute directions (orientation independent)

http://i.imgur.com/TATOIz6.gif

In this scheme there are no special rules tied to your characters' orientation. Pressing a key will move the characters in that direction.

Keymap:

               [W:north-east]
[A:north-west] [S:south-west] [D:south-east] 
  • Pros
    • No special rules to teach
    • Will likely translate well to controller based input
    • Once you learn an orientation-independent maneuver you will never have to re-learn it for the other directions.
  • Cons
    • Your brain has to disassociate the keys with direction your characters' face. Personally this took me 5 minutes to adapt to but I still lacked consistency.
    • Once you learn an orientation-specific maneuver you will have to re-learn it for the other directions.

For now this is the default scheme but I do have a couple others I've tried...

character oriented (fps-like)

http://i.imgur.com/kCfjvtd.gif

This setup is 100% relative to your characters' orientation. Pressing forward will in the direction your characters face. Pressing left will move the characters to their left.

Keymap:

Overall  
                   [W:characters' forward]
[A:characters' left] [S:characters' back] [D:characters' right] 

Per Direction

Facing north-east  
               [W:north-east]
[A:north-west] [S:south-west] [D:south-east] 

Facing south-east  
               [W:south-east]
[A:north-east] [S:north-west] [D:south-west] 

Facing south-west  
               [W:south-west]
[A:south-east] [S:north-east] [D:north-west] 

Facing north-west  
               [W:north-west]
[A:south-west] [S:south-east] [D:north-east] 
  • Pros
    • The keys are 100% FPS controls which should be familiar to a large fraction of the target audience.
    • Once you learn an orientation-specific maneuver you will never have to re-learn it for the other directions.
  • Cons
    • I find this to be completely disorienting when the characters face the camera. Left becomes right and right becomes left.
    • Once you learn an orientation-independent maneuver you will have to re-learn it for the other directions.

left is left (right is right)

http://imgur.com/aSFKXzQ.gif

This setup is an alternative to the pure FPS controls above. Pressing forward will still move you in the direction your characters face. Pressing left will move the characters left on the screen. This part is very important! It is the left you are seeing with your real eyes, not theirs.

Keymap:

Overall  
               [W:characters' forward]
[A:screen left] [S:characters' back] [D:screen right] 

Per Direction

Facing north-east  
               [W:north-east]
[A:north-west] [S:south-west] [D:south-east] 

Facing south-east  
               [W:south-east]
[A:south-west] [S:north-west] [D:north-east] 

Facing south-west  
               [W:south-west]
[A:north-west] [S:north-east] [D:south-east] 

Facing north-west  
               [W:north-west]
[A:south-west] [S:south-east] [D:north-east] 
  • Pros
    • The forward and back keys are the familiar FPS controls. When your characters turn you forward and back turn with it.
    • You don't need as much spatial processing to understand strafing.
  • Cons
    • Probably an unfamiliar control scheme for most players. I have never encountered this in any game myself.
    • Hard to explain with words or without trying.
    • Once you learn an orientation-independent maneuver you will have to re-learn it for the other directions, though only slightly
    • Once you learn an orientation-specific maneuver you will never have to re-learn it for the other directions, though only slightly.

need lots of empirical data/feedback

For now I will stick with the first control scheme, Absolute Directions out of simplicity. Eventually I will need to gather plenty of data and feedback to understand which schemes to cut, prefer or dictate. My only current worry is that the control scheme uncertainty will force my hand when implementing upcoming features. We'll see...

dev notes // strategy pattern

This is one of those cases where the strategy design pattern is a perfect fit. I have made three control scheme classes, each of which implements the IPlayerControlScheme interface that the PlayerControlledActorMover component depends on. Throw in an enum and a global GameplaySettingsProvider and you have a pretty simple system of swapping implementations.