weapon refactoring