Weapons are projectiles with limited range which perform actions on collision. Weapon's can be specified as either the player's or not to customize the resultant collision action.
To fire a weapon, create an instance of the desired type with speed, direction, and whether a player weapon.
Ex.
var offset = 48
var weapon_x = x + lengthdir_x(offset, direction)
var weapon_y = y + lengthdir_y(offset, direction)
var Weapon = instance_create_layer(weapon_x, weapon_y, "Instances", obj_weapon)
Weapon.speed = 6
Weapon.direction = direction
Weapon.image_angle = direction
Weapon.player_weapon = true
This is internal, see Architecture.
Weapons are represented by separate objects except the parent, obj_weapon, to reference the entire group and implement common behaviour.