How out this code:
sync on : sync rate 120
hide mouse
make matrix 1,10000,10000,50,50
randomize matrix 1,20
sfov#=3.14/2.905
old#=mousemovez()
fov#=sfov#
do
x#=camera position x()
y#=camera position y()
z#=camera position z()
angy#=camera angle y()
angx#=camera angle x()
`controls
if upkey()=1
x#=newxvalue(x#,angy#,2.0)
z#=newzvalue(z#,angy#,2.0)
endif
if downkey()=1
x#=newxvalue(x#,wrapvalue(angy#-180),2.0)
z#=newzvalue(z#,wrapvalue(angy#-180),2.0)
endif
if rightkey()=1
x#=newxvalue(x#,wrapvalue(angy#+90),2.0)
z#=newzvalue(z#,wrapvalue(angy#+90),2.0)
endif
if leftkey()=1
x#=newxvalue(x#,wrapvalue(angy#-90),2.0)
z#=newzvalue(z#,wrapvalue(angy#+90),2.0)
endif
y#=get ground height(1,x#,z#)+15.0
`mouse looking
angy#=wrapvalue(angy#+mousemovex()*2)
angx#=wrapvalue(angx#+mousemovey()*2)
angy#=curveangle(angy#,camera angle y(),10.0)
angx#=curveangle(angx#,camera angle x(),10.0)
`zoom/sniper
if mousemovez()<>old
mousemoved#=(mousemovez()-old#)/1200
old#=mousemovez()
else
mousemoved=0
endif
newfov#=fov#-mousemoved#
fov#=curvevalue(newfov#,fov#,5)
if fov#<0.1 then fov#=0.1
if fov#>sfov# then fov#=sfov#
set camera FOV fov#
`update camera
rotate camera angx#,angy#,0
position camera x#,y#,z#
sync
loop
arrow keys to move, mouse to look and mousewheel to zoom.