refactor opponents, etc