Вот максимально простой вариант:
Список Data можно продолжать в зависимости от размера terrain'а

Graphics3D 800,600,32,2
SetBuffer BackBuffer()
HidePointer()
ter_size=32
x_scale=10
y_scale=50
z_scale=10
camera=CreateCamera()
PositionEntity camera,50,40,-50
light=CreateLight()
RotateEntity light,90,0,0
ter=CreateTerrain(ter_size)
ScaleEntity ter,x_scale,y_scale,z_scale
EntityColor ter,150,150,200
Restore ter_data
Read ter_mod_count
For n = 1 To ter_mod_count
Read cx
Read cz
Read y_mod
ModifyTerrain ter,cx,cz,y_mod
Next
While Not KeyDown(1)
Camera_Look(camera)
Camera_Free_Fly(camera)
RenderWorld
Flip
Wend
End
Function Camera_Look(cam,speedx#=2,speedy#=2,dang=-89,upang=89)
mxs=MouseXSpeed()
mys=MouseYSpeed()
xrot#=EntityPitch(cam)
yrot#=EntityYaw(cam)
If(xrot#<upang)And(mys>0)Then xrot#=xrot#+speedx#*mys/10
If(xrot#>upang)And(mys>0)Then xrot#=upang
If(xrot#>dang)And(mys<0)Then xrot#=xrot#+speedx#*mys/10
If(xrot#<dang)And(mys<0)Then xrot#=dang
yrot=yrot-speedy#*mxs/10
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
RotateEntity cam,xrot,yrot,0
End Function
Function Camera_Free_Fly(Obj,mf#=.5,mb#=.5,ml#=.5,mr#=.5)
If KeyDown(17) Then MoveEntity Obj, 0 ,0, mf#;W
If KeyDown(31) Then MoveEntity Obj, 0 ,0,-mb#;S
If KeyDown(30) Then MoveEntity Obj,-ml#,0, 0 ;A
If KeyDown(32) Then MoveEntity Obj, mr#,0, 0 ;D
End Function
.ter_data
Data 5
Data 1,1,1
Data 2,2,0
Data 3,3,0
Data 4,4,0
Data 5,5,10