'*************************************** '* * '* 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 nicht 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,-13500 ' Start-Rotation DATA 0,0,0 MoveTab: ' Ticks, movx,movy,movz, rotx,roty,rotz DATA 1, 0,0,0, -90,0,0 DATA 1, 0,0,0, 0,-90,0 DATA 150, 0,0,42, 0,0,0 DATA 150, 0,0,42, 0,1,0 DATA 400, 0,0,0, 0,1,1 DATA 400, 0,0,0, 0,1,1 DATA 300, 0,0,-42, 0,1,1 DATA -1 ColorTab: ' Register, Rot, Gruen, Blau DATA 0, 0,0,0 DATA 1, 8,6,0 DATA 2, 7,5,0 DATA 3, 6,4,0 DATA 4, 5,3,0 DATA 5, 11,11,11 DATA 6, 10,10,10 DATA 7, 9,9,9 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 ' Anzahl der Punkte eines Objekts DATA 75 ' x,y,z-Koordinate, Eigengröße fuer VBOBs DATA -100,4,190,0 DATA 0,-200,62,0 DATA 0,-186,16,0 DATA 0,-158,-12,0 DATA 0,-108,-25,0 DATA 0,-60,-25,0 DATA 0,60,-25,0 DATA 0,108,-25,0 DATA 0,158,-12,0 DATA 0,186,16,0 DATA 0,200,62,0 DATA 34,-108,-4,0 DATA 42,-60,-10,0 DATA 42,60,-10,0 DATA 34,108,-4,0 DATA 12,-176,42,0 DATA 43,-108,22,0 DATA 50,-60,22,0 DATA 50,60,22,0 DATA 43,108,22,0 DATA 12,176,42,0 DATA -34,-108,-4,0 DATA -42,-60,-10,0 DATA -42,60,-10,0 DATA -34,108,-4,0 DATA -12,-176,42,0 DATA -43,-108,22,0 DATA -50,-60,22,0 DATA -50,60,22,0 DATA -43,108,22,0 DATA -12,176,42,0 DATA 0,-164,5,0 DATA 3,-3,5,0 DATA -3,-3,5,0 DATA 37,-108,5,0 DATA -37,-108,5,0 DATA 44,-60,5,0 DATA -44,-60,5,0 DATA 44,60,5,0 DATA -44,60,5,0 DATA 37,108,5,0 DATA -37,108,5,0 DATA 3,3,5,0 DATA -3,3,5,0 DATA 0,164,5,0 DATA 3,-3,124,0 DATA -3,-3,124,0 DATA 3,3,124,0 DATA -3,3,124,0 DATA 100,4,190,0 DATA -92,25,154,0 DATA 92,25,154,0 DATA 0,30,124,0 DATA -92,17,108,0 DATA 92,17,108,0 DATA -46,20,78,0 DATA 46,20,78,0 DATA -100,-18,50,0 DATA 100,-18,50,0 DATA 3,-3,200,0 DATA -3,-3,200,0 DATA 3,3,200,0 DATA -3,3,200,0 DATA 3,-3,78,0 DATA -3,-3,78,0 DATA 3,3,78,0 DATA -3,3,78,0 DATA 0,3,195,0 DATA 0,-3,195,0 DATA 90,-42,28,0 DATA 70,-68,14,0 DATA 60,-88,14,0 DATA -90,-42,28,0 DATA -70,-68,14,0 DATA -60,-88,14,0 AreaTab: ' Flächen-Tabelle ' Anzahl der Flächen eines Objekts DATA 108 ' Eckenzahl oder Kennung, Farb-Nummer, Eckpunkte (max. 8) DATA 3,1,1*4,15*4,2*4,1*4,0,0,0,0,0 DATA 3,1,2*4,15*4,16*4,2*4,0,0,0,0,0 DATA 3,1,2*4,16*4,11*4,2*4,0,0,0,0,0 DATA 3,2,11*4,16*4,17*4,11*4,0,0,0,0,0 DATA 3,2,11*4,17*4,12*4,11*4,0,0,0,0,0 DATA 4,3,12*4,17*4,18*4,13*4,12*4,0,0,0,0 DATA 3,2,13*4,18*4,14*4,13*4,0,0,0,0,0 DATA 3,2,14*4,18*4,19*4,14*4,0,0,0,0,0 DATA 3,1,9*4,14*4,19*4,9*4,0,0,0,0,0 DATA 3,1,9*4,19*4,20*4,9*4,0,0,0,0,0 DATA 3,1,9*4,20*4,10*4,9*4,0,0,0,0,0 DATA 3,2,2*4,4*4,3*4,2*4,0,0,0,0,0 DATA 3,2,2*4,11*4,4*4,2*4,0,0,0,0,0 DATA 3,3,4*4,11*4,12*4,4*4,0,0,0,0,0 DATA 3,3,4*4,12*4,5*4,4*4,0,0,0,0,0 DATA 4,4,5*4,12*4,13*4,6*4,5*4,0,0,0,0 DATA 3,3,6*4,13*4,7*4,6*4,0,0,0,0,0 DATA 3,3,7*4,13*4,14*4,7*4,0,0,0,0,0 DATA 3,2,7*4,14*4,9*4,7*4,0,0,0,0,0 DATA 3,2,7*4,9*4,8*4,7*4,0,0,0,0,0 DATA 3,1,1*4,2*4,25*4,1*4,0,0,0,0,0 DATA 3,1,2*4,26*4,25*4,2*4,0,0,0,0,0 DATA 3,1,2*4,21*4,26*4,2*4,0,0,0,0,0 DATA 3,2,21*4,27*4,26*4,21*4,0,0,0,0,0 DATA 3,2,21*4,22*4,27*4,21*4,0,0,0,0,0 DATA 4,3,22*4,23*4,28*4,27*4,22*4,0,0,0,0 DATA 3,2,23*4,24*4,28*4,23*4,0,0,0,0,0 DATA 3,2,24*4,29*4,28*4,24*4,0,0,0,0,0 DATA 3,1,9*4,29*4,24*4,9*4,0,0,0,0,0 DATA 3,1,9*4,30*4,29*4,9*4,0,0,0,0,0 DATA 3,1,9*4,10*4,30*4,9*4,0,0,0,0,0 DATA 3,2,2*4,3*4,4*4,2*4,0,0,0,0,0 DATA 3,2,2*4,4*4,21*4,2*4,0,0,0,0,0 DATA 3,3,4*4,22*4,21*4,4*4,0,0,0,0,0 DATA 3,3,4*4,5*4,22*4,4*4,0,0,0,0,0 DATA 4,4,5*4,6*4,23*4,22*4,5*4,0,0,0,0 DATA 3,3,6*4,7*4,23*4,6*4,0,0,0,0,0 DATA 3,3,7*4,24*4,23*4,7*4,0,0,0,0,0 DATA 3,2,7*4,9*4,24*4,7*4,0,0,0,0,0 DATA 3,2,7*4,8*4,9*4,7*4,0,0,0,0,0 DATA 3,2,1*4,31*4,15*4,1*4,0,0,0,0,0 DATA 3,2,15*4,31*4,16*4,15*4,0,0,0,0,0 DATA 3,2,16*4,31*4,34*4,16*4,0,0,0,0,0 DATA 3,3,16*4,34*4,17*4,16*4,0,0,0,0,0 DATA 3,3,17*4,34*4,36*4,17*4,0,0,0,0,0 DATA 4,4,17*4,36*4,38*4,18*4,17*4,0,0,0,0 DATA 3,3,18*4,38*4,40*4,18*4,0,0,0,0,0 DATA 3,3,18*4,40*4,19*4,18*4,0,0,0,0,0 DATA 3,2,19*4,40*4,44*4,19*4,0,0,0,0,0 DATA 3,2,19*4,44*4,20*4,19*4,0,0,0,0,0 DATA 3,2,10*4,20*4,44*4,10*4,0,0,0,0,0 DATA 3,2,1*4,25*4,31*4,1*4,0,0,0,0,0 DATA 3,2,25*4,26*4,31*4,25*4,0,0,0,0,0 DATA 3,2,26*4,35*4,31*4,26*4,0,0,0,0,0 DATA 3,3,26*4,27*4,35*4,26*4,0,0,0,0,0 DATA 3,3,27*4,37*4,35*4,27*4,0,0,0,0,0 DATA 4,4,27*4,28*4,39*4,37*4,27*4,0,0,0,0 DATA 3,3,28*4,41*4,39*4,28*4,0,0,0,0,0 DATA 3,3,28*4,29*4,41*4,28*4,0,0,0,0,0 DATA 3,2,29*4,44*4,41*4,29*4,0,0,0,0,0 DATA 3,2,29*4,30*4,44*4,29*4,0,0,0,0,0 DATA 3,2,10*4,44*4,30*4,10*4,0,0,0,0,0 DATA 3,1,31*4,35*4,34*4,31*4,0,0,0,0,0 DATA 4,1,34*4,35*4,37*4,36*4,34*4,0,0,0,0 DATA 4,1,36*4,37*4,39*4,38*4,36*4,0,0,0,0 DATA 4,1,38*4,39*4,41*4,40*4,38*4,0,0,0,0 DATA 3,1,40*4,41*4,44*4,40*4,0,0,0,0,0 DATA 4,3,32*4,63*4,65*4,42*4,32*4,0,0,0,0 DATA 4,2,32*4,33*4,64*4,63*4,32*4,0,0,0,0 DATA 4,3,33*4,43*4,66*4,64*4,33*4,0,0,0,0 DATA 4,2,42*4,65*4,66*4,43*4,42*4,0,0,0,0 DATA 4,3,63*4,45*4,47*4,65*4,63*4,0,0,0,0 DATA 4,2,63*4,64*4,46*4,45*4,63*4,0,0,0,0 DATA 4,3,64*4,66*4,48*4,46*4,64*4,0,0,0,0 DATA 4,2,65*4,47*4,48*4,66*4,65*4,0,0,0,0 DATA 4,4,45*4,46*4,48*4,47*4,45*4,0,0,0,0 DATA 4,7,0*4,49*4,51*4,50*4,0*4,0,0,0,0 DATA 3,7,50*4,52*4,53*4,50*4,0,0,0,0,0 DATA 3,7,50*4,51*4,52*4,50*4,0,0,0,0,0 DATA 3,7,51*4,54*4,52*4,51*4,0,0,0,0,0 DATA 3,7,52*4,55*4,53*4,52*4,0,0,0,0,0 DATA 3,7,52*4,56*4,55*4,52*4,0,0,0,0,0 DATA 3,7,52*4,54*4,56*4,52*4,0,0,0,0,0 DATA 3,7,53*4,55*4,57*4,53*4,0,0,0,0,0 DATA 3,7,54*4,58*4,56*4,54*4,0,0,0,0,0 DATA 4,7,0*4,50*4,51*4,49*4,0*4,0,0,0,0 DATA 3,5,50*4,53*4,52*4,50*4,0,0,0,0,0 DATA 3,6,50*4,52*4,51*4,50*4,0,0,0,0,0 DATA 3,6,51*4,52*4,54*4,51*4,0,0,0,0,0 DATA 3,5,52*4,53*4,55*4,52*4,0,0,0,0,0 DATA 3,5,52*4,55*4,56*4,52*4,0,0,0,0,0 DATA 3,6,52*4,56*4,54*4,52*4,0,0,0,0,0 DATA 3,5,53*4,57*4,55*4,53*4,0,0,0,0,0 DATA 3,6,54*4,56*4,58*4,54*4,0,0,0,0,0 DATA 4,3,45*4,59*4,61*4,47*4,45*4,0,0,0,0 DATA 4,2,45*4,46*4,60*4,61*4,45*4,0,0,0,0 DATA 4,3,46*4,48*4,62*4,60*4,46*4,0,0,0,0 DATA 4,2,47*4,61*4,62*4,48*4,47*4,0,0,0,0 DATA 0,7,1*4,67*4,0,0,0,0,0,0,0 DATA 0,7,10*4,68*4,0,0,0,0,0,0,0 DATA 0,7,58*4,69*4,0,0,0,0,0,0,0 DATA 0,6,69*4,70*4,0,0,0,0,0,0,0 DATA 0,5,70*4,71*4,0,0,0,0,0,0,0 DATA 0,6,71*4,16*4,0,0,0,0,0,0,0 DATA 0,7,57*4,72*4,0,0,0,0,0,0,0 DATA 0,6,72*4,73*4,0,0,0,0,0,0,0 DATA 0,5,73*4,74*4,0,0,0,0,0,0,0 DATA 0,6,74*4,26*4,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