Alright, fortunately I separated how vertical movement worked in to 2 "modes," depending on if you're on flat ground or a slope. So, it was very easy to add in the slope section that if the player is crouching, player.z should = on the slope (rather than a bit below it), making him unstuck. Thanks everyone!