Fireworks

Getting close:
'fireworks.bas SmallBASIC 2015-07-13 MGA/B+
color 11,0:cls
bm=400:b1=bm-1
dim bx(bm),by(bm),bdx(bm),bdy(bm),bc(bm)
while 1
rndcycle=rnd*20
loopcount=0
rx=.75*xmax*rnd+.125*xmax
ry=.75*ymax*rnd+.125*ymax
repeat
cls
for i=1 to 20
nxt=rnd*bm
bx(nxt)=rx
by(nxt)=ry
bdx(nxt)=(rnd*31)-15
bdy(nxt)=(rnd*31)-15
rc=int(rnd*3)
if rc=0 then
bc(nxt)=12
elseif rc=1
bc(nxt)=9
else
bc(nxt)=15
endif
next
for i=0 to b1
if bdy(i) then
line bx(i),by(i),bx(i)+bdx(i),by(i)+bdy(i),bc(i)
circle bx(i)+bdx(i),by(i)+bdy(i),1.125,1,bc(i) filled
bx(i)=bx(i)+bdx(i)
by(i)=by(i)+bdy(i)
if bx(i)<0 or bx(i)>xmax or by(i)<0 or by(i)>ymax then bdy(i)=0
end if
next
showpage
delay 2
loopcount+=1
until loopcount>rndcycle
wend