As we should all know, gravity affects the character controller when it's moving, so in turn if you do this:
phy move character controller 1,1
phy move character controller 1,-1
Before you sync it should work right? Well that makes you're character move downward constantly REALLY fast.
So what if we made a timer system and did that every X seconds/milliseconds to control gravity and say if you're in air then you can't use the movement controls?
Then with that we could make an if statement asking if it's touching ground or not so it's not constantly moving downward.
Just an idea, but what do you think about it?
EDIT: Something like this, though this doesn't quite work:
if phy ray cast all shapes (object position x(1), object position y(1), object position z(1), 0, -1, 0) = 1
xx = phy get ray cast distance()
endif
//Movement
if upkey() = 1 and xx <= 50
phy move character controller 1,58
endif
if downkey() = 1 and xx <= 50
phy move character controller 1,-58
endif
if rightkey() = 1 and xx <= 50
pay = pay + 2
endif
if leftkey() = 1 and xx <= 50
pay = pay - 2
endif
//Debug
text 2,2,"X: "+Str$(xx)
text 2,14,"Y: "+Str$(py)
text 2,26,"Z: "+Str$(pz)
//Update Camera, Player, and Sync
if time + 1000 < timer()
phy move character controller 1,1
phy move character controller 1,-1
endif
Always program as if the person maintaining your program is a psychopath that knows where you live