refactored weapon classes