1. Есть способ связанный с вычислениями, но если не хочешь заморачиваться, то просто делай так: бери спрайт героя, рисуй пулю в том месте, где она должна вылетать, а потом стирай героя, останется спрайт размером со спрайт героя, но на котором нарисована одна пуля. Этот спрайт используй для объекта пули и при создании пули поворачивай на тот же угол, на который повернут сам герой. Если нужен вариант с вычислениями, то используй поиск, это обсуждалось неоднократно.
2. можно сделать через таймеры (alarm), а можно просто в step написать
if instance_number(obj_vrag)<5 instance_create(irandom(room_width), irandom(room_height), obj_vrag)
Если врагов меньше 5, то создается новый враг в случайной позиции во всей комнате. Дальше адаптируй, как тебе надо.
3. у объекта, который нужно прикрепить, в событии end step пиши: x=obj_cel.x y=obj_cel.y
где obj_cel - объект, к которому нужно прикрепить другой.
Вообще, ответы на эти вопросы уже давались много раз.
infermik, спрайт будет размером с героя, но на нем будет только маленькая пуля, а остальное пространство будет пустым, и столкновение будет происходить только с самой пулей (если маска правильно наложена).