new abstract base class for players and separated type definitions