3. Notice the coins? Each one increases a global variable when touched, but I can't figure out how to display it. What I've tried before doesn't work.
That's the easiest problem you have. Just add a text object and set its text to Global('Coint count') in an always event.
As for the enemies I have a general advice for you: use private variables to control their behavior! I added PVs for the delay between shots, for the general status (is shooting or not), the time it will wait between two attacks and all that. Sometimes there are double values, like MaxShots and CurShots for the Sniper. Maxshots is the amount of shots it will fire in one attack. CurShots counts the fired shots, in order to stop the attack, when Curshots equals Maxshots.
For some values like Rate you could use a Global value instead, since it's just the amount you subtract from a certain value. This doesn't really need to be sprite specific.
Regarding the plant: you added 8 directions movement, but you didn't use any of the movement's actions. Instead you used 'Move at angle', which works differently. The amount of pixels you set will be moved instantly in 1 tick! I used Ball Behaviour for the plant, which fits the purpose better. You could also use Bullet of course.
With all the values you can easily control the behavior of your enemies and you can have different instances acting differently by just changing some values. Although I may not have done it the most elegant way here, it's generally speaking the way to go.
I didn't comment the cap, there aren't many events though. The hard part will be to figure out which PV is there for what purpose. But I bet you can figure it out when you have a closer look.
Your cap with changes
If there's something else, you can always contact me.