almost done with base movement functions