Here's the latest version of Link's code:
set display mode 1280,1024,32
sync on:sync rate 30
hide mouse
gosub setup_crosshair
c_posX#=500
c_posY#=50
c_posZ#=500
make matrix 1,1500,1500,30,30
gosub setup_color
gosub setup_water
gosub setup_height
Normalise(1)
fog on
fog color rgb(181,219,221)
fog distance 1000
color backdrop rgb(181,219,221)
cfov#=3.14/2.905
`editor pointer
Make Object Sphere 100,25 : Color Object 100,RGB(255,0,0) : hide object 100
ink 0,0
`--------------------------
` MAIN LOOP
`--------------------------
do
`------------------------------------------------
` Matrix Editor By Roddman (Hold CTRL & Press 1)
` X and Z variables are now eX and eZ, because x and z are being used in for loops
`------------------------------------------------
Set Cursor 1,1
If c_rout=0 then Print "Press SPACE to Edit Map" else Print "Press RETURN to Save Map"
`switching between edit and game mode is now combined with changing the camera type
if c_rout=1
Print Axis$," Axis"
Print "X Pos :",eX
Print "Z Pos :",eZ
Print "Height :",Height
GoSub CT_Edit_Matrix
If returnkey()=1 then c_rout=0 : REM CT_Save_Matrix(1) : `remove REM to save matrix data
EndIf
`----------------------------
` FOV effects by OBese87
`----------------------------
if c_posY# > -10 and switch=0 then set gamma 255,255,255:switch=1 : changefov#=3.14/2.905 : set camera FOV changefov#
if c_posY# < -10 and switch=1 then set gamma 100,100,150:switch=0 : set camera FOV 2.4
`Magnification
if mousemovez() > mmz then changefov# = cfov#-0.1
if mousemovez() < mmz then changefov# = cfov#+0.1
mmz = mousemovez()
if changefov# < 0.1 then changefov#=0.1
if changefov# > 3.14/2.905 then changefov# = 3.14/2.905
`apply magnification change if out of water
if c_posY# > -10 and changefov#<>cfov#
cfov# = changefov#
set camera fov cfov#
endif
`----------------------------
`Switch between edit and game mode
if spacekey()=1 and sp=0
c_rout = 1-c_rout
`ENTER EDIT MODE
if c_rout=1
eX=0 : eZ=0 : Axis$="X"
c_posx#=-200 : c_posy#=400 : c_posz#=-200
c_angX#=45 : c_angY#=45 : c_angZ#=0
fog off
show object 100
else
fog on
hide object 100
endif
sp=1
endif
if spacekey()=0 then sp=0
`cross-hair
if c_rout=0 then paste image 3,screen width()/2-15,screen height()/2-15,1
`call camera routines
if c_rout = 0 then gosub c_routine0
if c_rout = 1 then gosub c_routine1
rotate camera wrapvalue(c_angX#),wrapvalue(c_angY#),wrapvalue(c_angZ#)
position camera c_posX#,c_posY#,c_posZ#
sync
loop
`------------------------
` GOSUBS
`------------------------
setup_water:
cls rgb(80,80,150)
get image 2,0,0,41,41
make matrix 2,1500,1500,1,1
prepare matrix texture 2,2,1,1
position matrix 2,0,-10,0
ghost matrix on 2
return
`a heightmap, every number is multiplied by 25, giving a stylisch feel to the map
setup_height:
for x = 0 to 30
for z = 0 to 30
read height
set matrix height 1,x,z,height * 25
next z
next x
update matrix 1
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0,-1,-1, 0, 0, 0, 0,-1,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0,-1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0,-1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0,-1,-1,-1,-1,-1, 0, 0, 0, 0,-2, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0,-1, 0, 1, 2, 2, 2, 1, 1, 1, 0, 0,-1,-1, 0, 0,-1,-1, 0, 0,-2,-3,-2,-2, 0, 0
data 0, 0, 0, 0, 0, 0,-1,-1, 0, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0,-1,-1,-1,-2,-3,-3,-2,-2, 0, 0
data 0, 0, 0, 0, 0, 0,-1,-1, 0, 1, 2, 2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,-2,-3,-4,-4,-3,-2,-1, 0
data 0, 0, 0, 0, 0, 0, 0,-1,-1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,-3,-4,-5,-5,-4,-3,-2, 0
data 0, 0, 0, 0, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3,-4,-5,-5,-4,-3,-1, 0
data 0, 0, 0, 0, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0, 0, 0,-3,-4,-5,-5,-4,-3,-1, 0
data 0, 0, 0, 0, 0, 0, 0,-1,-2,-2,-2,-2,-2,-2,-1,-1,-1, 0, 0, 0, 0, 0, 0, 0,-3,-4,-4,-3, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0,-3,-3, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0, 0, 3, 3, 1, 1, 3, 3, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 3, 3, 1, 1, 3, 3, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 1, 1,-1,-1, 1, 1, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 1, 1,-1,-1, 1, 1, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 3, 3, 1, 1, 3, 3, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 3, 3, 1, 1, 3, 3, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
return
`the block texture of the map
setup_color:
ink rgb(142,171,135),0:box 0,0,40,40
ink rgb(122,151,115),0:line 0,0,40,0:line 0,0,0,40:line 40,40,40,0:line 40,40,0,40
get image 1,0,0,41,41
prepare matrix texture 1,1,1,1
return
setup_crosshair:
ink rgb(255,255,255),0
line 14, 1,14, 9:line 15, 3,15,11
line 28,14,20,14:line 26,15,18,15
line 15,28,15,20:line 14,26,14,18
line 1,15, 9,15:line 3,14,11,14
get image 3,0,0,30,30
return
`camera routine 0: just like in a first person shooter; w,a,s,d = movement; shift = crouching and jumping(on release)
c_routine0:
` Refresh Old Values (For Slope)
c_OldPosX#=Camera Position X()
c_OldPosZ#=Camera Position Z()
c_angYm# = c_angYm# + mousemoveX() / 5
c_angXm# = c_angXm# + (mousemoveY() * (1-rotlimit)) / 5
c_angY# = c_angY# + c_angYm#
c_angX# = c_angX# + c_angXm#
c_angYm# = c_angYm# * 0.7
c_angXm# = c_angXm# * 0.5
if c_angX#<-80 or c_angX#>80
rotlimit=1
endif
if rotlimit=1
if c_angX#<0 and mousemoveY()>0 then rotlimit=0
if c_angX#>0 and mousemoveY()<0 then rotlimit=0
endif
c_posX# = newXvalue(c_posX#,c_angY# ,(keystate(17)-keystate(31))*5/(k42+1)/((c_posY#<-10)+1))
c_posX# = newXvalue(c_posX#,c_angY#-90,(keystate(30)-keystate(32))*5/(k42+1)/((c_posY#<-10)+1))
c_posZ# = newZvalue(c_posZ#,c_angY# ,(keystate(17)-keystate(31))*5/(k42+1)/((c_posY#<-10)+1))
c_posZ# = newZvalue(c_posZ#,c_angY#-90,(keystate(30)-keystate(32))*5/(k42+1)/((c_posY#<-10)+1))
if c_posX#<20 then c_posX#=20
if c_posX#>1480 then c_posX#=1480
if c_posZ#<20 then c_posZ#=20
if c_posZ#>1480 then c_posZ#=1480
c_velY# = c_velY# + 2
c_posY# = c_posY# - c_velY#
ggg#=get ground height(1,c_posX#,c_posZ#)
if c_posY# <ggg# + 10/(k42+1) then c_posY# = ggg# + 10/(k42+1) : c_velY# = 0
if k42=1 and keystate(42)=0 and c_posY# = ggg# + 10/(k42+1) then c_velY#=-10
k42=keystate(42)
return
`camera routine 1: left and right buttons control the camera
c_routine1:
if mouseclick()=1
c_posm# = c_posm# + 0 - mousemoveY() / 2
endif
if mouseclick()=2
c_angYm# = c_angYm# + mousemoveX() / 5
c_angXm# = c_angXm# + mousemoveY() / 5
endif
c_angY# = c_angY# + c_angYm#
c_angX# = c_angX# + c_angXm#
c_angYm# = c_angYm# * 0.5
c_angXm# = c_angXm# * 0.5
c_posX# = newXvalue(c_posX#,c_angY#,c_posm#)
c_posY# = newYvalue(c_posY#,c_angX#,c_posm#)
c_posZ# = newZvalue(c_posZ#,c_angY#,c_posm#)
c_posm# = c_posm# * 0.7
return
CT_Edit_Matrix:
` Check For Key Pressed
If ScanCode()=44 then Axis$="Z"
If ScanCode()=45 then Axis$="X"
If UpKey()=1
`Increase Height
If Axis$="X" then INC eX
If Axis$="Z" then INC eZ
EndIf
If DownKey()=1
`Decrease Height
If Axis$="X" then DEC eX
If Axis$="Z" then DEC eZ
EndIf
`Bind X and Z to matrix
If eX < 0 then eX=0
If eX > 30 then eX=30
If eZ < 0 then eZ=0
If eZ > 30 then eZ=30
Height=get ground height(1,eX,eZ)
`Adjust height
If ScanCode()=13 then inc Height,1
If ScanCode()=12 then dec Height,1
`Update
Set Matrix Height 1,eX,eZ,Height
Update Matrix 1
position object 100,eX*50,Height,eZ*50 : `matrix editor pointer
Return
`---------------------
` FUNCTIONS
`---------------------
`By Lee Bamber From DB Example - Adds shaded areas to matrix to give depth
Function Normalise(MatNum)
For z=1 to 30
For x=1 to 30
h8#=get matrix height(MatNum,x,z-1)*5:`*5 added for even more depth
h4#=get matrix height(MatNum,x-1,z)*5
h#=get matrix height(MatNum,x,z)*5
h2#=get matrix height(MatNum,x,z)*5
x1#=(x-1)*25.0
y1#=h#
x2#=(x+0)*25.0
y2#=h4#
dx#=x2#-x1#
dy#=y2#-y1#
ax#=atanfull(dx#,dy#)
ax#=wrapvalue(90-ax#)
z1#=(z-1)*25.0
y1#=h2#
z2#=(z+0)*25.0
y2#=h8#
dz#=z2#-z1#
dy#=y2#-y1#
az#=atanfull(dz#,dy#)
az#=wrapvalue(90-az#)
nx#=sin(ax#)
ny#=cos(ax#)
nz#=sin(az#)
Set matrix normal MatNum,x,z,nx#,ny#,nz#
next x
next z
Update Matrix MatNum
EndFunction
` Save Matrix Function by Roddman
Function CT_Save_Matrix(mat)
number=1
Repeat
string$="map"
string$=string$+STR$(number)+".txt"
INC number
Until File Exist(string$)=0
Open to Write 1,string$
Print string$
for X = 0 to 29
line$="Data "
for Z = 0 to 29
line$=line$+STR$(Get Ground Height(1,X*50,Z*50)/25)+","
next Z
Write String 1,line$
next X
Close File 1
EndFunction
I thought I'd post it again as this is a new page and my last post was a little messy, please look at the previous post though as it tells what I have done and what problems still remain (or I have created

)
[EDIT]
A newer and more improved version, I took out the troublesome GET GROUND HEIGHT in the matrix editor and now it works fine. It may not be the greatest but it works.
I also changed the way you move around in the editor, sorry for hacking away at your code Roddman
set display mode 1280,1024,32
sync on:sync rate 30
hide mouse
gosub setup_crosshair
c_posX#=500
c_posY#=50
c_posZ#=500
make matrix 1,1500,1500,30,30
gosub setup_color
gosub setup_water
gosub setup_height
Normalise(1)
fog on
fog color rgb(181,219,221)
fog distance 1000
color backdrop rgb(181,219,221)
cfov#=3.14/2.905
`editor pointer
Make Object Sphere 100,25 : Color Object 100,RGB(255,0,0) : hide object 100
ink 0,0
`--------------------------
` MAIN LOOP
`--------------------------
do
`------------------------------------------------
` Matrix Editor By Roddman (Hold CTRL & Press 1)
` X and Z variables are now eX and eZ, because x and z are being used in for loops
`------------------------------------------------
Set Cursor 1,1
If c_rout=0 then Print "Press SPACE to Edit Map" else Print "Press RETURN to Save Map"
`switching between edit and game mode is now combined with changing the camera type
if c_rout=1
Print "X Pos :",eX
Print "Z Pos :",eZ
Print "Height :",Height
GoSub CT_Edit_Matrix
If returnkey()=1 then c_rout=0 : REM CT_Save_Matrix(1) : `remove REM to save matrix data
EndIf
`----------------------------
` FOV effects by OBese87
`----------------------------
if c_posY# > -10 and switch=0 then set gamma 255,255,255:switch=1 : changefov#=3.14/2.905 : set camera FOV changefov#
if c_posY# < -10 and switch=1 then set gamma 100,100,150:switch=0 : set camera FOV 2.4
`Magnification
if mousemovez() > mmz then changefov# = cfov#-0.1
if mousemovez() < mmz then changefov# = cfov#+0.1
mmz = mousemovez()
if changefov# < 0.1 then changefov#=0.1
if changefov# > 3.14/2.905 then changefov# = 3.14/2.905
`apply magnification change if out of water
if c_posY# > -10 and changefov#<>cfov#
cfov# = changefov#
set camera fov cfov#
endif
`----------------------------
`Switch between edit and game mode
if spacekey()=1 and sp=0
c_rout = 1-c_rout
`ENTER EDIT MODE
if c_rout=1
eX=0 : eZ=0
c_posx#=-200 : c_posy#=400 : c_posz#=-200
c_angX#=45 : c_angY#=45 : c_angZ#=0
fog off
show object 100
else
fog on
hide object 100
endif
sp=1
endif
if spacekey()=0 then sp=0
`cross-hair
if c_rout=0 then paste image 3,screen width()/2-15,screen height()/2-15,1
`call camera routines
if c_rout = 0 then gosub c_routine0
if c_rout = 1 then gosub c_routine1
rotate camera wrapvalue(c_angX#),wrapvalue(c_angY#),wrapvalue(c_angZ#)
position camera c_posX#,c_posY#,c_posZ#
sync
loop
`------------------------
` GOSUBS
`------------------------
setup_water:
cls rgb(80,80,150)
get image 2,0,0,41,41
make matrix 2,1500,1500,1,1
prepare matrix texture 2,2,1,1
position matrix 2,0,-10,0
ghost matrix on 2
return
`a heightmap, every number is multiplied by 25, giving a stylisch feel to the map
setup_height:
for x = 0 to 30
for z = 0 to 30
read height
set matrix height 1,x,z,height * 25
next z
next x
update matrix 1
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0,-1,-1, 0, 0, 0, 0,-1,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0,-1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0,-1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0,-1,-1,-1,-1,-1, 0, 0, 0, 0,-2, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0,-1, 0, 1, 2, 2, 2, 1, 1, 1, 0, 0,-1,-1, 0, 0,-1,-1, 0, 0,-2,-3,-2,-2, 0, 0
data 0, 0, 0, 0, 0, 0,-1,-1, 0, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0,-1,-1,-1,-2,-3,-3,-2,-2, 0, 0
data 0, 0, 0, 0, 0, 0,-1,-1, 0, 1, 2, 2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,-2,-3,-4,-4,-3,-2,-1, 0
data 0, 0, 0, 0, 0, 0, 0,-1,-1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,-3,-4,-5,-5,-4,-3,-2, 0
data 0, 0, 0, 0, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3,-4,-5,-5,-4,-3,-1, 0
data 0, 0, 0, 0, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0, 0, 0,-3,-4,-5,-5,-4,-3,-1, 0
data 0, 0, 0, 0, 0, 0, 0,-1,-2,-2,-2,-2,-2,-2,-1,-1,-1, 0, 0, 0, 0, 0, 0, 0,-3,-4,-4,-3, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0,-3,-3, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0, 0, 3, 3, 1, 1, 3, 3, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 3, 3, 1, 1, 3, 3, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 1, 1,-1,-1, 1, 1, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 1, 1,-1,-1, 1, 1, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 3, 3, 1, 1, 3, 3, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 3, 3, 1, 1, 3, 3, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
data 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
return
`the block texture of the map
setup_color:
ink rgb(142,171,135),0:box 0,0,40,40
ink rgb(122,151,115),0:line 0,0,40,0:line 0,0,0,40:line 40,40,40,0:line 40,40,0,40
get image 1,0,0,41,41
prepare matrix texture 1,1,1,1
return
setup_crosshair:
ink rgb(255,255,255),0
line 14, 1,14, 9:line 15, 3,15,11
line 28,14,20,14:line 26,15,18,15
line 15,28,15,20:line 14,26,14,18
line 1,15, 9,15:line 3,14,11,14
get image 3,0,0,30,30
return
`camera routine 0: just like in a first person shooter; w,a,s,d = movement; shift = crouching and jumping(on release)
c_routine0:
` Refresh Old Values (For Slope)
c_OldPosX#=Camera Position X()
c_OldPosZ#=Camera Position Z()
c_angYm# = c_angYm# + mousemoveX() / 5
c_angXm# = c_angXm# + (mousemoveY() * (1-rotlimit)) / 5
c_angY# = c_angY# + c_angYm#
c_angX# = c_angX# + c_angXm#
c_angYm# = c_angYm# * 0.7
c_angXm# = c_angXm# * 0.5
if c_angX#<-80 or c_angX#>80
rotlimit=1
endif
if rotlimit=1
if c_angX#<0 and mousemoveY()>0 then rotlimit=0
if c_angX#>0 and mousemoveY()<0 then rotlimit=0
endif
c_posX# = newXvalue(c_posX#,c_angY# ,(keystate(17)-keystate(31))*5/(k42+1)/((c_posY#<-10)+1))
c_posX# = newXvalue(c_posX#,c_angY#-90,(keystate(30)-keystate(32))*5/(k42+1)/((c_posY#<-10)+1))
c_posZ# = newZvalue(c_posZ#,c_angY# ,(keystate(17)-keystate(31))*5/(k42+1)/((c_posY#<-10)+1))
c_posZ# = newZvalue(c_posZ#,c_angY#-90,(keystate(30)-keystate(32))*5/(k42+1)/((c_posY#<-10)+1))
if c_posX#<20 then c_posX#=20
if c_posX#>1480 then c_posX#=1480
if c_posZ#<20 then c_posZ#=20
if c_posZ#>1480 then c_posZ#=1480
c_velY# = c_velY# + 2
c_posY# = c_posY# - c_velY#
ggg#=get ground height(1,c_posX#,c_posZ#)
if c_posY# <ggg# + 10/(k42+1) then c_posY# = ggg# + 10/(k42+1) : c_velY# = 0
if k42=1 and keystate(42)=0 and c_posY# = ggg# + 10/(k42+1) then c_velY#=-10
k42=keystate(42)
return
`camera routine 1: left and right buttons control the camera
c_routine1:
if mouseclick()=1
c_posm# = c_posm# + 0 - mousemoveY() / 2
endif
if mouseclick()=2
c_angYm# = c_angYm# + mousemoveX() / 5
c_angXm# = c_angXm# + mousemoveY() / 5
endif
c_angY# = c_angY# + c_angYm#
c_angX# = c_angX# + c_angXm#
c_angYm# = c_angYm# * 0.5
c_angXm# = c_angXm# * 0.5
c_posX# = newXvalue(c_posX#,c_angY#,c_posm#)
c_posY# = newYvalue(c_posY#,c_angX#,c_posm#)
c_posZ# = newZvalue(c_posZ#,c_angY#,c_posm#)
c_posm# = c_posm# * 0.7
return
CT_Edit_Matrix:
`controls
If UpKey()=1 then INC ez
if DownKey()=1 then DEC eZ
If RightKey()=1 then INC ex
if LeftKey()=1 then DEC ex
If ScanCode()=13 then inc Height,1 : `+
If ScanCode()=12 then dec Height,1 : `-
`Bind X and Z to matrix
If eX < 0 then eX=0
If eX > 30 then eX=30
If eZ < 0 then eZ=0
If eZ > 30 then eZ=30
rem Height=get ground height(1,eX,eZ)
`Update
Set Matrix Height 1,eX,eZ,Height
Update Matrix 1
position object 100,eX*50,Height,eZ*50 : `matrix editor pointer
Return
`---------------------
` FUNCTIONS
`---------------------
`By Lee Bamber From DB Example - Adds shaded areas to matrix to give depth
Function Normalise(MatNum)
For z=1 to 30
For x=1 to 30
h8#=get matrix height(MatNum,x,z-1)*5:`*5 added for even more depth
h4#=get matrix height(MatNum,x-1,z)*5
h#=get matrix height(MatNum,x,z)*5
h2#=get matrix height(MatNum,x,z)*5
x1#=(x-1)*25.0
y1#=h#
x2#=(x+0)*25.0
y2#=h4#
dx#=x2#-x1#
dy#=y2#-y1#
ax#=atanfull(dx#,dy#)
ax#=wrapvalue(90-ax#)
z1#=(z-1)*25.0
y1#=h2#
z2#=(z+0)*25.0
y2#=h8#
dz#=z2#-z1#
dy#=y2#-y1#
az#=atanfull(dz#,dy#)
az#=wrapvalue(90-az#)
nx#=sin(ax#)
ny#=cos(ax#)
nz#=sin(az#)
Set matrix normal MatNum,x,z,nx#,ny#,nz#
next x
next z
Update Matrix MatNum
EndFunction
` Save Matrix Function by Roddman
Function CT_Save_Matrix(mat)
number=1
Repeat
string$="map"
string$=string$+STR$(number)+".txt"
INC number
Until File Exist(string$)=0
Open to Write 1,string$
Print string$
for X = 0 to 29
line$="Data "
for Z = 0 to 29
line$=line$+STR$(Get Ground Height(1,X*50,Z*50)/25)+","
next Z
Write String 1,line$
next X
Close File 1
EndFunction
I think it's a testament to Link that neither of us have hardly had to change a thing to add our ideas to the program
Your signature has been erased by a mod because it was rubbish.