Things that drop fps in my experience (Cpu items/events):
1. Very heavy collision checks. (by this I mean hundreds,sometimes even thousands, per frame. Overlapping at offset is one of the heaviest events.)
2. Intensive loops. (usually when collision checks are involved.)
3. Thousands of sprites on screen. (construct is extremely fast with this, so don't worry about it unless you have over 1000-2000 objects.)
Shaders are the main culprit for slowdowns in most cases, but large and complex games without shaders often have to be careful with events. By shaders, I mean fx files that require a pixel shader version-greater-than-0 compatible graphics card. PS 0.0 effects don't slow down games and can be abused.
-Avoid large sprites as much as possible (i.e., over 512x512)
-When dealing with massive amounts of objects with complex movement properties, try to incorporate behaviors as much as possible, as they are faster than events.
I took a look at your cap, and it seems logical. At first I couldn't understand the player object lol, it's so confusing. Only one circle moves, so I thought it was three circle sprites, but then I realized you were precisely rotating a single sprite with three dots. I would say that's a bit confusing, but if it works for you, then go for it. Also you don't need to set the bullet angle to the player angle upon creation because spawn object does that automatically. Also, you should use sub events instead of needlessly repeating conditions like "up arrow is down".