home *** CD-ROM | disk | FTP | other *** search
/ Dream 55 / Amiga_Dream_55.iso / RISCOS / MAGAZINE / LABOS / KING.ZIP / King / !FUNQTM / Balls (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1997-12-21  |  11KB  |  461 lines

  1.  Author: KING for all code.
  2.  Display spheres in 3D accordingly to QTM's output
  3.  Comment: All code in BASIC and not at all optimised so don't expect to go over 15 fps on a simple RPC 700.
  4.  WARNING This is the ugliest part!
  5.  "<Basic$Dir>.Library.General"
  6. General
  7. mode("X1024 Y768 C256")
  8. ShadowInit
  9. InitBalls
  10. InitBalls
  11.  XS%=XScreen% 
  12.  YS%=YScreen% 
  13.  VU%(4)
  14.  Voice(4)
  15.  XS%,YS%
  16. !     A1=1
  17. "     B1=0
  18. #     C1=0
  19. $     D1=0
  20. &     A2=0
  21. '     B2=1
  22. (     C2=0
  23. )     D2=0
  24. +     A3=0
  25. ,     B3=0
  26. -     C3=1
  27. .     D3=0
  28.  Counter=0
  29.  ZDep%=0
  30.  ZDepY%=0
  31.  XDep%=0
  32.  YDep%=0
  33.  "QTM_ReadSongLength" 
  34.  NbSeq%,NbPat%
  35.  "QTM_Info" 
  36.  ,,origin%,,,,address%
  37.  origin%>=16 
  38.  0,"Oi! I can't recognise this song!"
  39. 9( patterns%=address%+20+30*31+2+128+4
  40. :" sequence%=address%+20+30*31+2
  41.  Radius%=70000
  42.  BRadius%=90000
  43.  PosX%=30000
  44.  PosY%=30000
  45.  Spot%=Radius%/4
  46.   Counter+=
  47. ShadowSwitch
  48.  "QTM_ReadVULevels",1 
  49.  VU%(0)
  50.  "QTM_ReadVULevels",2 
  51.  VU%(1)
  52.  "QTM_ReadVULevels",3 
  53.  VU%(2)
  54.  "QTM_ReadVULevels",4 
  55.  VU%(3)
  56.  "QTM_Pos",-1,-1 
  57.  seq%,event%
  58.  GCOL 128,VU%(0)/63*100,VU%(1)/63*100,VU%(2)/63*100
  59.  A%,B%,C%
  60.  C%=4 
  61.    ZDep%+=(B%-ZDepY%)*10 
  62.    XDep%+=A%*2
  63.    YDep%+=B%*2
  64.   D1=XDep%
  65.   D2=YDep%
  66.   A1=1
  67.   B1=0
  68.   C1=0
  69.   A2=0
  70.   B2=1
  71.   C2=0
  72.   A3=0
  73.   B3=0
  74.   C3=1
  75.  PROCLight
  76.  ZDep%<0 
  77.  ZDep%=18000
  78.  ZDep%>18000 
  79.  ZDep%=0
  80.  ZDep%>=0 
  81.  ZDep%<3000 
  82.  D3=3000-ZDep% : 
  83. Satellites 
  84.  ZDep%>=3000 
  85.  ZDep%<6000 
  86.  D3=6000-ZDep% : 
  87.  ZDep%>=6000 
  88.  ZDep%<9000 
  89.  D3=9000-ZDep% : 
  90. Space
  91.  ZDep%>=9000 
  92.  ZDep%<12000 
  93.  D3=12000-ZDep% : 
  94.  ZDep%>=12000 
  95.  ZDep%<15000 
  96.  D3=15000-ZDep% : 
  97. RotBalls
  98.  ZDep%>=15000 
  99.  ZDep%<18000 
  100.  D3=18000-ZDep% : 
  101. Voices
  102.   Voice(0)+=VU%(0)/64*
  103.   Voice(1)+=VU%(1)/64*
  104.   Voice(2)+=VU%(2)/64*
  105.   Voice(3)+=VU%(3)/64*
  106.  255,255,255
  107.  0,0,120,15
  108.  0,0,0
  109.   T%=1/(
  110. /100)
  111.  0,15
  112.  "FPS: ";T%
  113.  XS%,YS%
  114.  C%=1
  115. Voices
  116.  VU0%=VU%(0)*10
  117.  VU1%=VU%(1)*10
  118.  VU2%=VU%(2)*10
  119.  VU3%=VU%(3)*10
  120. Trigo(Counter/2,Counter,Counter/2)
  121.  Angle=0 
  122.   Cos=
  123. (Angle)
  124.   Sin=
  125. (Angle)
  126.   X=Cos*VU0%
  127.   Y=750
  128.   Z=Sin*VU0%
  129. Transform
  130.          
  131.  1,T%,0,0
  132.  X%,Y%,Ct*Radius%
  133.  1,255,T%,T%
  134.  X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot%
  135.   X=Cos*VU1%
  136.   Y=250
  137.   Z=Sin*VU1%
  138. Transform
  139.  1,0,T%,0
  140.  X%,Y%,Ct*Radius%
  141.  1,T%,255,T%
  142.  X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot%
  143.   X=Cos*VU2%
  144.   Y=-250
  145.   Z=Sin*VU2%
  146. Transform
  147.  1,0,0,T%
  148.  X%,Y%,Ct*Radius%
  149.  1,T%,T%,255
  150.  X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot%
  151.   X=Cos*VU3%
  152.   Y=-750
  153.   Z=Sin*VU3%
  154. Transform
  155.  1,T%,0,T%
  156.  X%,Y%,Ct*Radius%
  157.  1,255,T%,255
  158.  X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot%
  159. Satellites
  160.  Angle=0 
  161. (Angle)*300
  162.       Y=0
  163. (Angle)*300
  164.   D1=XDep%
  165.          
  166. Trigo(Voice(0),Voice(1),Counter)
  167.   D1-=500
  168. Transform
  169.          
  170.  1,0,0,T%
  171.  X%,Y%,Ct*Radius%
  172.  1,T%,T%,T%
  173.  X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot%
  174.  Y=VU%(0)*5+100
  175. Transform
  176.  1,T%,0,0
  177.  X%,Y%,Ct*Radius%
  178.  1,T%,T%,T%
  179.  X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot%
  180.  X%,Y%
  181.  Y=-VU%(1)*5-100
  182. Transform
  183.  1,T%,T%,T% 
  184.  X%,Y%
  185.  1,0,T%,0
  186.  X%,Y%,Ct*Radius%
  187.  1,T%,T%,T%
  188.  X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot%
  189.  Angle=0 
  190. (Angle)*300
  191.       Y=0
  192. (Angle)*300
  193.   D1=XDep%
  194. Trigo(Voice(2),Voice(3),Counter)
  195.   D1+=500
  196. Transform
  197.  1,0,T%,0
  198.  X%,Y%,Ct*Radius%
  199.  1,T%,T%,T%
  200.  X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot%
  201.  Y=VU%(2)*5+100
  202. Transform
  203.  1,T%,T%,0
  204.  X%,Y%,Ct*BRadius%
  205.  1,T%,T%,T%
  206.  X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot%
  207.  X%,Y%
  208.  Y=-VU%(3)*5-100
  209. Transform
  210.  1,T%,T%,T%
  211.  X%,Y%
  212.  1,T%,0,T%
  213.  X%,Y%,Ct*BRadius%
  214.  1,T%,T%,T%
  215.  X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot%
  216. RotBalls
  217.  P%=0 
  218.    X=500
  219.    Y=0
  220.    Z=0
  221.  1,T%,0,0
  222. 0*    
  223. Trigo(Voice(1),Voice(2),Voice(3))
  224.  1,0,T%,0
  225. 3*    
  226. Trigo(Voice(0),Voice(2),Voice(3))
  227.  1,0,0,T%
  228. 7*    
  229. Trigo(Voice(0),Voice(1),Voice(3))
  230.  1,T%,T%,0
  231. ;*    
  232. Trigo(Voice(0),Voice(1),Voice(2))
  233. Transform
  234.    R=VU%(P%)/63
  235. B    
  236.  X%,Y%,Ct*BRadius%*R
  237.  1,T%,T%,T%
  238. D-   
  239.  X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot%
  240.         
  241.  0,255,255,255
  242.  X%,Y%,Ct*Radius%
  243.    X=0
  244.    Y=0
  245.    Z=0
  246.    D1=XDep%
  247. Transform
  248.       
  249.  1,255,0,255
  250. T(   
  251.  X%,Y%,Ct*BRadius%*event%/63
  252.  1,200,255,0
  253. V*   
  254.  X%,Y%,Ct*BRadius%*seq%/NbSeq%
  255.  0,255,255,255
  256. X'   
  257.  X%,Y%,Ct*BRadius%*seq%/NbSeq%
  258.  X=-500
  259.  Z=-VU%(0)*20
  260. Transform
  261.  1,T%,0,0
  262.  X%,Y%,Ct*Radius%
  263.  0,255,T%,T%
  264.  X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot%
  265.  X=-250
  266.  Z=-VU%(1)*20
  267. Transform
  268.  1,0,T%,0
  269.  X%,Y%,Ct*Radius%
  270.  0,T%,255,T%
  271.  X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot%
  272.  X=250
  273.  Z=-VU%(2)*20
  274. Transform
  275.  1,0,0,T%
  276.  X%,Y%,Ct*Radius%
  277.  0,T%,T%,255
  278.  X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot%
  279.  X=500
  280.  Z=-VU%(3)*20
  281. Transform
  282.  1,T%,T%,0
  283.  X%,Y%,Ct*Radius%
  284.  0,255,255,T%
  285.  X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot%
  286. Space
  287.  P%=0 
  288. (Counter))*300
  289.  Angle=0 
  290. (Angle)*(150+K)
  291.       Y=0
  292. (Angle)*(150+K)
  293. Trigo(Counter/5,Counter*5,Counter/2)
  294. Transform
  295.  0 : 
  296.  1,T%,0,0
  297.  1 : 
  298.  1,0,T%,0
  299.  2 : 
  300.  1,0,0,T%
  301.  3 : 
  302.  1,T%,T%,0
  303.   R=VU%(P%)/64
  304.  X%,Y%,Ct*Radius%*R
  305.  1,T%,T%,T%
  306.  X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot%
  307.  1,T%,T%,T%
  308.  X%,Y%,Ct*Radius%
  309.   P%+=1
  310. Transform
  311.  1,255,0,255
  312.  X%,Y%,Ct*BRadius%*event%/63
  313.  1,200,255,0
  314.  X%,Y%,Ct*BRadius%*seq%/NbSeq%
  315.  0,255,255,255
  316.  X%,Y%,Ct*BRadius%*seq%/NbSeq%
  317.       
  318.   P%=0
  319.  Angle=0 
  320. !   X=
  321. (Angle)*(150+VU%(P%)*5)
  322.    Y=0
  323. !   Z=
  324. (Angle)*(150+VU%(P%)*5)
  325. Trigo(Counter,Counter*5,0)
  326. Transform
  327. !    
  328.  0 : R%=T% : G%=0 : B%=0
  329. !    
  330.  1 : R%=0 : G%=T% : B%=0
  331. !    
  332.  2 : R%=0 : G%=0 : B%=T%
  333. "    
  334.  3 : R%=T% : G%=T% : B%=0
  335.  1,R%,G%,B%
  336.  X%,Y%,Ct*Radius%
  337.  1,T%,T%,T%
  338.  X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot%
  339.  GCOL 1,(255+R%)/2,(255+G%)/2,(255+B%)/2
  340.  CIRCLE FILL X%*2-Ct*24*1.2,Y%*2+Ct*24*1.2,Ct*16*1.5+Ct
  341.  GCOL 1,(255+R%*0.5)/1.5,(255+G%*0.5)/1.5,(255+B%*0.5)/1.5
  342.  CIRCLE FILL X%*2-Ct*24*1.3,Y%*2+Ct*24*1.3,Ct*16*1+Ct
  343.  GCOL 1,255,255,255
  344.  CIRCLE FILL X%*2-Ct*24*1.4,Y%*2+Ct*24*1.4,Ct*16*0.5+Ct
  345.          
  346.    P%+=1
  347.    X=0
  348.    Y=0
  349.    Z=0
  350. Transform
  351.  1,255,0,255
  352.  X%,Y%,Ct*BRadius%*event%/63
  353.  1,200,255,0
  354.  X%,Y%,Ct*BRadius%*seq%/NbSeq%
  355.  0,255,255,255
  356.  X%,Y%,Ct*BRadius%*seq%/NbSeq%
  357. VUSPitch
  358.  &47E4F,seq% 
  359.  pat%
  360.   pos%=1024*pat%+event%*16
  361.   pos%+=patterns%
  362. ReadPitch(pos%)
  363.   Y=300
  364.   Z=-VU%(0)*10+100+ZDep%
  365. Transform
  366.  1,255,0,0
  367.  X%*2,Y%*2,Ct*90
  368.  0,255,200,200
  369.  X%*2-Ct*40,Y%*2+Ct*40,Ct*20
  370.  X%*2,Y%*2
  371. ReadPitch(pos%+4)
  372.   Y=100
  373.   Z=-VU%(1)*10+100+ZDep%
  374. Transform
  375.  1,0,255,0
  376.  X%*2,Y%*2,Ct*90
  377.  0,200,255,200
  378.  X%*2-Ct*40,Y%*2+Ct*40,Ct*20
  379.  X%*2,Y%*2
  380. ReadPitch(pos%+8)
  381.   Y=-100
  382.   Z=-VU%(2)*10+100+ZDep%
  383. Transform
  384.  1,0,0,255
  385.  X%*2,Y%*2,Ct*90
  386.  0,200,200,255
  387.  X%*2-Ct*40,Y%*2+Ct*40,Ct*20
  388.  X%*2,Y%*2
  389. ReadPitch(pos%+16)
  390.   Y=-300
  391.   Z=-VU%(3)*10+100+ZDep%
  392. Transform
  393.  1,255,255,0
  394.  X%*2,Y%*2,Ct*90
  395.  0,255,255,200
  396.  X%*2-Ct*40,Y%*2+Ct*40,Ct*20
  397.  X%*2,Y%*2
  398. ReadPitch(addr%)=addr%?1+((?addr% 
  399.  &F)<<8)
  400. Transform
  401.  <= X%,Y%
  402. 0   A= A1*X + B1*Y + C1*Z + D1
  403. 1   B= A2*X + B2*Y + C2*Z + D2
  404. 2   C= A3*X + B3*Y + C3*Z + D3
  405. 3      X=A
  406. 4      Y=B
  407. 5      Z=C
  408.  DLight=SQR((X-D1-XLight)^2+(Y-D2-YLight)^2+(Z-D3-ZLight)^2)
  409.  Cl=1/(DLight/500+1)
  410.  IF Cl>1 THEN Cl=1
  411.  T%=255*Cl
  412. (X*X+Y*Y+Z*Z)
  413.   Ct=1/(D+1)
  414.   T%=3/(D/200+1)*255
  415.  T%>255 
  416.  T%=255
  417.   X%=2*X/D*500
  418.   Y%=2*Y/D*500
  419.  PosX%=40*(X-XLight)
  420.  PosY%=40*(-Y+YLight)
  421. Trigo(Xang,Yang,Zang)
  422.  Sinx = 
  423. (Xang)
  424.  Siny = 
  425. (Yang)
  426.  Sinz = 
  427. (Zang) 
  428.  Cosx = 
  429. (Xang)
  430.  Cosy = 
  431. (Yang)
  432.  Cosz = 
  433. (Zang) 
  434.  Sinus=Sinz*Cosx
  435.  Cosinus=Cosz*Siny
  436.  A1 = Cosz*Cosy
  437.  A2 = Cosy*Sinz
  438.  A3 = -Siny
  439.  B1 = -Sinus+Cosinus*Sinx
  440. U" B2 = Cosx*Cosz+Sinx*Siny*Sinz
  441.  B3 = Cosy*Sinx
  442. W  C1 = Sinx*Sinz+Cosinus*Cosx
  443.  C2 = -Cosz*Sinx+Sinus*Siny
  444.  C3 = Cosx*Cosy
  445. Light
  446.  D3=3000-ZDep%
  447.  XLight=
  448. (Counter*2)*500
  449.  YLight=
  450. (Counter*2)*500
  451.  ZLight=
  452. (Counter*2)*500
  453.  X=XLight
  454.  Y=YLight
  455.  Z=ZLight
  456. Transform
  457.  1,255,255,0
  458.  X%,Y%,Ct*Radius%
  459.  1,255,255,255
  460.  X%,Y%,Ct*Radius%/2
  461.