Logic-wise, version three is asking:
If the user clicks and releases the button AT THE SAME TIME! :O
Which is impossible.
The sub-event one is kinda doing the same thing. Sub-events are very useful for compressing code where one or more conditions are common to all of them.
A good example would be instead of using the following four events:
+ System: Is global variable 'Var' Equal to 1
+ MouseKeyboard: Key Up arrow is down
-> Sprite: Set 'Direction' to "Up"
+ System: Is global variable 'Var' Equal to 1
+ MouseKeyboard: Key Up arrow is down
-> Sprite: Set 'Direction' to "Up"
+ System: Is global variable 'Var' Equal to 1
+ MouseKeyboard: Key Left arrow is down
-> Sprite: Set 'Direction' to "Left"
+ System: Is global variable 'Var' Equal to 1
+ MouseKeyboard: Key Left arrow is down
-> Sprite: Set 'Direction' to "Right"
You could use one event with four sub-events like so:
+ System: Is global variable 'Var' Equal to 1
+ MouseKeyboard: Key Up arrow is down
-> Sprite: Set 'Direction' to "Up"
+ MouseKeyboard: Key Down arrow is down
-> Sprite: Set 'Direction' to "Down"
+ MouseKeyboard: Key Left arrow is down
-> Sprite: Set 'Direction' to "Left"
+ MouseKeyboard: Key Left arrow is down
-> Sprite: Set 'Direction' to "Right"
I hope that's legible, a subevent triggers when the event its below is true, in this case, if Var equals 1, then it runs the arrow events. There are other handy uses for them too but it gets a little situation specific I find. I'll be happy to try and explain it better if you didn't understand my ramblings.
In any case, I fixed up your angle of motion cap without using any subevents anyway Go have a look if you haven't already