refactored fireweapon