refactored fight logic