Tom, what kind of programming constructs (I think that's the word?) do you have access to? Can you create a List/array/cache/container like objects? I think that's the minimal you'd need before things get really tedious.
I imagine that you'd have 2 time windows. One is an Input stringing window. It's a very small window, maybe a few frames long. If a new key is pressed and "windowTime > 0", the new input gets strung onto the current Input string. If a new key is pressed and "windowTime <= 0", then a new Input string starts altogether.
The next window is for the lifetime of a Input string. When that window < 0, the current Input string is invalid/removed/dead.
I'm unsure how fighting game input buffering works, but at this point, you have a buffer of Input strings. You can go through each input string and cache the Moves that can be created from that string (multiple moves (subMoves) can come from a single input string -- however, "consuming"/executing a sub/move consumes the entire input string that the submove came from). At this time, you have a buffer of Moves. You probably want to check a Move's subMoves from the longest to shortest to decide what move to do.
I hope that stuff made sense and is helpful
I imagine that you'd have 2 time windows. One is an Input stringing window. It's a very small window, maybe a few frames long. If a new key is pressed and "windowTime > 0", the new input gets strung onto the current Input string. If a new key is pressed and "windowTime <= 0", then a new Input string starts altogether.
The next window is for the lifetime of a Input string. When that window < 0, the current Input string is invalid/removed/dead.
I'm unsure how fighting game input buffering works, but at this point, you have a buffer of Input strings. You can go through each input string and cache the Moves that can be created from that string (multiple moves (subMoves) can come from a single input string -- however, "consuming"/executing a sub/move consumes the entire input string that the submove came from). At this time, you have a buffer of Moves. You probably want to check a Move's subMoves from the longest to shortest to decide what move to do.
I hope that stuff made sense and is helpful