home *** CD-ROM | disk | FTP | other *** search
-
- RANDOMIZE TIMER
- REM $OPTION y+ k40
- DEFINT I-N
- DEFSNG O-Z
- SCREEN 1,640,400,3,4
- WINDOW 1,,(0,1)-(639,399),16+32+128+256,1
- PALETTE 0,.2,.2,.2
- PALETTE 1,.0,0,0
- PALETTE 2,.3,.3,.3
- PALETTE 3,.4,.4,.4
- PALETTE 4,.5,.5,.5
- PALETTE 5,.6,.6,.6
- PALETTE 6,.7,.7,.7
- PALETTE 7,.8,.8,.8
-
- COLOR 1,0: CLS
- DIM X(24),Y(24),Z%(24)
- DIM oX(24),oY(24),oZ%(24)
- DIM N1%(36),N2%(36)
- DIM X2(24),Y2(24)
- DIM Ch%(20)
- DIM cx(361),cy(361)
- DIM ILBM%(1500),PaletteCode%(1860)
-
- FOR i=2 TO 10:Ch%(i)=2:NEXT
- Ch%(1)=1: Ch%(9)=1
-
- Pi=3.14159: p2=Pi*2: PiD2=Pi/2
- Rtod=180/Pi: Dtor=Pi/180: D8=Dtor
-
- Pi=3.14159: p16=Pi/180
- oangl=45:angl=oangl
- 'Compute and store SINE and COSINE
- FOR i=0 TO 359
- cx(i)=10*SIN(p16*(i+90)):cy(i)=10*COS(p16*(i+90))
- NEXT
-
- File$="RAM:Blox.pic"
- ' PRINT "Loading machine code"
- BLOAD "ILBM.bcode1",VARPTR(ILBM%(0))
- BLOAD "Palette.bcode1",VARPTR(PaletteCode%(0))
-
- ScrnWide=640: ScrnHi=400
- Swid2Hi=1.3
- YXsc=Swid2Hi*ScrnHi/ScrnWide
-
- '*** os = Offset sc = sc
- RESTORE 9000
- GOSUB 9000
- X3sc=.1: Y3sc=.2: Z3sc=.1
- X3os=0: Y3os=0: Z3os=0
- X3rot=0: Y3rot=0: Z3rot=0
-
- VP=0: V=45 '-3*Amax
-
- X2sc=ScrnWide/(Amax*6): Y2sc=X2sc*-YXsc
- X2os=ScrnWide*.5: Y2os=ScrnHi*.5
-
- ' sc3=1.2: os2=ScrnWide/20: os3=(ScrnWide/20)/X2sc: sc2=1.2: Rot3=.05: Persp=Amax*.8
-
- FOR i=0 TO 7:LINE(i*10+10,10)-STEP(10,10),i,bf: LINE(i*10+10,10)-STEP(10,10),7,b:NEXT
-
- MENU 1,0,1," Keys "
- MENU 1,1,1," 1 = Incr depth 2 = Decr depth"
- MENU 1,2,1," 3 = Rotate left 4 = Rotate right"
- MENU 1,3,1," 5 = Unrotate 6 = Original size"
- MENU 1,4,1," 9 = Randomn Draw"
- MENU 1,5,1," Left Arrow = Narrower, Right = Wider"
- MENU 1,6,1," Up Arrow = Taller, Down = Shorter"
- MENU 1,7,1," S = Save Blox.pic to RAM: L = Load Pic"
- MENU 1,8,1," Y = Steeple, C = Cuboid, R = Roof"
- MENU 1,9,1," P = Palette, V = Vanishing Point"
- MENU 1,10,1," H = Hardcopy (Print Screen)"
- MENU 1,11,1," X = Clear Screen"
- MENU 1,12,1," ESC or Q = QUIT"
-
- MENU 2,0,1," About "
- MENU 2,1,1," If you find this to be a tool"
- MENU 2,2,1," of ongoing worth, send $10 to"
- MENU 2,3,1," Jim Charlsen"
- MENU 2,4,1," 3300 Thatcher Ave. #15"
- MENU 2,5,1," Marina del Rey, CA. 90292"
-
- MENU 3,0,1," Draw Choices "
- MENU 3,1,1," Wire-frame "
- MENU 3,2,2," Solid "
- MENU 3,3,2," Front "
- MENU 3,4,2," Back "
- MENU 3,5,2," Top "
- MENU 3,6,2," Bottom"
- MENU 3,7,2," Left "
- MENU 3,8,2," Right "
- MENU 3,9,1," Fuzz "
- ON MENU GOSUB Cherce
- MENU ON
-
- 500
- SX=SIN(X3rot): CX=COS(X3rot)
- SY=SIN(Y3rot): CY=COS(Y3rot)
- SZ=SIN(Z3rot): CZ=COS(Z3rot)
-
- FOR i=1 TO Nnodes
- X3so=X(I)*X3sc+X3os: y3so=Y(I)*Y3sc+Y3os: z3so=Z%(I)*Z3sc+Z3os
- x3xr=X3so: Y3xr=Y3so*CX-Z3so*SX: Z3xr=Z3so*CX+Y3so*SX
- Y3yr=Y3xr: Z3yr=Z3xr*CY-X3xr*SY: X3yr=X3xr*CY+Z3xr*SY
- Z3zr=Z3yr: X3zr=X3yr*CZ-Y3yr*SZ: Y3zr=Y3yr*CZ+X3yr*SZ
- X2t=X3zr*(VP-V)/(Y3zr-V): Y2T=Z3zr*(VP-V)/(Y3zr-V)
- X2(i)=X2t*X2sc+X2os: Y2(I)=Y2t*Y2sc+Y2os
- NEXT
-
- 1000
- WHILE Rand=1
- GOSUB FillBox: IF Ch%(9)=2 THEN GOSUB FuzzBox
- IF INKEY$>"" THEN Rand=0 ': GOSUB CheckKeys
- X3sc=.25*RND+.01: Y3sc=RND+.01: Z3sc=.25*RND+.01
- ox=50+RND*560: oy=40+RND*320
- X3os=(ox-X2os)*.095: Z3os=(oy-Y2os)*-.115
- GOTO 500
- WEND
- K$="": xy=MOUSE(0): ox=MOUSE(1): oy=MOUSE(2)
- COLOR,,2: GOSUB DrawBox
- WHILE MOUSE(0)=0 AND MOUSE(1)=ox AND MOUSE(2)=oy
- K$=UCASE$(INKEY$): IF K$>"" THEN ox=ox+.001
- WEND
- COLOR,,2: GOSUB DrawBox
- COLOR,,1: GOSUB CheckKeys
- IF MOUSE(0)<>0 THEN COLOR 4:GOSUB DrawIt: WHILE MOUSE(0)<>0:WEND
- X3os=(MOUSE(1)-X2os)*.095: Z3os=(MOUSE(2)-Y2os)*-.115
- GOTO 500
-
- DrawIt:
- IF Ch%(1)=2 THEN GOSUB DrawBox
- IF Ch%(2)=2 THEN GOSUB FillBox
- IF Ch%(9)=2 THEN GOSUB FuzzBox
- RETURN
-
- DrawBox:FOR L=1 TO Nlines: LINE(X2(N1%(L)),Y2(N1%(L)))-(X2(N2%(L)),Y2(N2%(L))): NEXT: RETURN
-
- FillBox:
- COLOR,,1
- GOSUB FillBack: GOSUB FillLeft: GOSUB FillRight
- IF X2(2)>X2(3) THEN GOSUB FillLeft
- GOSUB FillTop: GOSUB FillBot
- IF X2(5)>X2(8) THEN GOSUB FillRight
- IF X2(6)<X2(7) THEN GOSUB FillLeft
- IF Y2(2)<Y2(3) THEN GOSUB FillTop
- GOSUB FillFront
- RETURN
-
- FillBack: IF Ch%(4)<2 THEN RETURN
- COLOR 1: i=1: GOSUB FigXY: i=2: GOSUB FigXY: i=6: GOSUB FigXY: i=5: GOSUB FigXY: AREAFILL
- RETURN
-
- FillFront: IF Ch%(3)<2 THEN RETURN
- COLOR 5+Sp: i=3: GOSUB FigXY: i=4: GOSUB FigXY: i=8: GOSUB FigXY: i=7: GOSUB FigXY: AREAFILL
- RETURN
-
- FillLeft: IF Ch%(7)<2 THEN RETURN
- COLOR 7: i=2: GOSUB FigXY: i=3: GOSUB FigXY: i=7: GOSUB FigXY: i=6: GOSUB FigXY: AREAFILL
- RETURN
-
- FillRight: IF Ch%(8)<2 THEN RETURN
- COLOR 4: i=1: GOSUB FigXY:i=4: GOSUB FigXY: i=8: GOSUB FigXY:i=5: GOSUB FigXY: AREAFILL
- RETURN
-
- FillTop: IF Ch%(5)<2 THEN RETURN
- COLOR 6: FOR i=1 TO 4: GOSUB FigXY: NEXT: AREAFILL
- RETURN
-
- FillBot: IF Ch%(6)<2 THEN RETURN
- COLOR 2: FOR i=5 TO 8: GOSUB FigXY: NEXT: AREAFILL
- RETURN
-
- FigXY:
- x=X2(N1%(i)): y=Y2(N1%(i))
- IF x<0 THEN x=0
- IF x>638 THEN x=638
- IF y<0 THEN y=0
- IF y>398 THEN y=398
- AREA(x,y)
- RETURN
-
- FuzzBox:
- FOR L=1 TO Nlines
- X=X2(N1%(L)): Y=Y2(N1%(L))
- FX=X2(N2%(L)): FY=Y2(N2%(L))
- difX=ABS(Y-FY): difY=ABS(Y-FY)
- dif=difX: IF difY>dif THEN dif=difY
- IF dif=0 THEN dif=.0001
- StX=-(X-FX)/dif: StY=(FY-Y)/dif
- FOR i=0 TO dif
- ac=(POINT(StX*i-1+X,StY*i+Y-1)+POINT(StX*i-1+X,StY*i+Y))+POINT(StX*i-1+X,StY*i+Y+1)
- ac=ac+(POINT(StX*i+X,StY*i+Y-1)+POINT(StX*i+X,StY*i+Y+1))
- ac=ac+(POINT(StX*i+1+X,StY*i+Y-1)+POINT(StX*i+1+X,StY*i+Y))+POINT(StX*i+1+X,StY*i+Y+1)
- ac=ac/8
- PSET(StX*i+X,StY*i+Y),ac
- NEXT
- NEXT
- RETURN
-
- CheckKeys:
- Rand=0
- IF K$="" THEN K$=UCASE$(INKEY$)
- IF K$>"" THEN
- 'IF K$="A" THEN COLOR,,1:GOSUB DrawBox
- IF K$="Q" THEN SYSTEM
- IF K$="C" THEN GOSUB Cube
- IF K$="H" THEN PCOPY
- IF K$="L" THEN GOSUB LoadPic
- IF K$="P" THEN GOSUB ColorPalette
- IF K$="R" THEN GOSUB Roof
- IF K$="S" THEN GOSUB SavePic
- IF K$="V" THEN GOSUB VanP
- IF K$="Y" THEN GOSUB Spire
- IF K$="X" THEN CLS
- 'IF K$="-" THEN X2sc=X2sc+.1 :LOCATE 10,10:?X2sc
- 'IF K$="=" THEN X2sc=X2sc-.1 :LOCATE 10,10:?X2sc
- k=ASC(K$)
- IF K=27 THEN SYSTEM
- IF K=28 AND Z3sc<5 THEN Z3sc=Z3sc*1.02
- IF K=29 AND Z3sc>.0002 THEN Z3sc=Z3sc*.98
- IF K=30 AND X3sc<4 THEN X3sc=X3sc*1.04
- IF K=31 AND X3sc>.0001 THEN X3sc=X3sc*.98
- IF K=49 AND Y3sc<4 THEN Y3sc=Y3sc*1.04
- IF K=50 AND Y3sc>.0001 THEN Y3sc=Y3sc*.98
- IF K=51 AND angl>0 THEN DECR angl: GOSUB GD
- IF K=52 AND angl<90 THEN INCR angl: GOSUB GD
- IF K=53 THEN Angl=oangl: GOSUB GD
- IF K=54 THEN X3sc=.1: Y3sc=.2: Z3sc=.1
- IF K=57 THEN Rand=1: RETURN 1000
- ox=2000
- END IF
- RETURN
-
- VanP: COLOR,,2
- WHILE MOUSE(0)=0: X2os=MOUSE(1): Y2os=MOUSE(2): FOR i=1 TO 2: LINE(X2os-2,Y2os-2)-STEP(4,4),,bf: NEXT: WEND
- WHILE MOUSE(0)<>0:WEND
- COLOR,,1
- RETURN
-
- Roof:Sp=0: GOSUB Cube: FOR i=1 TO 4:X(I)=.01: ':Y(I)=0:
- NEXT
- RETURN
-
- Spire: GOSUB Cube: FOR i=1 TO 4: X(I)=0.01: Y(I)=.01: NEXT: Sp=1: RETURN
-
- Cube:Sp=0: FOR i=1 TO 4: X(I)=oX(I): Y(I)=oY(I): NEXT: RETURN
-
- Cherce:
- M0=MENU(0): M1=MENU(1)
- IF M0=3 THEN
- Ch%(M1)=ABS(Ch%(M1)-3)
- MENU 3,M1,Ch%(M1)
- END IF
- RETURN
-
- SavePic:
- BEEP:saveILBM File$,error$:BEEP
- IF error$ <> "" THEN ? error$;" Click to continue":WHILE MOUSE(0)=0:WEND
- RETURN
-
- LoadPic:
- First=1: error$=""
- BEEP:loadILBM File$,0,error$:BEEP
- IF error$ <> "" THEN ? error$;" Click to continue":WHILE MOUSE(0)=0:WEND
- RETURN
-
- SUB LoadILBM(fichier$,opt&,err$) STATIC
- SHARED Args(),ILBM%()
- err$="": i%=0: n%=0: ErrAd&=0
- file0$=fichier$+CHR$(0)
- ad&=opt& : IF ad&=0 THEN ad&=WINDOW(7)
- loading&=VARPTR(ILBM%(0))
- CALL LOC loading&,SADD(file0$),ad&,VARPTR(ErrAd&)
- REM - the 3 arguments sent to the machine are the filename
- ' address, the address of the Basic window (or options 1 or 2)
- ' and an address for the possible error message.
- ' If successful, ErrAd& remains zero
- IF ErrAd& = 0 THEN EXIT SUB
- n%=PEEKB(ErrAd&)
- WHILE n% <> 0
- err$=err$+CHR$(n%)
- i%=i%+1 : n%=PEEKB(ErrAd&+i%)
- WEND
- n%=PEEKB(VARPTR(ILBM%(0))+&H9C3)
- IF n% <> 0 THEN err$=err$+" - dos error "+STR$(n%)
- END SUB
-
- SUB saveILBM(fichier$,err$) STATIC
- SHARED Args(),ILBM%(),ColorTable()
- err$="" : i%=0 : n%=0 : ErrAd&=0
- file0$=fichier$+CHR$(0)
- saving&=VARPTR(ILBM%(0))+&H656
- ar&=VARPTR(Args(0)) : ct&=VARPTR(ColorTable(0))
- CALL LOC saving&,SADD(file0$),WINDOW(7),VARPTR(ErrAd&)
- IF ErrAd& = 0 THEN EXIT SUB
- n%=PEEKB(ErrAd&)
- WHILE n% <> 0
- err$=err$+CHR$(n%)
- i%=i%+1 : n%=PEEKB(ErrAd&+i%)
- WEND
- n%=PEEKB(VARPTR(ILBM%(0))+&H9C3)
- IF n% <> 0 THEN err$=err$+" - dos error "+STR$(n%)
- END SUB
-
- ColorPalette:
- Pal&=VARPTR(PaletteCode%(0))
- CALL LOC Pal&,WINDOW(7)
- RETURN
-
- 9000
- Cmin=-.01: Cmax=.01
- READ Nnodes
- FOR i=1 TO Nnodes
- READ X,Y,Z
- X(I)=X: Y(I)=Y: Z%(I)=Z
- oX(I)=X: oY(I)=Y: oZ%(I)=Z
- NEXT
- GOSUB GD
- Cmax=10: Cmin=-10: Amax=10
- RESTORE 20000
- READ Nlines
- FOR i=1 TO Nlines: READ N1%(I), N2%(I): NEXT
- RETURN
-
- GD:
- ii=1
- FOR i=angl TO 359+angl STEP 90
- i2=i: IF i2>359 THEN i2=i-360
- X=cx(i2): Y=cy(i2)
- X(ii)=X: Y(ii)=Y: X(ii+4)=X: Y(ii+4)=Y
- oX(ii)=X: oY(ii)=Y: oX(ii+4)=X: oY(ii+4)=Y
- INCR ii
- NEXT
- RETURN
-
- 10000
- DATA 8
- DATA -10,-10,10
- DATA -10,10,10
- DATA 10,10,10
- DATA 10,-10,10
- DATA -10,-10,-10
- DATA -10,10,-10
- DATA 10,10,-10
- DATA 10,-10,-10
-
- ' *** the "T"
- DATA -5,5,10
- DATA 5,5,10
- DATA 0,5,10
- DATA 0,-5,10
-
- 20000
- DATA 12
- DATA 1,2
- DATA 2,3
- DATA 3,4
- DATA 4,1
- DATA 5,6
- DATA 6,7
- DATA 7,8
- DATA 8,5
- DATA 5,1
- DATA 6,2
- DATA 7,3
- DATA 8,4
-
- ' *** the "T"
- DATA 9,10
- DATA 11,12
-
-
-