I've reviewed the code now I've found the CD, and made it work slightly better, although the angles are still completely bodged together. There's probably a better way to write it. Anyway now you move the cube forwards with the up arrow, shift it left and right with the left and right arrows, and turn it using the mouse. This means you can't move the camera round the char, but I'm still not entirely sure how you want the control systenm to work.
sync on
sync rate 30
hide mouse
autocam off
make object box 1,100,100,100
make matrix 1,1000,1000,5,5
x#=500
xo#=0
y#=0
z#=500
cy#=0
do
rem Cy# being the camera angle
cy#=wrapvalue(cy#-mousemovex())
if leftkey()=1 then xo#=curvevalue(-100,xo#,10)
if rightkey()=1 then xo#=curvevalue(100,xo#,10)
if leftkey()=0 and rightkey()=0 then xo#=curvevalue(0,xo#,10)
if upkey()=1
x#=x#+(sin(360-cy#)*10)
z#=z#+(cos(360-cy#)*10)
endif
rem Xo# is the x offset relative to the camera, so these
rem functions should offset it in the way I imagine you want.
position object 1,x#+(cos(cy#)*xo#),y#,z#+(sin(cy#)*xo#)
yrotate object 1,wrapvalue(360-cy#)
position camera x#-(cos(cy#+90)*300),300,z#-(sin(cy#+90)*300)
point camera x#,y#,z#
sync
loop