Refactored BMAttackShadow to split some logic from validate_attack() into validate_attacker()