Minor thread hi-jack:
I actually sat down just now to test out a theory. http://www.box.net/shared/9m90tzyf7e
Nice example inkBot! I only had a short time to look at it on my lunchbreak but I'll definitely check it out more in-depth later on. It looked like your solution was to store each input as a 0 or 1 for about 10ms and then look for a combination of inputs as being a 1? It's a cool solution but I think there could be some problems with that, though I haven't tested it out. The first one you mentioned: you can just hold down and back and get the attack. Another problem would be motions that need 2 inputs of the same direction, like double tap forward or doing 2 fireball motions for a super move.
I was thinking of a different method. You store each input into an array of size 10. (10 is just a random number right now, it should probably be larger.) So each direction is a number lets say:
neutral=0
forward=1
downforward=2
down=3
downback=4
back=5
upback=6
up=7
upforward=8
The array will be stacked with each input including neutral. So at the start your array would be filled with 0's. If you roll the joystick in a halfcircle from forward to down to back, your array would look like this:
0,0,0,0,0,1,2,3,4,5
Going back to neutral, Your array would look like this:
0,0,1,2,3,4,5,0,0,0
So you're constantly deleting the first value and registering each input as the last value. So you would store each individual input for as long as your buffer window allows. Now you would just need to look for certain patterns within the array. So if there is a 0,0,0,0,0,0,0,1,3,2 then you can do a dragon punch even if it looks like 0,0,1,0,3,2,1,0,0,0. And that dragon punch will be in memory (buffered) until the first 1 gets deleted.
Hope that makes sense. I haven't tested it out yet, but I think that is close to what's happening in fighting games.