home *** CD-ROM | disk | FTP | other *** search
AmigaBASIC Source Code | 1991-11-09 | 9.1 KB | 449 lines |
- '***************************************
- '* *
- '* Basic-Demo for vector.library V1.6x *
- '* *
- '* ©1991 by Alexander Lippert *
- '* *
- '* All object-design done by *
- '* Oliver Hahn ©1991 *
- '* *
- '***************************************
-
- LIBRARY "exec.library"
- LIBRARY "vector.library"
-
- DECLARE FUNCTION AllocMem& LIBRARY
- DECLARE FUNCTION FreeMem& LIBRARY
-
- DECLARE FUNCTION SetVBI& LIBRARY
- DECLARE FUNCTION InitVBOBs& LIBRARY
- DECLARE FUNCTION OpenVScreen& LIBRARY
- DECLARE FUNCTION CloseVScreen& LIBRARY
- DECLARE FUNCTION UseJoy& LIBRARY
- DECLARE FUNCTION DoAnim& LIBRARY
- DECLARE FUNCTION FreeVBOBs& LIBRARY
- DECLARE FUNCTION AutoScaleOn& LIBRARY
- DECLARE FUNCTION AutoScaleOff& LIBRARY
- DECLARE FUNCTION FreeJoy& LIBRARY
- DECLARE FUNCTION SetColors& LIBRARY
-
- fmem&=65537 ' Flags fuer FastMem
- cmem&=65539 ' Flags fuer ChipMem
-
- RESTORE NewVScreen ' Zeiger auf NewVScreen
- GOSUB OpenVScreen ' VScreen öffnen
-
- RESTORE ColorTab ' Zeiger auf Farb-Tabelle
- GOSUB SetColors ' Farben setzen
-
- RESTORE BOBList ' Zeiger auf BOBListe
- GOSUB InitVBOBs ' VBOBs initialisieren
-
- res=AutoScaleOn&(PEEKW(nsm&+12)) ' Entzerrung fuer höhrerr Auflösungen
-
- RESTORE JoyStruct ' Zeiger auf Joystick-Struktur
- GOSUB UseJoy ' Joystick benutzen
-
- RESTORE PointTab
- GOSUB MakePointTab ' Punkt-Tabelle anlegen
-
- RESTORE AreaTab
- GOSUB MakeAreaTab ' Flächen-Tabelle anlegen
-
- RESTORE MoveTab
- GOSUB MakeMoveTab ' Bewegungs-Tabelle anlegen
-
- RESTORE ObjectStruct
- GOSUB MakeObjectStruct ' Object-Struktur anlegen
-
- RESTORE WorldStruct
- GOSUB MakeWorldStruct ' Welt-Struktur anlegen
-
- res=DoAnim&(world&) ' Animation der Körper
-
-
- res=CloseVScreen& ' Screen schließen
-
- res=FreeJoy& ' nur, wenn zuvor
- res=FreeMem&(joy&,12) ' UseJoy& erfolgte
-
- res=FreeVBOBs ' nur, wenn zuvor
- res=FreeMem&(bobs&,bobsize&) ' InitVBOBs& erfolgte
-
- res=FreeMem&(nsm&,34) ' von Strukturen belegten
- res=FreeMem&(coltab&,8*64+2) ' Speicher freigeben
- res=FreeMem&(world&,wdsize&) ' ...
- res=FreeMem&(object&,26)
- res=FreeMem&(movetb&,1000)
- res=FreeMem&(areatb&,arsize&)
- res=FreeMem&(pointtb&,ptsize&)
-
- LIBRARY CLOSE
-
- END
-
-
- NewVScreen:
- ' Offset von links oben
- DATA 0,0
- ' Ausdehnung des Screen
- DATA 320,256
- ' Tiefe des Screen
- DATA 3
- ' Farben der Titel-Leiste
- DATA 0,0
- ' ViewModes (&H8000 HiRes, &H4 Lace)
- DATA 0
- ' Zeiger auf Font und Title
- DATA 0,0
- ' Flags (z.Z. unbelegt)
- DATA 0
- ' Offset der Vektor-Graphik im Screen (z.Z. unbelegt)
- DATA 0,0
- ' Ausdehnung der Vector-Graphik (muß z.Z. Ausdehnung des Screens entsprechen)
- DATA 320,256
- ' Tife der Vektor-Graphik
- DATA 3
-
-
- WorldStruct:
- ' Flags (1 fuer Drahtgitter), Anzahl der Objekte
- DATA 0,1
- ' Zeiger auf Objekte (werden von MakeWorldStruct eingetragen)
- DATA 0
-
-
- ObjectStruct: ' Fuer jedes Objekt eine eigene!
- ' Zeiger auf Punk-Tabelle, Flächen-Tabelle, Bewegungs-Tabelle (werden von MakeObjectStruct eingetragen)
- DATA 0,0,0
- ' Flags (z.Z. unbelegt)
- DATA 0
- ' Start-Position
- DATA 0,0,-3000
- ' Start-Rotation
- DATA 0,0,0
-
-
- MoveTab:
- ' Ticks, movx,movy,movz, rotx,roty,rotz --- Bewegung fuer Joystick: 1500 Ticks
- DATA 1500, 0,0,0, 0,0,0
- DATA -1
-
-
- ColorTab:
- ' Register, Rot, Gruen, Blau
- DATA 0, 0,0,0
- DATA 1, 12,12,13
- DATA 2, 5,6,10
- DATA 3, 3,4,8
- DATA 4, 2,3,7
- DATA 5, 1,2,6
- DATA 6, 0,1,5
- DATA 7, 0,0,4
- DATA -1
-
-
- JoyStruct:
- ' Z-Geschwindigkeit, Vordere Grenze, Hintere Grenze
- DATA 20,-1500,-16000
- ' Rotations-Geschwindigkeit um x,y,z-Achse
- DATA 3,3,3
-
-
- BOBList:
- ' Anzahl der VBOBs
- DATA 16
- ' Breite in Worten, Höhe, Reserved, Reserved
- DATA 2,31,0,0
- DATA 2,29,0,0
- DATA 2,27,0,0
- DATA 2,25,0,0
- DATA 2,23,0,0
- DATA 2,21,0,0
- DATA 2,19,0,0
- DATA 2,17,0,0
- DATA 1,15,0,0
- DATA 1,13,0,0
- DATA 1,11,0,0
- DATA 1,9,0,0
- DATA 1,7,0,0
- DATA 1,5,0,0
- DATA 1,3,0,0
- DATA 1,1,0,0
-
-
- PointTab: ' Punkt-Tabelle
- ' Anzahl der Punkte eines Objekts
- DATA 19
- ' x,y,z-Koordinate, Eigengröße fuer VBOBs
- DATA -80,-20,80,0
- DATA -80,20,80,0
- DATA 80,-20,80,0
- DATA 80,20,80,0
-
- DATA -80,-20,-80,0
- DATA -80,20,-80,0
- DATA 80,-20,-80,0
- DATA 80,20,-80,0
-
- DATA -50,-20,50,0
- DATA -50,20,50,0
- DATA 50,-20,50,0
- DATA 50,20,50,0
-
- DATA -50,-20,-50,0
- DATA -50,20,-50,0
- DATA 50,-20,-50,0
- DATA 50,20,-50,0
-
- DATA 0,60,0,2
- DATA 0,0,0,0
- DATA 0,-60,0,2
-
-
- AreaTab: ' Flächen-Tabelle
- ' Anzahl der Flächen eines Objekts
- DATA 19
- ' Eckenzahl oder Kennung, Farb-Nummer, Eckpunkte (max. 8)
- DATA 4,2,1*4,3*4,2*4,0*4,1*4,0,0,0,0
- DATA 4,4,5*4,4*4,6*4,7*4,5*4,0,0,0,0
- DATA 4,3,0*4,4*4,5*4,1*4,0*4,0,0,0,0
- DATA 4,3,2*4,3*4,7*4,6*4,2*4,0,0,0,0
-
- DATA 4,5,9*4,8*4,10*4,11*4,9*4,0,0,0,0
- DATA 4,3,13*4,15*4,14*4,12*4,13*4,0,0,0,0
- DATA 4,4,8*4,9*4,13*4,12*4,8*4,0,0,0,0
- DATA 4,4,10*4,14*4,15*4,11*4,10*4,0,0,0,0
-
- DATA 4,2,1*4,9*4,11*4,3*4,1*4,0,0,0,0
- DATA 4,2,1*4,5*4,13*4,9*4,1*4,0,0,0,0
- DATA 4,2,5*4,7*4,15*4,13*4,5*4,0,0,0,0
- DATA 4,2,11*4,15*4,7*4,3*4,11*4,0,0,0,0
-
- DATA 4,6,0*4,2*4,10*4,8*4,0*4,0,0,0,0
- DATA 4,6,0*4,8*4,12*4,4*4,0*4,0,0,0,0
- DATA 4,6,4*4,12*4,14*4,6*4,4*4,0,0,0,0
- DATA 4,6,10*4,2*4,6*4,14*4,10*4,0,0,0,0
-
- DATA -1,4,16*4,0,0,0,0,0,0,0,0
- DATA -1,4,17*4,0,0,0,0,0,0,0,0
- DATA -1,4,18*4,0,0,0,0,0,0,0,0
-
-
- OpenVScreen:
- nsm&=AllocMem&(34,fmem&)
-
- READ leftedge,topedge,widt,height,depth,detailpen
- READ blockpen,viewmodes,a,a
- READ vwflags,vwleftedge,vwtopedge,vwwidt
- READ vwheight,vwdepth
-
- POKEW nsm&,leftedge ' NewVScreen-Struktur anlegen
- POKEW nsm&+2,topedge
- POKEW nsm&+4,widt
- POKEW nsm&+6,height
- POKEW nsm&+8,depth
- POKE nsm&+10,detailpen
- POKE nsm&+11,blockpen
- POKEW nsm&+12,viewmodes
- POKEL nms&+14,font
- POKEL nsm&+18,SADD("vector.library V1.67 ©91 by A.Lippert"+CHR$(0))
- POKEW nsm&+22,vwflags
- POKEW nsm&+24,vwleftedge
- POKEW nsm&+26,vwtopedge
- POKEW nsm&+28,vwwidt
- POKEW nsm&+30,vwheight
- POKEW nsm&+32,vwdepth
-
- viewstruct&=OpenVScreen&(nsm&) ' Bibliothek aufrufen
-
- RETURN
-
-
- SetColors:
- coltab&=AllocMem&(8*64+2,fmem&) ' fuer max. 64 Farben speicher allokieren
- ct=coltab&
-
- READ reg
-
- WHILE reg<>-1 ' Farb-Tabelle anlegen
- READ r,g,b
- POKEW ct,reg
- POKEW ct+2,r
- POKEW ct+4,g
- POKEW ct+6,b
- READ reg
- ct=ct+8
- WEND
- POKEW ct,-1
-
- res=SetColors&(viewstruct&,coltab&) ' Bibliothek aufrufen
-
- RETURN
-
-
- MakePointTab:
- READ ptnum
- ptsize&=ptnum*8+2
- pointtb&=AllocMem&(ptsize&,fmem&)
-
- pt=pointtb&
-
- POKEW pt,ptnum
- pt=pt+2
-
- FOR i=1 TO ptnum ' Punkt-Tabelle anlegen
- READ x,y,z,ps
- POKEW pt,x
- POKEW pt+2,y
- POKEW pt+4,z
- POKEW pt+6,ps
- pt=pt+8
- NEXT i
-
- RETURN
-
-
- MakeAreaTab:
- READ arnum
- arsize&=arnum*22+2
- areatb&=AllocMem&(arsize&,fmem&)
-
- ar=areatb&
-
- POKEW ar,arnum
- ar=ar+2
-
- FOR i=1 TO arnum ' Flächen-Tabelle anlegen
- READ ptnum,col,pt1$,pt2$,pt3$,pt4$,pt5$,pt6$,pt7$,pt8$,pt9$
- POKEW ar,ptnum
- POKEW ar+2,col
- POKEW ar+4,VAL(pt1$)*4
- POKEW ar+6,VAL(pt2$)*4
- POKEW ar+8,VAL(pt3$)*4
- POKEW ar+10,VAL(pt4$)*4
- POKEW ar+12,VAL(pt5$)*4
- POKEW ar+14,VAL(pt6$)*4
- POKEW ar+16,VAL(pt7$)*4
- POKEW ar+18,VAL(pt8$)*4
- POKEW ar+20,VAL(pt9$)*4
- ar=ar+22
- NEXT i
-
- RETURN
-
-
- MakeMoveTab:
- movetb&=AllocMem&(1000,fmem&) ' 1000 Bytes fr Bewegungs-Tabelle allokieren (mehr als ausreichend)
-
- mv=movetb&
-
- mvtabbeg:
- READ ticks
-
- WHILE ticks => 0 ' Bewegungs-Tabelle anlegen
- POKEW mv,ticks
- READ movx,movy,movz,rotx,roty,rotz
- POKEW mv+2,movx
- POKEW mv+4,movy
- POKEW mv+6,movz
- POKEW mv+8,rotx
- POKEW mv+10,roty
- POKEW mv+12,rotz
- READ ticks
- mv=mv+14
- WEND
-
- IF ticks=-1 OR ticks = -2 THEN POKEW mv,ticks : GOTO mvtabend
-
- IF ticks=-3 THEN POKEW mv,ticks : mv=mv+2 : GOTO mvtabbeg
- IF ticks=-4 THEN POKEW mv,ticks : READ count : POKEW mv+2,count : mv=mv+4 : GOTO mvtabbeg
-
- mvtabend:
- RETURN
-
-
- MakeObjectStruct:
- READ a,a,a
-
- object&=AllocMem&(26,fmem&)
-
- READ flags,posx,posy,posz,rotx,roty,rotz
-
- POKEL object&,pointtb& ' Object-Struktur anlegen
- POKEL object&+4,areatb&
- POKEL object&+8,movetb&
- POKEW object&+12,flags
- POKEW object&+14,posx
- POKEW object&+16,posy
- POKEW object&+18,posz
- POKEW object&+20,rotx
- POKEW object&+22,roty
- POKEW object&+24,rotz
-
- RETURN
-
-
- MakeWorldStruct:
- READ flags
- READ obnum
-
- wdsize&=obnum*4+4
- world&=AllocMem&(wdsize&,fmem&)
-
- wd=world&
-
- POKEW wd,flags ' Welt-Struktur anlegen
- POKEW wd+2,obnum
-
- wd=wd+4
-
- READ a ' Diese Sequenz muß fr jedes
- POKEL wd,object& ' Objekt erfolgen
-
- RETURN
-
-
- UseJoy:
- joy&=AllocMem&(12,fmem&)
- READ movz,borderfront,borderback,rotx,roty,rotz
-
- POKEW joy&,movz ' Joystick-Struktur poken
- POKEW joy&+2,borderfront
- POKEW joy&+4,borderback
- POKEW joy&+6,rotx
- POKEW joy&+8,roty
- POKEW joy&+10,rotz
-
- res=UseJoy&(0,joy&) ' Bibliothek aufrufen
-
- RETURN
-
-
- InitVBOBs:
- READ bobnum
-
- bobsize&=bobnum*12+2
- bobs&=AllocMem&(bobsize&,fmem&)
-
- bb=bobs&
-
- POKEW bb,bobnum
-
- bb=bb+2
-
- FOR i=1 TO bobnum ' BOBListe anlegen
- READ widt,height,a,a
- POKEW bb,widt
- POKEW bb+2,height
- POKEL bb+4,a
- POKEL bb+8,a
- bb=bb+12
- NEXT
-
- ' Im folgenden Bibliotheksaufruf ist der Name des VBOB-Satzes enthalten (Pfad nicht vergessen!)
- nam$="VBOBs:bs1lo3_??.gfx"+CHR$(0)
- res=InitVBOBs&(PEEKW(nsm&+32),SADD(nam$),bobs&,0)
-
- RETURN
-