This is actually logical, as the test for player contact is directly vertical to the playerObject and >89 degrees is horizontal.
So if the player runs up a steep slope and then steps off into thin air, they stay hovering and can never move back downwards.
Obviously this should simply be avoided by using sensible values in the datablock, but just incase for those of us who might make a mistake (*cough* it only took me days to work out what the issue which I was having was ) it might be an idea to add a little safety check to the code.
bool PlayerData::preload(bool server, String &errorStr)
if (runSurfaceAngle > 89)//yorks safety first
runSurfaceAngle = 89;
Con::warnf(ConsoleLogEntry::General, "PlayerData::preload: runSurfaceAngle exceeds 90 degrees. Resetting to 89 degrees.");
}//yorks end safety first
runSurfaceCos = mCos(mDegToRad(runSurfaceAngle));
jumpSurfaceCos = mCos(mDegToRad(jumpSurfaceAngle));
if (minJumpEnergy < jumpEnergyDrain)
minJumpEnergy = jumpEnergyDrain;