home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
594b.lha
/
VectorLibrary
/
Basic
/
vd_ship
(
.txt
)
< prev
next >
Wrap
AmigaBASIC Source Code
|
1991-11-09
|
14KB
|
627 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 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