I'm not a fan of the way your code handles combo's. If you are only ever going to use the A key and no other buttons I suppose it's ok but my way of thinking would be this sort of initial setup
Type ComboList
Key as string
Timer as integer
Valid as boolean // optional, used to cap the combo, i.e. (1),(2) valid but not (3) until it's unlocked
Sprite as integer // optional value to specify the actual sprite used for each move
Endtype
dim Combo(10) as ComboList
// list keypresses for each 'move' in order, along with a timer value
// meaning this key must be pressed within X ms of the next, otherwise the combo resets
Combo(1).Key="a" : Combo(1).Timer=100
Combo(2).Key="a" : Combo(2).Timer=80
Combo(3).Key="d" : Combo(3).Timer=50
Then the actual handling would be along the lines of this pseudo code
// use a function to check valid 'states' of a key, i.e. not allowed to hold down a key
// it must be released after being pressed to 'unlock' and allow it to be pressed again
if KeyValid(CurrentKey)=1
// check to see if pressing key within the timeout period, if so advance your combo by 1
if Combo(CurrentMove).Key=CurrentKey and timer()-TimeSinceLastMove =< Combo(CurrentMove).Timer
inc CurrentMove,1
TimeSinceLastMove=timer()
// do stuff
// (optional) set sprite to defined image
else // if not within the timer value, or pressed the wrong key, reset back to first move
CurrentMove=1
TimeSinceLastMove=timer()
endif
endif
// seperate function/commands here to deal damage, change sprite etc according to CurrentMove