Nice one! You probably figured out that the damping value is critical - a touch to little and the whole thing explodes - too heavy and it's more like mud. You can spend ages testing different values until you get it right. This bit of code I came up with a while ago attempted to solve the problem through self regulatory damping - ie. the damping automatically finds the optimum value, and continually re-adjusts itself to keep the waves from dying or exploding. You have to watch it for a minute or so to see what it's doing:
`*** Cloth Physics by Ric ***
sync on
sync rate 40
autocam off
position camera 0,0,-150
hide mouse
color backdrop rgb(0,0,255)
`red texture
ink rgb(255,0,0),0
box 0,0,1,1
get image 1,0,0,1,1
`white texture
ink rgb(255,255,255),0
box 0,0,1,1
get image 2,0,0,1,1
`make flag
make object box 1,100,15,1
texture object 1,1
make object box 2,15,100,1
texture object 2,1
make object box 3,100,25,1
position object 3,0,0,.1
texture object 3,2
make object box 4,25,100,1
position object 4,0,0,.1
texture object 4,2
make object box 5,150,15,1
zrotate object 5,-45
position object 5,0,0,1
texture object 5,2
make object box 6,150,15,1
zrotate object 6,45
position object 6,0,0,1
texture object 6,2
make object box 7,150,5,1
zrotate object 7,45
position object 7,0,0,.5
texture object 7,1
make object box 8,150,5,1
zrotate object 8,-45
position object 8,0,0,.5
texture object 8,1
for ob=1 to 8
set object light ob,0
next ob
sync
`grab flag image
get image 3,screen width()/2-130,screen height()/2-130,screen width()/2+130,screen height()/2+130
`tidy up
for ob=1 to 8
delete object ob
next ob
`set initial physics variables
omega#=8
amp#=2.0
rows=50
columns=50
elasticity#=0.2
a=5
b=5
damping#=0.7
`set camera and lighting
position camera 70,55,0
point camera rows/2,0,columns/2
hide light 0
set ambient light 0
make light 1
position light 1,10,10,10
color backdrop 0
num=rows*columns
dim obnum(rows+1,columns+1)
dim v#(rows,columns) `set velocity array
`make matrix
make matrix 1,rows,columns,rows,columns
`give every matrix tile an x,z coordinate
for x=1 to rows
for z=1 to columns
obnum(x,z)=ob
ob=ob+1
next z
next x
`texture matrix
prepare matrix texture 1,3,rows,columns
tile=1
for x=rows-1 to 0 step -1
for z=0 to columns-1
set matrix tile 1,z,x,tile
inc tile
next z
next x
do
`oscillate wave generator point
y#=amp#*sin(theta#)
theta#=theta#+omega#
set matrix height 1,rows-a,b,y#
`apply spring physics to neighbouring matrix tiles
for x=0 to rows
for z=5 to columns
if x<rows
distxp1#=get matrix height(1,x+1,z)-get matrix height (1,x,z)
endif
if x>1
distxm1#=get matrix height(1,x-1,z)-get matrix height (1,x,z)
endif
if z<columns
distzp1#=get matrix height(1,x,z+1)-get matrix height (1,x,z)
endif
if z>1
distzm1#=get matrix height(1,x,z-1)-get matrix height (1,x,z)
endif
vectorsum#=distxp1#+distxm1#+distzp1#+distzm1#
a#=vectorsum#*elasticity#
v#(obnum(x,z))=v#(obnum(x,z))+a#
v#(obnum(x,z))=v#(obnum(x,z))*damping#
set matrix height 1,x,z,get matrix height(1,x,z)+v#(obnum(x,z))
`limit maximum amplitude
if get matrix height(1,x,z)>amp#*2 then set matrix height 1,x,z,amp#*2
if get matrix height(1,x,z)<-amp#*2 then set matrix height 1,x,z,-amp#*2
next z
next x
update matrix 1
`apply self regulating damping
if get matrix height (1,rows/4,columns/4)>amp#/2 or get matrix height (1,rows/4,columns/4)<-amp#/2
if damping#>0.6 then dec damping#,0.0008
else
if damping#<0.72 then inc damping#,0.0005
endif
text 0,40,"damping: "+str$(damping#)
sync
loop
p.s. sorry for hijacking your thread again!