Sure... it's pretty simple code... Most of it is for the movement. Anyway, thanks for taking a look.
sync on
sync rate 0
hide mouse
autocam off
rem load bsp
load bsp "", "data/lavapit.bsp"
rem load lightmap
load object "data/lava pit_lm.x",2
ghost object on 2,1
set object 2,1,1,1,1,0
rem setup camera box
make object box 1,20,20,20
position object 1, 121, 809, -924
hide object 1
set object rotation zyx 1
rem main loop
do
set cursor 0,0
rem controls
if upkey()=1 or keystate(17)=1 then cf#=cf#+10
if downkey()=1 or keystate(31)=1 then cf#=cf#-10
if rightkey()=1 or keystate(32)=1 then cr#=cr#+20
if leftkey()=1 or keystate(30)=1 then cr#=cr#-20
cx#=wrapvalue(cx#+mousemovey()*0.3)
cy#=wrapvalue(cy#+mousemovex()*0.3)
print "Mouse X: "+str$(cx#)
print "Mouse Y: "+str$(cy#)
if cx#<=290 and cx#>180 then cx#=290
if cx#>=70 and cx#<=180 then cx#=70
acx#=curveangle(cx#,acx#,3)
acy#=curveangle(cy#,acy#,3)
acr#=curvevalue(cr#,acr#,3)
acf#=curvevalue(cf#,acf#,3)
rem Move and rotate player bounding box
move object 1,acf#
strafeobject(1,acr#)
rotate object 1,acx#,acy#,0
rem Rotate camera to match new angle
rotate camera acx#,acy#,0
rem reset
cf#=0
cr#=0
rem Update listener
listenerparent(1)
rem update camera pos
playery#=curvevalue(object position y(1),playery#,5)
position camera object position x(1),playery#+height,object position z(1)
print "X: "+ str$(object position x(1))
print "Y: "+ str$(object position y(1))
print "Z: "+ str$(object position z(1))
sync
loop
function strafeobject(object,n#)
yrotate object object,wrapvalue(object angle y(object)+90)
move object object,n#
yrotate object object,wrapvalue(object angle y(object)-90)
endfunction
function listenerparent(parent)
position listener object position x(parent),object position y(parent),object position z(parent)
rotate listener object angle x(parent),object angle y(parent),object angle z(parent)
endfunction