Cool
i dont know why your spring based model didnt work, this one uses springs :
Rem Project: cloth
Rem Created: Saturday, March 17, 2012
Rem ***** Main Source File *****
Rem Project: Dark Basic Pro Project
Rem Created: Saturday, March 17, 2012
Rem ***** Main Source File *****
sync on : sync rate 0
ww = screen width() : hh = screen height() : a =100 : b =100 : var# = 1
dim x#(a,b) : dim y#(a,b) : dim z#(a,b) dim v(a,b) : dim m#(a,b) : dim o(a,b) : : dim n(a,b) : dim c(a,b)
for i = 1 to a : : for j = 1 to b
x#(i,j) = i*var# : z#(i,j) = j*var# : m#(i,j) = 5 : v(i,j) = createvector() : n(i,j) = createvector()
o(i,j) = find free object() : make object plane o(i,j),1,1
hide object o(i,j)
NEXT : next
F1 = createvector() : F2 = createvector()
F3 = createvector() : F4 = createvector() : G = createvector()
F5 = createvector(): F6 = createvector()
W = createvector()
rad = 5 : basefriction# = 1 : lineforce# = 0.15
c =3
gravity# = -0.000
light# = 12.0
diffuse# = 25.0
id1 = a2createfont("txt",12,1,1,0)
position camera 55,100,50
point camera a/2,b/2,0
yrotate camera 0
color backdrop rgb(0,0,0)
set vector3 F5,-1,-1,-0.5 : normalize vector3 F5,F5
cr = 40 : cg = 90 : cb = 180
d3d_batch_set_line3d a*b*2
wind# = 0.1
remstart
load image "hexa.jpg",1,1
P = find free object() : make object plain P,a,b,a-1,b-1 : color object P,rgb(20,40,100) : set object smoothing P,100 : set object transparency P,1
set alpha mapping on P,50
make light 1 : set light range 1,10000 : color light 1,rgb(255,255,255) : set ambient light 20 : color ambient light rgb(255,255,255)
texture object P,1
remend
do
position mouse ww/2,hh/2
if selected = 0
yrotate camera wrapvalue(camera angle y()-mousemovex())
xrotate camera wrapvalue(camera angle x()+mousemovey())
endif
if keystate(17) = 1 then move camera 4
if keystate(31) = 1 then move camera -4
if keystate(32) = 1 then move camera right 4
if keystate(30) = 1 then move camera left 4
mx# = mousex() : my# = mousey() : if mouseclick() = 0 then selected = 0
for i = 1 to a : x#(i,1) = i : z#(i,1) = 1 : y#(i,1) = 0 : next
for j = 1 to b : x#(1,j) = 1 : z#(1,j) = j : y#(1,j) = 0 : next
for i = 1 to a : x#(i,b) = i : z#(i,b) = b : y#(i,b) = 0 : next
for j = 1 to b : x#(a,j) = a : z#(a,j) = j : y#(a,j) = 0 : next
if returnkey() = 0
y#(10,10) = sin(vv*3)*45 : set vector3 v(10,10),0,0,0
y#(a-10,b-10) = sin(vv*12)*10 : set vector3 v(a-10,b-10),0,0,0
endif
if mouseclick() = 2
pick screen screen width()/2, screen height()/2, 1.0
set vector3 F5,get pick vector x(),get pick vector y(),get pick vector z()
normalize vector3 F5,F5
position light 1,camera position x(),camera position y(),camera position z()
set directional light 1,get pick vector x(),get pick vector y(),get pick vector z()
endif
if spacekey() then friction# = 0 else friction# = basefriction#
rem xgravity# = sin(vv)*gravity#
rem zgravity# = cos(vv)*gravity#
vv = wrap(vv+1,0,36000)
set vector3 G,xgravity#*m#(1,1),gravity#*m#(1,1),zgravity#*m#(1,1)
for i = 2 to a-1 : for j = 2 to b-1
set vector3 F1,x#(i-1,j)-x#(i,j),y#(i-1,j)-y#(i,j),z#(i-1,j)-z#(i,j)
set vector3 F2,x#(i+1,j)-x#(i,j),y#(i+1,j)-y#(i,j),z#(i+1,j)-z#(i,j)
set vector3 F3,x#(i,j-1)-x#(i,j),y#(i,j-1)-y#(i,j),z#(i,j-1)-z#(i,j)
set vector3 F4,x#(i,j+1)-x#(i,j),y#(i,j+1)-y#(i,j),z#(i,j+1)-z#(i,j)
cross product vector3 n(i,j),F3,F2 : normalize vector3 n(i,j),n(i,j)
add vector3 n(i,j),n(i,j),F5 : c# = light#/(1.0+length vector3(n(i,j))*diffuse#) : c(i,j) = rgb(min(cr*c#,255),min(cg*c#,255),min(cb*c#,255))
add vector3 F1,F1,F3 : add vector3 F1,F1,F2 : add vector3 F1,F1,F4 : add vector3 F1,F1,G : add vector3 F1,F1,W : multiply vector3 F1,lineforce#
add vector3 v(i,j),v(i,j),F1 : multiply vector3 v(i,j),friction#
d3d_batch_add_line3d x#(i,j),y#(i,j),z#(i,j),x#(i,j-1),y#(i,j-1),z#(i,j-1),c(i,j),c(i,j-1)
d3d_batch_add_line3d x#(i,j),y#(i,j),z#(i,j),x#(i-1,j),y#(i-1,j),z#(i-1,j),c(i,j),c(i-1,j)
d3d_batch_add_line3d (x#(i,j)+x#(i-1,j))*0.5,(y#(i,j)+y#(i-1,j))*0.5,(z#(i,j)+z#(i-1,j))*0.5,(x#(i,j-1)+x#(i-1,j-1))*0.5,(y#(i,j-1)+y#(i-1,j-1))*0.5,(z#(i,j-1)+z#(i-1,j-1))*0.5,c(i,j),c(i-1,j-1)
d3d_batch_add_line3d (x#(i,j)+x#(i,j-1))*0.5,(y#(i,j)+y#(i,j-1))*0.5,(z#(i,j)+z#(i,j-1))*0.5,(x#(i-1,j)+x#(i-1,j-1))*0.5,(y#(i-1,j)+y#(i-1,j-1))*0.5,(z#(i-1,j)+z#(i-1,j-1))*0.5,c(i,j),c(i-1,j-1)
d3d_batch_add_line3d x#(i,j),y#(i,j),z#(i,j),x#(i-1,j-1),y#(i-1,j-1),z#(i-1,j-1),c(i,j),c(i-1,j-1)
d3d_batch_add_line3d x#(i,j-1),y#(i,j-1),z#(i,j-1),x#(i-1,j),y#(i-1,j),z#(i-1,j),c(i,j-1),c(i-1,j)
rem normal d3d_line3d x#(i,j),y#(i,j),z#(i,j),x#(i,j)+x vector3(n(i,j)),y#(i,j)+y vector3(n(i,j)),z#(i,j)+z vector3(n(i,j)),rgb(20*zv#,70*zv#,200),1
NEXT : next
rem lock vertexdata for limb P,0,1
for i = 1 to a : for j = 1 to b
x#(i,j) = x#(i,j)+x vector3(v(i,j)) : y#(i,j) = y#(i,j)+y vector3(v(i,j)) : z#(i,j) = z#(i,j)+z vector3(v(i,j))
if selected = o(i,j) then y#(i,j) = y#(i,j)+mousemovey() : set vector3 v(i,j),0,0,0
if button(o(i,j)) = 2 and selected = 0 then selected = o(i,j)
rem position object o(i,j),x#(i,j),y#(i,j),z#(i,j)
rem set vertexdata position j*b+i-b-1,x#(i,j),y#(i,j)+0.05,z#(i,j)
rem set vertexdata normals j*b+i-b-1,x vector3(n(i,j)),y vector3(n(i,j)),z vector3(n(i,j))
rem point object o(i,j),x#(i,j)+x vector3(v(i,j)),y#(i,j)+y vector3(v(i,j)),z#(i,j)+z vector3(v(i,j))
NEXT : next
rem unlock vertexdata
d3d_batch_draw_line3d 0,1,1
d3d_batch_set_line3d a*b*6
sync
LOOP
function lenvec(vec,len#)
normalize vector3 vec,vec : multiply vector3 vec,len#
ENDFUNCTION
function createvector()
num = find free vector() : null = make vector3(num)
ENDFUNCTION num
function button(obj)
if squaredist(object screen x(obj),object screen y(obj),mousex(),mousey()) < 200
selected = mouseclick()+1
endif
endfunction selected
function squaredist(x1#,y1#,x2#,y2#)
d# = (x1#-x2#)^2+(y1#-y2#)^2
ENDFUNCTION d#
function dist(x1#,y1#,z1#,x2#,y2#,z2#)
d# = sqrt((x1#-x2#)^2+(y1#-y2#)^2+(z1#-z2#)^2)
ENDFUNCTION d#
if upkey() then inc rigidity#,0.0005
if downkey() then dec rigidity#,0.0005
if leftkey() then inc gravity#,0.0000005
if rightkey() then dec gravity#,0.0000005
a2text id1,0,0,"RIG : "+str$(rigidity#)+" GRA : "+str$(gravity#)+" LIN : "+str$(lineforce#),rgb(255,255,255)
remstart
sync on : sync rate 60 : a =80 : b =80: var# = 1
dim x#(a,b) : dim y#(a,b) : dim z#(a,b) dim v(a,b) : dim m#(a,b) : dim o(a,b)
for i = 1 to a : : for j = 1 to b : x#(i,j) = i*var# : y#(i,j) = j*var# : m#(i,j) = 5 : v(i,j) = createvector() : o(i,j) = find free object() : make object plane o(i,j),1,1 : hide object o(i,j) : NEXT : next
F1 = createvector() : F2 = createvector() : F3 = createvector() : F4 = createvector() : G = createvector()
basefriction# = 0.9991 : lineforce# = 0.1 : gravity# = -0.005 : color backdrop rgb(0,0,0)
do : if selected = 0 then zrotate camera wrapvalue(camera angle z()+mousemovex()) : xrotate camera wrapvalue(camera angle x()+mousemovey()) : if keystate(17) = 1 then move camera 1 : if keystate(31) = 1 then move camera -1
if mouseclick() = 0 then selected = 0
for i = 1 to a : x#(i,1) = i : y#(i,1) = 1 : z#(i,1) = 0 : next : for j = 1 to b : x#(1,j) = 1 : y#(1,j) = j : z#(1,j) = 0 : next : for i = 1 to a : x#(i,b) = i : y#(i,b) = b : z#(i,b) = 0 : next : for j = 1 to b : x#(a,j) = a : y#(a,j) = j : z#(a,j) = 0 : next : if spacekey() then friction# = 0 else friction# = basefriction#
for i = 2 to a-1 : for j = 2 to b-1 : set vector3 G,0,0,gravity#*m#(i,j): set vector3 F1,x#(i-1,j)-x#(i,j),y#(i-1,j)-y#(i,j),z#(i-1,j)-z#(i,j) : set vector3 F2,x#(i+1,j)-x#(i,j),y#(i+1,j)-y#(i,j),z#(i+1,j)-z#(i,j) :set vector3 F3,x#(i,j-1)-x#(i,j),y#(i,j-1)-y#(i,j),z#(i,j-1)-z#(i,j) : set vector3 F4,x#(i,j+1)-x#(i,j),y#(i,j+1)-y#(i,j),z#(i,j+1)-z#(i,j)
add vector3 F1,F1,F3 : add vector3 F1,F1,F2 : add vector3 F1,F1,F4 : add vector3 F1,F1,G : multiply vector3 F1,lineforce# : add vector3 v(i,j),v(i,j),F1 : multiply vector3 v(i,j),friction# : NEXT : next
maxz# = -1000 : minz# = 1000 : for i = 1 to a : for j = 1 to b : x#(i,j) = x#(i,j)+x vector3(v(i,j)) : y#(i,j) = y#(i,j)+y vector3(v(i,j)) : z#(i,j) = z#(i,j)+z vector3(v(i,j)) : maxz# = max(z#(i,j),maxz#) : minz# = min(minz#,z#(i,j)) : position object o(i,j),x#(i,j),y#(i,j),z#(i,j)
if selected = o(i,j) then z#(i,j) = z#(i,j)+mousemovey() : set vector3 v(i,j),0,0,0
if button(o(i,j)) = 2 and selected = 0 then selected = o(i,j) : m#(i,j) = 5
if button(o(i,j)) = 3 and selected = 0 then m#(i,j) = 100
NEXT : next : for i = 2 to a-1 : for j = 2 to b-1 : zv# = (3*(z#(i,j)-minz#))/(maxz#-minz#) : d3d_line3d x#(i,j),y#(i,j),z#(i,j),x#(i-1,j),y#(i-1,j),z#(i-1,j),rgb(20*zv#,70*zv#,200),1 : d3d_line3d x#(i,j),y#(i,j),z#(i,j),x#(i,j-1),y#(i,j-1),z#(i,j-1),rgb(20*zv#,70*zv#,200),1 : NEXT : next : sync : loop
function createvector() : num = find free vector() : null = make vector3(num) :
endfunction num
function button(obj) : if ((object screen x(obj)-mousex())^2+(object screen y(obj)-mousey())^2) < 200 then selected = mouseclick()+1
endfunction selected
remend
i did it a while ago and it requires d3d plugin for the 3d lines. If you dont have it, just unrem the commands that have something to do with vertexdata or objects and put this in a folder with an
image
and load it where the "load image hexa.jpg is now.
move forward with W and steer with mouse, click with leftmouse to grab a spot and move it up and down or just let the 2 "stirrers" do the job of making waves. press rightmouse to position the light at you coordinates, press space to pause simulation ( this zeroes all the velocities so press repeatedly to calm it down )
but yours is really cool for having medium based reflections and such

dont thin they can be handled by spring so easily
Rem Project: cloth
Rem Created: Saturday, March 17, 2012
Rem ***** Main Source File *****
Rem Project: Dark Basic Pro Project
Rem Created: Saturday, March 17, 2012
Rem ***** Main Source File *****
sync on : sync rate 0
ww = screen width() : hh = screen height() : a =200 : b =200 : var# = 1
dim x#(a,b) : dim y#(a,b) : dim z#(a,b) dim v(a,b) : dim m#(a,b) : dim o(a,b) : : dim n(a,b) : dim c(a,b)
for i = 1 to a : : for j = 1 to b
x#(i,j) = i*var# : z#(i,j) = j*var# : m#(i,j) = 5 : v(i,j) = createvector() : n(i,j) = createvector()
o(i,j) = find free object() : make object plane o(i,j),1,1
hide object o(i,j)
NEXT : next
F1 = createvector() : F2 = createvector()
F3 = createvector() : F4 = createvector() : G = createvector()
F5 = createvector(): F6 = createvector()
W = createvector()
rad = 5 : basefriction# = 1 : lineforce# = 0.15
c =3
gravity# = -0.000
light# = 12.0
diffuse# = 25.0
id1 = a2createfont("txt",12,1,1,0)
position camera 55,100,50
point camera a/2,b/2,0
yrotate camera 0
color backdrop rgb(0,0,0)
set vector3 F5,-1,-1,-0.5 : normalize vector3 F5,F5
cr = 40 : cg = 90 : cb = 180
d3d_batch_set_line3d a*b*2
wind# = 0.1
remstart
load image "hexa.jpg",1,1
P = find free object() : make object plain P,a,b,a-1,b-1 : color object P,rgb(20,40,100) : set object smoothing P,100 : set object transparency P,1
set alpha mapping on P,50
texture object P,15
remend
make light 1 : set light range 1,10000 : color light 1,rgb(255,255,255) : set ambient light 20 : color ambient light rgb(255,255,255)
do
position mouse ww/2,hh/2
if selected = 0
yrotate camera wrapvalue(camera angle y()-mousemovex())
xrotate camera wrapvalue(camera angle x()+mousemovey())
endif
if keystate(17) = 1 then move camera 4
if keystate(31) = 1 then move camera -4
if keystate(32) = 1 then move camera right 4
if keystate(30) = 1 then move camera left 4
mx# = mousex() : my# = mousey() : if mouseclick() = 0 then selected = 0
for i = 1 to a : x#(i,1) = i : z#(i,1) = 1 : y#(i,1) = 0 : next
for j = 1 to b : x#(1,j) = 1 : z#(1,j) = j : y#(1,j) = 0 : next
for i = 1 to a : x#(i,b) = i : z#(i,b) = b : y#(i,b) = 0 : next
for j = 1 to b : x#(a,j) = a : z#(a,j) = j : y#(a,j) = 0 : next
if returnkey() = 0
y#(10,10) = sin(vv*3)*45 : set vector3 v(10,10),0,0,0
y#(a-10,b-10) = sin(vv*12)*10 : set vector3 v(a-10,b-10),0,0,0
endif
if mouseclick() = 2
pick screen screen width()/2, screen height()/2, 1.0
set vector3 F5,get pick vector x(),get pick vector y(),get pick vector z()
normalize vector3 F5,F5
position light 1,camera position x(),camera position y(),camera position z()
set directional light 1,get pick vector x(),get pick vector y(),get pick vector z()
endif
if spacekey() then friction# = 0 else friction# = basefriction#
rem xgravity# = sin(vv)*gravity#
rem zgravity# = cos(vv)*gravity#
vv = wrap(vv+1,0,36000)
set vector3 G,xgravity#*m#(1,1),gravity#*m#(1,1),zgravity#*m#(1,1)
for i = 2 to a-1 : for j = 2 to b-1
set vector3 F1,x#(i-1,j)-x#(i,j),y#(i-1,j)-y#(i,j),z#(i-1,j)-z#(i,j)
set vector3 F2,x#(i+1,j)-x#(i,j),y#(i+1,j)-y#(i,j),z#(i+1,j)-z#(i,j)
set vector3 F3,x#(i,j-1)-x#(i,j),y#(i,j-1)-y#(i,j),z#(i,j-1)-z#(i,j)
set vector3 F4,x#(i,j+1)-x#(i,j),y#(i,j+1)-y#(i,j),z#(i,j+1)-z#(i,j)
cross product vector3 n(i,j),F3,F2 : normalize vector3 n(i,j),n(i,j)
add vector3 n(i,j),n(i,j),F5 : c# = light#/(1.0+length vector3(n(i,j))*diffuse#) : c(i,j) = rgb(min(cr*c#,255),min(cg*c#,255),min(cb*c#,255))
add vector3 F1,F1,F3 : add vector3 F1,F1,F2 : add vector3 F1,F1,F4 : add vector3 F1,F1,G : add vector3 F1,F1,W : multiply vector3 F1,lineforce#
add vector3 v(i,j),v(i,j),F1 : multiply vector3 v(i,j),friction#
d3d_batch_add_line3d x#(i,j),y#(i,j),z#(i,j),x#(i,j-1),y#(i,j-1),z#(i,j-1),c(i,j),c(i,j-1)
d3d_batch_add_line3d x#(i,j),y#(i,j),z#(i,j),x#(i-1,j),y#(i-1,j),z#(i-1,j),c(i,j),c(i-1,j)
d3d_batch_add_line3d (x#(i,j)+x#(i-1,j))*0.5,(y#(i,j)+y#(i-1,j))*0.5,(z#(i,j)+z#(i-1,j))*0.5,(x#(i,j-1)+x#(i-1,j-1))*0.5,(y#(i,j-1)+y#(i-1,j-1))*0.5,(z#(i,j-1)+z#(i-1,j-1))*0.5,c(i,j),c(i-1,j-1)
d3d_batch_add_line3d (x#(i,j)+x#(i,j-1))*0.5,(y#(i,j)+y#(i,j-1))*0.5,(z#(i,j)+z#(i,j-1))*0.5,(x#(i-1,j)+x#(i-1,j-1))*0.5,(y#(i-1,j)+y#(i-1,j-1))*0.5,(z#(i-1,j)+z#(i-1,j-1))*0.5,c(i,j),c(i-1,j-1)
d3d_batch_add_line3d x#(i,j),y#(i,j),z#(i,j),x#(i-1,j-1),y#(i-1,j-1),z#(i-1,j-1),c(i,j),c(i-1,j-1)
d3d_batch_add_line3d x#(i,j-1),y#(i,j-1),z#(i,j-1),x#(i-1,j),y#(i-1,j),z#(i-1,j),c(i,j-1),c(i-1,j)
rem normal d3d_line3d x#(i,j),y#(i,j),z#(i,j),x#(i,j)+x vector3(n(i,j)),y#(i,j)+y vector3(n(i,j)),z#(i,j)+z vector3(n(i,j)),rgb(20*zv#,70*zv#,200),1
NEXT : next
rem lock vertexdata for limb P,0,1
for i = 1 to a : for j = 1 to b
x#(i,j) = x#(i,j)+x vector3(v(i,j)) : y#(i,j) = y#(i,j)+y vector3(v(i,j)) : z#(i,j) = z#(i,j)+z vector3(v(i,j))
if selected = o(i,j) then y#(i,j) = y#(i,j)+mousemovey() : set vector3 v(i,j),0,0,0
if button(o(i,j)) = 2 and selected = 0 then selected = o(i,j)
rem position object o(i,j),x#(i,j),y#(i,j),z#(i,j)
rem set vertexdata position j*b+i-b-1,x#(i,j),y#(i,j)+0.05,z#(i,j)
rem set vertexdata normals j*b+i-b-1,x vector3(n(i,j)),y vector3(n(i,j)),z vector3(n(i,j))
rem point object o(i,j),x#(i,j)+x vector3(v(i,j)),y#(i,j)+y vector3(v(i,j)),z#(i,j)+z vector3(v(i,j))
NEXT : next
rem unlock vertexdata
d3d_batch_draw_line3d 0,1,1
d3d_batch_set_line3d a*b*6
sync
LOOP
function lenvec(vec,len#)
normalize vector3 vec,vec : multiply vector3 vec,len#
ENDFUNCTION
function createvector()
num = find free vector() : null = make vector3(num)
ENDFUNCTION num
function button(obj)
if squaredist(object screen x(obj),object screen y(obj),mousex(),mousey()) < 200
selected = mouseclick()+1
endif
endfunction selected
function squaredist(x1#,y1#,x2#,y2#)
d# = (x1#-x2#)^2+(y1#-y2#)^2
ENDFUNCTION d#
function dist(x1#,y1#,z1#,x2#,y2#,z2#)
d# = sqrt((x1#-x2#)^2+(y1#-y2#)^2+(z1#-z2#)^2)
ENDFUNCTION d#
if upkey() then inc rigidity#,0.0005
if downkey() then dec rigidity#,0.0005
if leftkey() then inc gravity#,0.0000005
if rightkey() then dec gravity#,0.0000005
a2text id1,0,0,"RIG : "+str$(rigidity#)+" GRA : "+str$(gravity#)+" LIN : "+str$(lineforce#),rgb(255,255,255)
remstart
sync on : sync rate 60 : a =80 : b =80: var# = 1
dim x#(a,b) : dim y#(a,b) : dim z#(a,b) dim v(a,b) : dim m#(a,b) : dim o(a,b)
for i = 1 to a : : for j = 1 to b : x#(i,j) = i*var# : y#(i,j) = j*var# : m#(i,j) = 5 : v(i,j) = createvector() : o(i,j) = find free object() : make object plane o(i,j),1,1 : hide object o(i,j) : NEXT : next
F1 = createvector() : F2 = createvector() : F3 = createvector() : F4 = createvector() : G = createvector()
basefriction# = 0.9991 : lineforce# = 0.1 : gravity# = -0.005 : color backdrop rgb(0,0,0)
do : if selected = 0 then zrotate camera wrapvalue(camera angle z()+mousemovex()) : xrotate camera wrapvalue(camera angle x()+mousemovey()) : if keystate(17) = 1 then move camera 1 : if keystate(31) = 1 then move camera -1
if mouseclick() = 0 then selected = 0
for i = 1 to a : x#(i,1) = i : y#(i,1) = 1 : z#(i,1) = 0 : next : for j = 1 to b : x#(1,j) = 1 : y#(1,j) = j : z#(1,j) = 0 : next : for i = 1 to a : x#(i,b) = i : y#(i,b) = b : z#(i,b) = 0 : next : for j = 1 to b : x#(a,j) = a : y#(a,j) = j : z#(a,j) = 0 : next : if spacekey() then friction# = 0 else friction# = basefriction#
for i = 2 to a-1 : for j = 2 to b-1 : set vector3 G,0,0,gravity#*m#(i,j): set vector3 F1,x#(i-1,j)-x#(i,j),y#(i-1,j)-y#(i,j),z#(i-1,j)-z#(i,j) : set vector3 F2,x#(i+1,j)-x#(i,j),y#(i+1,j)-y#(i,j),z#(i+1,j)-z#(i,j) :set vector3 F3,x#(i,j-1)-x#(i,j),y#(i,j-1)-y#(i,j),z#(i,j-1)-z#(i,j) : set vector3 F4,x#(i,j+1)-x#(i,j),y#(i,j+1)-y#(i,j),z#(i,j+1)-z#(i,j)
add vector3 F1,F1,F3 : add vector3 F1,F1,F2 : add vector3 F1,F1,F4 : add vector3 F1,F1,G : multiply vector3 F1,lineforce# : add vector3 v(i,j),v(i,j),F1 : multiply vector3 v(i,j),friction# : NEXT : next
maxz# = -1000 : minz# = 1000 : for i = 1 to a : for j = 1 to b : x#(i,j) = x#(i,j)+x vector3(v(i,j)) : y#(i,j) = y#(i,j)+y vector3(v(i,j)) : z#(i,j) = z#(i,j)+z vector3(v(i,j)) : maxz# = max(z#(i,j),maxz#) : minz# = min(minz#,z#(i,j)) : position object o(i,j),x#(i,j),y#(i,j),z#(i,j)
if selected = o(i,j) then z#(i,j) = z#(i,j)+mousemovey() : set vector3 v(i,j),0,0,0
if button(o(i,j)) = 2 and selected = 0 then selected = o(i,j) : m#(i,j) = 5
if button(o(i,j)) = 3 and selected = 0 then m#(i,j) = 100
NEXT : next : for i = 2 to a-1 : for j = 2 to b-1 : zv# = (3*(z#(i,j)-minz#))/(maxz#-minz#) : d3d_line3d x#(i,j),y#(i,j),z#(i,j),x#(i-1,j),y#(i-1,j),z#(i-1,j),rgb(20*zv#,70*zv#,200),1 : d3d_line3d x#(i,j),y#(i,j),z#(i,j),x#(i,j-1),y#(i,j-1),z#(i,j-1),rgb(20*zv#,70*zv#,200),1 : NEXT : next : sync : loop
function createvector() : num = find free vector() : null = make vector3(num) :
endfunction num
function button(obj) : if ((object screen x(obj)-mousex())^2+(object screen y(obj)-mousey())^2) < 200 then selected = mouseclick()+1
endfunction selected
remend
use this one if you have a high end computer and the d3dplugin