I managed something like this a LONG time ago.
if padx() > 10 or padx() < -10 or pady() > 10 or pady() < -10
point object 1,object position x(1)-padx(),object position y(1),object position z(1)+pady() : yrotate object 1,object angle y(1)+cameraangle#
speed# = curvevalue(abs(padx())*0.0006+abs(pady())*0.0006,speed#,accel#)
if speed# > speedmax# then speed# = speedmax#
else
speed# = curvevalue(0.0,speed#,stopaccel#)
endif
if padb()=1 then inc truecameraangle,3
if padc()=1 then dec truecameraangle,3
position object 1,object position x(1)+sin(object angle y(1))*speed#,object position y(1)-gravity#,object position z(1)+cos(object angle y(1))*speed#
You'll need these at the end of your program.
function padx()
if leftkey()=1 then ret = -1000
if rightkey()=1 then ret = 1000
if ret = 0 then ret = joystick x()
endfunction ret
function pady()
if upkey()=1 then ret = -1000
if downkey()=1 then ret = 1000
if ret = 0 then ret = joystick y()
endfunction ret
function pada()
if spacekey()=1 or joystick fire a()=1 then ret = 1
endfunction ret
function padb()
if shiftkey()=1 or joystick fire b()=1 then ret = 1
endfunction ret
function padc()
if controlkey()=1 or joystick fire c()=1 then ret = 1
endfunction ret
function padd()
if returnkey()=1 or joystick fire d()=1 then ret = 1
endfunction ret
There's a few variables you need to set first though.
speedmax#=1
accel#=25
stopaccel#=15
turning#=10

At least farting ferrets are better than stinky stoats.