Hmm, Im still not completely sure what your problem is but,i put together some movement code, doing what i said before, hope you figure it out.
(Note that i dont use the move object command set(Im not used to doing so), but i commented the code, so you sould be able to do something like that in your code)
sync on
sync rate 0
backdrop on
autocam off
set camera range 1,5000
fog on
fog distance 700
REM Just so we can see the object moveing
make object plain 1000,1000,1000 : xrotate object 1000,90
color object 1000,rgb(0,0,0)
position object 1000,0,-100,0
REM player
make object box 1,100,50,40
color object 1,rgb(255,255,0)
REM Ini player
TYPE TPlayer
x# as float
y# as float
z# as float
Angx# as float
Angy# as float
Angz# as float
sx# as float
sz# as float
sy# as float
ENDTYPE
p as TPlayer
c as TPlayer
REM As boolean because the value never gets bigger than 1
faceing_back as boolean
REM Just me that wanted to try the code you posted
mode=1
if mode=2 then gosub mode2
REM NOTE: IM NOT USED TO USEING THE MOVE OBJECT COMMAND SET(exept from the newx/zvalue
DO
REM Update Values
p.x#=object position x(1)
p.y#=object position y(1)
p.z#=object position z(1)
p.Angx#=object angle x(1)
p.Angy#=object angle y(1)
p.Angz#=object angle z(1)
mmx#=mousemovex()/0.5
mmy#=mousemovey()/0.5
REM Player Movement
text 10,10,"faceing_back="+str$(faceing_back)
if upkey()=1
REM If player is faceing backwards, face forward
if faceing_back=%1 : p.Angy#=wrapvalue(p.Angy#-180) : faceing_back=%0 : endif
REM Get new x/z values, (NOTE: just multiply the sin/cos value with a number to move your object faster, like this sin/cos(p.Angy#)*5
p.x#=p.x#+sin(p.Angy#)
p.z#=p.z#+cos(p.Angy#)
endif
if downkey()=1
REM If player is faceing forward, face back
if faceing_back=%0 : p.Angy#=wrapvalue(p.Angy#-180) : faceing_back=%1 : endif
p.x#=p.x#+sin(p.Angy#)
p.z#=p.z#+cos(p.Angy#)
endif
if leftkey()=1
p.x#=p.x#+sin(p.Angy#-90)
p.z#=p.z#+cos(p.Angy#-90)
endif
if rightkey()=1
p.x#=p.x#+sin(wrapvalue(p.Angy#-270))
p.z#=p.z#+cos(wrapvalue(p.Angy#-270))
endif
if mmx# <> 0
p.Angy#=p.Angy#+mmx#
endif
REM Position and rotate the object
p.Angy#=wrapvalue(p.Angy#)
position object 1,p.x#,p.y#,p.z#
rotate object 1,p.Angx#,p.Angy#,p.Angz#
REM Camera
position camera 300,100,300
point camera p.x#,p.y#,p.z#
SYNC
LOOP
mode2:
DO
Spd#=1
ColliderObjNum=1
if shiftkey()=1 then yrotate camera (camera angle y()+1)
if spacekey()=1 then yrotate camera (camera angle y()-1)
if shiftkey()=0 and spacekey()=0 then set camera to follow p.x#,p.y#,p.z#,camera angle y(),250,Object Position y(ColliderObjNum)+50,10,ColliderObjNum
if upkey()=1
move object ColliderObjNum, Spd#
endif
if downkey()=1
move object ColliderObjNum, 1-Spd#
endif
if leftkey()=1
yrotate object ColliderObjNum, -90
move object ColliderObjNum, Spd#
yrotate object ColliderObjNum, 90
endif
if rightkey()=1
yrotate object ColliderObjNum, 90
move object ColliderObjNum, Spd#
yrotate object ColliderObjNum, -90
endif
sync
loop
easy comes easy goes