Hi Austin, just saw your code. Your rem "attack when mouse is clicked, but not while already attacking" and the relevant code for it, there is something not right about that logic.
If the mouse button is the input that decides between light or medium or heavy attack, then you if statement of "if GetSpriteCurrentFrame(HeroKnight) < AttackLightStart or GetSpriteCurrentFrame(HeroKnight) > AttackHeavyEnd", wil prevent the mouse button to be registered as it is within that if statement. Not knowing the entire logic of your code it is difficult to tell for sure where the problem is, but when input is the deciding factor, you want the first if statement to be "if GetPointerState() > 0". Try to reverse the order of things and reprogramme the logic of this if statement, and maybe change the while command to something more appropriate, or use more than one while command to account for the various states.
I hope that helps, please let me know on your progress.
All the best.
EDIT: I further pondered on your code, and actually for the logic you want "if GetPointerState() > 0" does not meet the requirements, you could include the following "if GetPointerState() > 0 and GetSpriteCurrentFrame(HeroKnight) < AttackLightStart or GetPointerState() > 0 and GetSpriteCurrentFrame(HeroKnight) > AttackHeavyEnd" and then follow with more if statements, as an example.
EDIT 2: Also depending on the logic, the order of the sequence of reading each line of code and if statements can be a factor for something working or not working, sometimes you need one if statement to be done, before the Sync() command and another after the Sync() and loop is complete. This Sync() is crucial to a lot of logic and what happens before one Sync() and after in the main loop, has consequence on how things happen. It's quiet interesting thing, experiment with it with different logic. For example:
check = 0
Do
Print(a) // possible location of command
if check = 1
a = 10
check = 0
endif
Print(a) // possible location of command
If check = 0
a = 1
check = 1
endif
Print(a) // possible location of command
Sync()
Print(a) // possible location of command
loop
Depending where you put the Print function and the order you put the if statements, you will get various results. When logic gets more complex, this things do make a lot of difference for something to work or not work.
????????