Author: KING for all code. Display spheres in 3D accordingly to QTM's output Comment: All code in BASIC and not at all optimised so don't expect to go over 15 fps on a simple RPC 700. WARNING This is the ugliest part! ".Library.General" General mode("X1024 Y768 C256") ShadowInit InitBalls InitBalls XS%=XScreen% YS%=YScreen% VU%(4) Voice(4) XS%,YS% ! A1=1 " B1=0 # C1=0 $ D1=0 & A2=0 ' B2=1 ( C2=0 ) D2=0 + A3=0 , B3=0 - C3=1 . D3=0 Counter=0 ZDep%=0 ZDepY%=0 XDep%=0 YDep%=0 "QTM_ReadSongLength" NbSeq%,NbPat% "QTM_Info" ,,origin%,,,,address% origin%>=16 0,"Oi! I can't recognise this song!" 9( patterns%=address%+20+30*31+2+128+4 :" sequence%=address%+20+30*31+2 Radius%=70000 BRadius%=90000 PosX%=30000 PosY%=30000 Spot%=Radius%/4 Counter+= ShadowSwitch "QTM_ReadVULevels",1 VU%(0) "QTM_ReadVULevels",2 VU%(1) "QTM_ReadVULevels",3 VU%(2) "QTM_ReadVULevels",4 VU%(3) "QTM_Pos",-1,-1 seq%,event% GCOL 128,VU%(0)/63*100,VU%(1)/63*100,VU%(2)/63*100 A%,B%,C% C%=4 ZDep%+=(B%-ZDepY%)*10 XDep%+=A%*2 YDep%+=B%*2 D1=XDep% D2=YDep% A1=1 B1=0 C1=0 A2=0 B2=1 C2=0 A3=0 B3=0 C3=1 PROCLight ZDep%<0 ZDep%=18000 ZDep%>18000 ZDep%=0 ZDep%>=0 ZDep%<3000 D3=3000-ZDep% : Satellites ZDep%>=3000 ZDep%<6000 D3=6000-ZDep% : ZDep%>=6000 ZDep%<9000 D3=9000-ZDep% : Space ZDep%>=9000 ZDep%<12000 D3=12000-ZDep% : ZDep%>=12000 ZDep%<15000 D3=15000-ZDep% : RotBalls ZDep%>=15000 ZDep%<18000 D3=18000-ZDep% : Voices Voice(0)+=VU%(0)/64* Voice(1)+=VU%(1)/64* Voice(2)+=VU%(2)/64* Voice(3)+=VU%(3)/64* 255,255,255 0,0,120,15 0,0,0 T%=1/( /100) 0,15 "FPS: ";T% XS%,YS% C%=1 Voices VU0%=VU%(0)*10 VU1%=VU%(1)*10 VU2%=VU%(2)*10 VU3%=VU%(3)*10 Trigo(Counter/2,Counter,Counter/2) Angle=0 Cos= (Angle) Sin= (Angle) X=Cos*VU0% Y=750 Z=Sin*VU0% Transform 1,T%,0,0 X%,Y%,Ct*Radius% 1,255,T%,T% X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot% X=Cos*VU1% Y=250 Z=Sin*VU1% Transform 1,0,T%,0 X%,Y%,Ct*Radius% 1,T%,255,T% X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot% X=Cos*VU2% Y=-250 Z=Sin*VU2% Transform 1,0,0,T% X%,Y%,Ct*Radius% 1,T%,T%,255 X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot% X=Cos*VU3% Y=-750 Z=Sin*VU3% Transform 1,T%,0,T% X%,Y%,Ct*Radius% 1,255,T%,255 X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot% Satellites Angle=0 (Angle)*300 Y=0 (Angle)*300 D1=XDep% Trigo(Voice(0),Voice(1),Counter) D1-=500 Transform 1,0,0,T% X%,Y%,Ct*Radius% 1,T%,T%,T% X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot% Y=VU%(0)*5+100 Transform 1,T%,0,0 X%,Y%,Ct*Radius% 1,T%,T%,T% X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot% X%,Y% Y=-VU%(1)*5-100 Transform 1,T%,T%,T% X%,Y% 1,0,T%,0 X%,Y%,Ct*Radius% 1,T%,T%,T% X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot% Angle=0 (Angle)*300 Y=0 (Angle)*300 D1=XDep% Trigo(Voice(2),Voice(3),Counter) D1+=500 Transform 1,0,T%,0 X%,Y%,Ct*Radius% 1,T%,T%,T% X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot% Y=VU%(2)*5+100 Transform 1,T%,T%,0 X%,Y%,Ct*BRadius% 1,T%,T%,T% X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot% X%,Y% Y=-VU%(3)*5-100 Transform 1,T%,T%,T% X%,Y% 1,T%,0,T% X%,Y%,Ct*BRadius% 1,T%,T%,T% X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot% RotBalls P%=0 X=500 Y=0 Z=0 1,T%,0,0 0* Trigo(Voice(1),Voice(2),Voice(3)) 1,0,T%,0 3* Trigo(Voice(0),Voice(2),Voice(3)) 1,0,0,T% 7* Trigo(Voice(0),Voice(1),Voice(3)) 1,T%,T%,0 ;* Trigo(Voice(0),Voice(1),Voice(2)) Transform R=VU%(P%)/63 B X%,Y%,Ct*BRadius%*R 1,T%,T%,T% D- X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot% 0,255,255,255 X%,Y%,Ct*Radius% X=0 Y=0 Z=0 D1=XDep% Transform 1,255,0,255 T( X%,Y%,Ct*BRadius%*event%/63 1,200,255,0 V* X%,Y%,Ct*BRadius%*seq%/NbSeq% 0,255,255,255 X' X%,Y%,Ct*BRadius%*seq%/NbSeq% X=-500 Z=-VU%(0)*20 Transform 1,T%,0,0 X%,Y%,Ct*Radius% 0,255,T%,T% X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot% X=-250 Z=-VU%(1)*20 Transform 1,0,T%,0 X%,Y%,Ct*Radius% 0,T%,255,T% X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot% X=250 Z=-VU%(2)*20 Transform 1,0,0,T% X%,Y%,Ct*Radius% 0,T%,T%,255 X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot% X=500 Z=-VU%(3)*20 Transform 1,T%,T%,0 X%,Y%,Ct*Radius% 0,255,255,T% X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot% Space P%=0 (Counter))*300 Angle=0 (Angle)*(150+K) Y=0 (Angle)*(150+K) Trigo(Counter/5,Counter*5,Counter/2) Transform 0 : 1,T%,0,0 1 : 1,0,T%,0 2 : 1,0,0,T% 3 : 1,T%,T%,0 R=VU%(P%)/64 X%,Y%,Ct*Radius%*R 1,T%,T%,T% X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot% 1,T%,T%,T% X%,Y%,Ct*Radius% P%+=1 Transform 1,255,0,255 X%,Y%,Ct*BRadius%*event%/63 1,200,255,0 X%,Y%,Ct*BRadius%*seq%/NbSeq% 0,255,255,255 X%,Y%,Ct*BRadius%*seq%/NbSeq% P%=0 Angle=0 ! X= (Angle)*(150+VU%(P%)*5) Y=0 ! Z= (Angle)*(150+VU%(P%)*5) Trigo(Counter,Counter*5,0) Transform ! 0 : R%=T% : G%=0 : B%=0 ! 1 : R%=0 : G%=T% : B%=0 ! 2 : R%=0 : G%=0 : B%=T% " 3 : R%=T% : G%=T% : B%=0 1,R%,G%,B% X%,Y%,Ct*Radius% 1,T%,T%,T% X%-Ct*PosX%,Y%+Ct*PosY%,Ct*Spot% GCOL 1,(255+R%)/2,(255+G%)/2,(255+B%)/2 CIRCLE FILL X%*2-Ct*24*1.2,Y%*2+Ct*24*1.2,Ct*16*1.5+Ct GCOL 1,(255+R%*0.5)/1.5,(255+G%*0.5)/1.5,(255+B%*0.5)/1.5 CIRCLE FILL X%*2-Ct*24*1.3,Y%*2+Ct*24*1.3,Ct*16*1+Ct GCOL 1,255,255,255 CIRCLE FILL X%*2-Ct*24*1.4,Y%*2+Ct*24*1.4,Ct*16*0.5+Ct P%+=1 X=0 Y=0 Z=0 Transform 1,255,0,255 X%,Y%,Ct*BRadius%*event%/63 1,200,255,0 X%,Y%,Ct*BRadius%*seq%/NbSeq% 0,255,255,255 X%,Y%,Ct*BRadius%*seq%/NbSeq% VUSPitch &47E4F,seq% pat% pos%=1024*pat%+event%*16 pos%+=patterns% ReadPitch(pos%) Y=300 Z=-VU%(0)*10+100+ZDep% Transform 1,255,0,0 X%*2,Y%*2,Ct*90 0,255,200,200 X%*2-Ct*40,Y%*2+Ct*40,Ct*20 X%*2,Y%*2 ReadPitch(pos%+4) Y=100 Z=-VU%(1)*10+100+ZDep% Transform 1,0,255,0 X%*2,Y%*2,Ct*90 0,200,255,200 X%*2-Ct*40,Y%*2+Ct*40,Ct*20 X%*2,Y%*2 ReadPitch(pos%+8) Y=-100 Z=-VU%(2)*10+100+ZDep% Transform 1,0,0,255 X%*2,Y%*2,Ct*90 0,200,200,255 X%*2-Ct*40,Y%*2+Ct*40,Ct*20 X%*2,Y%*2 ReadPitch(pos%+16) Y=-300 Z=-VU%(3)*10+100+ZDep% Transform 1,255,255,0 X%*2,Y%*2,Ct*90 0,255,255,200 X%*2-Ct*40,Y%*2+Ct*40,Ct*20 X%*2,Y%*2 ReadPitch(addr%)=addr%?1+((?addr% &F)<<8) Transform <= X%,Y% 0 A= A1*X + B1*Y + C1*Z + D1 1 B= A2*X + B2*Y + C2*Z + D2 2 C= A3*X + B3*Y + C3*Z + D3 3 X=A 4 Y=B 5 Z=C DLight=SQR((X-D1-XLight)^2+(Y-D2-YLight)^2+(Z-D3-ZLight)^2) Cl=1/(DLight/500+1) IF Cl>1 THEN Cl=1 T%=255*Cl (X*X+Y*Y+Z*Z) Ct=1/(D+1) T%=3/(D/200+1)*255 T%>255 T%=255 X%=2*X/D*500 Y%=2*Y/D*500 PosX%=40*(X-XLight) PosY%=40*(-Y+YLight) Trigo(Xang,Yang,Zang) Sinx = (Xang) Siny = (Yang) Sinz = (Zang) Cosx = (Xang) Cosy = (Yang) Cosz = (Zang) Sinus=Sinz*Cosx Cosinus=Cosz*Siny A1 = Cosz*Cosy A2 = Cosy*Sinz A3 = -Siny B1 = -Sinus+Cosinus*Sinx U" B2 = Cosx*Cosz+Sinx*Siny*Sinz B3 = Cosy*Sinx W C1 = Sinx*Sinz+Cosinus*Cosx C2 = -Cosz*Sinx+Sinus*Siny C3 = Cosx*Cosy Light D3=3000-ZDep% XLight= (Counter*2)*500 YLight= (Counter*2)*500 ZLight= (Counter*2)*500 X=XLight Y=YLight Z=ZLight Transform 1,255,255,0 X%,Y%,Ct*Radius% 1,255,255,255 X%,Y%,Ct*Radius%/2