never mind, i just solved it.
Looked at your speed tips JessTicular, some good info there. I might as well change it to a .x world - i'd get lightmapping support as well as speed

And i can even use this code to position the sections (ill cut it up and load it when necessary). Thanks people
`turns on syncing
set display mode 1024,768,16
sync on
autocam off
`makes the two textures
for dx=4 to 124
for dy=4 to 124
ink rgb(70,120+rnd(20),70),0
dot dx,dy
next dy
next dx
get image 1,0,0,128,128
cls
for dx=4 to 124
for dy=4 to 124
ink rgb(120+rnd(20),70,70),0
dot dx,dy
next dy
next dx
get image 2,0,0,128,128
`the number of tiled matrices (both on x and z)
matrices=10
`the size of each matrix in distance points.
matrix_size=500
`number of tiles in each matrix.
matrix_tiles=10
`makes a block of matrices from the data above
dim mat(matrices,matrices)
for matx=0 to matrices-1
for matz=0 to matrices-1
inc currmat
inc m2
if m2>1 then m2=0
make matrix currmat,matrix_size,matrix_size,matrix_tiles,matrix_tiles
position matrix currmat,matx*matrix_size,0,matz*matrix_size
prepare matrix texture currmat,m2+1,1,1
randomize matrix currmat,10
mat(matx,matz)=currmat
next matz
next matx
do
if upkey()=1 then move camera 5
if downkey()=1 then move camera -5
if leftkey()=1 then yrotate camera wrapvalue(camera angle y()-5)
if rightkey()=1 then yrotate camera wrapvalue(camera angle y()+5)
cx#=camera position x()
cz#=camera position z()
`checks matrix under player, otherwise matrix=0 and height=15
if cx#>0 and cz#>0 and cx#<matrices*matrix_size and cz#<matrices*matrix_size
matrix=mat(cx#/matrix_size,cz#/matrix_size)
cy#=get ground height(matrix,cx#-matrix position x(matrix),cz#-matrix position z(matrix))+15
else
matrix=0
cy#=15
endif
position camera cx#,cy#,cz#
`prints the current matrix under the player, if any.
if matrix>0 then text 0,0,"Currently over matrix: "+str$(matrix)
if matrix=0 then text 0,0,"Not over any matrix"
sync
loop
.........what's the point of reading this?