Generalized player movement