Thanks Latch

. Although I only have 2 different objects, I'm still working on an upgrade entry.
Got it done.
Entry2:
`Ashingda27 - Falling Objects Reations
set display mode 640,480,16
sync on
sync rate 60
gosub Initialize
do
gosub Game
ink rgb(255,255,255),0
text 0,0,"FPS "+str$(screen fps())
copy bitmap 1,0
sync
cls
loop
Initialize:
randomize timer()
for lp = 0 to 8
c = 255/((lp/4.0)+1)
ink rgb(c,c,c),0
if lp = 8 then ink rgb(10,10,10),0
circle 8,8,lp
next lp
get image 1,0,0,17,17,1
for lp = 0 to 8
c = 255/((lp/4.0)+1)
c2 = c/3
ink rgb(c,c2,c2),0
if lp = 8 then ink rgb(10,10,10),0
circle 8,8,lp
next lp
get image 2,0,0,17,17,1
for lp = 0 to 8
c = 255/((lp/4.0)+1)
c2 = c/1.5
ink rgb(c2,c2,c),0
if lp = 8 then ink rgb(10,10,10),0
circle 8,8,lp
next lp
get image 3,0,0,17,17,1
for lp = 0 to 8
c = 255/((lp/4.0)+1)
c2 = c/1.5
ink rgb(c2,c,c2),0
if lp = 8 then ink rgb(10,10,10),0
circle 8,8,lp
next lp
get image 4,0,0,17,17,1
for lp = 8 to 0 step -1
c = 255/((lp/4.0)+1)
ink rgb(c,c/2,c/2),0
box 8-lp,0,8+lp,16
next lp
get image 200,0,0,16,16,1
for lp = 8 to 0 step -1
c = 255/((lp/4.0)+1)
ink rgb(c,c,c),0
box 8-lp,0,8+lp,16
next lp
get image 201,0,0,16,16,1
cls
ink rgb(255,255,255),0
for lp = 0 to 2
r = lp*8
line r,0,16-r,16
line 0,r,16,16-r
next lp
get image 400,0,0,16,16,1
MapX = 29
MapY = 19
dim Unit(MapX,MapY)
dim MaxBall(0)
m = 200
MaxBall(0) = m
dim Ball(m)
dim BallX(m)
dim BallY(m)
dim Act(m)
dim MoveX(m)
dim MoveY(m)
dim Smash(m)
dim Dr(m)
dim Tube(2)
dim TubeX(2)
dim TubeC(2)
TubeX(1) = (rnd(454)+16)/16
TubeX(2) = (rnd(454)+16)/16
ink rgb(240,200,180),0
box 0,0,15,15
ink rgb(70,50,40),0
box 1,1,15,15
ink rgb(140,100,80),0
box 1,1,14,14
get image 300,0,0,16,16,1
for lpy = 0 to MapY
for lpx = 0 to MapX
if lpx = 0 or lpx = MapX or lpy = MapY
Unit(lpx,lpy) = 300
endif
next lpx
next lpy
create bitmap 2,480,336
create bitmap 1,640,480
return
Game:
gosub GameHandle
gosub GameDisplay
return
GameHandle:
mx = mousex()
my = mousey()
mc = mouseclick()
for lp = 0 to 2
if lp = 0
TubeX(lp) = mx/16
else
if TubeC(lp) > 0
TubeC(lp) = TubeC(lp) - 1
else
TubeX(lp) = TubeX(lp) + (rnd(2)-1)
TubeC(lp) = rnd(50)
if rnd(25)/25 = 1 then TubeX(lp) = (rnd(454)+16)/16
endif
endif
if TubeX(lp) < 1 then TubeX(lp) = 1
if TubeX(lp) > MapX-1 then TubeX(lp) = MapX-1
next lp
if Spawn > 0
dec Spawn
else
Spawn = 8
if mc = 1
tx = TubeX(0)
CreateBall(tx,2)
endif
for lp = 1 to 2
select rnd(2)
case 0 : c = 1 : endcase
case 1 : c = 3 : endcase
case 2 : c = 4 : endcase
case default : c = 1 : endcase
endselect
tx = TubeX(lp)
CreateBall(tx,c)
next lp
endif
for lp = 1 to MaxBall(0)
if Ball(lp)
if Act(lp) = 0
if Ball(lp) = 1
MoveD(lp)
if rnd(1)
MoveL(lp)
MoveR(lp)
else
MoveR(lp)
MoveL(lp)
endif
endif
if Ball(lp) = 2
MoveD2(lp)
endif
if Ball(lp) = 3
MoveD(lp)
if Dr(lp)
MoveRU(lp)
MoveLU(lp)
else
MoveLU(lp)
MoveRU(lp)
endif
endif
if Ball(lp) = 4
MoveD(lp)
if Dr(lp)
MoveR4(lp)
MoveL4(lp)
else
MoveL4(lp)
MoveR4(lp)
endif
endif
endif
if Act(lp)
Act(lp) = Act(lp) - 2
endif
endif
next lp
return
GameDisplay:
gosub DisplayTerrain
gosub DisplayObjects
return
DisplayTerrain:
if TerrainFlag = 0
TerrainFlag = 1
set current bitmap 2
for lp = 1 to 336
lpm# = 1+(lp/100.0)
ink rgb(80/lpm#,100/lpm#,120/lpm#),0
box 0,336-(lp-1),479,336-(lp-1)
next lp
for lpy = 0 to MapY
for lpx = 0 to MapX
x = lpx*16
y = 16+lpy*16
if Unit(lpx,lpy) = 300
paste image Unit(lpx,lpy),x,y,1
endif
next lpx
next lpy
set current bitmap 1
endif
copy bitmap 2,0,0,479,335, 1,0,0,479,335
return
DisplayObjects:
for lp = 1 to MaxBall(0)
if Ball(lp)
x = BallX(lp)*16 - MoveX(lp)*Act(lp)-1
y = 15 + BallY(lp)*16 - MoveY(lp)*Act(lp)
paste image Ball(lp),x,y,1
if smash(lp)
r = 16-Act(lp)
circle x+8,y+24-r,r
endif
endif
next lp
for lp = 1 to MaxBall(0)
if Ball(lp)
x = BallX(lp)*16 - MoveX(lp)*Act(lp)-1
y = 15 + BallY(lp)*16 - MoveY(lp)*Act(lp)
if smash(lp)
r = 16-Act(lp)
c = 255/(1+r/10.0)
ink rgb(c,c,c),0
circle x+8,y+24-r,r
endif
endif
next lp
for lp = 1 to 2
x = TubeX(lp)
paste image 201,TubeX(lp)*16,0
paste image 201,TubeX(lp)*16,16
next lp
x = TubeX(0)
paste image 200,TubeX(0)*16,0
paste image 200,TubeX(0)*16,8
return
Function CreateBall(x,b)
if Unit(x,1) = 0
for lp = 1 to MaxBall(0)
if Ball(lp) = 0
Ball(lp) = b
if lp = MaxBall(0) then Ball(lp) = 2
BallX(lp) = x
BallY(lp) = 0
Unit(BallX(lp),BallY(lp)) = lp
MoveX(lp) = 0
MoveY(lp) = 0
Act(lp) = 0
Smash(lp) = 0
Dr(lp) = rnd(1)
lp = MaxBall(0)
endif
next lp
endif
EndFunction
Function MoveD(lp)
if Unit(BallX(lp),BallY(lp)+1) = 0
Act(lp) = 16
MoveX(lp) = 0 : MoveY(lp) = 1
Unit(BallX(lp),BallY(lp)) = 0
BallY(lp) = BallY(lp) + 1
Unit(BallX(lp),BallY(lp)) = lp
endif
EndFunction
Function MoveD2(lp)
if Unit(BallX(lp),BallY(lp)+1) < MaxBall(0)
Smash(lp) = 0
if Unit(BallX(lp),BallY(lp)+1) > 0
Ball(Unit(BallX(lp),BallY(lp)+1)) = 0
Smash(lp) = 1
endif
Act(lp) = 16
MoveX(lp) = 0 : MoveY(lp) = 1
Unit(BallX(lp),BallY(lp)) = 0
BallY(lp) = BallY(lp) + 1
Unit(BallX(lp),BallY(lp)) = lp
else
Ball(lp) = 0
Unit(BallX(lp),BallY(lp)) = 0
endif
EndFunction
Function MoveL(lp)
if Act(lp) = 0
if Unit(BallX(lp)-1,BallY(lp)+1) = 0
if Unit(BallX(lp)-1,BallY(lp)) = 0
Act(lp) = 16
MoveX(lp) = -1 : MoveY(lp) = 0
Unit(BallX(lp),BallY(lp)) = 0
BallX(lp) = BallX(lp) - 1
Unit(BallX(lp),BallY(lp)) = lp
endif
endif
endif
EndFunction
Function MoveR(lp)
if Act(lp) = 0
if Unit(BallX(lp)+1,BallY(lp)+1) = 0
if Unit(BallX(lp)+1,BallY(lp)) = 0
Act(lp) = 16
MoveX(lp) = 1 : MoveY(lp) = 0
Unit(BallX(lp),BallY(lp)) = 0
BallX(lp) = BallX(lp) + 1
Unit(BallX(lp),BallY(lp)) = lp
endif
endif
endif
EndFunction
Function MoveLU(lp)
if Act(lp) = 0
if BallY(lp) > 0
if Unit(BallX(lp)-1,BallY(lp)) = 0
if Unit(BallX(lp)-1,BallY(lp)-1) = 0
Act(lp) = 16
Dr(lp) = 0
MoveX(lp) = -1 : MoveY(lp) = -1
Unit(BallX(lp),BallY(lp)) = 0
BallX(lp) = BallX(lp) - 1
BallY(lp) = BallY(lp) - 1
Unit(BallX(lp),BallY(lp)) = lp
endif
endif
endif
endif
EndFunction
Function MoveRU(lp)
if Act(lp) = 0
if BallY(lp) > 0
if Unit(BallX(lp)+1,BallY(lp)) = 0
if Unit(BallX(lp)+1,BallY(lp)-1) = 0
Act(lp) = 16
Dr(lp) = 1
MoveX(lp) = 1 : MoveY(lp) = -1
Unit(BallX(lp),BallY(lp)) = 0
BallX(lp) = BallX(lp) + 1
BallY(lp) = BallY(lp) - 1
Unit(BallX(lp),BallY(lp)) = lp
endif
endif
endif
endif
EndFunction
Function MoveL4(lp)
if Act(lp) = 0
if Unit(BallX(lp)-1,BallY(lp)) = 0
Act(lp) = 16
Dr(lp) = 0
MoveX(lp) = -1 : MoveY(lp) = 0
Unit(BallX(lp),BallY(lp)) = 0
BallX(lp) = BallX(lp) - 1
Unit(BallX(lp),BallY(lp)) = lp
endif
endif
EndFunction
Function MoveR4(lp)
if Act(lp) = 0
if Unit(BallX(lp)+1,BallY(lp)) = 0
Dr(lp) = 1
Act(lp) = 16
MoveX(lp) = 1 : MoveY(lp) = 0
Unit(BallX(lp),BallY(lp)) = 0
BallX(lp) = BallX(lp) + 1
Unit(BallX(lp),BallY(lp)) = lp
endif
endif
EndFunction