More abstract player logic