single player specific logic should be in a subclass