GLOBAL NUMBALLS,VELFACTOR,MAXBALLS,GLOBALVEL,DRAG,RR,MAJMIN,NOFF,NEXTBANG MAXBALLS=24 NUMBALLS=8 VELFACTOR=4 GLOBALVEL=4 DIM GLOBAL BALLS(MAXBALLS-1,9),CHKD(MAXBALLS-1) TOUCHSCREEN MUSICDATA: DATA 0,2,4,5,7,9,11,12 DATA 0,2,3,5,7,9,10,12 DIM GLOBAL SCALE(7,1) NEXTBANG=MAXBALLS+1 RR=0 ON VBL CALL VB RESETME: RESTORE MUSICDATA RANDOMIZE TIMER DRAG=1-(0.000001*RND(100)) MAJMIN=RND(1) NOFF=RND(42)+42 FOR I=0 TO 7 READ U SCALE(I,0)=U+NOFF NEXT I FOR I=0 TO 7 READ U SCALE(I,1)=U+NOFF NEXT I SPRITE OFF CALL PATTERNPLACER SUB RNDPLACER FOR I=0 TO NUMBALLS-1 FOR J=0 TO NUMBALLS-1 CHKD(I)=-1 NEXT J REPEAT T=RND(3) BALLS(I,6)=T BALLS(I,0)=RND(152)+4 BALLS(I,1)=RND(120)+4 BALLS(I,2)=((RND(1)*2)-1)*(RND * VELFACTOR) BALLS(I,3)=((RND(1)*2)-1)*(RND * VELFACTOR) BALLS(I,4)=RND(7)+1 BALLS(I,5)=4 BALLS(I,7)=RND(3) BALLS(I,8)=RND(7) MAG=BALLS(I,2)*BALLS(I,2)+BALLS(I,3)*BALLS(I,3) BALLS(I,9)=(MAG/5)*SGN(BALLS(I,2))*SGN(BALLS(I,3)) SPRITE I SIZE 1 PAL BALLS(I,4)-1 SPRITE I,BALLS(I,0)-4,BALLS(I,1)-4,32+(BALLS(I,7)*32) + (2*INT(BALLS(I,8))) UNTIL NOT SPRITE HIT(I) NEXT I END SUB SUB PATTERNPLACER FOR I=0 TO NUMBALLS-1 FRAC=I/(NUMBALLS-1) BALLS(I,0)=COS(FRAC*2*PI)*80+80-8 BALLS(I,1)=SIN(FRAC*2*PI)*64+64-8 BALLS(I,2)=FRAC*VELFACTOR BALLS(I,3)=FRAC*VELFACTOR BALLS(I,4)=RND(7)+1 BALLS(I,5)=4 BALLS(I,7)=RND(3) BALLS(I,8)=RND(7) MAG=BALLS(I,2)*BALLS(I,2)+BALLS(I,3)*BALLS(I,3) BALLS(I,9)=(MAG/5)*SGN(BALLS(I,2))*SGN(BALLS(I,3)) IF BALLS(I,0)<80 THEN BALLS(I,2)=-BALLS(I,2) IF BALLS(I,1)<64 THEN BALLS(I,2)=-BALLS(I,2) SPRITE I SIZE 1 PAL BALLS(I,4)-1 SPRITE I,BALLS(I,0)-4,BALLS(I,1)-4,32+(BALLS(I,7)*32) + (2*INT(BALLS(I,8))) NEXT I END SUB DO IF TOUCH THEN NUMBALLS = ((TOUCH.Y/128)*(MAXBALLS-1))+1 VELFACTOR = (TOUCH.X/160)*GLOBALVEL WHILE TOUCH WEND GOTO RESETME END IF FOR I=0 TO NUMBALLS-1 DB=(DRAG^BALLS(I,4)) BALLS(I,2)=DB*BALLS(I,2) BALLS(I,3)=DB*BALLS(I,3) TX1=BALLS(I,0)+BALLS(I,2) TY1=BALLS(I,1)+BALLS(I,3) R=BALLS(I,5) IF TX1<-R AND BALLS(I,2)<0 THEN ADD TX1,160+R ELSE IF TX1>=160 AND BALLS(I,2)>0 THEN ADD TX1,-(160+R) END IF IF TY1<-R AND BALLS(I,3)<0 THEN ADD TY1,128+R ELSE IF TY1>=128 AND BALLS(I,3)>0 THEN ADD TY1,-(128+R) END IF BALLS(I,0)=TX1 BALLS(I,1)=TY1 MAG=BALLS(I,2)*BALLS(I,2)+BALLS(I,3)*BALLS(I,3) BALLS(I,9)=(MAG/5)*SGN(BALLS(I,2))*SGN(BALLS(I,3)) DANG=0 CALL ATAN2(BALLS(I,2),BALLS(I,3),DANG) DANG=DANG*180/PI IF DANG<30 OR DANG>330 OR (DANG>150 AND DANG<210) THEN BALLS(I,7)=1 ELSE IF (DANG>60 AND DANG<120) OR (DANG>240 AND DANG<300) THEN BALLS(I,7)=0 ELSE IF (DANG>0 AND DANG<90) OR (DANG>180 AND DANG<270) THEN BALLS(I,7)=3 ELSE BALLS(I,7)=2 END IF WHILE BALLS(I,8)>=8 ADD BALLS(I,8),-8 WEND WHILE BALLS(I,8)<0 ADD BALLS(I,8),8 WEND SPRITE I,TX1-BALLS(I,5),TY1-BALLS(I,5),32+(BALLS(I,7)*32) + (2*INT(BALLS(I,8))) NEXT I FOR I=0 TO NUMBALLS-1 IF SPRITE HIT(I) THEN S=HIT IF S<=MAXBALLS THEN IF CHKD(I)<>S THEN CHKD(I)=S CHKD(S)=I ADD BALLS(I,0),-BALLS(I,2) ADD BALLS(I,1),-BALLS(I,3) ADD BALLS(S,0),-BALLS(S,2) ADD BALLS(S,1),-BALLS(S,3) SPRITE I,BALLS(I,0)-BALLS(I,5),BALLS(I,1)-BALLS(I,5), SPRITE S,BALLS(S,0)-BALLS(S,5),BALLS(S,1)-BALLS(S,5), CALL RESOLVECOLLISION(I,S) NT1=SCALE(BALLS(I,4)-1,MAJMIN) NT2=SCALE(BALLS(S,4)-1,MAJMIN) V1=BALLS(I,7) V2=BALLS(S,7) VOLUME RR,15,1 VOLUME RR+1,15,2 ENVELOPE RR,,,,(BALLS(I,4)-1)*2 ENVELOPE RR+1,,,,(BALLS(S,4)-1)*2 PLAY RR,NT1,1 SOUND V1 PLAY (RR+1) MOD 4,NT2,1 SOUND V2 ADD RR,2 RR=RR MOD 4 SPRITE NEXTBANG FLIP RND(1),RND(1) SIZE 1 PAL RND(7) SPRITE NEXTBANG,MIN(BALLS(I,0),BALLS(S,0))+(BALLS(I,0)-BALLS(S,0))/2+8,MIN(BALLS(I,1),BALLS(S,1))+(BALLS(I,1)-BALLS(S,1))/2+8,2 INC NEXTBANG IF NEXTBANG=64 THEN NEXTBANG=MAXBALLS+1 END IF END IF ELSE CHKD(I)=-1 END IF NEXT I WAIT VBL LOOP SUB VB FOR I=0 TO NUMBALLS-1 ADD BALLS(I,8),BALLS(I,9) NEXT I FOR I=MAXBALLS+1 TO 63 C=SPRITE.C(I) IF C<>0 THEN ADD C,2 IF C=14 THEN SPRITE OFF I ELSE SPRITE I,,,C END IF NEXT I END SUB SUB RESOLVECOLLISION(B1,B2) XPOS1=BALLS(B1,0) YPOS1=BALLS(B1,1) XVELOCITY1=BALLS(B1,2) YVELOCITY1=BALLS(B1,3) MASS1=BALLS(B1,4) RADIUS1=BALLS(B1,5) XPOS2=BALLS(B2,0) YPOS2=BALLS(B2,1) XVELOCITY2=BALLS(B2,2) YVELOCITY2=BALLS(B2,3) MASS2=BALLS(B2,4) RADIUS2=BALLS(B2,5) VELOCITYA = SQR(XVELOCITY1*XVELOCITY1+YVELOCITY1*YVELOCITY1) VELOCITYB = SQR(XVELOCITY2*XVELOCITY2+YVELOCITY2*YVELOCITY2) RADA = 0 RADB = 0 CALL ATAN2(XVELOCITY1,YVELOCITY1,RADA) CALL ATAN2(XVELOCITY2,YVELOCITY2,RADB) DELTAY=YPOS2-YPOS1 DELTAX=XPOS2-XPOS1 PHI=0 CALL ATAN2(DELTAX,DELTAY,PHI) TOTALMASS=MASS1+MASS2 COSA=COS(PHI) SINA=SIN(PHI) VELANORM=VELOCITYA*COS(-RADA+PHI) VELAPERP=VELOCITYA*SIN(-RADA+PHI) VELBNORM=VELOCITYB*COS(-RADB+PHI) VELBPERP=VELOCITYB*SIN(-RADB+PHI) VELA2NORM=((MASS1-MASS2)/TOTALMASS)*VELANORM+((2*MASS2/TOTALMASS)*VELBNORM) VELB2NORM=((MASS2-MASS1)/TOTALMASS)*VELBNORM+((2*MASS1/TOTALMASS)*VELANORM) VELA2X=VELA2NORM*COSA-VELAPERP*COS(PHI+PI/2) VELA2Y=VELA2NORM*SINA-VELAPERP*SIN(PHI+PI/2) VELB2X=VELB2NORM*COSA-VELBPERP*COS(PHI+PI/2) VELB2Y=VELB2NORM*SINA-VELBPERP*SIN(PHI+PI/2) VELOCITYA = SQR(VELA2X * VELA2X + VELA2Y * VELA2Y) VELOCITYB = SQR(VELB2X * VELB2X + VELB2Y * VELB2Y) ANGLE = 0 BANGLE = 0 CALL ATAN2(VELA2X,VELA2Y,ANGLE) CALL ATAN2(VELB2X,VELB2Y,BANGLE) BALLS(B1,2)=COS(ANGLE)*VELOCITYA BALLS(B1,3)=SIN(ANGLE)*VELOCITYA BALLS(B2,2)=COS(BANGLE)*VELOCITYB BALLS(B2,3)=SIN(BANGLE)*VELOCITYB END SUB ' RETURNS THE CORRESPONDING ANGLE OF THE GIVEN CHANGES ' IN X AND Y DIRECTION, USING THE SAME ORIENTATION OF ' AXES AS LOWRESNX WHERE POSITIVE Y MOVES DOWNWARD. ' ANGLES SWEEP CLOCKWISE FROM 0 TO 2*PI. SUB ATAN2(DX,DY,ANG) IF DX=0 THEN IF DY>0 THEN ANG=PI/2 ELSE ANG=3*PI/2 END IF ELSE ANG=ATAN(ABS(DY/DX)) IF DX<0 THEN ANG=PI-ANG END IF IF DY<0 THEN ANG=(2*PI)-ANG END IF END IF END SUB '_BEGIN_METADATA________________________________ ' 01020100030301020104010001050100 ' 010601000107010003080102030A0102 '_END_METADATA__________________________________ #1:MAIN PALETTES 002F0701003F0A05003E0804003F2814 003E3410003F3010002F3721002F2712 #2:MAIN CHARACTERS 00000000000000000000000000000000 00000000000000000000000000000000 0000000000013F030000000100000002 2020207070FCDFFC0000000488502050 000000040E0F0707000000040A090505 00000000000070F80000000000007088 00000C1E1F0F070700000C1211080404 0000000C1EFCFCFC0000000C12E40404 30787C3E1E1E0C003048442212120C00 0002073F7F7F3E000002053941413E00 0030797B330100000030494A32010000 00000080983C38100000008098242810 00000010000000010000000000000000 00080000000000040000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 07060300000000000405030000000000 70F0E0A0202020008804408000000000 071F3F19000000000418271900000000 F0C0C0E0E040000030404020A0400000 0F3F7FFFFFE04000083840809FA04000 F8F0E0E0F0F878101810202010886810 001C3E7EFEFE7C00001C226282827C00 00387C7C78787C380038444448484438 00081C5CE8E0400000081454A8A04000 00000010383C18000000001028241800 00002000000200000000000000000000 00000008000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 0103070F0F0F0F0F0001030707070707 80C0E0F0F0F0F0F080C0E0F0F0F0F0F0 01030307070707070103030707070707 008080C0C0C0C0C080C0C0E0E0E0E0E0 01010101010101010101010101010101 0000000000000000808080C0C0C0C0C0 01020205040404040001010303030303 00000040E0E0E0E080C0C0E0E0E0E0E0 0103070A0C0C0C0C0000000503030303 000000800000000080C0E050B0B0B0B0 00000002070707070103030500000000 804040A02020202080C0C0E0E0E0E0E0 01010102000000000000000103030303 80808080808080808080808080808080 01030307070707070001010303030303 80C0C0E0E0E0E0E080C0C0E0E0E0E0E0 0F0F0F0F0F0703010707070707070301 F0F0F0F0F0E0C080F0F0F0F0F0E0C080 07070707070303010707070707030301 C0C0C0C0C0808000E0E0E0E0E0C0C080 01010101010101010101010101010101 0000000000000000C0C0C0C0C0808080 04040404050200000303030303030301 E0E0E0E040000000E0E0E0E0E0C0C080 0C0C0C0A01000000030303050E070301 0000000000000000B0B0B0B050E0C080 07070707020000000000000005030301 20202020A0404080E0E0E0E0E0C0C080 00000000000000000303030303010101 80808080808080808080808080808080 07070707070101000303030303030301 E0E0E0E0E0C0C080E0E0E0E0E0C0C080 000000001F3F7FFF00000000001F3F7F 00000000F8FCFEFF0000000000FCFEFF 00000000001F7FFF00000000001F7FFF 0000000000F8FEFF0000000000F8FEFF 00000000000000FF00000000000000FF 00000000000000FF00000000000000FF 00000000001F60900000000000001F7F 0000000000F80408000000000000FEFF 000000001F3F70E00000000000000F1F 00000000F0E0100800000000081CEEF7 00000000000F1F0F00000000001060F0 0000000000F0F8F0000000000008060F 00000000000010E00000000000000F1F 0000000000000000000000000000F8FF 00000000001F7FFF0000000000001F7F 0000000000F8F8FE000000000000FEFF FF7F3F1F00000000FF7F3F1F00000000 FFFEFCF800000000FFFEFCF800000000 7F1F000000000000FF7F1F0000000000 FEF8000000000000FFFEF80000000000 0000000000000000FF1F000000000000 0000000000000000FFF8000000000000 0F1F0F0000000000FF7F1F0000000000 F0F8F00000000000FFFEF80000000000 1000000000000000EF702F1F00000000 0000000000000000F70EF4F800000000 90601F0000000000FF7F1F0000000000 0906F80000000000FFFEF80000000000 FF00000000000000FF00000000000000 FF00000000000000FF00000000000000 FF7F1F0000000000FF7F1F0000000000 FFFEF80000000000FFFEF80000000000 0000000103070F1F000000000103070F 0000FCFCFCFCFCFC000044FCFCFCFCFC 000000000103070F000000000103070F 000058F8F8F8F0E000005CFCFCF8FCF8 00000000000000010000000000000001 000008102040800000000C1C3878F0E0 000000000103060C0000000000000103 000058C0A02870F80000043C7CF8FCF8 0000000103070E1C0000000000000103 0000B8B0901000000000444C6CECE0DC 000000000103070F0000000000000000 000004A4D4D08C1800005C5C3C387CF8 00000000000000000000000000000103 00000C3C183060C00000040C78F0E0C0 000000000103070F0000000000000103 00005CFCFCF8FCF80000043C7CF8FCF8 3F3F3F3F3F3F00001F3F3F3F3F3F0000 F8F0E0C080000000F8F0E0C080000000 1F3F1F3E3C0000001F3F1F3F3F3A0000 C080000000000000F0E0C08000000000 020408102000000003070F1E3C300000 0000000000000000C080000000000000 19330F0305000000070F1F3F3F3A0000 F0E0C08000000000F0E0C08000000000 0808080000000000373736313D3D0000 0000000000000000B870E0C080000000 1E0C100D033A000001330F3F3F3A0000 3060C08000000000F0E0C08000000000 0103060C18300000070F1E1C38300000 80000000000000008000000000000000 1F3F1F1F1F3A0000070F1F3F3F3A0000 F0E0C08000000000F0E0C08000000000 00003F3F3F3F3F3F0000223F3F3F3F3F 00000080C0E0F0F80000000080C0E0F0 00001A1F1F1F0F0700003A3F3F1F3F1F 0000000080C0E0F00000000080C0E0F0 0000100804020100000030381C1E0F07 00000000000000800000000000000080 00001A0305140E1F0000203C3E1F3F1F 0000000080C0603000000000000080C0 00001F0F09080000000020303637073B 00000080C0E0703800000000000080C0 000020252B0B311800003A3A3C1C3E1F 0000000080C0E0F00000000000000000 0000303C180C0603000020301E0F0703 000000000000000000000000000080C0 00003A3F3F1F3F1F0000203C3E1F3F1F 0000000080C0E0F000000000000080C0 1F0F0703010000001F0F070301000000 FCFCFCFCFCFC0000F8FCFCFCFCFC0000 03010000000000000F07030100000000 F8FCF87C3C000000F8FCF8FCFC5C0000 00000000000000000301000000000000 4020100804000000C0E0F0783C0C0000 0F070301000000000F07030100000000 98CCF0C0A0000000E0F0F8FCFC5C0000 00000000000000001D0E070301000000 1010100000000000ECEC6C8CBCBC0000 0C060301000000000F07030100000000 783008B0C05C000080CCF0FCFC5C0000 01000000000000000100000000000000 80C06030180C0000E0F078381C0C0000 0F070301000000000F07030100000000 F8FCF8F8F85C0000E0F0F8FCFC5C0000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00181818180018000000000000000000 00242424000000000000000000000000 00247E247E2400000000000000000000 183E403C027C18000000000000000000 62660C183066C6000000000000000000 00386C3B6EC67B000000000000000000 000C0C18000000000000000000000000 000C181818180C000000000000000000 00180C0C0C0C18000000000000000000 006C7C387C6C00000000000000000000 0018187E181800000000000000000000 000000000C0C18000000000000000000 0000007E000000000000000000000000 00000000001818000000000000000000 000C1830604000000000000000000000 003C666E76663C000000000000000000 0018381818183C000000000000000000 003C66063C607E000000000000000000 003C660C06663C000000000000000000 00606C6C7E0C0C000000000000000000 007E407C06663C000000000000000000 003C607C66663C000000000000000000 007E0C0C181818000000000000000000 003C663C66663C000000000000000000 003C66663E063C000000000000000000 00181800181800000000000000000000 00181800181810000000000000000000 000C1830180C00000000000000000000 003E3E003E3E00000000000000000000 0030180C183000000000000000000000 003C66061C0018000000000000000000 003C666E6C603E000000000000000000 003C66667E6666000000000000000000 007C667C66667C000000000000000000 003C666060663C000000000000000000 007C666666667C000000000000000000 007E607860607E000000000000000000 007E6078606060000000000000000000 003C66606E663C000000000000000000 0066667E666666000000000000000000 003C181818183C000000000000000000 003E0C0C0C6C38000000000000000000 00666C78786C66000000000000000000 0060606060607C000000000000000000 0063777F6B6363000000000000000000 0066767E7E6E66000000000000000000 003C666666663C000000000000000000 007C66667C6060000000000000000000 003C6666666C3A000000000000000000 007C66667C6666000000000000000000 003C623C06663C000000000000000000 007E1818181818000000000000000000 0066666666663C000000000000000000 00666666663C18000000000000000000 0063636B7F7763000000000000000000 00663C183C6642000000000000000000 0066663C181818000000000000000000 007E0C1830607E000000000000000000 001C181818181C000000000000000000 006030180C0400000000000000000000 001C0C0C0C0C1C000000000000000000 1C360000000000000000000000000000 0000000000007E000000000000000000 #15:MAIN SOUND 1000003919CF0F0010000039193F8F00 28000039190D0F0025000039191FAF00 1000008919CF0F0010000089193F8F00 28000089190D0F0025000089191FAF00 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 00404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040