Refactored battle. uses auto-vivifying hashes