DIM x(500), y(500), xd(500), yd(500), ty(500), dt(500), dt2(500), cld%(4000) RANDOMIZE TIMER sm = 7 CLS SCREEN sm, 0, 0, 0 q = 20 grv = 1 FOR a = 0 TO 319 q = q + RND - .5 IF q < 15 THEN q = 15 IF q > 30 THEN q = 30 PSET (a, q), 3 NEXT PAINT (0, 0), 3 GET (0, 0)-(319, 30), cld% SCREEN sm, 0, 1, 2 ty(1) = 1 fcl(1) = 3 fcl(2) = 4 fcl(3) = 13 fcl(4) = 14 top: a$ = "" WHILE a$ = "" IF TIMER > 68400 THEN skyln = 1: grpl = 6 ELSE skyln = 3 IF TIMER > 68400 AND ntln = 0 THEN ntln = 1: GOSUB ntplte IF TIMER > 28800 AND TIMER < 68400 THEN skyln = 11: grpl = 6 IF TIMER > 28800 AND TIMER < 68400 AND ntln = 1 THEN ntln = 0: PALETTE wsp = wsp + RND - .5 IF wsp < -2 THEN wsp = -2 IF wsp > 2 THEN wsp = 2 rnl = rnl + (RND * .2) - .1 IF rnl < -.5 THEN rnl = -.5 IF rnl > 8 THEN rnl = 8 IF rnl > 1.5 AND rain = 0 THEN rain = 1: IF RND * 5 > 4 THEN storm = 1 ELSE storm = 0 IF rnl < 1.5 AND rain = 1 THEN rain = 0 sn = sn + (RND * .2) - .1 IF sn < -.5 THEN sn = -.5 IF sn > 3 THEN sn = 3 IF RND * 400 > 399 AND rnl > 1.5 THEN sn = 3: rnl = 0 IF RND * 400 > 399 AND sn > 1.5 THEN sn = 0: rnl = 3 a$ = INKEY$ IF cod = 0 AND rnl > 2 THEN cod = 1: PALETTE 3, 8 IF cod = 1 AND rnl < 2 THEN cod = 0: PALETTE 3, skyln IF sod = 0 AND sn > 2 THEN sod = 1: PALETTE 3, 15: IF RND * 6 > 5 THEN blizzard = 2 IF sod = 1 AND sn < 2 THEN sod = 0: PALETTE 3, skyln: IF blizzard = 1 THEN blizzad = 0: PALETTE IF blizzard = 2 THEN blizzard = 1: GOSUB blizpalette PCOPY 0, 1 FOR a = 1 TO 500 ON ty(a) GOSUB blaher, rain, snow, weed, fire, buggie, dirt NEXT PCOPY 1, 2 WEND IF a$ = "R" OR a$ = "r" THEN rnl = 8: sn = 0: GOTO top IF a$ = "S" OR a$ = "s" THEN sn = 3: rnl = 0: GOTO top IF a$ = "C" OR a$ = "c" THEN sn = 0: rnl = 0: GOTO top IF a$ = "W" OR a$ = "w" THEN GOSUB mweed: GOTO top IF a$ = "L" OR a$ = "l" THEN storm = 1: GOTO top IF a$ = "G" OR a$ = "g" THEN IF grpl = 0 THEN grpl = 6 ELSE grpl = 0 IF a$ = "G" OR a$ = "g" THEN PALETTE 0, grpl: GOTO top IF a$ = "B" OR a$ = "b" THEN blizzard = 1: GOTO top IF a$ = "N" OR a$ = "n" THEN IF grv = 1 THEN grv = -1 ELSE grv = 1 IF a$ = "N" OR a$ = "n" THEN GOTO top SYSTEM blaher: IF RND * rnl > 1 THEN GOSUB mrain IF RND * sn > 1 THEN GOSUB msnow IF RND * rnl > 2 AND RND * 5 > 4 AND storm = 1 THEN PALETTE 0, 14: PALETTE 3, 15: q = RND * 319: GOSUB lnng: PALETTE 0, grpl: cod = 0 IF RND * 500 > 499 THEN GOSUB mweed IF rnl < 1 AND sn < 1 THEN GOSUB mweed IF rnl < 1 AND sn < 1 AND RND * 10 > 9 THEN GOSUB mbuggie IF sn < 1 AND RND * 500 > 499 THEN GOSUB mbuggie: PALETTE 0, grpl IF grv = -1 THEN GOSUB mdirt RETURN mbuggie: q = RND * 498 + 2 ty(q) = 6 x(q) = RND * 319 y(q) = RND * 199 yd(q) = RND * 4 + 2 RETURN mrain: q = RND * 498 + 2 ty(q) = 2 x(q) = RND * 319 y(q) = 0 yd(q) = RND * 3 dt(q) = 199 - ((3 - yd(q)) * 50) RETURN msnow: q = RND * 498 + 2 ty(q) = 3 x(q) = RND * 319 y(q) = 0 yd(q) = RND * 3 IF blizzard = 1 THEN yd(q) = RND + 2 dt(q) = 199 - ((3 - yd(q)) * 50) RETURN mweed: q = RND * 498 + 2 ty(q) = 4 dt(q) = RND * 3 + 4 x(q) = RND * 319 y(q) = RND * 199 IF POINT(x(q), y(q)) = 3 THEN ty(q) = 0 yd(q) = y(q) IF RND > .5 THEN dt2(q) = 2 ELSE dt2(q) = 10 RETURN mfire: SCREEN sm, 0, 0, 2 q = RND * 498 + 2 ty(q) = 5 x = RND * 319 y = RND * 319 CIRCLE (x, y), 2, 12 PAINT (x, y), 12 SCREEN sm, 0, 1, 2 RETURN mdirt: q = RND * 498 + 2 ty(q) = 7 x(q) = RND * 319 y(q) = RND * 199 IF POINT(x(q), y(q)) = 3 THEN ty(q) = 0: RETURN yd(q) = y(q) dt(q) = POINT(x(q), y(q)) SCREEN sm, 0, 0, 2 PSET (x(q), y(q)), 0 SCREEN sm, 0, 1, 2 RETURN rain: x(a) = x(a) + (wsp * (yd(a) / 3)) y(a) = y(a) + ((yd(a) * 2) + (rnl * .8)) * grv IF y(a) > dt(a) THEN ty(a) = 0: GOSUB splash IF rnl < 2 OR yd(a) < 2 THEN PSET (x(a), y(a)), 9 ELSE LINE (x(a), y(a))-(x(a) + 1, y(a) + 1), 9, B IF yd(a) < 1 THEN PSET (x(a), y(a)), 1 RETURN splash: IF yd(a) > 2 THEN SOUND 37, .1 CIRCLE (x(a), y(a)), yd(a), 3 SCREEN sm, 0, 0, 2 LINE (x(a) - yd(a), y(a) - yd(a))-(x(a) + yd(a), y(a) + yd(a)), 0, BF SCREEN sm, 0, 1, 2 RETURN lnng: w = 0 q = RND * 319 FOR B = 1 TO 5 qq = q: ww = w q = q + RND * 6 - 3 w = w + RND * 45 LINE (qq, ww)-(q, w), 13 NEXT IF w < 40 OR grv = -1 THEN RETURN SCREEN sm, 0, 0, 2 LINE (q - 10, w - 10)-(q + 10, w + 10), 0, BF SCREEN sm, 0, 1, 2 RETURN snow: x(a) = x(a) + (wsp * (yd(a) / 3)) y(a) = y(a) + ((yd(a) * 2) / 2) * grv IF y(a) > dt(a) THEN ty(a) = 0: GOSUB speck IF yd(a) < 1 THEN clor = 8: GOSUB splat ELSE clor = 15: GOSUB splat RETURN speck: SCREEN sm, 0, 0, 2 IF y(a) < 30 THEN SCREEN sm, 0, 1, 2: RETURN IF yd(a) > 2.5 THEN clor = 15: GOSUB splat IF yd(a) > 1 AND yd(a) < 2.5 THEN clor = 7: GOSUB splat IF yd(a) > 0 AND yd(a) < 1 THEN clor = 8: GOSUB splat SCREEN sm, 0, 1, 2 RETURN weed: IF sn > 1 THEN RETURN SCREEN sm, 0, 0, 2 y(a) = y(a) - (yd(a) / 200) x(a) = x(a) + ((RND * .2) - .1) dt(a) = dt(a) - 1: IF dt(a) < 0 THEN dt(a) = 0: ty(a) = 0: IF RND * 2 > 1 AND grv = 1 THEN q = RND * 3 + 1: CIRCLE (x(a), y(a)), yd(a) / 100, fcl(q): PAINT (x(a), y(a)), 14, fcl(q) IF grv = 1 THEN PSET (x(a), y(a)), dt2(a) ELSE PSET (x(a), y(a)), 14 SCREEN sm, 0, 1, 2 RETURN fire: IF sn > 1 OR rnl > 1 THEN RETURN SCREEN sm, 0, 0, 2 ofire: x = RND * 319 y = RND * 199 IF POINT(x, y) = 12 THEN IF y > 120 AND RND > .8 THEN CIRCLE (x, y), 2, 12: PAINT (x, y), 12 ELSE PSET (x, y), 12: RETURN IF RND > .3 THEN GOTO ofire SCREEN sm, 0, 1, 2 RETURN splat: FOR B = 0 TO yd(a) PSET (x(a) + RND * yd(a) - (yd(a) / 2), y(a) + RND * yd(a) - (yd(a) / 2)), clor NEXT RETURN buggie: xd(a) = xd(a) + RND * 2 - 1 yd(a) = yd(a) + RND * 2 - 1 IF xd(a) < -2 THEN xd(a) = -2 IF xd(a) > 2 THEN xd(a) = 2 IF yd(a) < -2 THEN yd(a) = -2 IF yd(a) > 2 THEN yd(a) = 2 IF sn > 1 OR rnl > 1 THEN yd(a) = -4 x(a) = x(a) + xd(a) y(a) = y(a) + yd(a) * grv IF x(a) < -10 OR x(a) > 329 OR y(a) < -10 OR y(a) > 219 THEN ty(a) = 0 PSET (x(a), y(a)), 13 RETURN dirt: x(a) = x(a) + wsp * .05 y(a) = y(a) + ((yd(a) / 100) * grv) * 4 IF grv = 1 THEN IF y(a) > yd(a) THEN ty(a) = 0 ELSE IF y(a) < 0 THEN ty(a) = 0 IF yd(a) < 100 THEN PSET (x(a), y(a)), dt(a) IF yd(a) > 100 THEN LINE (x(a), y(a))-(x(a) + 1, y(a) + 1), dt(a), B RETURN ntplte: FOR a = 0 TO 7 PALETTE a + 8, a NEXT RETURN blizpalette: FOR a = 0 TO 7: PALETTE a, 7: NEXT FOR a = 8 TO 15: PALETTE a, 15: NEXT PALETTE 3, 15 PALETTE 8, 3 RETURN