'=========================================================================== ' Subject: ACID FLUX: SCREEN SAVER Date: 07-25-99 (12:02) ' Author: Steve Nunnally Code: QB, QBasic, PDS ' Origin: santa@tir.com Packet: DEMOS.ABC '=========================================================================== ' ' Acid Flux ' ' by Steve Nunnally, Acid Works Software ' ' ' This is a cool screen saver that uses the palette command to ' do nifty things. Press to quit. ' ' ' NOTE: there is a variable below called secs%, change it for the amount ' of time between each design to change ' DECLARE SUB NewPalette () DECLARE SUB NewPattern () DECLARE SUB TitleScreen () DECLARE SUB Center (strctr$) DECLARE SUB FigureLast () DECLARE SUB Fadeout () DECLARE SUB Fadein () DECLARE SUB SetItUp () DECLARE SUB Pat1 () DECLARE SUB Pat2 () DECLARE SUB Pat3 () DECLARE SUB Pat4 () DECLARE SUB Pat5 () DECLARE SUB Pat6 () DECLARE SUB Pat7 () DECLARE SUB Pat8 () DECLARE SUB Pat9 () DECLARE SUB Pat10 () DECLARE SUB Pat11 () DECLARE SUB Pat12 () DECLARE SUB Pat13 () DECLARE SUB Pat14 () DECLARE SUB Pat15 () DECLARE SUB Pat16 () CONST pi = 3.141592654# DIM SHARED palhold(0 TO 255, 1 TO 3) AS INTEGER DIM SHARED currentpal(1 TO 3) AS INTEGER DIM SHARED palettereach(1 TO 3) AS INTEGER DIM SHARED currentone AS INTEGER RANDOMIZE TIMER DEFINT A-Z CALL TitleScreen '************************* secs% = 10 'Seconds variable '************************* currentone = 0: totaltime! = 0: timeit! = 0 DEF SEG = &HA000 SCREEN 13 CALL SetItUp DO timeit! = TIMER WAIT &H3DA, 8 FOR x = 0 TO 253 OUT &H3C7, x + 1: r = INP(&H3C9): g = INP(&H3C9): b = INP(&H3C9) OUT &H3C8, x: OUT &H3C9, r: OUT &H3C9, g: OUT &H3C9, b NEXT x CALL FigureLast totaltime! = totaltime! + (TIMER - timeit!) IF totaltime! > secs THEN CALL Fadeout CALL NewPattern: totaltime! = 0 CALL Fadein END IF j$ = INKEY$ LOOP WHILE j$ <> CHR$(13) END SUB Center (strctr$) strlen = LEN(strctr$) LOCATE , (80 - strlen) / 2 PRINT strctr$ END SUB SUB Fadein FOR a = 1 TO 62 FOR c = 0 TO 255 OUT &H3C7, c: r = INP(&H3C9): g = INP(&H3C9): b = INP(&H3C9) IF r < palhold(c, 1) THEN r = r + 1 IF g < palhold(c, 2) THEN g = g + 1 IF b < palhold(c, 3) THEN b = b + 1 OUT &H3C8, c: OUT &H3C9, r: OUT &H3C9, g: OUT &H3C9, b NEXT c WAIT &H3DA, 8 NEXT a END SUB SUB Fadeout FOR i = 0 TO 255 OUT &H3C7, i: r = INP(&H3C9): g = INP(&H3C9): b = INP(&H3C9) palhold(i, 1) = r palhold(i, 2) = g palhold(i, 3) = b NEXT i FOR a = 1 TO 62 FOR c = 0 TO 255 OUT &H3C7, c: r = INP(&H3C9): g = INP(&H3C9): b = INP(&H3C9) IF r > 0 THEN r = r - 1 IF g > 0 THEN g = g - 1 IF b > 0 THEN b = b - 1 OUT &H3C8, c: OUT &H3C9, r: OUT &H3C9, g: OUT &H3C9, b NEXT c WAIT &H3DA, 8 NEXT a END SUB SUB FigureLast IF currentpal(1) < palettereach(1) THEN currentpal(1) = currentpal(1) + 1 IF currentpal(1) > palettereach(1) THEN currentpal(1) = currentpal(1) - 1 IF currentpal(2) < palettereach(2) THEN currentpal(2) = currentpal(2) + 1 IF currentpal(2) > palettereach(2) THEN currentpal(2) = currentpal(2) - 1 IF currentpal(3) < palettereach(3) THEN currentpal(3) = currentpal(3) + 1 IF currentpal(3) > palettereach(3) THEN currentpal(3) = currentpal(3) - 1 r = currentpal(1) g = currentpal(2) b = currentpal(3) OUT &H3C8, 254: OUT &H3C9, r: OUT &H3C9, g: OUT &H3C9, b OUT &H3C8, 255: OUT &H3C9, r: OUT &H3C9, g: OUT &H3C9, b IF currentpal(1) = palettereach(1) THEN IF currentpal(2) = palettereach(2) THEN IF currentpal(3) = palettereach(3) THEN CALL NewPalette END IF END IF END SUB SUB NewPalette howmany = INT(RND * 3) + 1 FOR i = 1 TO howmany palettereach(i) = INT(RND * 62) NEXT i END SUB SUB NewPattern currentone = currentone + 1 IF currentone > 16 THEN currentone = 1 whichone = currentone IF whichone = 1 THEN CALL Pat1 IF whichone = 2 THEN CALL Pat2 IF whichone = 3 THEN CALL Pat3 IF whichone = 4 THEN CALL Pat4 IF whichone = 5 THEN CALL Pat5 IF whichone = 6 THEN CALL Pat6 IF whichone = 7 THEN CALL Pat7 IF whichone = 8 THEN CALL Pat8 IF whichone = 9 THEN CALL Pat9 IF whichone = 10 THEN CALL Pat10 IF whichone = 11 THEN CALL Pat11 IF whichone = 12 THEN CALL Pat12 IF whichone = 13 THEN CALL Pat13 IF whichone = 14 THEN CALL Pat14 IF whichone = 15 THEN CALL Pat15 IF whichone = 16 THEN CALL Pat16 END SUB SUB Pat1 FOR a = 0 TO 200 CIRCLE (160, 100), a, a CIRCLE (161, 100), a, a CIRCLE (159, 100), a, a NEXT a FOR a = 19 TO 320 STEP 40 FOR b = 10 TO 200 STEP 30 startwhere = INT(RND * 223) + 1 FOR c = 0 TO 19 CIRCLE (a, b), c, startwhere + c CIRCLE (a + 1, b), c, startwhere + c CIRCLE (a - 1, b), c, startwhere + c NEXT c NEXT b NEXT a END SUB SUB Pat10 FOR y = 0 TO 199 q = (TAN(y * 3.1347197554#) * 50) FOR x = 0 TO 319 POKE z& + x, (COS(x * .51047197554#) * 50) - q + 100 NEXT x z& = z& + 320& NEXT y END SUB SUB Pat11 FOR x = 0 TO 319 q = (COS(x * .05847197554#) * 50) z& = 0 FOR y = 0 TO 199 POKE z& + x, (TAN(y * 3.51047197554#) * 50) - q + 100 z& = z& + 320& NEXT y NEXT x END SUB SUB Pat12 FOR a = 0 TO 200 CIRCLE (160, 100), a, a CIRCLE (161, 100), a, a CIRCLE (159, 100), a, a NEXT a c = 1: d = 1 FOR a = -10 TO 210 STEP 7 FOR b = -10 TO 330 STEP 7 CIRCLE (b, a), 15, c, , , .8 IF d = 1 THEN c = c + 2 IF d = 2 THEN c = c - 2 IF c < 3 THEN d = 1 IF c > 252 THEN d = 2 NEXT b NEXT a END SUB SUB Pat13 f = 0 FOR a = 0 TO 319 STEP 40 FOR b = 0 TO 199 STEP 20 f = f + 50: e = 0 IF f = 250 THEN f = 0 FOR c = 0 TO 49 e = e + 1 LINE (a, b)-(a + c, b + 20), f + e NEXT c: NEXT b: NEXT a f = 0 FOR a = 0 TO 319 STEP 40 FOR b = 0 TO 199 STEP 20 f = f + 50: e = 0 IF f = 250 THEN f = 0 FOR c = 0 TO 49 e = e + 1 LINE (a, b)-(a + 40, b + (c / 2)), f + e NEXT c: NEXT b: NEXT a END SUB SUB Pat14 sr = 16: r = 16: n = 1 FOR a = 1 TO 4 FOR y = 0 TO 199 STEP r FOR x = 0 TO 319 STEP r rn = RND * (2 * n) - n Col = (POINT(x, y) + POINT(x + r, y + r) + POINT(x, y + r) + POINT(x + r, y)) / 4 + rn IF y + r >= 200 THEN Col = POINT(x, 0) + rn IF x + r >= 320 THEN Col = POINT(0, y) + rn IF r = sr THEN Col = RND * (2 * 254) - 254 IF Col < 1 THEN Col = 1 IF Col > 254 THEN Col = 254 IF r > 1 THEN LINE (x, y)-(x + r, y + r), Col, BF IF r <= 1 THEN PSET (x, y), Col NEXT x NEXT y r = r / 2 NEXT a END SUB SUB Pat15 FOR a = 0 TO 200 CIRCLE (160, 100), a, a CIRCLE (161, 100), a, a CIRCLE (159, 100), a, a NEXT a FOR r = 0 TO 150 STEP 3 CIRCLE (160, 100), r, 0 CIRCLE (160, 17 + r), r, r + 1 CIRCLE (160, 183 - r), r, r + 2 CIRCLE (64 + r, 100), r, r + 3 CIRCLE (256 - r, 100), r, r + 4 o1 = 160 - (5000 ^ .5) + (.5 ^ .5) * (r) o2 = 160 + (5000 ^ .5) - (.5 ^ .5) * (r) u1 = 100 + (5000 ^ .5) - (.5 ^ .5) * (r) u2 = 100 - (5000 ^ .5) + (.5 ^ .5) * (r) CIRCLE (o1, u1), r, r + 5 CIRCLE (o2, u1), r, r + 6 CIRCLE (o1, u2), r, r + 7 CIRCLE (o2, u2), r, r + 8 NEXT r END SUB SUB Pat16 a1 = 40: b1 = 30: a2 = 240: b2 = 145 k = 1: x = 1: e = 1: f = 1: g = 1: h = 1 max = INT(RND * 250) + 75 FOR j = 1 TO 5 FOR i = 1 TO max a3 = 320 - a1: a4 = 320 - a2: b3 = 200 - b1: b4 = 200 - b2 LINE (a1, b1)-(a2, b2), k: LINE (a1, b1 + 1)-(a2, b2 + 1), k LINE (a1, b1 - 1)-(a2, b2 - 1), k: LINE (a3, b1)-(a4, b2), k LINE (a3, b1 + 1)-(a4, b2 + 1), k: LINE (a3, b1 - 1)-(a4, b2 - 1), k LINE (a1, b3)-(a2, b4), k: LINE (a1, b3 + 1)-(a2, b4 + 1), k LINE (a1, b3 - 1)-(a2, b4 - 1), k: LINE (a3, b3)-(a4, b4), k LINE (a3, b3 + 1)-(a4, b4 + 1), k: LINE (a3, b3 - 1)-(a4, b4 - 1), k a1 = a1 + g: b1 = b1 + e: a2 = a2 - h: b2 = b2 - f IF a1 > 320 THEN g = -1 IF a1 < 6 THEN g = 1 IF a2 > 320 THEN h = -1 IF a2 < 6 THEN h = 1 IF b1 > 200 THEN e = -1 IF b1 < 6 THEN e = 1 IF b2 > 200 THEN f = -1 IF b2 < 6 THEN f = 1 k = k + x IF k = 255 THEN x = -1 IF k = 1 THEN x = 1 NEXT i a1 = INT(RND * 320): b1 = INT(RND * 200) a2 = INT(RND * 320): b2 = INT(RND * 200) max = INT(RND * 250) + 75 IF j > 5 THEN e = 1: f = 1: g = -1: h = 1 IF j > 10 THEN e = 1: f = 1: g = -1: h = -1 IF j > 15 THEN e = -1: f = 1: g = 1: h = -1 IF j > 20 THEN e = 1: f = 1: g = -1: h = -1 NEXT j END SUB SUB Pat2 u! = 190: t! = 1.5 FOR i = 1 TO 254 u! = u! - t! t! = t! - .009 CIRCLE (160, u!), i, i, , , .5 CIRCLE (160, u! + 1), i, i, , , .5 CIRCLE (160, u! - 1), i, i, , , .5 NEXT i END SUB SUB Pat3 c = 30: u = 100: t! = 1.5 FOR i = 1 TO 260 c = c + 10 IF c > 320 THEN c = 30 t! = t! - .009 u! = u! - t! CIRCLE (160, u), i, c, , , .5 CIRCLE (160, u + 1), i, c, , , .5 CIRCLE (160, u + 2), i, c, , , .5 NEXT i END SUB SUB Pat4 f = 0 FOR a = 0 TO 319 STEP 40 FOR b = 0 TO 199 STEP 25 f = f + 50 IF f = 250 THEN f = 0 FOR c = 0 TO 39 STEP 4 FOR d = 0 TO 24 STEP 5 e = INT(RND * 20) + 1 LINE (a + c, b + d)-((a + c) + 3, (b + d) + 4), f + e, BF NEXT d NEXT c NEXT b NEXT a END SUB SUB Pat5 FOR a = 0 TO 200 CIRCLE (160, 100), a, a: CIRCLE (161, 100), a, a: CIRCLE (159, 100), a, a NEXT a FOR e = 1 TO 5 IF e = 1 THEN x = 160: y = 100: m = 200: l! = 1 IF e = 2 THEN x = 80: y = 50: m = 60: l! = 1 IF e = 3 THEN x = 80: y = 150: m = 60: l! = 91 IF e = 4 THEN x = 240: y = 50: m = 60: l! = 181 IF e = 5 THEN x = 240: y = 150: m = 60: l! = 241 FOR a = 1 TO 254 LINE (x + m * (COS(l! * (pi / 180))), y + (m / 1.2 * SIN(l! * (pi / 180))))-(x, y), a IF e = 1 THEN l! = l! + 1.417323 ELSE l! = l! - 1.417323 NEXT a NEXT e END SUB SUB Pat6 FOR y = 0 TO 199 q = (SIN(y * .1047197554#) * 50) FOR x = 0 TO 319 POKE z& + x, (SIN(x * .1047197554#) * 50) - q + 127 NEXT x z& = z& + 320& NEXT y END SUB SUB Pat7 c = 1: b = 1: d = -5 FOR e = 1 TO 2 FOR a = -5 TO 205 LINE (d, a)-(160, 100), b LINE (d - 1, a)-(160, 100), b LINE (d - 2, a)-(160, 100), b IF c = 1 THEN b = b + 1 ELSE b = b - 1 IF a = 100 THEN c = 0 NEXT a c = 1: b = 1: d = 327 NEXT e c = 1: b = 85: d = 200 FOR e = 1 TO 2 FOR a = 0 TO 319 LINE (a, d)-(160, 100), b LINE (a, d - 1)-(160, 100), b LINE (a, d - 2)-(160, 100), b IF c = 1 THEN b = b + 1 ELSE b = b - 1 IF a = 160 THEN c = 0 NEXT a c = 1: b = 85: d = -1 NEXT e END SUB SUB Pat8 FOR y = 0 TO 199 q = (TAN(y * 4.1047197554#) * 50) FOR x = 0 TO 319 POKE z& + x, (SIN(x * .51047197554#) * 50) - q + 100 NEXT x z& = z& + 320& NEXT y END SUB SUB Pat9 FOR i = 0 TO 160 LINE (160 - i, 100 - (i / 1.2))-(160 + i, 100 + (i / 1.2)), i, B NEXT i END SUB SUB SetItUp OUT &H3C8, 255: OUT &H3C9, 50: OUT &H3C9, 50: OUT &H3C9, 50 COLOR 255: LOCATE 10, 9: PRINT "Loading, Please Wait...." currentpal(1) = INT(RND * 62) + 30 currentpal(2) = INT(RND * 62) + 30 currentpal(3) = INT(RND * 62) + 30 FOR a = 1 TO 254: FOR x = 1 TO 253 OUT &H3C7, x + 1: r = INP(&H3C9): g = INP(&H3C9): b = INP(&H3C9) OUT &H3C8, x: OUT &H3C9, r: OUT &H3C9, g: OUT &H3C9, b NEXT x CALL FigureLast NEXT a CALL NewPalette CALL Fadeout CALL NewPattern CALL Fadein END SUB SUB TitleScreen SCREEN 0 CLS PRINT "" PRINT "" PRINT "" PRINT "" PRINT "" PRINT "" PRINT "" PRINT "" PRINT "" COLOR 4: Center "Thanks for trying Acid Flux Screen Saver" COLOR 13: Center "by" COLOR 3: Center "Acid Works Software" COLOR 0: Center "" COLOR 10: Center "Press Any Key to Continue" 'COLOR 7: Center "Use the following things for the command line:" 'COLOR 0: Center "" 'COLOR 5: Center "acidflux [t(#)] [s(#)] [r] [h or ?]" 'COLOR 0: Center "" 'COLOR 6: Center "t# Where the number following is the number of seconds " 'COLOR 6: Center " between each different design. " 'COLOR 6: Center "" 'COLOR 6: Center "s# Where the number following is used to tell the program" 'COLOR 6: Center " which design (1-16) to start on. " 'COLOR 6: Center "" 'COLOR 6: Center "r Is used to tell the program you want the order of the " 'COLOR 6: Center " designs to be random." 'COLOR 6: Center "" 'COLOR 6: Center "? Gets you this message " 'COLOR 6: Center "" 'COLOR 6: Center "" 'COLOR 11: Center "example usage:" 'COLOR 6: Center "" 'COLOR 10: Center "acidflux t5 s3" SLEEP aaa$ = INKEY$ bbb$ = INKEY$ ccc$ = INKEY$ ddd$ = INKEY$ eee$ = INKEY$ fff$ = INKEY$ END SUB