I considered this earlier, but never got around to trying it.
I had a mess with your code, but failed. In the pursuit of the answer, here's what I thought/found...
PHY SET MATERIAL STATIC/DYNAMIC FRICTION
Maybe you need these to make sure the spheres react properly to the collision
PHY SET SKIN WIDTH
I set this to 0.0001, 5 times smaller than the default. The theory here was that for this to work, the balls must be well and truly touching.
MATERIAL - must be like steel! Not sure of the settings.
I changed the MakePendulum() routine, and added an extra value for the position of the top of the "strings". I wondered if tapering them in towards the middle would help. It didn't work, but it did give different results. Now, all 4 balls move together when hit. Not the desired result, but maybe it holds some clues on how to acheive this.
phy start
sync on
sync rate 60
randomize timer()
color backdrop 0
AUTOMATIC CAMERA COLLISION 0, .1, 1
phy set gravity 0,-9.8,0
SET CAMERA RANGE 0,.1,100
make light 1
position light 1, -1, 20, -1
rem set ambient light 60
phy set skin width 0.001
global NoLossMat = 1
Phy Make Material NoLossMat, "SupperBall"
phy set material restitution NoLossMat, 1.0
`phy set material dynamic friction NoLossMat, 10.0
phy build material NoLossMat
Global Floor1 = 1
make object box Floor1, 5,.2,5
Position object Floor1, 0,-.1,0
rem Texture Object Floor1,2
color object Floor1, RGB(128,64,64)
phy make rigid body static box Floor1
Global LeftSupport1 = 2
make object box LeftSupport1, .05,.5,2.0
Position object LeftSupport1, -0.2,.25,0
rem Texture Object LeftSupport1,2
phy make rigid body static box LeftSupport1
ghost object on LeftSupport1
Hide Object Leftsupport1
Global np = 5 rem number of pendelums
`For i = 1 to Np
` MakePendelum(100*i,-.50+(i*.1))
`next i
MakePendulum(100, -0.4, -0.39)
MakePendulum(200, -0.3, -0.295)
MakePendulum(300, -0.2, -0.2)
MakePendulum(400, -0.1, -0.105)
MakePendulum(500, -0.0, -0.01)
position camera 0, 2,.6,-.1
Point camera 0, 0,0,0
SpriteString("Use arrow keys to position camera :",10,50,24,1,RGB(255,255,0))
SpriteString("Use Shift to Raise camera :",10,75,24,2,RGB(255,255,0))
SpriteString("Use Ctrl To Lower camera :",10,100,24,3,RGB(255,255,0))
SpriteString("Use Left and right mouse buttons to move pendelums :",10,125,24,4,RGB(255,255,0))
do
control camera using arrowkeys 0,.02,1
if shiftkey() then POSITION CAMERA 0, camera position x (0),Camera Position Y()+.02, Camera position Z()
if controlkey() then POSITION CAMERA 0, camera position x (0),Camera Position Y()-.02, Camera position Z()
if mouseclick()= 1 then phy add rigid body force 100, 0, 0, -.06, 0
if mouseclick()= 2 then phy add rigid body force 100*NP, 0, 0, .06, 0
text 10,10, "FPS : " + Str$(Screen fps())
phy update
sync
loop
Function MakePendulum(ID,ZP#, ZP2#)
Sphere1 = ID
Make object sphere Sphere1, .1,16,16
Position Object Sphere1, 0,.3,0+ZP#
color object Sphere1, RGB(Rnd(255),0,0)
phy make rigid body dynamic sphere Sphere1, NoLossMat
rem phy set rigid body mass Sphere1, .01
Stem1 = ID+1
Make object cylinder Stem1, .02
Scale object Stem1, 100,1600,100
Position Object Stem1, 0,.5,0+ZP2#
Rotate object Stem1, 0,90,0
color object Stem1, RGB(0,0,rnd(200))
phy make rigid body dynamic capsule Stem1,NoLossMat
CrossMember1 = ID+2
Make object cylinder CrossMember1, .02
Scale object CrossMember1, 100,2400,100
Position Object CrossMember1, 0,.65,0+ZP2#
Rotate Object CrossMember1, 0,0,90
color object CrossMember1, RGB(0,rnd(255),0)
phy make rigid body dynamic capsule CrossMember1,NoLossMat
phy make fixed joint ID, Sphere1, Stem1
phy make fixed joint ID+1, Stem1, CrossMember1
phy make revolute joint ID+2, CrossMember1,LeftSupport1,1,0,0, 0,.65,0+ZP2#
phy build revolute joint ID+2
Endfunction
Function SpriteString(MyStr$,Xpos,Ypos,TextSize,ImgNum,mycolor)
set text size TextSize
Width = text width (MyStr$)+10
Height = Text Height (MyStr$)+10
ink mycolor,0
CREATE BITMAP 1,640,480
set current bitmap 1
text 1,1,(MyStr$)
get image ImgNum,0,0,Width,Height
delete bitmap 1
set current bitmap 0
sprite ImgNum,Xpos,Ypos,ImgNum
set sprite priority ImgNum,0
size sprite ImgNum,Width, Height
Endfunction