CreateShotA(0, GetX + 300*cos(angle), GetY + 300*sin(angle), 0);
SetShotDataA(0, 0, 3, angle - 180, 0, 0, 0, RED02);
SetShotKillTime(0, 100);
FireShot(0);
The 300 radius is far enough so that all the bullets are off the screen when they spawn. angle should be incremented appropriately for your ring of bullets (+=360/num), and their movement vector should be angle - 180, since you want them to move backwards. The SetShotKillTime is derived from dividing your radius (300) by your bullet speed (3), which is how many frames it will take for the bullets to hit the point (GetX, GetY). To have the bullets not just delete themselves as soon as they're spawned beyond the game window, use the function:
SetShotAutoDeleteClip(200, 200, 200, 200);
Which expands the deletion window 200 pixels in every direction, so that bullets will still be processed outside the game window instead of deleted. Be sure to call this function every frame, like SetCollisionA/B, or it will default to SetShotAutoDeleteClip(64, 64, 64, 64); (can somebody check if you actually need to call it every frame? I'm not so sure, and I haven't the time at the moment).
I haven't the slightest regarding your latter questions, so I won't comment on them and likely confuse you (and myself).