home *** CD-ROM | disk | FTP | other *** search
- '***************************************
- '* *
- '* 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
-
- OPEN "vd_rot.asm" FOR INPUT AS 1 ' Assembler-Code laden (auf Pfad achten!!)
- VBIProg&=AllocMem&(LOF(1),fmem&)
- Code$=INPUT$(LOF(1),1)
- CLOSE 1
- FOR i=1 TO LEN(Code$)-32
- POKE VBIProg&+i-1,ASC(MID$(Code$,i+32,1))
- NEXT i
-
- 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 nicht benutzen
-
- RESTORE PointTab
- GOSUB MakePointTab ' Punkt-Tabelle anlegen
-
- res=SetVBI&(VBIProg&) ' AssemblerCode der Bibliothek bergeben
-
- 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&)
- res=FreeMem&(VBIProg&,LEN(Code$))
- 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,-14500
- ' Start-Rotation
- DATA 0,0,0
-
-
- MoveTab:
- ' Ticks, movx,movy,movz, rotx,roty,rotz
- DATA 210,0,0,60,2,1,0
- ' label
- DATA -3
- DATA 90,0,0,0,2,1,0
- ' goto label 8 mal
- DATA -4,8
- DATA 210,0,0,-60,2,1,0
- DATA -1
-
-
- ColorTab:
- ' Register, Rot, Gruen, Blau
- DATA 0, 0,0,0
- DATA 1, 0,10,0
- DATA 2, 0,8,0
- DATA 3, 0,0,12
- DATA 4, 0,0,10
- DATA 5, 10,0,10
- DATA 6, 8,0,8
- DATA 7, 0,0,15
- DATA -1
-
-
- JoyStruct:
- ' Z-Geschwindigkeit, Vordere Grenze, Hintere Grenze
- DATA 20,-300,-16000
- ' Rotations-Geschwindigkeit um x,y,z-Achse
- DATA 1,1,1
-
-
- 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, wird vom Assembler-Programm
- ' ergänzt und mutiert
- ' Anzahl der Punkte eines Objekts
- DATA 48
- ' x,y,z-Koordinate, Eigengröße fuer VBOBs
- DATA -30,192,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA -60,120,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA -192,24,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA -192,-24,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA -60,-120,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA -30,-192,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
-
-
- AreaTab: ' Flächen-Tabelle
- ' Anzahl der Flächen eines Objekts
- DATA 42
- ' Eckenzahl oder Kennung, Farb-Nummer, Eckpunkte (max. 8)
- DATA 8,7,0*4,1*4,2*4,3*4,4*4,5*4,6*4,7*4,0*4
- DATA 8,7,47*4,46*4,45*4,44*4,43*4,42*4,41*4,40*4,47*4
-
- DATA 4,3,40*4,41*4,33*4,32*4,40*4,0,0,0,0
- DATA 4,4,41*4,42*4,34*4,33*4,41*4,0,0,0,0
- DATA 4,3,42*4,43*4,35*4,34*4,42*4,0,0,0,0
- DATA 4,4,43*4,44*4,36*4,35*4,43*4,0,0,0,0
- DATA 4,3,44*4,45*4,37*4,36*4,44*4,0,0,0,0
- DATA 4,4,45*4,46*4,38*4,37*4,45*4,0,0,0,0
- DATA 4,3,46*4,47*4,39*4,38*4,46*4,0,0,0,0
- DATA 4,4,47*4,40*4,32*4,39*4,47*4,0,0,0,0
-
- DATA 4,3,8*4,9*4,1*4,0*4,8*4,0,0,0,0
- DATA 4,4,9*4,10*4,2*4,1*4,9*4,0,0,0,0
- DATA 4,3,10*4,11*4,3*4,2*4,10*4,0,0,0,0
- DATA 4,4,11*4,12*4,4*4,3*4,11*4,0,0,0,0
- DATA 4,3,12*4,13*4,5*4,4*4,12*4,0,0,0,0
- DATA 4,4,13*4,14*4,6*4,5*4,13*4,0,0,0,0
- DATA 4,3,14*4,15*4,7*4,6*4,14*4,0,0,0,0
- DATA 4,4,15*4,8*4,0*4,7*4,15*4,0,0,0,0
-
- DATA 4,2,16*4,17*4,9*4,8*4,16*4,0,0,0,0
- DATA 4,1,17*4,18*4,10*4,9*4,17*4,0,0,0,0
- DATA 4,2,18*4,19*4,11*4,10*4,18*4,0,0,0,0
- DATA 4,1,19*4,20*4,12*4,11*4,19*4,0,0,0,0
- DATA 4,2,20*4,21*4,13*4,12*4,20*4,0,0,0,0
- DATA 4,1,21*4,22*4,14*4,13*4,21*4,0,0,0,0
- DATA 4,2,22*4,23*4,15*4,14*4,22*4,0,0,0,0
- DATA 4,1,23*4,16*4,8*4,15*4,23*4,0,0,0,0
-
- DATA 4,5,24*4,25*4,17*4,16*4,24*4,0,0,0,0
- DATA 4,6,25*4,26*4,18*4,17*4,25*4,0,0,0,0
- DATA 4,5,26*4,27*4,19*4,18*4,26*4,0,0,0,0
- DATA 4,6,27*4,28*4,20*4,19*4,27*4,0,0,0,0
- DATA 4,5,28*4,29*4,21*4,20*4,28*4,0,0,0,0
- DATA 4,6,29*4,30*4,22*4,21*4,29*4,0,0,0,0
- DATA 4,5,30*4,31*4,23*4,22*4,30*4,0,0,0,0
- DATA 4,6,31*4,24*4,16*4,23*4,31*4,0,0,0,0
-
- DATA 4,2,32*4,33*4,25*4,24*4,32*4,0,0,0,0
- DATA 4,1,33*4,34*4,26*4,25*4,33*4,0,0,0,0
- DATA 4,2,34*4,35*4,27*4,26*4,34*4,0,0,0,0
- DATA 4,1,35*4,36*4,28*4,27*4,35*4,0,0,0,0
- DATA 4,2,36*4,37*4,29*4,28*4,36*4,0,0,0,0
- DATA 4,1,37*4,38*4,30*4,29*4,37*4,0,0,0,0
- DATA 4,2,38*4,39*4,31*4,30*4,38*4,0,0,0,0
- DATA 4,1,39*4,32*4,24*4,31*4,39*4,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
-
- POKEL VBIProg&+176,pointtb&+2 ' AssemblerCode einen Zeiger bergeben
-
- 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
-