Well, ive finished v1.0 of my matrix editor, it can only change heights
but v1.1 will have the ability of saving texture information too, aswell as object positions/information, its super easy and its map files are small

(10/12kb for a 10000,10000,50)
Here ye go, the source code (note, ye need to place a "cottag02.bmp" in the directory you compile it in)
This was a 1 hour work, so I know their are some tiny bugs in it

any suggestions? do you like it?
set display mode 1024,768,32
sync on : sync rate 60
rem Load 3D object and append walking data to it
make object cube 1, 20
color object 1, rgb(0,0,128)
rem Make a 3D landscape
load image "cottag02.bmp", 1
MAKE MATRIX 2,10000.0,10000.0,50,50
prepare matrix texture 2,1,1,1
rem Texture landscape
rem Randomise landscape
for gra=0 to 19
for grat=0 to 19
set matrix tile 2,gra,grat,1
next grat
next gra
position object 1, 50,50,50
position camera object position x(1), 50, object position z(1)
POINT CAMERA object position x(1), object position y(1), object position z(1)
randomize timer()
hide mouse
update matrix 2
DO
if upkey()=1
move object 1, 7
position camera object position x(1)-60, 50, object position z(1)-60
position object 1, object position x(1), get ground height(2,object position x(1),object position z(1))+10, object position z(1)
endif
if leftkey()=1
yrotate object 1, wrapvalue( OBJECT ANGLE y(1) - 3 )
endif
if rightkey()=1
yrotate object 1, wrapvalue( OBJECT ANGLE y(1) + 3 )
endif
if inkey$() = "]"
set matrix height 2, int(50/(10000/object position x(1))) + 1, int(50/(10000/object position z(1))) + 1, get matrix height(2, int(50/(10000/object position x(1))), int(50/(10000/object position z(1))) ) + 100
update matrix 2
endif
if inkey$() = "["
set matrix height 2, int(50/(10000/object position x(1))) + 1, int(50/(10000/object position z(1))) + 1, get matrix height(2, int(50/(10000/object position x(1))), int(50/(10000/object position z(1))) ) -100
update matrix 2
endif
if inkey$() = "a" then cam_status=1
if inkey$() = "z" then cam_status=0
if inkey$() = "w"
IF MATRIX WIREFRAME STATE(2) = 0 then SET MATRIX WIREFRAME ON 2 else SET MATRIX WIREFRAME OFF 2
endif
if inkey$() = "e" then end
if inkey$() = "s"
if file exist("mapdata.mvs")=1 then delete file "mapdata.mvs"
open to write 1, "mapdata.mvs"
for get_x = 1 to 50
for get_y = 1 to 50
write float 1, get matrix height(2, get_x, get_y)
next get_y
next get_x
close file 1
endif
if inkey$() = "l"
if file exist("mapdata.mvs")=0 then goto skip
open to read 1, "mapdata.mvs"
for read_x = 1 to 50
for read_y = 1 to 50
read float 1, grabit#
set matrix height 2, read_x, read_y, grabit#
next read_y
next read_x
close file 1
update matrix 2
endif
skip:
if cam_status = 1
position camera camera position x(), get ground height(2,camera position x(),camera position z())+900, camera position z()
else
position camera object position x(1)-50, get ground height(2,camera position x(),camera position z())+20, object position z(1)-50
endif
POINT CAMERA object position x(1), object position y(1), object position z(1)
set cursor 10, 10
print "Current X TILE : ", int(50/(10000/object position x(1))) + 1
set cursor 10, 25
print "Current Z TILE : ", int(50/(10000/object position z(1))) + 1
set cursor 10, 40
print "Tile Height : ", get matrix height(2, int(50/(10000/object position x(1))), int(50/(10000/object position z(1))) )
set cursor 10, 55
print "Ground Height : ", get ground height(2,camera position x(),camera position z())+900
text 10, 70, "[e]xit"
text 10, 85, "[s]ave"
text 10, 100, "[l]oad"
text 10, 115, "[w]ireframe on/off"
center text 512, 10, "Easy Matrix Editor (c) Martijn van Sliedregt"
center text 512, 25, "'[ / ]' to change height - 'a / z' to change camera mode"
sync
LOOP