'
' LAVA.BAS
' John Rodgers
' Wizard Productions
' Too Cool Fool
' coolfool@flinet.com
' john@compconn.com
'
' LAVA.BAS was written to take advantage of an effect I had seen in my earlier
'screen savers. When you issue a PAINT statement on a graphic that is linked
'by small lines, the color crawls along the lines until the edges are reached
'or all the pixels have changed to the new color. This program draws a screen
'full of circles and colored pixels and issues random PAINT statements to
'random points on the screen. Occasionally these points are linked to large
'areas and the color "crawls" across the screen. Like a lava lamp it takes
'awhile it to warm up (for the screen to fill with circles).
'As a screen saver it may not be ideal as some of the PAINT statements take
'awhile to complete before the program surrenders control.
DECLARE SUB drawCircles ()
DECLARE SUB pxsett ()
ON ERROR GOTO eror:
SCREEN 9
CLS
RANDOMIZE TIMER
DO
pxsett
drawCircles
c% = INT(RND * 16)
xpos% = INT(RND * 640)
ypos% = INT(RND * 480) 'initiate random numbers
PAINT (xpos%, ypos%), c%, 0 'the following statements are to
'partialy clear the screen occasionaly
IF xpos% = 50 THEN PAINT (xpos%, ypos%), 0, 0 'on these numbers paint black
IF xpos% = 150 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 250 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 450 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 550 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 55 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 155 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 255 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 355 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 455 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 555 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 51 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 151 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 251 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 351 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 451 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 551 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 52 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 152 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 252 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 352 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 452 THEN PAINT (xpos%, ypos%), 0, 0
IF xpos% = 552 THEN PAINT (xpos%, ypos%), 0, 0
LOOP UNTIL LEN(INKEY$)
SYSTEM
eror: 'simple error trap
SELECT CASE ERR
CASE 5 'runtime error 5-Illegal Function Call
SCREEN 0 ' SCREEN ERROR
CLS
COLOR 15
LOCATE 2, 22
PRINT "ERROR!! ILLEAGLE FUNCTION CALL"
COLOR 7
LOCATE 3, 5
PRINT "LAVA.BAS works best in screen modes 8, 9 and 12.";
PRINT "The effect is somewhat "
PRINT "noticable in screen modes 7 and 13."
PRINT " The effect is lost in other modes, however SCREEN 10 offers some"
PRINT " interesting effects if you are bored."
LOCATE 8, 1
PRINT "PAX,"
PRINT "TCF"
PRINT
INPUT "Press ENTER to return to DOS", d$
SYSTEM
CASE ELSE
RESUME NEXT
END SELECT
RESUME
SUB drawCircles
FOR k = 1 TO 110
row% = INT(RND * 640)
col% = INT(RND * 480) 'initiate random numbers
arow% = INT(RND * 640)
acol% = INT(RND * 480)
ra% = INT(RND * 5)
s = INT(RND * 900)
IF s <= 600 THEN c% = 8 'get c% (color)
IF s > 600 AND s <= 790 THEN c% = 4
IF s > 790 AND s <= 800 THEN c% = 14
IF s > 800 AND s <= 825 THEN c% = 9
IF s > 825 AND s <= 875 THEN c% = 3
IF s > 875 AND s <= 900 THEN c% = 6
CIRCLE (row%, col%), ra%, c% 'draw circle
NEXT k
END SUB
SUB pxsett
DO 'pxsett helps make and break circle
c% = 1 'connections for the paint statements to
' have greater effect
xpos% = INT(RND * 640)
ypos% = INT(RND * 480)
row% = INT(RND * 640)
col% = INT(RND * 480) 'initiate random numbers
PSET (xpos%, col%), 4
PSET (row%, ypos%), 0 'paint random pixels 3 colors
PSET (xpos%, ypos%), 4
PSET (row%, col%), 1
lop% = lop% + 1
LOOP UNTIL lop% >= 20
END SUB