Here's the code
And yeah, that was me above, I thought I was logged in <glares accusingly at computer>
Rem Project: Matrix Memblocks for Newton use
Rem Created: 11/07/2004 13:00:20
Rem ***** Main Source File *****
GOSUB RESEEDRANDOM
AUTOCAM OFF
HIDE MOUSE
SYNC RATE 60
SYNC ON
POSITION CAMERA 9.5, 5, -10
POINT CAMERA 9.5, 0, 4.5
SET POINT LIGHT 0, 0, 10, 0
SET LIGHT RANGE 0, 10
COLOR LIGHT 0, 128, 128, 128
MAKE LIGHT 1
SET POINT LIGHT 1, 10, 10, 0
SET LIGHT RANGE 1, 10
COLOR LIGHT 1, 128, 128, 128
MATRIXSIZEX = 9
MATRIXSIZEZ = 9
NUMBEROFSQUARESX = 9
NUMBEROFSQUARESZ = 9
MAKE MATRIX 1, MATRIXSIZEX, MATRIXSIZEZ, NUMBEROFSQUARESX, NUMBEROFSQUARESZ
SET MATRIX 1, 0, 0, 1, 1, 1, 1, 1
RANDOMIZE MATRIX 1, 2
GOSUB SMOOTHMATRIX
UPDATE MATRIX 1
COUNTER = 0
MAKE MEMBLOCK 1, 17508
WRITE MEMBLOCK DWORD 1, 0, 338
WRITE MEMBLOCK DWORD 1, 4, 36
WRITE MEMBLOCK DWORD 1, 8, 486
FOR X = 0 TO 8
FOR Z = 0 TO 8
VERT1POSX# = ((MATRIXSIZEX / NUMBEROFSQUARESX) * X)
VERT1POSY# = GET MATRIX HEIGHT(1, X, Z)
VERT1POSZ# = ((MATRIXSIZEZ / NUMBEROFSQUARESZ) * Z)
VERT1NORMY# = VERT1POSY# + 1
` WRITE VERTEX POSITION TO MEMBLOCK
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT1POSX#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT1POSY#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT1POSZ#
INC COUNTER
` WRITE NORMAL COORDINATES TO MEMBLOCK
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT1POSX#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT1NORMY#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT1POSZ#
INC COUNTER
` WRITE VERTEX DIFFUSE COLOUR TO MEMBLOCK
` WRITE MEMBLOCK DWORD 1, 12 + (COUNTER * 4), RGB(RND(255), RND(255), RND(255))
WRITE MEMBLOCK DWORD 1, 12 + (COUNTER * 4), 0
INC COUNTER
` WRITE VERTEX UV MAPPING COORDINATES TO MEMBLOCK
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), 0.0
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), 0.0
INC COUNTER
VERT2POSX# = ((MATRIXSIZEX / NUMBEROFSQUARESX) * X)
VERT2POSY# = GET MATRIX HEIGHT(1, X, Z + 1)
VERT2POSZ# = ((MATRIXSIZEZ / NUMBEROFSQUARESZ) * Z) + 1
` WRITE VERTEX POSITION TO MEMBLOCK
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT2POSX#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT2POSY#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT2POSZ#
INC COUNTER
` WRITE NORMAL COORDINATES TO MEMBLOCK
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT2POSX#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT2NORMY#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT2POSZ#
INC COUNTER
` WRITE VERTEX DIFFUSE COLOUR TO MEMBLOCK
WRITE MEMBLOCK DWORD 1, 12 + (COUNTER * 4), 0
INC COUNTER
` WRITE VERTEX UV MAPPING COORDINATES TO MEMBLOCK
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), 0.0
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), 0.0
INC COUNTER
VERT3POSX# = ((MATRIXSIZEX / NUMBEROFSQUARESX) * X) + 1
VERT3POSY# = GET MATRIX HEIGHT(1, X + 1, Z + 1)
VERT3POSZ# = ((MATRIXSIZEZ / NUMBEROFSQUARESZ) * Z) + 1
` WRITE VERTEX POSITION TO MEMBLOCK
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT3POSX#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT3POSY#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT3POSZ#
INC COUNTER
` WRITE NORMAL COORDINATES TO MEMBLOCK
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT3POSX#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT3NORMY#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT3POSZ#
INC COUNTER
` WRITE VERTEX DIFFUSE COLOUR TO MEMBLOCK
WRITE MEMBLOCK DWORD 1, 12 + (COUNTER * 4), 0
INC COUNTER
` WRITE VERTEX UV MAPPING COORDINATES TO MEMBLOCK
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), 0.0
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), 0.0
INC COUNTER
VERT4POSX# = ((MATRIXSIZEX / NUMBEROFSQUARESX) * X)
VERT4POSY# = GET MATRIX HEIGHT(1, X, Z)
VERT4POSZ# = ((MATRIXSIZEZ / NUMBEROFSQUARESZ) * Z)
` WRITE VERTEX POSITION TO MEMBLOCK
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT4POSX#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT4POSY#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT4POSZ#
INC COUNTER
` WRITE NORMAL COORDINATES TO MEMBLOCK
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT4POSX#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT4NORMY#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT4POSZ#
INC COUNTER
` WRITE VERTEX DIFFUSE COLOUR TO MEMBLOCK
WRITE MEMBLOCK DWORD 1, 12 + (COUNTER * 4), 0
INC COUNTER
` WRITE VERTEX UV MAPPING COORDINATES TO MEMBLOCK
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), 0.0
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), 0.0
INC COUNTER
VERT5POSX# = ((MATRIXSIZEX / NUMBEROFSQUARESX) * X) + 1
VERT5POSY# = GET MATRIX HEIGHT(1, X + 1, Z + 1)
VERT5POSZ# = ((MATRIXSIZEZ / NUMBEROFSQUARESZ) * Z) + 1
` WRITE VERTEX POSITION TO MEMBLOCK
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT5POSX#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT5POSY#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT5POSZ#
INC COUNTER
` WRITE NORMAL COORDINATES TO MEMBLOCK
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT5POSX#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT5NORMY#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT5POSZ#
INC COUNTER
` WRITE VERTEX DIFFUSE COLOUR TO MEMBLOCK
WRITE MEMBLOCK DWORD 1, 12 + (COUNTER * 4), 0
INC COUNTER
` WRITE VERTEX UV MAPPING COORDINATES TO MEMBLOCK
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), 0.0
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), 0.0
INC COUNTER
VERT6POSX# = ((MATRIXSIZEX / NUMBEROFSQUARESX) * X) + 1
VERT6POSY# = GET MATRIX HEIGHT(1, X + 1, Z)
VERT6POSZ# = ((MATRIXSIZEZ / NUMBEROFSQUARESZ) * Z)
` WRITE VERTEX POSITION TO MEMBLOCK
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT6POSX#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT6POSY#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT6POSZ#
INC COUNTER
` WRITE NORMAL COORDINATES TO MEMBLOCK
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT6POSX#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT6NORMY#
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), VERT6POSZ#
INC COUNTER
` WRITE VERTEX DIFFUSE COLOUR TO MEMBLOCK
WRITE MEMBLOCK DWORD 1, 12 + (COUNTER * 4), 0
INC COUNTER
` WRITE VERTEX UV MAPPING COORDINATES TO MEMBLOCK
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), 0.0
INC COUNTER
WRITE MEMBLOCK FLOAT 1, 12 + (COUNTER * 4), 0.0
INC COUNTER
NEXT Z
NEXT X
MAKE MESH FROM MEMBLOCK 1, 1
MAKE OBJECT 100, 1, 0
POSITION OBJECT 100, 10, 0, 0
COLLISIONDATA = NDB_NEWTONCREATETREECOLLISION(100)
TERRAINMATRIX = NDB_NEWTONCREATEBODY(COLLISIONDATA)
NDB_BODYSETDBPRODATA TERRAINMATRIX, 1
NDB_NEWTONBODYSETDESTRUCTORCALLBACK TERRAINMATRIX
NDB_NEWTONRELEASECOLLISION COLLISIONDATA
DELETE MEMBLOCK 1
DELETE MESH 1
` MAIN PROGRAM LOOP=========================================================================
` ==========================================================================================
DO
` AIM WITH MOUSE----------------------------------------------------------------------------
PLAYERYANGLE# = WRAPVALUE((PLAYERYANGLE# + MOUSEMOVEX()/1))
PLAYERXANGLE# = WRAPVALUE((PLAYERXANGLE# + MOUSEMOVEY()/1.5))
IF PLAYERXANGLE# > 70 AND PLAYERXANGLE# < 180 THEN PLAYERXANGLE# = 70
IF PLAYERXANGLE# < 270 AND PLAYERXANGLE# > 180 THEN PLAYERXANGLE# = 270
ROTATE CAMERA PLAYERXANGLE#, PLAYERYANGLE#, 0
IF KEYSTATE(17) = 1 THEN MOVE CAMERA 0.1
IF KEYSTATE(31) = 1 THEN MOVE CAMERA -0.1
SYNC
LOOP
` SUBROUTINES------------------------------------------------------------------------------
` -----------------------------------------------------------------------------------------
RESEEDRANDOM:
DATE$ = GET DATE$()
TIME$ = GET TIME$()
D = (VAL(LEFT$(DATE$, 2))) + (VAL(MID$(DATE$, 4))) + (VAL(MID$(DATE$, 5))) + (VAL(RIGHT$(DATE$, 2)))
T = (VAL(LEFT$(TIME$, 2))) + (VAL(MID$(TIME$, 4))) + (VAL(MID$(TIME$, 5))) + (VAL(RIGHT$(TIME$, 2)))
DT = D * T
RANDOMIZE DT
RETURN
SMOOTHMATRIX:
` USE MATRIX NORMALS TO MAKE IT SMOOTH
FOR Z=1 TO 9
FOR X=1 TO 9
` GET MATRIX HEIGHTS
H8#=GET MATRIX HEIGHT(1,X,Z-1)
H4#=GET MATRIX HEIGHT(1,X-1,Z)
H#=GET MATRIX HEIGHT(1,X,Z)
H2#=GET MATRIX HEIGHT(1,X,Z)
` CALCULATE PROJECTED ANGLE X USING HEIGHTS
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#)
` CALCULATE PROJECTED ANGLE Z USING HEIGHTS
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#)
` MAKE NORMAL FROM PROJECTED ANGLE
NX#=SIN(AX#)
NY#=COS(AX#)
NZ#=SIN(AZ#)
` SETTING MATRIX NORMAL FOR SMOOTHNESS
SET MATRIX NORMAL 1,X,Z,NX#,NY#,NZ#
NEXT X
NEXT Z
RETURN