home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 594b.lha / VectorLibrary / Basic / vd_bob (.txt) < prev    next >
AmigaBASIC Source Code  |  1991-11-09  |  9KB  |  449 lines

  1. '***************************************
  2. '*                                     *
  3. '* Basic-Demo for vector.library V1.6x *
  4. '*                                     *
  5. '* ©1991 by Alexander Lippert          *
  6. '*                                     *
  7. '* All object-design done by           *
  8. '*   Oliver Hahn ©1991                 *
  9. '*                                     *
  10. '***************************************
  11.  
  12. LIBRARY "exec.library"
  13. LIBRARY "vector.library"
  14.  
  15. DECLARE FUNCTION AllocMem& LIBRARY
  16. DECLARE FUNCTION FreeMem& LIBRARY
  17.  
  18. DECLARE FUNCTION SetVBI& LIBRARY
  19. DECLARE FUNCTION InitVBOBs& LIBRARY
  20. DECLARE FUNCTION OpenVScreen& LIBRARY
  21. DECLARE FUNCTION CloseVScreen& LIBRARY
  22. DECLARE FUNCTION UseJoy& LIBRARY
  23. DECLARE FUNCTION DoAnim& LIBRARY
  24. DECLARE FUNCTION FreeVBOBs& LIBRARY
  25. DECLARE FUNCTION AutoScaleOn& LIBRARY
  26. DECLARE FUNCTION AutoScaleOff& LIBRARY
  27. DECLARE FUNCTION FreeJoy& LIBRARY
  28. DECLARE FUNCTION SetColors& LIBRARY
  29.  
  30. fmem&=65537   ' Flags fuer FastMem
  31. cmem&=65539   ' Flags fuer ChipMem
  32.  
  33. RESTORE NewVScreen ' Zeiger auf NewVScreen
  34. GOSUB OpenVScreen  ' VScreen öffnen
  35.  
  36. RESTORE ColorTab ' Zeiger auf Farb-Tabelle
  37. GOSUB SetColors  ' Farben setzen
  38.  
  39. RESTORE BOBList  ' Zeiger auf BOBListe
  40. GOSUB InitVBOBs  ' VBOBs initialisieren
  41.  
  42. res=AutoScaleOn&(PEEKW(nsm&+12)) ' Entzerrung fuer höhrerr Auflösungen
  43.  
  44. RESTORE JoyStruct ' Zeiger auf Joystick-Struktur
  45. GOSUB UseJoy      ' Joystick benutzen
  46.  
  47. RESTORE PointTab
  48. GOSUB MakePointTab ' Punkt-Tabelle anlegen
  49.  
  50. RESTORE AreaTab
  51. GOSUB MakeAreaTab ' Flächen-Tabelle anlegen
  52.  
  53. RESTORE MoveTab
  54. GOSUB MakeMoveTab ' Bewegungs-Tabelle anlegen
  55.  
  56. RESTORE ObjectStruct
  57. GOSUB MakeObjectStruct ' Object-Struktur anlegen
  58.  
  59. RESTORE WorldStruct
  60. GOSUB MakeWorldStruct ' Welt-Struktur anlegen
  61.  
  62. res=DoAnim&(world&) ' Animation der Körper
  63.  
  64.  
  65. res=CloseVScreen& ' Screen schließen
  66.  
  67. res=FreeJoy&    ' nur, wenn zuvor
  68. res=FreeMem&(joy&,12) ' UseJoy& erfolgte
  69.  
  70. res=FreeVBOBs  ' nur, wenn zuvor
  71. res=FreeMem&(bobs&,bobsize&) ' InitVBOBs& erfolgte
  72.  
  73. res=FreeMem&(nsm&,34)  ' von Strukturen belegten
  74. res=FreeMem&(coltab&,8*64+2) ' Speicher freigeben
  75. res=FreeMem&(world&,wdsize&) ' ...
  76. res=FreeMem&(object&,26)
  77. res=FreeMem&(movetb&,1000)
  78. res=FreeMem&(areatb&,arsize&)
  79. res=FreeMem&(pointtb&,ptsize&)
  80.  
  81. LIBRARY CLOSE
  82.  
  83. END
  84.  
  85.  
  86. NewVScreen:
  87.   ' Offset von links oben
  88.  DATA 0,0
  89.   ' Ausdehnung des Screen
  90.  DATA 320,256
  91.   ' Tiefe des Screen
  92.  DATA 3
  93.   ' Farben der Titel-Leiste      
  94.  DATA 0,0 
  95.   ' ViewModes (&H8000 HiRes, &H4 Lace)
  96.  DATA 0
  97.   ' Zeiger auf Font und Title
  98.  DATA 0,0
  99.   ' Flags (z.Z. unbelegt)
  100.  DATA 0
  101.   ' Offset der Vektor-Graphik im Screen (z.Z. unbelegt)
  102.  DATA 0,0
  103.   ' Ausdehnung der Vector-Graphik (muß z.Z. Ausdehnung des Screens entsprechen) 
  104.  DATA 320,256
  105.   ' Tife der Vektor-Graphik
  106.  DATA 3
  107.  
  108.  
  109. WorldStruct:
  110.   ' Flags (1 fuer Drahtgitter), Anzahl der Objekte
  111.  DATA 0,1
  112.   ' Zeiger auf Objekte (werden von MakeWorldStruct eingetragen)
  113.  DATA 0
  114.  
  115.  
  116. ObjectStruct: ' Fuer jedes Objekt eine eigene!
  117.   ' Zeiger auf Punk-Tabelle, Flächen-Tabelle, Bewegungs-Tabelle (werden von MakeObjectStruct eingetragen)
  118.  DATA 0,0,0
  119.   ' Flags (z.Z. unbelegt)
  120.  DATA 0
  121.   ' Start-Position
  122.  DATA 0,0,-3000
  123.   ' Start-Rotation
  124.  DATA 0,0,0
  125.  
  126.  
  127. MoveTab:
  128.   ' Ticks, movx,movy,movz, rotx,roty,rotz  --- Bewegung fuer Joystick: 1500 Ticks
  129.  DATA 1500, 0,0,0, 0,0,0
  130.  DATA -1
  131.  
  132.  
  133. ColorTab:
  134.  ' Register, Rot, Gruen, Blau
  135.  DATA 0, 0,0,0
  136.  DATA 1, 12,12,13
  137.  DATA 2, 5,6,10
  138.  DATA 3, 3,4,8
  139.  DATA 4, 2,3,7
  140.  DATA 5, 1,2,6
  141.  DATA 6, 0,1,5
  142.  DATA 7, 0,0,4
  143.  DATA -1
  144.  
  145.  
  146. JoyStruct:
  147.   ' Z-Geschwindigkeit, Vordere Grenze, Hintere Grenze
  148.  DATA 20,-1500,-16000
  149.   ' Rotations-Geschwindigkeit um x,y,z-Achse
  150.  DATA 3,3,3
  151.  
  152.  
  153. BOBList:
  154.   ' Anzahl der VBOBs
  155.  DATA 16
  156.   ' Breite in Worten, Höhe, Reserved, Reserved
  157.  DATA 2,31,0,0
  158.  DATA 2,29,0,0
  159.  DATA 2,27,0,0
  160.  DATA 2,25,0,0
  161.  DATA 2,23,0,0
  162.  DATA 2,21,0,0
  163.  DATA 2,19,0,0
  164.  DATA 2,17,0,0
  165.  DATA 1,15,0,0
  166.  DATA 1,13,0,0
  167.  DATA 1,11,0,0
  168.  DATA 1,9,0,0
  169.  DATA 1,7,0,0
  170.  DATA 1,5,0,0
  171.  DATA 1,3,0,0
  172.  DATA 1,1,0,0
  173.   
  174.  
  175. PointTab: ' Punkt-Tabelle
  176.   ' Anzahl der Punkte eines Objekts
  177.  DATA 19
  178.   ' x,y,z-Koordinate, Eigengröße fuer VBOBs
  179.  DATA -80,-20,80,0
  180.  DATA -80,20,80,0
  181.  DATA 80,-20,80,0
  182.  DATA 80,20,80,0
  183.  
  184.  DATA -80,-20,-80,0
  185.  DATA -80,20,-80,0
  186.  DATA 80,-20,-80,0
  187.  DATA 80,20,-80,0
  188.  
  189.  DATA -50,-20,50,0
  190.  DATA -50,20,50,0
  191.  DATA 50,-20,50,0
  192.  DATA 50,20,50,0
  193.  
  194.  DATA -50,-20,-50,0
  195.  DATA -50,20,-50,0
  196.  DATA 50,-20,-50,0
  197.  DATA 50,20,-50,0
  198.  
  199.  DATA 0,60,0,2
  200.  DATA 0,0,0,0
  201.  DATA 0,-60,0,2
  202.  
  203.  
  204. AreaTab:  ' Flächen-Tabelle
  205.   ' Anzahl der Flächen eines Objekts
  206.  DATA 19 
  207.   ' Eckenzahl oder Kennung, Farb-Nummer, Eckpunkte (max. 8)
  208.  DATA 4,2,1*4,3*4,2*4,0*4,1*4,0,0,0,0
  209.  DATA 4,4,5*4,4*4,6*4,7*4,5*4,0,0,0,0
  210.  DATA 4,3,0*4,4*4,5*4,1*4,0*4,0,0,0,0
  211.  DATA 4,3,2*4,3*4,7*4,6*4,2*4,0,0,0,0
  212.  
  213.  DATA 4,5,9*4,8*4,10*4,11*4,9*4,0,0,0,0
  214.  DATA 4,3,13*4,15*4,14*4,12*4,13*4,0,0,0,0
  215.  DATA 4,4,8*4,9*4,13*4,12*4,8*4,0,0,0,0
  216.  DATA 4,4,10*4,14*4,15*4,11*4,10*4,0,0,0,0
  217.  
  218.  DATA 4,2,1*4,9*4,11*4,3*4,1*4,0,0,0,0
  219.  DATA 4,2,1*4,5*4,13*4,9*4,1*4,0,0,0,0
  220.  DATA 4,2,5*4,7*4,15*4,13*4,5*4,0,0,0,0
  221.  DATA 4,2,11*4,15*4,7*4,3*4,11*4,0,0,0,0
  222.  
  223.  DATA 4,6,0*4,2*4,10*4,8*4,0*4,0,0,0,0
  224.  DATA 4,6,0*4,8*4,12*4,4*4,0*4,0,0,0,0
  225.  DATA 4,6,4*4,12*4,14*4,6*4,4*4,0,0,0,0
  226.  DATA 4,6,10*4,2*4,6*4,14*4,10*4,0,0,0,0
  227.  
  228.  DATA -1,4,16*4,0,0,0,0,0,0,0,0
  229.  DATA -1,4,17*4,0,0,0,0,0,0,0,0
  230.  DATA -1,4,18*4,0,0,0,0,0,0,0,0
  231.  
  232.  
  233. OpenVScreen:
  234. nsm&=AllocMem&(34,fmem&)
  235.  
  236. READ leftedge,topedge,widt,height,depth,detailpen
  237. READ blockpen,viewmodes,a,a
  238. READ vwflags,vwleftedge,vwtopedge,vwwidt
  239. READ vwheight,vwdepth
  240.  
  241. POKEW nsm&,leftedge  ' NewVScreen-Struktur anlegen
  242. POKEW nsm&+2,topedge
  243. POKEW nsm&+4,widt
  244. POKEW nsm&+6,height
  245. POKEW nsm&+8,depth
  246. POKE  nsm&+10,detailpen
  247. POKE  nsm&+11,blockpen
  248. POKEW nsm&+12,viewmodes
  249. POKEL nms&+14,font
  250. POKEL nsm&+18,SADD("vector.library V1.67 ©91 by A.Lippert"+CHR$(0))
  251. POKEW nsm&+22,vwflags
  252. POKEW nsm&+24,vwleftedge
  253. POKEW nsm&+26,vwtopedge
  254. POKEW nsm&+28,vwwidt
  255. POKEW nsm&+30,vwheight
  256. POKEW nsm&+32,vwdepth
  257.  
  258. viewstruct&=OpenVScreen&(nsm&) ' Bibliothek aufrufen
  259.  
  260. RETURN
  261.  
  262.  
  263. SetColors:
  264. coltab&=AllocMem&(8*64+2,fmem&) ' fuer max. 64 Farben speicher allokieren
  265. ct=coltab&
  266.  
  267. READ reg
  268.  
  269. WHILE reg<>-1 ' Farb-Tabelle anlegen
  270.  READ r,g,b
  271.  POKEW ct,reg
  272.  POKEW ct+2,r
  273.  POKEW ct+4,g
  274.  POKEW ct+6,b
  275.  READ reg
  276.  ct=ct+8
  277. WEND
  278. POKEW ct,-1
  279.  
  280. res=SetColors&(viewstruct&,coltab&) ' Bibliothek aufrufen
  281.  
  282. RETURN
  283.  
  284.  
  285. MakePointTab:
  286. READ ptnum
  287. ptsize&=ptnum*8+2
  288. pointtb&=AllocMem&(ptsize&,fmem&)
  289.  
  290. pt=pointtb&
  291.  
  292. POKEW pt,ptnum
  293. pt=pt+2
  294.  
  295. FOR i=1 TO ptnum ' Punkt-Tabelle anlegen
  296.  READ x,y,z,ps
  297.  POKEW pt,x
  298.  POKEW pt+2,y
  299.  POKEW pt+4,z
  300.  POKEW pt+6,ps
  301.  pt=pt+8
  302. NEXT i
  303.  
  304. RETURN
  305.  
  306.  
  307. MakeAreaTab:
  308. READ arnum
  309. arsize&=arnum*22+2
  310. areatb&=AllocMem&(arsize&,fmem&)
  311.  
  312. ar=areatb&
  313.  
  314. POKEW ar,arnum
  315. ar=ar+2
  316.  
  317. FOR i=1 TO arnum ' Flächen-Tabelle anlegen
  318.  READ ptnum,col,pt1$,pt2$,pt3$,pt4$,pt5$,pt6$,pt7$,pt8$,pt9$
  319.  POKEW ar,ptnum
  320.  POKEW ar+2,col
  321.  POKEW ar+4,VAL(pt1$)*4
  322.  POKEW ar+6,VAL(pt2$)*4
  323.  POKEW ar+8,VAL(pt3$)*4
  324.  POKEW ar+10,VAL(pt4$)*4
  325.  POKEW ar+12,VAL(pt5$)*4
  326.  POKEW ar+14,VAL(pt6$)*4
  327.  POKEW ar+16,VAL(pt7$)*4
  328.  POKEW ar+18,VAL(pt8$)*4
  329.  POKEW ar+20,VAL(pt9$)*4
  330.  ar=ar+22
  331. NEXT i
  332.  
  333. RETURN
  334.  
  335.  
  336. MakeMoveTab:
  337. movetb&=AllocMem&(1000,fmem&) ' 1000 Bytes fr Bewegungs-Tabelle allokieren (mehr als ausreichend)
  338.  
  339. mv=movetb&
  340.  
  341. mvtabbeg:
  342. READ ticks
  343.  
  344. WHILE ticks => 0 ' Bewegungs-Tabelle anlegen
  345.  POKEW mv,ticks
  346.  READ movx,movy,movz,rotx,roty,rotz
  347.  POKEW mv+2,movx
  348.  POKEW mv+4,movy
  349.  POKEW mv+6,movz
  350.  POKEW mv+8,rotx
  351.  POKEW mv+10,roty
  352.  POKEW mv+12,rotz
  353.  READ ticks
  354.  mv=mv+14 
  355. WEND
  356.  
  357. IF ticks=-1 OR ticks = -2 THEN POKEW mv,ticks : GOTO mvtabend
  358.  
  359. IF ticks=-3 THEN POKEW mv,ticks : mv=mv+2 : GOTO mvtabbeg
  360. IF ticks=-4 THEN POKEW mv,ticks : READ count : POKEW mv+2,count : mv=mv+4 : GOTO mvtabbeg
  361.  
  362. mvtabend:
  363. RETURN
  364.  
  365.  
  366. MakeObjectStruct:
  367. READ a,a,a
  368.  
  369. object&=AllocMem&(26,fmem&)
  370.  
  371. READ flags,posx,posy,posz,rotx,roty,rotz
  372.  
  373. POKEL object&,pointtb&  ' Object-Struktur anlegen
  374. POKEL object&+4,areatb&
  375. POKEL object&+8,movetb&
  376. POKEW object&+12,flags
  377. POKEW object&+14,posx
  378. POKEW object&+16,posy
  379. POKEW object&+18,posz
  380. POKEW object&+20,rotx
  381. POKEW object&+22,roty
  382. POKEW object&+24,rotz
  383.  
  384. RETURN
  385.  
  386.  
  387. MakeWorldStruct:
  388. READ flags
  389. READ obnum
  390.  
  391. wdsize&=obnum*4+4
  392. world&=AllocMem&(wdsize&,fmem&)
  393.  
  394. wd=world&
  395.  
  396. POKEW wd,flags ' Welt-Struktur anlegen
  397. POKEW wd+2,obnum
  398.  
  399. wd=wd+4
  400.  
  401. READ a           ' Diese Sequenz muß fr jedes
  402. POKEL wd,object& ' Objekt erfolgen
  403.  
  404. RETURN
  405.  
  406.  
  407. UseJoy:
  408. joy&=AllocMem&(12,fmem&)
  409. READ movz,borderfront,borderback,rotx,roty,rotz
  410.  
  411. POKEW joy&,movz  ' Joystick-Struktur poken
  412. POKEW joy&+2,borderfront
  413. POKEW joy&+4,borderback
  414. POKEW joy&+6,rotx
  415. POKEW joy&+8,roty
  416. POKEW joy&+10,rotz
  417.  
  418. res=UseJoy&(0,joy&) ' Bibliothek aufrufen
  419.  
  420. RETURN
  421.  
  422.  
  423. InitVBOBs:
  424. READ bobnum
  425.  
  426. bobsize&=bobnum*12+2
  427. bobs&=AllocMem&(bobsize&,fmem&)
  428.  
  429. bb=bobs&
  430.  
  431. POKEW bb,bobnum
  432.  
  433. bb=bb+2
  434.  
  435. FOR i=1 TO bobnum ' BOBListe anlegen
  436.  READ widt,height,a,a
  437.  POKEW bb,widt
  438.  POKEW bb+2,height
  439.  POKEL bb+4,a
  440.  POKEL bb+8,a
  441.  bb=bb+12
  442. NEXT
  443.  
  444. ' Im folgenden Bibliotheksaufruf ist der Name des VBOB-Satzes enthalten (Pfad nicht vergessen!)
  445. nam$="VBOBs:bs1lo3_??.gfx"+CHR$(0)
  446. res=InitVBOBs&(PEEKW(nsm&+32),SADD(nam$),bobs&,0)
  447.  
  448. RETURN
  449.