DECLARE SUB startup () DECLARE SUB mainrocket () DECLARE SUB minirockets () DECLARE SUB restart () DECLARE SUB drawcity () DIM SHARED x(50), y(50) DIM SHARED xmom(50), ymom(50) DIM SHARED x, y DIM SHARED xmom, ymom DIM SHARED redbits, reddelay DIM SHARED wibble startup restart drawcity DO: key$ = INKEY$ mainrocket minirockets restart drawcity LOOP UNTIL key$ <> "" SUB drawcity z = 256 PALETTE 238, 5 + z * (5 + (z * 5)) PALETTE 239, 5 * z * z PALETTE 240, 40 + z * (40 + (z * 40)) PALETTE 241, 30 + z * 30 PAINT (0, 0), 239 FOR m = 1 TO 50 IF wibble = 0 THEN PSET (RND * 320, RND * 40 + RND * 40 + RND * 40 + RND * 40 + RND * 10 + RND * 10 + RND * 10 + RND * 10 + RND * 10 + RND * 10 - 40), 240 NEXT m FOR m = 1 TO 50 IF wibble = 0 THEN PSET (RND * 320, RND * 40 + RND * 40 + RND * 40 + RND * 40 - 40), 240 NEXT m wibble = 1 CIRCLE (50, 30), 20, 240, .5, 4 CIRCLE (55, 35), 20, 240, .8, 3.5 PAINT (31, 30), 240 PSET (65, 20), 240 PSET (64, 19), 240 PSET (63, 19), 240 LINE (0, 190)-(10, 180), 238 LINE (10, 180)-(20, 190), 238 LINE (20, 190)-(40, 190), 238 LINE (40, 190)-(40, 200), 238 LINE (60, 200)-(60, 190), 238 LINE (60, 190)-(70, 180), 238 LINE (70, 180)-(80, 190), 238 LINE (80, 190)-(80, 200), 238 PAINT (1, 199), 238 PAINT (70, 199), 238 PSET (5, 190), 241: PSET (6, 190), 241: PSET (14, 190), 241: PSET (15, 190), 241 PSET (5, 195), 241: PSET (6, 195), 241: PSET (14, 195), 241: PSET (15, 195), 241 LINE (100, 200)-(100, 190), 238 LINE (100, 190)-(110, 180), 238 LINE (110, 180)-(120, 190), 238 LINE (120, 190)-(140, 190), 238 LINE (135, 190)-(145, 180), 238 LINE (145, 180)-(155, 190), 238 LINE (155, 190)-(155, 200), 238 PAINT (101, 199), 238 PAINT (150, 199), 238 PSET (105, 190), 241: PSET (106, 190), 241: PSET (150, 195), 241: PSET (151, 195), 241 LINE (200, 200)-(200, 190), 238 LINE (200, 190)-(210, 180), 238 LINE (210, 180)-(220, 190), 238 LINE (220, 190)-(240, 190), 238 LINE (240, 190)-(240, 200), 238 LINE (260, 200)-(260, 190), 238 LINE (260, 190)-(270, 180), 238 LINE (270, 180)-(280, 190), 238 LINE (280, 190)-(280, 200), 238 PAINT (201, 199), 238 PAINT (270, 199), 238 PSET (205, 190), 241: PSET (206, 190), 241: PSET (214, 190), 241: PSET (215, 190), 241 PSET (265, 190), 241: PSET (266, 190), 241: PSET (274, 195), 241: PSET (275, 195), 241 END SUB SUB mainrocket pal = 256 FOR time = 1 TO 35 + (10 * RND) FOR dl = 1 TO 0: NEXT dl PSET (x, y), colour x = x + xmom y = y + ymom ymom = (ymom + .2) / 1.01 xmom = xmom / 1.01 colour = POINT(x, y) PSET (x, y), 250 IF time < 30 THEN SOUND (600 - time * 4), (800 - time * 4) / 500 bri& = 63 - time * 2 IF bri& < 0 THEN bri& = 0 PALETTE 250, bri& + (pal * bri&) + (pal * pal * bri&) NEXT time PSET (x, y), 0 END SUB SUB minirockets FOR m = 1 TO redbits x(m) = x y(m) = y NEXT m colour = INT(RND * 4) * 31 colour2 = INT(RND * 4) * 31 work = INT(RND * 4) + 1 SOUND 50, 1 SELECT CASE 1 'or change select case 1 with select case work CASE 1 'normal z = 256 FOR time = 1 TO reddelay FOR m = 1 TO redbits IF POINT(x(m), y(m)) = colour + time - 1 THEN PSET (x(m), y(m)), 239 x(m) = x(m) + xmom(m) y(m) = y(m) + ymom(m) ymom(m) = (ymom(m) + .2 + (RND - .5) / 10) / 1.01 xmom(m) = (xmom(m) / 1.01) + (RND - .5) / 10 IF time <> reddelay AND POINT(x(m), y(m)) = 239 THEN PSET (x(m), y(m)), colour + time NEXT m bright = INT((31 - time) / 2 + 5) PALETTE 238, bright + (z * (bright + (bright * z))) PALETTE 239, INT(bright / 2) * z * z NEXT time CASE 2 'explode z = 256 FOR m = 1 TO redbits ymom(m) = ymom(m) + ymom xmom(m) = xmom(m) + xmom NEXT m FOR time = 1 TO reddelay FOR m = 1 TO redbits IF POINT(x(m), y(m)) = colour + time - 1 THEN PSET (x(m), y(m)), 239 x(m) = x(m) + xmom(m) y(m) = y(m) + ymom(m) ymom(m) = (ymom(m) + .2 + (RND - .5) / 10) / 1.01 xmom(m) = (xmom(m) / 1.01) + (RND - .5) / 10 IF time <> reddelay AND POINT(x(m), y(m)) = 239 THEN PSET (x(m), y(m)), colour + time NEXT m bright = INT((31 - time) / 2 + 5) PALETTE 238, bright + (z * (bright + (bright * z))) PALETTE 239, INT(bright / 2) * z * z NEXT time CASE 3 'multicoloured z = 256 FOR time = 1 TO reddelay FOR m = 1 TO redbits IF POINT(x(m), y(m)) = colour + time - 1 OR POINT(x(m), y(m)) = colour2 + time - 1 THEN PSET (x(m), y(m)), 239 x(m) = x(m) + xmom(m) y(m) = y(m) + ymom(m) ymom(m) = (ymom(m) + .2 + (RND - .5) / 10) / 1.01 xmom(m) = (xmom(m) / 1.01) + (RND - .5) / 10 IF time <> reddelay AND POINT(x(m), y(m)) = 239 AND m > 10 THEN PSET (x(m), y(m)), colour + time IF time <> reddelay AND POINT(x(m), y(m)) = 239 AND m <= 10 THEN PSET (x(m), y(m)), colour2 + time NEXT m bright = INT((31 - time) / 2 + 5) PALETTE 238, bright + (z * (bright + (bright * z))) PALETTE 239, INT(bright / 2) * z * z NEXT time CASE 4 'drop z = 256 FOR m = 1 TO redbits xmom(m) = xmom(m) / 4 NEXT m FOR time = 1 TO reddelay FOR m = 1 TO redbits IF POINT(x(m), y(m)) = colour + time - 1 THEN PSET (x(m), y(m)), 239 x(m) = x(m) + xmom(m) y(m) = y(m) + ymom(m) ymom(m) = (ymom(m) + .2 + (RND - .5) / 10) / 1.01 xmom(m) = (xmom(m) / 1.01) + (RND - .5) / 10 IF time <> reddelay AND POINT(x(m), y(m)) = 239 THEN PSET (x(m), y(m)), colour + time NEXT m bright = INT((31 - time) / 2 + 5) PALETTE 238, bright + (z * (bright + (bright * z))) PALETTE 239, INT(bright / 2) * z * z NEXT time END SELECT END SUB SUB restart x = 160 y = 200 xmom = (4 * RND) - 2 ymom = -6.5 - (2 * RND) FOR m = 1 TO redbits xmom(m) = 1 * COS(m) ymom(m) = 1 * SIN(m) NEXT m END SUB SUB startup RANDOMIZE TIMER SCREEN 13 '320x200 x = 160: y = 200 xmom = (4 * RND) - 2 ymom = -6.5 - (4 * RND) redbits = 20 reddelay = 31 z = 256 FOR m = 1 TO reddelay PALETTE m, 63 - (m * 2) NEXT m FOR m = 1 TO reddelay PALETTE m + 31, z * (63 - (m * 2)) NEXT m FOR m = 1 TO reddelay PALETTE m + 62, z * z * (63 - (m * 2)) NEXT m FOR m = 1 TO reddelay PALETTE m + 93, 63 - (m * 2) + (z * (63 - (m * 2))) NEXT m END SUB