DECLARE SUB copper () DECLARE SUB fadefromcolor (a%, c%, t%, r%, g%, B%) DECLARE SUB fadetocolor (a%, c%, t%, r%, g%, B%) DECLARE SUB getpal () DECLARE SUB setpal (c1%, c2%, r1%, g1%, b1%, r2%, g2%, b2%) DECLARE SUB keyaction () DECLARE SUB crosfade (r1%(), r2%(), g1%(), g2%(), b1%(), b2%()) DECLARE SUB setcrosfadepal (r1%(), r2%(), g1%(), g2%(), b1%(), b2%()) DECLARE SUB initcrosfadepics (a%, B%) DECLARE SUB clearscreen (c%) DECLARE SUB spheremaplasma () DECLARE SUB zoomdistort () DECLARE SUB loadqbinside () DECLARE SUB rgblights () DECLARE SUB cycleblobs () DECLARE SUB plasmablobs () DECLARE SUB actions3d () DECLARE SUB loadobject (a$) DECLARE SUB createobject (a%) DECLARE SUB animatewavelet (k%) DECLARE SUB mov3dpos (xp, yp, zp) DECLARE SUB rotate3d (xr, yr, zr) DECLARE SUB translate3d () DECLARE SUB output3d () DECLARE SUB load3drecord () DECLARE SUB loadrecord () DECLARE SUB precalculations () DECLARE SUB getmap (a$) DECLARE SUB Intersections () DECLARE SUB Actions () DECLARE SUB saverecord () DECLARE SUB Output0 () DECLARE SUB deedlinesax (c%) DECLARE SUB prehistoricode () DECLARE SUB sucking () DECLARE SUB delay (t%) DECLARE SUB ffix 'ffix RANDOMIZE TIMER IF COMMAND$ = "-COPPER" THEN copper: END SCREEN 13 deedlinesax 15 delay 140 deedlinesax 0 CLS prehistoricode sucking delay 140 xit% = 0 '$DYNAMIC DIM SHARED r%(0 TO 255), g%(0 TO 255), B%(0 TO 255) DIM SHARED r1%(0 TO 255), g1%(0 TO 255), b1%(0 TO 255) DIM SHARED fpos%(0 TO 255) fp% = 256 * 86: DIM SHARED fonts%(0 TO fp%) '$STATIC 'DIM SHARED fsin1%(-48 TO 826), fsin2%(-640 TO 602), fsin3%(-640 TO 715) DIM SHARED fsin4%(-319 TO 602) DIM SHARED fsin1%(-48 TO 1083) DIM SHARED fsin2%(-640 TO 957) DIM SHARED fsin3%(-640 TO 871) DIM SHARED mod256128%(-168 TO 168) DIM SHARED sp%(16384) DIM SHARED dt%(-192 TO 180) DIM SHARED dt100%(-180 TO 180) DIM SHARED cd%(0 TO 1792) DIM SHARED dsx%(10), dsy%(10), psx%(10), psy%(10), xp1%(10), yp1%(10), yy%(10) DIM SHARED epi6%(0 TO 5), epi36%(0 TO 5) DIM SHARED cy%(-100 TO 300) DIM SHARED dis%(320), sla%(320), slb%(320), slc%(320), sc%(320) DIM SHARED div2%(255), div4%(320), mul32%(32), mul128%(128) DIM SHARED fs%(0 TO 199) 'DIM SHARED map%(1024) DIM SHARED kon%(127) DIM SHARED ka%(4) setcrosfadepal r%(), r1%(), g%(), g1%(), B%(), b1%() getpal fadetocolor 0, 255, 1, 0, 0, 0 a$ = "fonts16.fnt" c$ = " " open ".\programs\samples\pete\optimus\"+a$ FOR BINARY AS #1 FOR i% = 0 TO 255 GET #1, , c$: fpos%(i%) = ASC(c$) NEXT i% FOR i% = 0 TO 85 FOR y% = 0 TO 15 FOR x% = 0 TO 15 GET #1, , c$ fonts%(i% * 256 + y% * 16 + x%) = ASC(c$) NEXT x% NEXT y% NEXT i% CLOSE #1 '$DYNAMIC DIM SHARED text$(3, 11) '$STATIC text$(0, 0) = " Ok! Let's get " text$(0, 1) = " serious now :) " text$(0, 2) = " " text$(0, 3) = " Hopefully you will " text$(0, 4) = "see a nice demo from" text$(0, 5) = "my side and not old " text$(0, 6) = " prehistoric line " text$(0, 7) = " drawing and lame " text$(0, 8) = "oldstyle qbasic code" text$(0, 9) = " " text$(0, 10) = " But let's crosfade " text$(0, 11) = " some more text now!" text$(1, 0) = " Optimus presents " text$(1, 1) = " a demo done in a " text$(1, 2) = " hurry by connecting" text$(1, 3) = " various older or " text$(1, 4) = " newer sources into " text$(1, 5) = " the main programm. " text$(1, 6) = " " text$(1, 7) = " All coded in pure " text$(1, 8) = " Quickbasic 4.5 " text$(1, 9) = " Use ffix.com for " text$(1, 10) = " maximum pleasure " text$(1, 11) = " " text$(2, 0) = " Featuring effects " text$(2, 1) = "like Sphere mapping " text$(2, 2) = "circle blobs,rgb8bpp" text$(2, 3) = "lights, zoom distort" text$(2, 4) = "plasma inside blob, " text$(2, 5) = "hardware raster fx " text$(2, 6) = "3d dots and a simple" text$(2, 7) = "raycaster engine. " text$(2, 8) = " Some are not so " text$(2, 9) = "optimized as I could" text$(2, 10) = "and few have several" text$(2, 11) = "bugs too.. " text$(3, 0) = "They still run at " text$(3, 1) = "full frame rate in " text$(3, 2) = "my AMDK6-2/500Mhz, " text$(3, 3) = "though I had thought" text$(3, 4) = "ways to optimize " text$(3, 5) = "them even more. " text$(3, 6) = " Anyways.." text$(3, 7) = "lean back and enjoy!" text$(3, 8) = " " text$(3, 9) = " Optimus/Dirty Minds" text$(3, 10) = " Thessaloniki/Greece" text$(3, 11) = " Saturday 25/05/2002" CLS dl% = 840 initcrosfadepics 0, 1 fadefromcolor 0, 255, 256, 0, 0, 0 delay dl% IF xit% = 1 THEN xit% = 2: getpal: fadetocolor 0, 255, 64, 0, 0, 0: GOTO endfadetext crosfade r%(), r1%(), g%(), g1%(), B%(), b1%() IF xit% = 1 THEN xit% = 2: getpal: fadetocolor 0, 255, 64, 0, 0, 0: GOTO endfadetext initcrosfadepics 1, 1 setcrosfadepal r%(), r1%(), g%(), g1%(), B%(), b1%() initcrosfadepics 1, 2 delay dl% IF xit% = 1 THEN xit% = 2: getpal: fadetocolor 0, 255, 64, 0, 0, 0: GOTO endfadetext crosfade r%(), r1%(), g%(), g1%(), B%(), b1%() IF xit% = 1 THEN xit% = 2: getpal: fadetocolor 0, 255, 64, 0, 0, 0: GOTO endfadetext delay dl% IF xit% = 1 THEN xit% = 2: getpal: fadetocolor 0, 255, 64, 0, 0, 0: GOTO endfadetext initcrosfadepics 2, 2 setcrosfadepal r%(), r1%(), g%(), g1%(), B%(), b1%() initcrosfadepics 2, 3 crosfade r%(), r1%(), g%(), g1%(), B%(), b1%() IF xit% = 1 THEN xit% = 2: getpal: fadetocolor 0, 255, 64, 0, 0, 0: GOTO endfadetext delay dl% IF xit% = 1 THEN xit% = 2: getpal: fadetocolor 0, 255, 64, 0, 0, 0: GOTO endfadetext getpal fadetocolor 0, 255, 256, 63, 63, 63 IF xit% = 1 THEN xit% = 2: getpal: fadetocolor 0, 255, 64, 0, 0, 0: GOTO endfadetext endfadetext: xit% = 0 LINE (0, 0)-(320, 200), 255, BF spheremaplasma xit% = 0 zoomdistort xit% = 0 getpal fadetocolor 0, 255, 31, 0, 0, 0 CLS ' ------------- RGB Lights --------------- rgblights xit% = 0 ' ------------- 3D Dots --------------- '$DYNAMIC DIM SHARED x(4096), y(4096), z(4096) DIM SHARED xo%(4096), yo%(4096), zo%(4096) DIM SHARED xs%(4096, 1), ys%(4096, 1) 'DIM SHARED pl%(8192, 2), ln%(8192, 1) DIM SHARED ypk&(-100 TO 99) DIM SHARED zpo%(8) '$STATIC CLS ' ------ Precalculations for Wavelet ----- FOR i% = 0 TO 826 fsin1%(i%) = SIN(i% / 50) * 48 NEXT i% ' ------ Precalculations for Poke ------ FOR i& = -100 TO 99 ypk&(i&) = (i& + 100) * 320 NEXT i& ' --------------------------------------- actions3d xit% = 0 ' -------- Cycleblobs ------------ ERASE fsin2%, fsin3% cycleblobs xit% = 0 CLS plasmablobs xit% = 0 LINE (0, 0)-(320, 200), 255, BF 'dm% = 16384 'DIM SHARED mapout%(dm%) setpal 0, 255, 0, 0, 0, 63, 63, 63 getmap "wolfmap0.wad" precalculations k$ = " " a$ = "3rdrec.rec" gi$ = " ": gg$ = " " g% = 0: gi% = 0 open ".\samples\pete\optimus\"+a$ FOR BINARY AS #2 GET #2, , gi$: gi% = ASC(gi$): GET #2, , gg$: gg% = ASC(gg$) WHILE INKEY$ <> "": WEND ' ----------------- Some important data ----------------- ph% = 32: px% = 64 + 32: py% = 64 + 32: pa% = 90: ps% = 3 fv% = 60: ra = fv% / 320: dpp% = 160 / TAN((fv% \ 2) / 57.3) map% = 0 k% = 0 fps% = 0 filei% = 0 DO WHILE INKEY$ = "" fps% = fps% + 1 IF fps% = 558 THEN map% = 1 IF fps% = 2148 THEN map% = 0 IF fps% = 3500 THEN map% = 1 IF fps% = 4760 THEN map% = 0 keyaction loadrecord Actions sp%(mul128%(py% \ 16) + px% \ 16) = 64 Intersections WAIT &H3DA, 8: WAIT &H3DA, 8, 8 Output0 IF filei% = 194 THEN GOTO telos LOOP telos: CLOSE #2 xit% = 0 getpal fadetocolor 0, 255, 255, 0, 0, 0 SUB Actions SHARED kb%, px%, py%, pa%, ps%, map% WHILE kon%(75) = 1 pa% = pa% + 1 IF pa% > 360 THEN pa% = 0 + (pa% - 360) GOTO 101 WEND 101 WHILE kon%(77) = 1 pa% = pa% - 1 IF pa% < 0 THEN pa% = 360 + pa% GOTO 102 WEND 102 WHILE kon%(72) = 1 pxd% = COS(pa% / 57.3) * ps% pyd% = SIN(pa% / 57.3) * ps% px% = px% + pxd% IF cd%(mul32%(py% \ 64) + px% \ 64) = 1 THEN px% = px% - pxd% py% = py% - pyd% IF cd%(mul32%(py% \ 64) + px% \ 64) = 1 THEN py% = py% + pyd% GOTO 103 WEND 103 WHILE kon%(80) = 1 pxd% = COS(pa% / 57.3) * ps% pyd% = SIN(pa% / 57.3) * ps% px% = px% - pxd% IF cd%(mul32%(py% \ 64) + px% \ 64) = 1 THEN px% = px% + pxd% py% = py% + pyd% IF cd%(mul32%(py% \ 64) + px% \ 64) = 1 THEN py% = py% - pyd% GOTO 104 WEND 104 WHILE kon%(15) = 1 IF map% = 0 THEN map% = 1 ELSE map% = 0 GOTO 105 WEND 105 WHILE kon%(1) = 1 END WEND WHILE INKEY$ <> "": WEND END SUB SUB actions3d SHARED xit% SHARED ndts%, ndtso% SHARED xc, yc, zc, rxc, ryc, rzc SHARED xp, yp, zp SHARED gi$, gg$ SHARED k%, obj% SHARED ftype%, filei% SHARED mtr CONST pi = 3.1415926# mtr = pi / 180 k% = 0 gi$ = " " gg$ = " " xp = 0: yp = 0: zp = 800 'kyvos 100 'sphere 200 'torus 600 'wavelet 800 'teapot,cow 300 zpo%(1) = 100 zpo%(2) = 200 zpo%(3) = 600 zpo%(4) = 800 zpo%(5) = 300 zpo%(6) = 300 SCREEN 13 COLOR 255 DEF SEG = &HA000 xc = 0: yc = 0: zc = 0 rxc = 0: ryc = 0: rzc = 0 f$ = "3drec.001" OPEN ".\samples\pete\optimus\"+f$ FOR BINARY AS #2 k% = 0 DO B$ = INKEY$: IF B$ = "x" THEN END load3drecord IF ASC(gg$) = 0 THEN a$ = "" ELSE a$ = gg$ WHILE a$ = "s" OR a$ = "S" setpal 0, 255, 0, 0, 0, 63, 63, 63 obj% = 1 'zp = zpo%(obj%) createobject obj% ndtso% = 64: ndts% = ndtso% a$ = "" WEND WHILE a$ = "d" OR a$ = "D" setpal 0, 255, 0, 0, 0, 63, 47, 15 obj% = 2 'zp = zpo%(obj%) createobject obj% ndtso% = 256: ndts% = ndtso% a$ = "" WEND WHILE a$ = "f" OR a$ = "F" setpal 0, 255, 0, 0, 0, 31, 63, 47 obj% = 3 'zp = zpo%(obj%) createobject obj% ndtso% = 512: ndts% = ndtso% a$ = "" WEND WHILE a$ = "g" OR a$ = "G" setpal 0, 255, 0, 0, 0, 15, 31, 63 obj% = 4 'zp = zpo%(obj%) createobject obj% ndtso% = 64: ndts% = 0 a$ = "" WEND WHILE a$ = "h" OR a$ = "H" setpal 0, 255, 0, 0, 0, 0, 63, 63 obj% = 5 'zp = zpo%(obj%) loadobject "hiteapot.3do" ndtso% = 0 a$ = "" WEND WHILE a$ = "j" OR a$ = "J" setpal 0, 255, 0, 0, 0, 63, 31, 47 obj% = 6 'zp = zpo%(obj%) loadobject "cow.3do" ndtso% = 0 a$ = "" WEND WHILE a$ = "," OR a$ = "<" clearscreen 0 IF ndts% - ndtso% > 0 THEN ndts% = ndts% - ndtso% a$ = "" WEND WHILE a$ = "." OR a$ = ">" 'clearscreen 0 IF ndts% + ndtso% < 4096 THEN ndts% = ndts% + ndtso% a$ = "" WEND WHILE a$ = "k" OR a$ = "K" 'clearscreen 0 xp = -zpo%(obj%) * 1.5: yp = 0: zp = zpo%(obj%) xc = 0: yc = 0: zc = 0 a$ = "" WEND WHILE a$ = "l" OR a$ = "L" 'clearscreen 0 xp = zpo%(obj%) * 1.5: yp = 0: zp = zpo%(obj%) xc = 0: yc = 0: zc = 0 a$ = "" WEND WHILE a$ = "u" OR a$ = "U" 'clearscreen 0 xp = 0: yp = zpo%(obj%) * 1.5: zp = zpo%(obj%) xc = 0: yc = 0: zc = 0 a$ = "" WEND WHILE a$ = "y" OR a$ = "Y" 'clearscreen 0 xp = 0: yp = -zpo%(obj%) * 1.5: zp = zpo%(obj%) xc = 0: yc = 0: zc = 0 a$ = "" WEND WHILE a$ = "m" OR a$ = "M" 'clearscreen 0 xp = 0: yp = 0: zp = -zpo%(obj%) \ 2 xc = 0: yc = 0: zc = 0 a$ = "" WEND WHILE a$ = "a" OR a$ = "A" yc = yc + .1 a$ = "" WEND WHILE a$ = "Q" OR a$ = "q" yc = yc - .1 a$ = "" WEND WHILE a$ = "o" OR a$ = "O" xc = xc - .1 a$ = "" WEND WHILE a$ = "p" OR a$ = "P" xc = xc + .1 a$ = "" WEND WHILE a$ = "-" zc = zc + .25 a$ = "" WEND WHILE a$ = "=" OR a$ = "+" zc = zc - .25 a$ = "" WEND WHILE a$ = "z" OR a$ = "Z" xr = 0: yr = 0: zr = 0 rxc = 0: ryc = 0: rzc = 0 a$ = "" WEND WHILE a$ = "x" OR a$ = "X" END WEND WHILE a$ = "4" ryc = ryc - .005 a$ = "" WEND WHILE a$ = "6" ryc = ryc + .005 a$ = "" WEND WHILE a$ = "8" rxc = rxc - .005 a$ = "" WEND WHILE a$ = "2" rxc = rxc + .005 a$ = "" WEND WHILE a$ = "7" rzc = rzc - .005 a$ = "" WEND WHILE a$ = "9" rzc = rzc + .005 a$ = "" WEND WHILE a$ = "w" OR a$ = "W" clearscreen 1 ftype% = 0 a$ = "" WEND WHILE a$ = "e" OR a$ = "E" ftype% = 1 a$ = "" WEND WHILE a$ = "r" OR a$ = "R" ftype% = 2 a$ = "" WEND xp = xp + xc: yp = yp + yc: zp = zp + zc xr = xr + rxc: yr = yr + ryc: zr = zr + rzc IF obj% = 4 THEN animatewavelet k%: k% = k% + 1: IF k% = 314 THEN k% = 0 rotate3d xr, yr, zr mov3dpos xp, yp, zp translate3d output3d IF filei% = 4446 THEN GOTO telos2 IF xit% = 0 THEN keyaction IF xit% = 1 THEN GOTO telos2 LOOP telos2: filei% = 0 CLOSE #2 END SUB SUB animatewavelet (k%) l% = 0 FOR z% = 0 TO 511 STEP 8 FOR x% = 0 TO 511 STEP 8 xo%(l%) = x% - 256: zo%(l%) = z% - 256 yo%(l%) = fsin1%(x% + k%) + fsin1%(z% + k%) l% = l% + 1 NEXT x% NEXT z% END SUB SUB clearscreen (c%) FOR y% = 0 TO 199 DEF SEG = &HA000 + y% * 20 FOR x% = 0 TO 319 POKE x%, c% NEXT x% NEXT y% DEF SEG = &HA000 END SUB SUB copper CLS 'WHILE INKEY$ <> "": WEND 'SCREEN 0 LOCATE 2, 32: PRINT "Congratulations!" LOCATE 4, 2: PRINT "You have just found the secret part of the demo, even if I guess it was quite" LOCATE 5, 2: PRINT "easy, since I use to give away the source of every quickbasic demo of mine ;)" PRINT PRINT " These are supposed to be hardware fx inspired by Amiga, C64, CPC or any other" PRINT "raster display computer that happens to exist. Quite unstable if you are running" PRINT "them under windows, so I suggest to boot up in pure DOS and retry there.." PRINT PRINT " What you are just watching are called raster or copper bars. Originally 1st" PRINT "seen in Amiga demos, giving to the machine the opportunity to display more than" PRINT "the theoritical maximum number of colors (This is text mode!) in the screen (But" PRINT "mostly used as horizontal colorfull lines and not per pixel. Do you remember" PRINT "Shadow of the Beast or Agony, which used to have extra colors upon a colorfull" PRINT "sky in the background?)" PRINT " They are so simple fx, just changing the RGB values of just one color several" PRINT "times in a frame, synced with the raster beam of the CRT (You can use the &HDA " PRINT "port address you know from Vsync to use for horizontal syncing too, by checking" PRINT " the 1st bit, in the similar way you did that for the 4th bit for Vsync!)" PRINT PRINT "It seems that I have 2 go, unfortunatelly haven't explained you about the next" PRINT "effects you are gonna see if you press any key.." PRINT " Optimus" DIM c%(1 TO 32) DIM xb%(0 TO 319) DIM ds%(1 TO 32), ps%(1 TO 32) DIM xp%(32) DIM rgb%(15, 15) 'DIM b01%(-1024 TO 1024) 'DIM b02%(-1024 TO 1024) DIM b01%(-640 TO 640) DIM b02%(-640 TO 640) DIM y2%(0 TO 399) DIM lc%(0 TO 399) DIM l%(3) DIM br%(-200 TO 500) k% = 0 FOR i% = 168 TO 200 IF k% > 63 THEN k% = 63 br%(i%) = k% k% = k% + 2 NEXT i% FOR i% = 201 TO 232 k% = k% - 2 IF k% < 0 THEN k% = 0 br%(i%) = k% NEXT i% k% = 0 DO WHILE INKEY$ = "" k% = k% + 1 WAIT &H3DA, 8 WAIT &H3DA, 8, 8 l%(1) = SIN(k% / 25) * 120 l%(2) = SIN(k% / 45) * 110 l%(3) = SIN(k% / 35) * 100 FOR i% = 0 TO 380 WAIT &H3DA, 1, 1: WAIT &H3DA, 1 OUT &H3C8, 0 OUT &H3C9, br%(i% + l%(1)) OUT &H3C9, br%(i% + l%(2)) OUT &H3C9, br%(i% + l%(3)) NEXT i% LOOP SCREEN 13 OUT &H3D4, &H13 OUT &H3D5, 0 FOR i% = 1 TO 16 OUT &H3C8, i% OUT &H3C9, (i% - 1) * 4 OUT &H3C9, 0 OUT &H3C9, 0 NEXT i% FOR i% = 17 TO 32 OUT &H3C8, i% OUT &H3C9, 0 OUT &H3C9, (i% - 17) * 4 OUT &H3C9, 0 NEXT i% FOR i% = 33 TO 48 OUT &H3C8, i% OUT &H3C9, 0 OUT &H3C9, 0 OUT &H3C9, (i% - 33) * 4 NEXT i% FOR i% = 49 TO 64 OUT &H3C8, i% OUT &H3C9, (i% - 49) * 4 OUT &H3C9, (i% - 49) * 4 OUT &H3C9, 0 NEXT i% FOR i% = 65 TO 80 OUT &H3C8, i% OUT &H3C9, (i% - 65) * 4 OUT &H3C9, 0 OUT &H3C9, (i% - 65) * 4 NEXT i% FOR i% = 81 TO 96 OUT &H3C8, i% OUT &H3C9, 0 OUT &H3C9, (i% - 81) * 4 OUT &H3C9, (i% - 81) * 4 NEXT i% FOR i% = 97 TO 112 OUT &H3C8, i% OUT &H3C9, (i% - 97) * 4 OUT &H3C9, (i% - 97) * 2 OUT &H3C9, 0 NEXT i% FOR i% = 113 TO 128 OUT &H3C8, i% OUT &H3C9, 0 OUT &H3C9, (i% - 113) * 2 OUT &H3C9, (i% - 113) * 4 NEXT i% FOR i% = 1 TO 16: c%(i%) = i%: NEXT i% FOR i% = 17 TO 32: c%(i%) = 33 - i%: NEXT i% FOR i% = 1 TO 32 ds%(i%) = INT(RND * 63 + 32) ps%(i%) = INT(RND * 127) NEXT i% DEF SEG = &HA000 k% = 0 DO WHILE INKEY$ = "" k% = k% + 1 FOR i% = 1 TO 8 xp%(i%) = SIN(k% / ds%(i%)) * ps%(i%) + ps%(i%) + (280 - 2 * ps%(i%)) \ 2 NEXT i% FOR ii% = 1 TO 8 FOR i% = 1 TO 32 xb%(i% + xp%(ii%)) = c%(i%) + 16 * (ii% - 1) NEXT i% NEXT ii% WAIT &H3DA, 8 FOR i% = 0 TO 319 POKE i%, xb%(i%) POKE i% + 80, xb%(i%) NEXT i% WAIT &H3DA, 8, 8 l%(1) = SIN(k% / 25) * 120 l%(2) = SIN(k% / 45) * 110 l%(3) = SIN(k% / 35) * 100 FOR i% = 0 TO 380 WAIT &H3DA, 1, 1: WAIT &H3DA, 1 OUT &H3C8, 0 OUT &H3C9, br%(i% + l%(1)) OUT &H3C9, br%(i% + l%(2)) OUT &H3C9, br%(i% + l%(3)) NEXT i% FOR i% = 0 TO 319: xb%(i%) = 0: NEXT i% LOOP ' --------- Translucent copper bars ----------- c% = 0 OUT &H3C8, 0 FOR a% = 0 TO 15 FOR B% = 0 TO 15 OUT &H3C9, a% * 2 + 33 OUT &H3C9, 0 OUT &H3C9, B% * 2 + 33 rgb%(a%, B%) = c% c% = c% + 1 NEXT B% NEXT a% OUT &H3D4, &H13 OUT &H3D5, 0 'DIM fsin1%(0 TO 1083) 'DIM fsin2%(0 TO 957) 'DIM fsin3%(-471 TO 871) FOR i% = 0 TO 1083: fsin1%(i%) = SIN(i% / 45) * 63 + 92: NEXT i% FOR i% = 0 TO 957: fsin2%(i%) = SIN(i% / 25) * 31 + 31: NEXT i% FOR i% = -471 TO 871: fsin3%(i%) = SIN(i% / 75) * 91 + 127: NEXT i% DIM p16%(0 TO 15) FOR i% = 0 TO 15 p16%(i%) = i% * 16 NEXT i% DIM c1%(0 TO 7), c2%(0 TO 7), c3%(0 TO 7) FOR i% = 0 TO 5: c1%(i%) = i% + 1: c2%(i%) = i% + 7: c3%(i%) = i% + 13: NEXT i% FOR i% = 0 TO 399: y2%(i%) = i% * 2: NEXT i% FOR i% = 0 TO 399: lc%(i%) = i% / 6.4: NEXT i% y1% = 0 fps% = 0 DO WHILE INKEY$ = "" k% = k% + 3: IF k% >= 283 THEN k% = 0 l% = l% + 2: IF l% >= 157 THEN l% = 0 m% = m% + 1: IF m% >= 471 THEN m% = 0 fps% = fps% + 1 IF fps% < 400 AND y1% < 395 THEN y1% = y1% + 1 IF fps% > 1200 AND y1% <> 0 THEN y1% = y1% - 1 IF y1% = 0 THEN GOTO out1 WAIT &H3DA, 8: WAIT &H3DA, 8, 8 'GOTO 17 OUT &H3C8, 0 OUT &H3C9, 0 OUT &H3C9, 0 OUT &H3C9, 0 17 DEF SEG = &HA000 FOR y% = 0 TO y1% WAIT &H3DA, 1, 1: WAIT &H3DA, 1 f1% = fsin2%(y2%(y%) + l%) + fsin3%(y% - m%) f2% = fsin2%(y% + l%) + fsin1%(y2%(y%) + k%) FOR i% = 1 TO 15 b01%(f1% + i%) = i% b02%(f2% + i%) = p16%(i%) POKE f1% + i%, i% OR b02%(f1% + i%) POKE f2% + i%, p16%(i%) OR b01%(f2% + i%) NEXT i% OUT &H3C8, 0 OUT &H3C9, (63 - lc%(y%)) OUT &H3C9, (63 - lc%(y%)) / 2 OUT &H3C9, lc%(y%) NEXT y% FOR i% = 0 TO 319: POKE i%, 0: NEXT i% FOR i% = 0 TO 319: b01%(i%) = 0: b02%(i%) = 0: NEXT i% LOOP out1: ' --------- RGB copper bars ----------- CLS FOR i% = 0 TO 7 OUT &H3C8, i% OUT &H3C9, i% * 5 + 28 OUT &H3C9, 0 OUT &H3C9, 0 NEXT i% FOR i% = 8 TO 15 OUT &H3C8, i% OUT &H3C9, 0 OUT &H3C9, (i% - 8) * 5 + 28 OUT &H3C9, 0 NEXT i% FOR i% = 16 TO 23 OUT &H3C8, i% OUT &H3C9, 0 OUT &H3C9, 0 OUT &H3C9, (i% - 16) * 5 + 28 NEXT i% OUT &H3D4, &H13 OUT &H3D5, 0 FOR i% = 0 TO 7: c1%(i%) = i%: c2%(i%) = i% + 8: c3%(i%) = i% + 16: NEXT i%: c1%(0) = 1 k% = 0 l% = 0 m% = 0 fps% = 0 y1% = 0 DO WHILE INKEY$ = "" k% = k% + 3: IF k% >= 283 THEN k% = 0 l% = l% + 2: IF l% >= 157 THEN l% = 0 m% = m% + 1: IF m% >= 471 THEN m% = 0 fps% = fps% + 1 IF fps% < 400 AND y1% < 395 THEN y1% = y1% + 1 IF fps% > 1200 AND y1% <> 0 THEN y1% = y1% - 1 IF y1% = 0 THEN GOTO out2 WAIT &H3DA, 8: WAIT &H3DA, 8, 8 DEF SEG = &HA000 FOR y% = 0 TO y1% WAIT &H3DA, 1 FOR i% = 0 TO 7 POKE fsin2%(y2%(y%) + l%) + fsin3%(y% - m%) + i%, c1%(i%) POKE fsin2%(y% + l%) + fsin1%(y2%(y%) + k%) + i%, c2%(i%) POKE fsin1%(y% + k%) + fsin2%(y% + l%) + fsin3%(y% + m%) + i% - 99, c3%(i%) NEXT i% OUT &H3C8, 0 OUT &H3C9, lc%(y%) OUT &H3C9, 63 - lc%(y%) OUT &H3C9, 63 - lc%(y%) WAIT &H3DA, 1, 1 NEXT y% FOR i% = 0 TO 319: POKE i%, 0: NEXT i% LOOP out2: OUT &H3D4, &H28 OUT &H3D5, &H13 SCREEN 13 SCREEN 1 OUT &H3D4, &H28 OUT &H3D5, &H13 END SUB SUB createobject (a%) CONST pi = 3.1415926# rtm = 180 / pi clearscreen 0 SELECT CASE a% CASE 1 ' ========== Creating object 1 - Cube ========== FOR i% = 0 TO 4 xo%(i%) = 2 * i% - 5: yo%(i%) = 5: zo%(i%) = 5 xo%(i% + 5) = 2 * i% - 5: yo%(i% + 5) = 5: zo%(i% + 5) = -5 xo%(i% + 10) = 2 * i% - 5: yo%(i% + 10) = -5: zo%(i% + 10) = 5 xo%(i% + 15) = 2 * i% - 5: yo%(i% + 15) = -5: zo%(i% + 15) = -5 xo%(i% + 20) = -5: yo%(i% + 20) = 5: zo%(i% + 20) = 2 * i% - 5 xo%(i% + 25) = 5: yo%(i% + 25) = 5: zo%(i% + 25) = 2 * i% - 5 xo%(i% + 30) = -5: yo%(i% + 30) = -5: zo%(i% + 30) = 2 * i% - 5 xo%(i% + 35) = 5: yo%(i% + 35) = -5: zo%(i% + 35) = 2 * i% - 5 xo%(i% + 40) = 5: yo%(i% + 40) = 2 * i% - 5: zo%(i% + 40) = 5 xo%(i% + 45) = 5: yo%(i% + 45) = 2 * i% - 5: zo%(i% + 45) = -5 xo%(i% + 50) = -5: yo%(i% + 50) = 2 * i% - 5: zo%(i% + 50) = 5 xo%(i% + 55) = -5: yo%(i% + 55) = 2 * i% - 5: zo%(i% + 55) = -5 NEXT i% xo%(60) = 5: yo%(60) = 5: zo%(60) = 5 xo%(61) = 5: yo%(61) = 5: zo%(61) = 5 xo%(62) = 5: yo%(62) = 5: zo%(62) = 5 xo%(63) = 5: yo%(63) = 5: zo%(63) = 5 ' ========== Random copier for object 1 ========== FOR j% = 1 TO 63 metx% = INT(RND * 64 - 32) mety% = INT(RND * 64 - 32) metz% = INT(RND * 64 - 32) FOR i% = 0 TO 63 xo%(i% + j% * 64) = xo%(i%) + metx% yo%(i% + j% * 64) = yo%(i%) + mety% zo%(i% + j% * 64) = zo%(i%) + metz% NEXT i% NEXT j% ' ================================= CASE 2 ' ========== Creating object 2 - Sphere ========== j% = 0 FOR i% = 90 TO 270 STEP 11.25 c = i% / rtm xo%(j%) = COS(c) * 63: yo%(j%) = SIN(c) * 63: zo%(j%) = 0 j% = j% + 1 NEXT i% yr = 0 FOR i% = 1 TO 15 yr = yr + 22.5 c = yr / rtm cosyr = COS(c) sinyr = SIN(c) FOR j% = 0 TO 15 xo%(j% + i% * 16) = cosyr * xo%(j%) - sinyr * zo%(j%) zo%(j% + i% * 16) = sinyr * xo%(j%) + cosyr * zo%(j%) yo%(j% + i% * 16) = yo%(j%) NEXT j% NEXT i% ' ========== Random copier for object 2 ========== FOR j% = 1 TO 15 metx% = INT(RND * 512 - 256) mety% = INT(RND * 512 - 256) metz% = INT(RND * 512 - 256) FOR i% = 0 TO 255 xo%(i% + j% * 256) = xo%(i%) + metx% yo%(i% + j% * 256) = yo%(i%) + mety% zo%(i% + j% * 256) = zo%(i%) + metz% NEXT i% NEXT j% CASE 3 ' ========== Creating object 3 - Torus ========== j% = 0 FOR i% = 0 TO 359 STEP 22.5 c = i% / rtm xo%(j%) = COS(c) * 64: yo%(j%) = SIN(c) * 64: zo%(j%) = 0 j% = j% + 1 NEXT i% i% = 90 c = i% / rtm cosyr = COS(c) sinyr = SIN(c) FOR i% = 0 TO 15 xp = xo%(i%) xo%(i%) = cosyr * xp - sinyr * zo%(i%) zo%(i%) = sinyr * xp + cosyr * zo%(i%) yo%(i%) = yo%(i%) - 192 NEXT i% zr = 0 FOR j% = 1 TO 31 zr = zr + 11.25 c = zr / rtm coszr = COS(c) sinzr = SIN(c) FOR i% = 0 TO 15 xo%(i% + j% * 16) = coszr * xo%(i%) - sinzr * yo%(i%) yo%(i% + j% * 16) = sinzr * xo%(i%) + coszr * yo%(i%) zo%(i% + j% * 16) = zo%(i%) NEXT i% NEXT j% ' ========== Random copier for object 3 ========== FOR j% = 1 TO 7 xr = (INT(RND * 180) - 90) / rtm yr = (INT(RND * 180) - 90) / rtm zr = (INT(RND * 180) - 90) / rtm cosxr = COS(xr) cosyr = COS(yr) coszr = COS(zr) sinxr = SIN(xr) sinyr = SIN(yr) sinzr = SIN(zr) metx% = INT(RND * 1024 - 512) mety% = INT(RND * 1024 - 512) metz% = INT(RND * 1024 - 512) FOR i% = 0 TO 511 x(i%) = cosyr * xo%(i%) - sinyr * zo%(i%) z(i%) = sinyr * xo%(i%) + cosyr * zo%(i%) y(i%) = cosxr * yo%(i%) - sinxr * z(i%) z(i%) = sinxr * yo%(i%) + cosxr * z(i%) nx = x(i%) x(i%) = coszr * nx - sinzr * y(i%) y(i%) = sinzr * nx + coszr * y(i%) xo%(i% + j% * 512) = x(i%) + metx% yo%(i% + j% * 512) = y(i%) + mety% zo%(i% + j% * 512) = z(i%) + metz% NEXT i% NEXT j% CASE ELSE END SELECT END SUB SUB crosfade (r1%(), r2%(), g1%(), g2%(), b1%(), b2%()) SHARED xit% FOR k% = 0 TO 63 WAIT &H3DA, 8: WAIT &H3DA, 8, 8 IF xit% = 0 THEN keyaction IF xit% = 1 THEN GOTO endcrosfade OUT &H3C8, 0 FOR c% = 0 TO 255 IF r1%(c%) < r2%(c%) THEN r1%(c%) = r1%(c%) + 1 ELSE IF r1%(c%) > r2%(c%) THEN r1%(c%) = r1%(c%) - 1 IF g1%(c%) < g2%(c%) THEN g1%(c%) = g1%(c%) + 1 ELSE IF g1%(c%) > g2%(c%) THEN g1%(c%) = g1%(c%) - 1 IF b1%(c%) < b2%(c%) THEN b1%(c%) = b1%(c%) + 1 ELSE IF b1%(c%) > b2%(c%) THEN b1%(c%) = b1%(c%) - 1 OUT &H3C9, r1%(c%) OUT &H3C9, g1%(c%) OUT &H3C9, b1%(c%) NEXT c% NEXT k% endcrosfade: END SUB SUB cycleblobs SHARED xit% n% = 7 FOR i% = 0 TO 127 OUT &H3C8, i% OUT &H3C9, 0 OUT &H3C9, 0 OUT &H3C9, 0 NEXT i% FOR y% = 0 TO 99 FOR x% = 0 TO 159 sp%(p%) = 16384 \ SQR((160 - x%) ^ 2 + (100 - y%) ^ 2) ^ 1.5 IF sp%(p%) > 255 THEN sp%(p%) = 255 p% = p% + 1 NEXT x% NEXT y% FOR i% = 0 TO 319 IF i% < 160 THEN fsin2%(i%) = i% ELSE fsin2%(i%) = 319 - i% NEXT i% FOR i% = 0 TO 199 IF i% > 99 THEN fsin3%(i%) = (199 - i%) * 160 ELSE fsin3%(i%) = i% * 160 NEXT i% FOR i% = 0 TO 1792 IF i% > 255 THEN cd%(i%) = 255 ELSE cd%(i%) = i% NEXT i% FOR i% = 1 TO n% dsx%(i%) = INT(RND * 35 + 25) dsy%(i%) = INT(RND * 35 + 25) psx%(i%) = INT(RND * 64 + 64) psy%(i%) = INT(RND * 50 + 50) NEXT i% m% = 0: q% = 32: r%(1) = 1: g%(1) = 1: B%(1) = 1 fps% = 0 DO fps% = fps% + 1 k% = k% + 1 m% = m% + 1 IF fps% < 1600 AND m% = q% THEN m% = 0: q% = INT(RND * 255 + 5): r%(1) = r%(2): g%(1) = g%(2): B%(1) = B%(2): r%(2) = INT(RND * 63) + 1: g%(2) = INT(RND * 63) + 1: B%(2) = INT(RND * 63) + 1 IF fps% > 1600 AND fps% < 1855 AND m% = q% THEN sq% = 1: m% = 0: q% = 255: r%(1) = r%(2): g%(1) = g%(2): B%(1) = B%(2): r%(2) = 0: g%(2) = 0: B%(2) = 0 IF fps% > 1856 AND sq% = 1 AND m% >= q% THEN GOTO gout4 IF fps% > 2100 THEN GOTO gout4 r% = r%(1) + (r%(2) - r%(1)) / q% * m% g% = g%(1) + (g%(2) - g%(1)) / q% * m% B% = B%(1) + (B%(2) - B%(1)) / q% * m% IF r% = 0 THEN r% = 1 IF g% = 0 THEN g% = 1 IF B% = 0 THEN B% = 1 FOR c% = 128 TO 255 OUT &H3C8, c% IF c% < 192 THEN OUT &H3C9, (c% - 128) / (63 / r%): OUT &H3C9, (c% - 128) / (63 / g%): OUT &H3C9, (c% - 128) / (63 / B%) ELSE OUT &H3C9, (255 - c%) / (63 / r%): OUT &H3C9, (255 - c%) / (63 / g%): OUT &H3C9, (255 - c%) / (63 / B%) NEXT c% FOR i% = 1 TO n% xp1%(i%) = SIN(k% / dsx%(i%)) * psx%(i%) yp1%(i%) = SIN(k% / dsy%(i%)) * psy%(i%) NEXT i% yp% = 0 FOR y% = 0 TO 199 DEF SEG = &HA000 + yp% yp% = yp% + 20 yy%(1) = fsin3%(y% - yp1%(1)) yy%(2) = fsin3%(y% - yp1%(2)) yy%(3) = fsin3%(y% - yp1%(3)) yy%(4) = fsin3%(y% - yp1%(4)) yy%(5) = fsin3%(y% - yp1%(5)) yy%(6) = fsin3%(y% - yp1%(6)) yy%(7) = fsin3%(y% - yp1%(7)) FOR x% = 24 TO 295 dn% = sp%(yy%(1) + fsin2%(x% - xp1%(1))) + sp%(yy%(2) + fsin2%(x% - xp1%(2))) + sp%(yy%(3) + fsin2%(x% - xp1%(3))) + sp%(yy%(4) + fsin2%(x% - xp1%(4))) + sp%(yy%(5) + fsin2%(x% - xp1%(5))) + sp%(yy%(6) + fsin2%(x% - xp1%(6))) + sp%(yy%(7) + fsin2%( _ x% - xp1%(7))) POKE x%, cd%(dn%) NEXT x% NEXT y% WAIT &H3DA, 8: WAIT &H3DA, 8, 8 IF xit% = 0 THEN keyaction IF xit% = 1 THEN GOTO gout4 LOOP gout4: END SUB SUB deedlinesax (c%) SHARED xit% LINE (20, 20)-(25, 80), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (25, 80)-(60, 70), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (60, 70)-(55, 30), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (55, 30)-(20, 20), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (25, 25)-(30, 60), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (30, 60)-(50, 65), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (50, 65)-(25, 25), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax IF c% = 15 THEN f% = INT(RND * 255) ELSE f% = 0 PAINT (23, 23), f%, c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (65, 20)-(100, 24), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (100, 24)-(70, 34), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (70, 34)-(85, 44), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (85, 44)-(75, 54), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (75, 54)-(75, 64), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (75, 64)-(85, 64), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (85, 64)-(70, 70), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (70, 70)-(65, 20), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax IF c% = 15 THEN f% = INT(RND * 255) ELSE f% = 0 PAINT (66, 21), f%, c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (110, 30)-(130, 30), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (130, 30)-(110, 40), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (110, 40)-(110, 50), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (110, 50)-(125, 50), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (125, 50)-(125, 55), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (125, 55)-(110, 55), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (110, 55)-(110, 65), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (110, 65)-(120, 65), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (120, 65)-(120, 70), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (120, 70)-(100, 70), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (100, 70)-(110, 30), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax IF c% = 15 THEN f% = INT(RND * 255) ELSE f% = 0 PAINT (111, 31), f%, c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (150, 40)-(130, 20), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (130, 20)-(140, 70), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (140, 70)-(150, 40), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (135, 30)-(140, 60), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (140, 60)-(145, 40), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (145, 40)-(135, 30), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax IF c% = 15 THEN f% = INT(RND * 255) ELSE f% = 0 PAINT (133, 25), f%, c%: delay 10 LINE (160, 30)-(165, 70), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (165, 70)-(190, 70), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (190, 70)-(175, 65), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (175, 65)-(160, 30), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax IF c% = 15 THEN f% = INT(RND * 255) ELSE f% = 0 PAINT (164, 40), f%, c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (180, 20)-(190, 60), c%, BF: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (195, 20)-(195, 70), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (195, 70)-(200, 40), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (200, 40)-(220, 65), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (220, 65)-(220, 35), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (220, 35)-(215, 55), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (215, 55)-(195, 20), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax IF c% = 15 THEN f% = INT(RND * 255) ELSE f% = 0 PAINT (196, 30), f%, c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (245, 20)-(225, 20), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (225, 20)-(225, 60), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (225, 60)-(250, 60), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (250, 60)-(250, 50), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (250, 50)-(230, 50), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (230, 50)-(230, 40), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (230, 40)-(240, 40), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (240, 40)-(240, 35), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (240, 35)-(228, 35), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (228, 35)-(230, 25), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (230, 25)-(245, 20), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax IF c% = 15 THEN f% = INT(RND * 255) ELSE f% = 0 PAINT (227, 24), f%, c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (300, 5)-(260, 8), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (260, 8)-(290, 58), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (290, 58)-(250, 68), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (250, 68)-(305, 64), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (305, 64)-(270, 18), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax LINE (270, 18)-(300, 5), c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax IF c% = 15 THEN f% = INT(RND * 255) ELSE f% = 0 PAINT (265, 10), f%, c%: delay 10: IF xit% = 1 THEN GOTO enddeedlinesax COLOR c% \ 15 LOCATE 1, 1: PRINT "SAX!" delay 70: IF xit% = 1 THEN GOTO enddeedlinesax FOR y% = 0 TO 63 FOR x% = 0 TO 255 a% = POINT(x% \ 8, y% \ 8) * (SIN(y% / 45) * c% + COS(x% / 45) * c% + 2 * c%) PSET (x% + 40, y% + 100), a% NEXT x% NEXT y% delay 140: IF xit% = 1 THEN GOTO enddeedlinesax COLOR c% LOCATE 22, 10: PRINT "Not so serious side :)": PRINT "Just for fun or boredom to draw anything" enddeedlinesax: END SUB SUB delay (t%) SHARED xit% FOR i% = 1 TO t% WAIT &H3DA, 8: WAIT &H3DA, 8, 8 keyaction IF xit% = 1 THEN GOTO endelay NEXT i% endelay: END SUB SUB fadefromcolor (a%, c%, t%, r%, g%, B%) SHARED xit% FOR s% = 1 TO t% OUT &H3C8, a% FOR k% = a% TO c% OUT &H3C9, r% + s% * ((r%(k%) - r%) / t%) OUT &H3C9, g% + s% * ((g%(k%) - g%) / t%) OUT &H3C9, B% + s% * ((B%(k%) - B%) / t%) NEXT k% WAIT &H3DA, 8: WAIT &H3DA, 8, 8 IF xit% = 0 THEN keyaction IF xit% = 1 THEN GOTO endfadefromcolor NEXT s% endfadefromcolor: END SUB SUB fadetocolor (a%, c%, t%, r%, g%, B%) SHARED xit% FOR s% = 1 TO t% OUT &H3C8, a% FOR k% = a% TO c% OUT &H3C9, r%(k%) + s% * ((r% - r%(k%)) / t%) OUT &H3C9, g%(k%) + s% * ((g% - g%(k%)) / t%) OUT &H3C9, B%(k%) + s% * ((B% - B%(k%)) / t%) NEXT k% WAIT &H3DA, 8: WAIT &H3DA, 8, 8 IF xit% = 0 THEN keyaction IF xit% = 1 THEN GOTO endfadetocolor NEXT s% endfadetocolor: END SUB SUB getmap (a$) ' ------------------ Get Map -------------------- open ".\samples\pete\optimus\"+a$ FOR BINARY AS #1 GET #1, 1, a$ xg% = ASC(a$) GET #1, 2, a$ yg% = ASC(a$) k% = 2 FOR y% = 0 TO yg% - 1 FOR x% = 0 TO xg% - 1 k% = k% + 1 GET #1, k%, a$ cd%(y% * 32 + x%) = ASC(a$) NEXT x% NEXT y% CLOSE END SUB SUB getpal OUT &H3C7, 0 FOR k% = 0 TO 255 r%(k%) = INP(&H3C9) g%(k%) = INP(&H3C9) B%(k%) = INP(&H3C9) NEXT k% END SUB SUB initcrosfadepics (a%, B%) FOR l% = 0 TO 11 FOR g% = 0 TO 19 c$ = MID$(text$(a%, l%), g% + 1, 1) d$ = MID$(text$(B%, l%), g% + 1, 1) yp% = 0 FOR y% = 0 TO 15 DEF SEG = &HA000 + yp% + l% * 320 yp% = yp% + 20 FOR x% = 0 TO 15 POKE x% + g% * 16, fonts%(fpos%(ASC(c$)) * 256 + y% * 16 + x%) OR (fonts%(fpos%(ASC(d$)) * 256 + y% * 16 + x%)) * 16 NEXT x% NEXT y% NEXT g% NEXT l% END SUB SUB Intersections SHARED px%, py%, pa%, ps% SHARED va%, ra, dpp% va = pa% + 32.2 IF va > 360 THEN va = 32.2 - (360 - pa%) FOR sl% = 0 TO 319 va = va - ra IF va < 0 THEN va = 358.8 va% = va IF va% = 0 OR va% = 180 OR va% = 360 THEN GOTO 112 ' ---------- Horizontal intersection ---------------- IF va% > 0 AND va% < 180 THEN ay% = (py% \ 64) * 64 - 1 ELSE IF va% > 180 AND va% < 360 THEN ay% = (py% \ 64) * 64 + 64 ax% = px% + (py% - ay%) / TAN(va / 57.3) bx% = ax% \ 64 by% = ay% \ 64 IF bx% < 0 THEN bx% = 0 IF bx% > 31 THEN bx% = 31 IF by% < 0 THEN by% = 0 IF by% > 31 THEN by% = 31 IF cd%(mul32%(by%) + bx%) = 1 THEN cx% = ax%: cy% = ay%: GOTO 112 IF va% > 0 AND va% < 180 THEN yd% = -64 ELSE IF va% > 180 AND va% < 360 THEN yd% = 64 xd% = (-yd%) / TAN(va / 57.3) IF xd% > 2048 THEN xd% = 2048 IF xd% < -2048 THEN xd% = -2048 cx% = ax%: cy% = ay% DO cx% = cx% + xd%: IF cx% > 2048 OR cx% < -2048 THEN GOTO 112 cy% = cy% + yd%: IF cy% > 2048 OR cy% < -2048 THEN GOTO 112 bx% = cx% \ 64: by% = cy% \ 64 IF bx% < 0 THEN bx% = 0 IF bx% > 31 THEN bx% = 31 IF by% < 0 THEN by% = 0 IF by% > 31 THEN by% = 31 LOOP UNTIL cd%(mul32%(by%) + bx%) = 1 OR bx% = 31 OR by% = 31 112 cxa% = cx%: cya% = cy% IF va% = 90 OR va% = 270 THEN GOTO 113 ' ---------- Vertical intersection ---------------- IF va% > 270 OR va% < 90 THEN ax% = (px% \ 64) * 64 + 64 ELSE IF va% > 90 OR va% < 270 THEN ax% = (px% \ 64) * 64 - 1 ay% = py% - (ax% - px%) * TAN(va / 57.3) bx% = ax% \ 64 by% = ay% \ 64 IF bx% < 0 THEN bx% = 0 IF bx% > 31 THEN bx% = 31 IF by% < 0 THEN by% = 0 IF by% > 31 THEN by% = 31 IF cd%(mul32%(by%) + bx%) = 1 THEN cx% = ax%: cy% = ay%: GOTO 113 IF va% > 270 OR va% < 90 THEN xd% = 64 ELSE IF va% > 90 OR va% < 270 THEN xd% = -64 yd% = (-xd%) * TAN(va / 57.3) cx% = ax%: cy% = ay% DO cx% = cx% + xd%: cy% = cy% + yd% bx% = cx% \ 64: by% = cy% \ 64 IF bx% < 0 OR bx% > 31 THEN bx% = 31 IF by% < 0 OR by% > 31 THEN by% = 31 LOOP UNTIL cd%(mul32%(by%) + bx%) = 1 OR bx% = 31 OR by% = 31 113 cxb% = cx%: cyb% = cy% wdisa% = SQR((px% - cxa%) ^ 2 + (py% - cya%) ^ 2) wdisb% = SQR((px% - cxb%) ^ 2 + (py% - cyb%) ^ 2) IF wdisa% < wdisb% THEN wdis% = wdisa% ELSE wdis% = wdisb% dis%(sl%) = wdis% * COS((pa% - va) / 57.3) slc%(sl%) = 64 * (dpp% / dis%(sl%)) IF slc%(sl%) > 200 THEN slc%(sl%) = 200 sc%(sl%) = 254 - dis%(sl%) \ 2: IF sc%(sl%) < 0 THEN sc%(sl%) = 0 sla%(sl%) = (200 - slc%(sl%)) \ 2: slb%(sl%) = sla%(sl%) + slc%(sl%) NEXT sl% 117 END SUB SUB keyaction SHARED xit% kb% = INP(&H60) IF kb% = 1 THEN xit% = 1 END SUB SUB load3drecord SHARED gi$, gg$, ggi%, gi%, filei%, gg% IF ggi% < gi% THEN ggi% = ggi% + 1 ELSE GET #2, , gi$: gi% = ASC(gi$): GET #2, , gg$: gg% = ASC(gg$): ggi% = 1: filei% = filei% + 2 END SUB SUB loadobject (a$) SHARED ndts%, nlns%, npls% clearscreen 0 open ".\samples\pete\optimus\"+a$ FOR BINARY AS #1 GET #1, , ndts% GET #1, , nlns% GET #1, , npls% a$ = " " FOR i% = 0 TO ndts% - 1 GET #1, , a$: xo%(i%) = ASC(a$) - 128 GET #1, , a$: yo%(i%) = ASC(a$) - 128 GET #1, , a$: zo%(i%) = ASC(a$) - 128 NEXT i% FOR i% = 0 TO nlns% - 1 'GET #1, , ln%(i%, 0) 'GET #1, , ln%(i%, 1) NEXT i% FOR i% = 0 TO npls% - 1 'GET #1, , pl%(i%, 0) 'GET #1, , pl%(i%, 1) 'GET #1, , pl%(i%, 2) NEXT i% CLOSE #1 END SUB SUB loadqbinside ' ------------ Load Quickbasic inside Big -------------- a$ = "qbrules.spr" c$ = " " open ".\samples\pete\optimus\"+a$ FOR BINARY AS #1 OUT &H3C8, 128 FOR i% = 0 TO 383 GET #1, , c$: OUT &H3C9, ASC(c$) NEXT i% xg% = 100 yg% = 100 i% = 0 FOR y% = 1 TO yg% FOR x% = 1 TO xg% GET #1, , c$: sp%(i%) = ASC(c$) i% = i% + 1 NEXT x% NEXT y% CLOSE #1 END SUB SUB loadrecord SHARED k$, gi$, gg$, ggi%, gi%, filei%, gg% IF ggi% < gi% THEN ggi% = ggi% + 1 ELSE GET #2, , gi$: gi% = ASC(gi$): GET #2, , gg$: gg% = ASC(gg$): ggi% = 1: filei% = filei% + 2 pushgg% = gg% FOR i% = 4 TO 1 STEP -1 IF gg% - 2 ^ (i% - 1) >= 0 THEN gg% = gg% - 2 ^ (i% - 1): ka%(i%) = 1 ELSE ka%(i%) = 0 NEXT i% gg% = pushgg% kon%(75) = ka%(1) kon%(77) = ka%(2) kon%(72) = ka%(3) kon%(80) = ka%(4) END SUB SUB mov3dpos (xp, yp, zp) SHARED ndts% FOR i% = 0 TO ndts% - 1 x(i%) = x(i%) + xp y(i%) = y(i%) + yp z(i%) = z(i%) + zp NEXT i% END SUB SUB Output0 SHARED map%, px%, py% ' -------------- Output ------------------ cx% = px% \ 64 cy% = py% \ 64 SELECT CASE map% CASE 0 yp% = 0 FOR y% = 0 TO 199 DEF SEG = &HA000 + yp% yp% = yp% + 20 FOR x% = 0 TO 319 IF y% > sla%(x%) AND y% < slb%(x%) THEN POKE x%, sc%(x%) ELSE POKE x%, fs%(y%) NEXT x% NEXT y% sp%(mul128%(py% \ 16) + px% \ 16) = 24 CASE 1 yp% = 0 FOR y% = 0 TO 199 DEF SEG = &HA000 + yp% yp% = yp% + 20 FOR x% = 0 TO 319 IF y% > sla%(x%) AND y% < slb%(x%) THEN c% = sc%(x%) ELSE c% = fs%(y%) IF x% > 127 OR y% > 127 THEN POKE x%, c% ELSE POKE x%, div2%(c%) + sp%(mul128%(y%) + x%) NEXT x% NEXT y% sp%(mul128%(py% \ 16) + px% \ 16) = 24 CASE ELSE END SELECT END SUB SUB output3d SHARED ftype%, ndts%, nlns%, obj% SHARED filei% zp% = zpo%(obj%) SELECT CASE ftype% CASE IS = 0 FOR i% = 0 TO ndts% - 1 xak% = xs%(i%, 1) + 160 IF xak% > -1 AND xak% < 320 AND ys%(i%, 1) > -101 AND ys%(i%, 1) < 100 THEN POKE ypk&(ys%(i%, 1)) + xak%, 0 xsk% = xs%(i%, 0) + 160 c% = 256 - z(i%) * (80 / zp%): IF c% < 80 THEN c% = 80 IF xsk% > -1 AND xsk% < 320 AND ys%(i%, 0) > -101 AND ys%(i%, 0) < 100 THEN POKE ypk&(ys%(i%, 0)) + xsk%, c% NEXT i% SELECT CASE filei% CASE 0 TO 10, 780 TO 936, 1320 TO 1440, 2162 TO 2400, 3520 TO 3640, 4180 TO 4230 CASE ELSE WAIT &H3DA, 8: WAIT &H3DA, 8, 8 END SELECT CASE ELSE 'FOR i% = 0 TO nlns% - 1 'LINE (xs%(ln%(i%, 0), 1) + 160, ys%(ln%(i%, 0), 1) + 100)-(xs%(ln%(i%, 1), 1) + 160, ys%(ln%(i%, 1), 1) + 100), 1 'NEXT i% clearscreen 1 OUT &H3C8, 0 OUT &H3C9, 0 OUT &H3C9, 0 OUT &H3C9, 0 WAIT &H3DA, 8: WAIT &H3DA, 8, 8 OUT &H3C8, 0 OUT &H3C9, 63 OUT &H3C9, 0 OUT &H3C9, 0 FOR i% = 0 TO nlns% - 1 'LINE (xs%(ln%(i%, 0), 0) + 160, ys%(ln%(i%, 0), 0) + 100)-(xs%(ln%(i%, 1), 0) + 160, ys%(ln%(i%, 1), 0) + 100), 15 NEXT i% END SELECT END SUB SUB plasmablobs SHARED xit% meg = 1.3 n% = 3 OUT &H3C8, 0 FOR i% = 0 TO 127 OUT &H3C9, 0 OUT &H3C9, 0 OUT &H3C9, 0 NEXT i% FOR i% = 128 TO 159 OUT &H3C9, 0 OUT &H3C9, (i% - 128) * 2 OUT &H3C9, 0 NEXT i% FOR i% = 160 TO 191 OUT &H3C9, 0 OUT &H3C9, (191 - i%) * 2 OUT &H3C9, 0 NEXT i% FOR i% = 192 TO 255 OUT &H3C9, i% - 192 OUT &H3C9, i% - 192 OUT &H3C9, i% - 192 NEXT i% getpal OUT &H3C8, 0 FOR i% = 0 TO 255 OUT &H3C9, 0 OUT &H3C9, 0 OUT &H3C9, 0 NEXT i% FOR i% = -157 TO 518 IF i% > -1 AND i% < 519 THEN fsin1%(i%) = SIN(i% / 45) * 63: fsin2%(i%) = SIN(i% / 35) * 127 IF i% > -158 AND i% < 476 THEN fsin3%(i%) = SIN(i% / 25) * 31 NEXT i% rc% = -1 FOR i% = -1 TO -156 STEP -1 dt100%(i%) = 63 - (i% - ((i% - 63) \ 64) * 64) IF rc% = 1 THEN dt100%(i%) = 63 - dt100%(i%) IF dt100%(i%) = 0 AND rc% = 1 THEN rc% = -1 IF dt100%(i%) = 63 AND rc% = -1 THEN rc% = 1 NEXT i% rc% = 1 FOR i% = 0 TO 156 dt100%(i%) = i% - ((i%) \ 64) * 64 IF rc% = -1 THEN dt100%(i%) = 63 - dt100%(i%) IF dt100%(i%) = 63 AND rc% = 1 THEN rc% = -1 IF dt100%(i%) = 0 AND rc% = -1 THEN rc% = 1 NEXT i% DIM cf%(0 TO 4095) l% = 0 FOR i% = 0 TO 63 FOR k% = 0 TO 63 cf%(l%) = i% * (k% / 63) l% = l% + 1 NEXT k% NEXT i% i% = 0 FOR y% = 0 TO 99 FOR x% = 0 TO 159 IF x% = 159 AND y% = 99 THEN sp%(i%) = 255 ELSE sp%(i%) = 16384 \ SQR((159 - x%) ^ 2 + (99 - y%) ^ 2) ^ meg IF sp%(i%) > 255 THEN sp%(i%) = 255 i% = i% + 1 NEXT x% NEXT y% FOR i% = -160 TO 479 IF i% < 0 OR i% > 319 THEN fsin4%(i%) = 0 ELSE IF i% < 160 THEN fsin4%(i%) = i% ELSE fsin4%(i%) = 319 - i% NEXT i% FOR i% = -100 TO 300 IF i% < 0 OR i% > 199 THEN cy%(i%) = 0 ELSE IF i% > 99 THEN cy%(i%) = 199 - i% ELSE cy%(i%) = i% cy%(i%) = cy%(i%) * 160 NEXT i% FOR i% = 0 TO 767 IF i% > 255 THEN cd%(i%) = 255 ELSE cd%(i%) = i% NEXT i% FOR i% = -192 TO 63 dt%(i%) = i% * 64 NEXT i% FOR i% = 1 TO n% dsx%(i%) = INT(RND * 45 + 45) dsy%(i%) = INT(RND * 30 + 30) psx%(i%) = INT(RND * 80 + 80) psy%(i%) = INT(RND * 50 + 50) NEXT i% k% = 0 l% = 0 ax = TIMER s% = 0: t% = 256 s1% = 0: t1% = 256 k0% = 128: k1% = 191 l0% = 128: l1% = 191 r1% = 0: g1% = 0: b1% = 0 fps% = 0 DO fps% = fps% + 1 k% = k% + 2 IF k% > 156 THEN k% = 0 l% = l% + 1 FOR i% = 1 TO n% xp1%(i%) = SIN(l% / dsx%(i%)) * psx%(i%) yp1%(i%) = SIN(l% / dsy%(i%)) * psy%(i%) NEXT i% IF fps% = 512 THEN k0% = 192: k1% = 255: s% = 0 IF fps% = 1512 THEN fadeout% = 1 IF fps% = 2500 THEN getpal: s1% = 0: l0% = 0: l1% = 255: r1% = 63: g1% = 63: b1% = 63 IF fps% = 2800 THEN GOTO gout7 IF s% < t% THEN s% = s% + 1 ELSE GOTO endfadepal1 FOR kk% = k0% TO k1% OUT &H3C8, kk% OUT &H3C9, 0 + s% * ((r%(kk%) - 0) / t%) OUT &H3C9, 0 + s% * ((g%(kk%) - 0) / t%) OUT &H3C9, 0 + s% * ((B%(kk%) - 0) / t%) NEXT kk% endfadepal1: IF fadeout% = 0 THEN GOTO nofadeout1 IF s1% < t1% THEN s1% = s1% + 1 FOR kk% = l0% TO l1% OUT &H3C8, kk% OUT &H3C9, r%(kk%) + s1% * ((r1% - r%(kk%)) / t1%) OUT &H3C9, g%(kk%) + s1% * ((g1% - g%(kk%)) / t1%) OUT &H3C9, B%(kk%) + s1% * ((b1% - B%(kk%)) / t1%) NEXT kk% nofadeout1: yp% = 0 FOR y% = 0 TO 199 DEF SEG = &HA000 + yp% yp% = yp% + 20 yy%(1) = cy%(y% - yp1%(1)) yy%(2) = cy%(y% - yp1%(2)) yy%(3) = cy%(y% - yp1%(3)) FOR x% = 0 TO 319 dyn% = cd%(sp%(yy%(1) + fsin4%(x% - xp1%(1))) + sp%(yy%(2) + fsin4%(x% - xp1%(2))) + sp%(yy%(3) + fsin4%(x% - xp1%(3)))) IF dyn% < 192 THEN POKE x%, dyn% ELSE pls% = dt100%(fsin3%(x% + k%) + fsin3%(y%) + fsin1%(x% + y%) + fsin3%(fsin3%(y% - k%) + fsin2%(x%) + k%)): POKE x%, cf%(dt%(dyn% - 192) + pls%) + 192 NEXT x% NEXT y% WAIT &H3DA, 8: WAIT &H3DA, 8, 8 IF xit% = 0 THEN keyaction IF xit% = 1 THEN GOTO gout7 LOOP gout7: END SUB SUB precalculations REM --------- Div2 ----------- FOR i% = 0 TO 255 div2%(i%) = i% \ 2 NEXT i% REM --------- Div4 ----------- FOR i% = 0 TO 320 div4%(i%) = i% \ 4 NEXT i% REM ----------- Mul32 ------------- FOR i% = 0 TO 32 mul32%(i%) = i% * 32 NEXT i% REM ----------- Nul128 ------------ FOR i% = 0 TO 127 mul128%(i%) = i% * 128 NEXT i% REM --------- Map Output buffer precalc --------- i% = 0 FOR y% = 0 TO 127 FOR x% = 0 TO 127 sp%(i%) = cd%((y% \ 4) * 32 + x% \ 4) * 128 i% = i% + 1 NEXT x% NEXT y% REM ----------- Floor&Ceiling Shades ------------- ast = 32 / 100 ang = 0 FOR i% = 0 TO 99 IF ang = 0 THEN ang = .01 dist = 24 / SIN(ang / 57.3) fs = (255 - dist) IF fs < 0 THEN fs%(99 - i%) = 0 ELSE fs%(99 - i%) = fs fs%(i% + 100) = fs%(99 - i%) ang = ang + ast NEXT i% END SUB SUB prehistoricode SHARED xit% l% = 15 SCREEN 12 1 keyaction IF xit% = 1 THEN GOTO prehistoricodend COLOR 15: LOCATE 15, 18: PRINT "Press the" + CHR$(34) + "any key" + CHR$(34) + " button to continue.. ;-)" c% = INT(RND * 63 + 1) FOR i% = 1 TO 640 STEP 15 LINE (i%, 480)-(640, 480 - i%), i% / c% NEXT i% cc% = cc% + 1 CIRCLE (cx%, cy%), cc%, l% IF cc% = 30 THEN cc% = 0: l% = 0: k% = 1: GOTO 1 IF k% = 1 AND cc% = 29 THEN cc% = 0: l% = 15: cx% = INT(RND * 640): cy% = INT(RND * 480): k% = 0 a$ = INKEY$ WHILE a$ = "" GOTO 1 a$ = "z" WEND FOR z% = 1 TO 480 keyaction IF xit% = 1 THEN GOTO prehistoricodend t% = 31 - z% / 16 CIRCLE (320, 240), z%, t% FOR i& = 0 TO 16383: NEXT i& NEXT z% FOR z% = 1 TO 640 keyaction IF xit% = 1 THEN GOTO prehistoricodend CIRCLE (320, 240), z%, 0 FOR i& = 0 TO 16383: NEXT i& NEXT z% prehistoricodend: END SUB SUB rgblights SHARED xit% meg = 2.2 n% = 3 FOR i% = 0 TO 127 OUT &H3C8, i% OUT &H3C9, 0 OUT &H3C9, 0 OUT &H3C9, 0 NEXT i% i% = 0 OUT &H3C8, 0 FOR a% = 0 TO 5 FOR B% = 0 TO 5 FOR c% = 0 TO 5 OUT &H3C9, a% * 12.6 OUT &H3C9, B% * 12.6 OUT &H3C9, c% * 12.6 r1%(i%) = i% i% = i% + 1 NEXT c% NEXT B% NEXT a% FOR i% = 0 TO 5 epi6%(i%) = i% * 6 epi36%(i%) = i% * 36 NEXT i% i% = 0 FOR y% = 0 TO 99 FOR x% = 0 TO 159 IF x% = 159 AND y% = 99 THEN sp%(i%) = 255 ELSE sp%(i%) = 16384 \ SQR((159 - x%) ^ 2 + (99 - y%) ^ 2) ^ meg IF sp%(i%) > 255 THEN sp%(i%) = 255 i% = i% + 1 NEXT x% NEXT y% FOR i% = -320 TO 639 IF i% < 0 OR i% > 319 THEN fsin3%(i%) = 0 ELSE IF i% < 160 THEN fsin3%(i%) = i% ELSE fsin3%(i%) = 319 - i% NEXT i% FOR i% = -300 TO 500 IF i% < 0 OR i% > 199 THEN fsin4%(i%) = 0 ELSE IF i% > 99 THEN fsin4%(i%) = 199 - i% ELSE fsin4%(i%) = i% fsin4%(i%) = fsin4%(i%) * 160 NEXT i% FOR i% = 0 TO 1792 IF i% > 5 THEN cd%(i%) = 5 ELSE cd%(i%) = i% NEXT i% FOR i% = 1 TO n% dsx%(i%) = INT(RND * 35 + 15) dsy%(i%) = INT(RND * 35 + 15) psx%(i%) = INT(RND * 80 + 80) psy%(i%) = INT(RND * 50 + 50) NEXT i% k% = 40 plx = 8: ply = 8 ax = TIMER DO k% = k% + 1 IF plx > 1 AND k% < 1024 THEN plx = plx - .025 IF ply > 1 AND k% < 1024 THEN ply = ply - .025 IF k% > 1024 THEN plx = plx + .01: ply = ply + .01 IF k% = 1220 THEN GOTO gout3 FOR i% = 1 TO n% psx% = psx%(i%) * plx psy% = psy%(i%) * ply IF psx% > 320 THEN psx% = 320 IF psy% > 300 THEN psy% = 300 xp1%(i%) = SIN(k% / dsx%(i%)) * psx% yp1%(i%) = SIN(k% / dsy%(i%)) * psy% NEXT i% yp% = 0 FOR y% = 0 TO 199 DEF SEG = &HA000 + yp% yp% = yp% + 20 yy%(1) = fsin4%(y% - yp1%(1)) yy%(2) = fsin4%(y% - yp1%(2)) yy%(3) = fsin4%(y% - yp1%(3)) FOR x% = 0 TO 319 ca% = cd%(sp%(yy%(1) + fsin3%(x% - xp1%(1)))) cb% = cd%(sp%(yy%(2) + fsin3%(x% - xp1%(2)))) cc% = cd%(sp%(yy%(3) + fsin3%(x% - xp1%(3)))) POKE x%, r1%(ca% + epi6%(cb%) + epi36%(cc%)) NEXT x% NEXT y% WAIT &H3DA, 8: WAIT &H3DA, 8, 8 IF xit% = 0 THEN keyaction IF xit% = 1 THEN GOTO gout3 LOOP gout3: END SUB SUB rotate3d (xr, yr, zr) SHARED ndts% cosxr = COS(xr) cosyr = COS(yr) coszr = COS(zr) sinxr = SIN(xr) sinyr = SIN(yr) sinzr = SIN(zr) FOR i% = 0 TO ndts% - 1 x(i%) = cosyr * xo%(i%) - sinyr * zo%(i%) z(i%) = sinyr * xo%(i%) + cosyr * zo%(i%) y(i%) = cosxr * yo%(i%) - sinxr * z(i%) z(i%) = sinxr * yo%(i%) + cosxr * z(i%) nx = x(i%) x(i%) = coszr * nx - sinzr * y(i%) y(i%) = sinzr * nx + coszr * y(i%) NEXT i% END SUB SUB saverecord SHARED k$ k$ = CHR$(kon%(75)): PUT #2, , k$ k$ = CHR$(kon%(77)): PUT #2, , k$ k$ = CHR$(kon%(72)): PUT #2, , k$ k$ = CHR$(kon%(80)): PUT #2, , k$ END SUB SUB setcrosfadepal (r1%(), r2%(), g1%(), g2%(), b1%(), b2%()) OUT &H3C8, 0 FOR j% = 0 TO 15 FOR i% = 0 TO 15 OUT &H3C9, i% * 4: r1%(j% * 16 + i%) = i% * 4 OUT &H3C9, i% * 4: g1%(j% * 16 + i%) = i% * 4 OUT &H3C9, i% * 4: b1%(j% * 16 + i%) = i% * 4 NEXT i% NEXT j% FOR i% = 0 TO 255 r2%(i%) = (i% \ 16) * 4 g2%(i%) = (i% \ 16) * 4 b2%(i%) = (i% \ 16) * 4 NEXT i% END SUB SUB setpal (c1%, c2%, r1%, g1%, b1%, r2%, g2%, b2%) dc% = c2% - c1% r = r1%: g = g1%: B = b1% OUT &H3C8, c1% FOR i% = c1% TO c2% OUT &H3C9, r OUT &H3C9, g OUT &H3C9, B r = r + (r2% - r1%) / dc% g = g + (g2% - g1%) / dc% B = B + (b2% - b1%) / dc% NEXT i% END SUB SUB spheremaplasma SHARED xit% ' ------------- Sphere mapped plasma ------------ setpal 0, 31, 0, 0, 0, 63, 0, 0 setpal 32, 63, 63, 0, 0, 63, 0, 63 setpal 64, 95, 63, 0, 63, 0, 63, 63 setpal 96, 127, 0, 63, 63, 0, 0, 0 setpal 128, 159, 0, 0, 31, 31, 0, 31 setpal 160, 191, 31, 0, 31, 31, 0, 63 setpal 192, 223, 31, 0, 63, 0, 47, 63 setpal 224, 254, 0, 47, 63, 0, 0, 31 getpal r%(255) = 0: g%(255) = 0: B%(255) = 31 setpal 0, 255, 63, 63, 63, 63, 63, 63 delay 210 a$ = "sphrprec.dat" fp& = -1 open ".\samples\pete\optimus\"+a$ FOR BINARY AS #1 FOR i% = 0 TO 16383 fp& = fp& + 2 GET #1, fp&, a$ xp% = ASC(a$) GET #1, fp& + 1, a$ yp% = ASC(a$) sp%(i%) = yp% * 128 + xp% IF i% = 64 * 128 + 64 THEN sp%(i%) = sp%(i%) + 1 NEXT i% CLOSE dg% = 99 FOR i% = -180 TO -1 dt%(i%) = i% - ((i% - dg% + 1) \ dg%) * dg% dt100%(i%) = (i% - ((i% - dg% + 1) \ dg%) * dg%) * 100 NEXT i% FOR i% = 0 TO 180 dt%(i%) = i% - ((i% - 1) \ dg%) * dg% dt100%(i%) = (i% - ((i% - 1) \ dg%) * dg%) * 100 NEXT i% FOR i% = -640 TO 518 fsin2%(i%) = SIN(i% / 16) * 31 NEXT i% FOR i% = -640 TO 715 fsin3%(i%) = SIN(i% / 63) * 75 NEXT i% FOR i% = -168 TO 168 mod256128%(i%) = ((i% + 512) MOD 256) \ 2 NEXT i% xs = 91: vxs = 1: ys = -96: vys = 0: fs = 0 yys% = 134 WHILE INKEY$ <> "": WEND s% = 0: t% = 256 s1% = 0: t1% = 256 fps% = 0 k% = 0: l% = 0 DO fps% = fps% + 1 k% = k% + 1: l% = l% + 1 IF k% = 101 THEN k% = 0 IF l% = 396 THEN l% = 0 m% = -1 IF fps% = 256 THEN fs = .02 IF fps% = 256 + 768 THEN yys% = 654 IF fps% = 256 + 1024 THEN fadeout% = 1 IF s% < t% THEN s% = s% + 1 ELSE GOTO endfadepal OUT &H3C8, 0 FOR n% = 0 TO 255 OUT &H3C9, 63 + s% * ((r%(n%) - 63) / t%) OUT &H3C9, 63 + s% * ((g%(n%) - 63) / t%) OUT &H3C9, 63 + s% * ((B%(n%) - 63) / t%) NEXT n% endfadepal: IF fadeout% = 0 THEN GOTO nofadeout IF s1% < t1% THEN s1% = s1% + 1 ELSE GOTO gout OUT &H3C8, 0 FOR n% = 0 TO 255 OUT &H3C9, r%(n%) + s1% * ((0 - r%(n%)) / t1%) OUT &H3C9, g%(n%) + s1% * ((0 - g%(n%)) / t1%) OUT &H3C9, B%(n%) + s1% * ((0 - B%(n%)) / t1%) NEXT n% nofadeout: xs = xs + vxs: IF xs > 254 OR xs < 65 THEN vxs = -vxs vys = vys + fs ys = ys + vys IF ys > yys% THEN ys = ys - vys: vys = -vys * .8 xs% = xs: ys% = ys sy% = ys% - 63 sx% = xs% - 63 IF sy% < 0 AND sy% > -128 THEN m% = sy% * (-128) - 1 yw1% = -1 + sy%: yw2% = 128 + sy% xw1% = -1 + sx%: xw2% = 128 + sx% FOR y% = 0 TO 199 DEF SEG = &HA000 + y% * 20 IF y% > yw1% AND y% < yw2% THEN GOTO 111 FOR x% = 0 TO 319 c% = fsin2%(x%) + fsin3%(y% + l%) + fsin2%(x% + y%) + fsin2%(fsin3%(x% + l%) - fsin2%(x% - y% - k%)) POKE x%, mod256128%(c%) NEXT x% GOTO 1121 111 FOR x% = 0 TO 319 IF x% > xw1% AND x% < xw2% THEN m% = m% + 1: yn% = sp%(m%) \ 128: xn% = sp%(m%) - yn% * 128 + sx%: yn% = yn% + sy%: spp% = 128 ELSE xn% = x%: yn% = y% IF xn% = x% AND yn% = y% THEN spp% = 0 c% = fsin2%(xn%) + fsin3%(yn% + l%) + fsin2%(xn% + yn%) + fsin2%(fsin3%(xn% + l%) - fsin2%(xn% - yn% - k%)) POKE x%, mod256128%(c%) + spp% NEXT x% 1121 NEXT y% 'OUT &H3C8, 0 'OUT &H3C9, 0 'OUT &H3C9, 0 'OUT &H3C9, 0 WAIT &H3DA, 8: WAIT &H3DA, 8, 8 IF xit% = 0 THEN keyaction IF xit% = 1 THEN GOTO gout 'OUT &H3C8, 0 'OUT &H3C9, 63 'OUT &H3C9, 0 'OUT &H3C9, 0 LOOP gout: END SUB SUB sucking SHARED xit% SCREEN 13 COLOR 15 LOCATE 1, 1: PRINT "Still Sucking?" FOR y% = 7 TO 0 STEP -1 FOR x% = 14 * 8 - 1 TO 0 STEP -1 c% = POINT(x%, y%) * (y% + 1) * SIN((x% + y%) / 45) LINE (x% * 2.8, y% * 16 + 32)-((x% + 1) * 2.8, (y% + 1) * 16 + 32), c%, BF NEXT x% NEXT y% END SUB SUB translate3d SHARED ndts%, obj% IF obj% = 1 THEN zpr% = 1 IF obj% = 2 OR obj% = 3 THEN zpr% = 4 IF obj% = 4 THEN zpr% = 16 IF obj% > 4 THEN zpr% = 8 FOR i% = 0 TO ndts% - 1 xs%(i%, 1) = xs%(i%, 0) ys%(i%, 1) = ys%(i%, 0) IF z(i%) <= zpr% THEN GOTO 10 xs%(i%, 0) = (x(i%) * 256) / z(i%) ys%(i%, 0) = (y(i%) * 256) / z(i%) 10 NEXT i% END SUB SUB zoomdistort SHARED xit% WHILE INKEY$ <> "": WEND CLS FOR i% = -640 TO 518 fsin2%(i%) = SIN(i% / 16) * 31 NEXT i% FOR i% = -640 TO 715 fsin3%(i%) = SIN(i% / 63) * 75 NEXT i% FOR i% = -48 TO 539 fsin1%(i%) = SIN(i% / 35) * 24 NEXT i% FOR i% = -319 TO 602 fsin4%(i%) = SIN(i% / 45) * 24 NEXT i% '$DYNAMIC DIM dr%(-160 TO 160, -48 TO 48) '$STATIC FOR ii% = -48 TO 48 FOR i% = -160 TO 160 dva = ii% / 64 + 2 IF dva <> 0 THEN dr%(i%, ii%) = i% / dva ELSE dr%(i%, ii%) = i% NEXT i% NEXT ii% ' ------------ Load Quickbasic inside -------------- a$ = "qbinside.spr" c$ = " " open ".\samples\pete\optimus\"+a$ FOR BINARY AS #1 OUT &H3C8, 128 FOR i% = 0 TO 383 GET #1, , c$: OUT &H3C9, ASC(c$) NEXT i% xg% = 100 yg% = 100 i% = 0 FOR y% = 1 TO yg% FOR x% = 1 TO xg% GET #1, , c$: sp%(i%) = ASC(c$) i% = i% + 1 NEXT x% NEXT y% CLOSE #1 setpal 0, 31, 0, 0, 0, 0, 31, 63 setpal 32, 63, 0, 31, 63, 31, 0, 63 setpal 64, 95, 31, 0, 63, 0, 63, 0 setpal 96, 127, 0, 63, 0, 0, 0, 0 FOR l% = 15 TO 305 LINE (14, 6)-(l%, 7), 27, B LINE (13, 5)-(l% + 1, 8), 31, B LINE (12, 4)-(l% + 2, 9), 27, B WAIT &H3DA, 8: WAIT &H3DA, 8, 8 IF xit% = 0 THEN keyaction IF xit% = 1 THEN GOTO gout2 NEXT l% FOR n% = 7 TO 193 IF n% > 7 AND n% < 194 THEN LINE (15, n% - 1)-(304, n% - 1), 0, B LINE (14, 6)-(305, n%), 27, B LINE (13, 5)-(306, n% + 1), 31, B LINE (12, 4)-(307, n% + 2), 27, B WAIT &H3DA, 8: WAIT &H3DA, 8, 8 IF xit% = 0 THEN keyaction IF xit% = 1 THEN GOTO gout2 NEXT n% ' ----------- Quickbasic Inside ------------ k0% = k% l0% = l% k% = 0 l% = 0 kxy0% = 0 fps% = 0 DO fps% = fps% + 1 IF fps% > 1400 AND kxy0% > -100 THEN kxy0% = kxy0% - 100 ELSE IF fps% <= 1000 AND kxy0% < 10000 THEN kxy0% = kxy0% + 100 IF kxy0% = -100 THEN GOTO gout2 k% = k% + 1: IF k% = 220 THEN k% = 0 l% = l% + 1: IF l% = 283 THEN l% = 0 k0% = k0% + 1: IF k0% = 101 THEN k0% = 0 l0% = l0% + 1: IF l0% = 396 THEN l0% = 0 xp% = SIN(k% / 35) * 48 yp% = SIN(l% / 45) * 64 ypp% = 160 FOR y% = 8 TO 191 DEF SEG = &HA000 + ypp% ypp% = ypp% + 20 sx% = fsin4%(y% + l%) + fsin1%(fsin1%(y%) + fsin4%(y% + l%)) FOR x% = 16 TO 303 sy% = fsin1%(x% + k%) + fsin4%(y% - x%) kxy% = dt100%(dr%(y% - 100, sy%) + yp%) + dt%(dr%(x% - 160, sx%) + xp%) IF kxy% > kxy0% THEN c% = 0 ELSE IF sp%(kxy%) = 129 THEN c% = mod256128%(fsin3%(x%) + fsin2%(x% + k0%) + fsin2%(y%)) ELSE c% = sp%(kxy%) POKE x%, c% NEXT x% NEXT y% 'OUT &H3C8, 0 'OUT &H3C9, 0 'OUT &H3C9, 0 'OUT &H3C9, 0 WAIT &H3DA, 8: WAIT &H3DA, 8, 8 IF xit% = 0 THEN keyaction IF xit% = 1 THEN GOTO gout2 'OUT &H3C8, 0 'OUT &H3C9, 63 'OUT &H3C9, 0 'OUT &H3C9, 0 LOOP gout2: END SUB