INPUT "Fragments"; frag INPUT "Max Fireworks in sky"; mfw INPUT "Explosion length (20 aprox. 1 sec)"; exln ct = 15 DIM x(mfw, frag), y(mfw, frag), xd(mfw, frag), yd(mfw, frag), fr(mfw), c(mfw), cnt(mfw), wt(mfw), ty%(mfw), p%(16004) SCREEN 7, 0, 0, 0 CLS SCREEN 7, 0, 1, 2 PALETTE 13, 0 gravity = 1 FOR a = 1 TO mfw: xd(a, 1) = -100: fr(a) = 1: NEXT WHILE a$ = "" a$ = INKEY$ PCOPY 0, 1 IF RND * 40 > 39 THEN ct = RND * 7 + 8 WHILE TIMER < t + .05: WEND t = TIMER FOR a = 1 TO mfw cnt(a) = cnt(a) - 1 IF cnt(a) < 0 THEN cnt(a) = 0 wt(a) = wt(a) - 1 IF wt(a) < 0 THEN wt(a) = 0 IF wt(a) > 1 THEN GOTO nono FOR b = 1 TO fr(a) GOSUB fworks NEXT nono: NEXT PCOPY 1, 2 WEND fworks: IF ty%(a) = 0 THEN GOSUB act1 ON ty%(a) GOSUB act1, act2, act3 IF y(a, b) < 0 OR y(a, b) > 200 THEN GOSUB nstat IF cnt(a) = 1 THEN wt(a) = INT(RND * 100) IF wt(a) = 1 THEN GOSUB nstat IF yd(a, b) > RND AND b = 1 AND cnt(a) = 0 THEN GOSUB explotion IF ty%(a) = 1 AND RND > .5 THEN RETURN IF POINT(x(a, b), y(a, b)) <> 0 AND POINT(x(a, b), y(a, b)) <> 15 AND POINT(x(a, b), y(a, b)) <> 1 THEN RETURN IF cnt(a) > exln - 5 THEN CIRCLE (x(a, b), y(a, b)), 1, c(a) IF cnt(a) > 1 AND cnt(a) < 6 THEN PSET (x(a, b), y(a, b)), c(a) AND 7 ELSE PSET (x(a, b), y(a, b)), c(a) RETURN act1: y(a, b) = y(a, b) + yd(a, b) yd(a, b) = yd(a, b) + (gravity / 3) x(a, b) = x(a, b) + xd(a, b) RETURN act2: y(a, b) = y(a, b) + (yd(a, b) * 2) yd(a, b) = yd(a, b) + (gravity / 3) x(a, b) = x(a, b) + RND * 10 - 5 RETURN act3: y(a, b) = y(a, b) + RND * 10 - 5 yd(a, b) = yd(a, b) + (gravity / 3) x(a, b) = x(a, b) + RND * 10 - 5 RETURN nstat: x(a, 1) = RND * 319 y(a, 1) = 199 ty%(a) = 0 yd(a, 1) = -(RND * 4 + 6) xd(a, 1) = RND * 2 - 1 c(a) = ct fr(a) = 1 RETURN explotion: fr(a) = frag ty%(a) = RND * 4 IF RND > .4 THEN ty%(a) = 0 cnt(a) = exln FOR d = 1 TO frag x(a, d) = x(a, 1) y(a, d) = y(a, 1) xd(a, d) = RND * 6 - 3 yd(a, d) = RND * 6 - 3 NEXT RETURN