10 REM Fruit Machine 20 REM By M.T.Farnworth 30 REM (c) Mikesoft/Andersonic 40 MODE5:L%=FNcl("Fruit Machine.",3) 50 L%=FNcl("By M.T.Farnworth",5) 60 L%=FNcl("Keys",9) 70 L%=FNcl(" SPACE - SPIN WHEELS",12) 80 L%=FNcl("1/2/3 - NUDGE/HOLD",14) 90 L%=FNcl("C - CANCEL",16) 100 PROCinit 110 L%=FNcl("Press Space to play.",20) 120 REPEAT UNTIL GET=32 130 ONERROR IF ERR=17 THEN MODE6:PRINT'"You leave the arcade with `";M:END ELSE MODE6:REPORT:PRINT" at line ";ERL:END 140 PROCscreen 150 PROCreel 160 PROCcoin 170 PROCreel 180 L%=FNwin 190 IF L%=1 AND S%<>1 THEN PROCnudge 200 GOTO160 210 DEFPROCinit 220 VDU23,1;0;0; 230 DIM Q% &A00,H%(2),O%(2) 240 M=5.00 250 new=&70 260 old=&72 270 temp=&74 280 temp1=&76 290 rows=&78 300 temprows=&79 310 columns=&7A 320 FOR pass=0 TO 2 STEP 2 330 P%=Q% 340 [ OPT pass 350 .put 360 LDA #&80 370 STA old 380 LDA #0 390 STA old+1 400 410 .print 420 STX columns 430 STY rows 440 LDX #0 450 LDY #0 460 LDA new 470 STA temp1 480 LDA new+1 490 STA temp1+1 500 LDA old 510 STA temp 520 LDA old+1 530 STA temp+1 540 .loop1 550 LDA rows 560 STA temprows 570 .loop2 580 .newdata 590 LDA &3000,X 600 STA (new),Y 610 .olddata 620 INX 630 LDA old 640 AND #7 650 CMP #7 660 BEQ bottom1 670 INC old 680 BNE next1 690 INC old+1 700 JMP next1 710 .bottom1 720 LDA old 730 ADC #&38 740 STA old 750 LDA old+1 760 ADC #1 770 STA old+1 780 .next1 790 LDA new 800 AND #7 810 CMP #7 820 BEQ bottom2 830 INC new 840 BNE next2 850 INC new+1 860 JMP next2 870 .bottom2 880 LDA new 890 ADC #&38 900 STA new 910 LDA new+1 920 ADC #1 930 STA new+1 940 .next2 950 DEC temprows 960 BNE loop2 970 LDA temp1 980 ADC #8 990 STA new 1000 STA temp1 1010 LDA temp1+1 1020 ADC #0 1030 STA new+1 1040 STA temp1+1 1050 LDA temp 1060 ADC #8 1070 STA old 1080 STA temp 1090 LDA temp+1 1100 ADC #0 1110 STA old+1 1120 STA temp+1 1130 DEC columns 1140 BNE loop1 1150 RTS 1160 1170 .sprite 1180 ] 1190 NEXT 1200 RESTORE 1210 FOR i=1 TO (6*32*12) STEP 4 1220 READ a$ 1230 !P%=EVAL("&"+a$) 1240 P%=P%+4 1250 NEXT 1260 GOTO1730 1270 REM CHERRY2 1280 REM X=6/Y=32 1290 DATA0,0,0,0,0,0,0,0,66000000,33776666,27133333,7070707,30707,F4F0F07,3070F,0,0,F0E00000,8C183070,D0E0E0E,30B0B1D,C0D0B0B,80C,0,0,0,F0E0C080,8C183070,F0F0F4E,E0F0F,0,0,0,0,0,E0E0C080,0,0,0,0,0,0,0,0,0,0,0,0 1300 REM PINE 1310 REM X=6/Y=32 1320 DATA0,0,0,0,0,0,0,0,10101030,33110000,FFCFCF77,9FFFCFCF,CFCFFF9F,77CFCFFF,77676777,33676777,F0F06060,2FEFFFF0,FFCFCF3F,9FFF9F9F,9F9FFF9F,9F9FFFFF,FF4F4FFF,FF4F4FFF,F0D0D040,7F6ECCE0,EFEF9F9F,EFEF3F3F,CFEF2F3F 1330 DATA EF3F3FCF,9F9FFFEF,FF9F9FFF,0,0,4C4CCC88,4C4CCCCC,CC4C4CCC,88CCCCCC,88888888,888888,0,0,0,0,0,0,0,0 1340 REM MELON 1350 REM X=6/Y=32 1360 DATA0,7030301,F070607,D0F0F0F,F0F0F0F,707060F,1030307,0,F160000,F0F0B0F,F0F0F0D,F0F0F07,F070D0F,F0F0D0F,F0F0F05,160F,F0F00000,1E3C0C08,F160E0E,F0F070F,F0B0F0F,1E1E0E0F,783C0C06,F000,F0F00000,F0F00000,F0F00000 1370 DATA F0F00000,F0F00000,F0F00000,F0F00000,F000,F0F00000,F0F00000,F0F00000,F0F00000,F0F00000,F0F00000,F0F00000,F010,80000000,C0808080,E0C04040,E0E02020,E0E02020,C0C04040,80808080,0 1380 REM BAR 1390 REM X=6/Y=32 1400 DATAFFFF00,CCFFFF00,CCCCCCCC,CCCCCCCC,CCCCCCCC,CCCCCCCC,FFFFCC,FFFF00,FFFF00,FFFF00,CCCCCC00,1111CCCC,CCCCCC11,CCCC,FFFF11,FFFF00,FFFF00,CCFFFF00,CCCCCCCC,CCCCCCCC,CCCCCCCC,CCCCCCCC,FFFFCC,FFFF00,FFFF00,FFFF00 1410 DATA CCCC0000,CCCC,CCCCCC00,CCCCCCCC,FFFFCC,FFFF00,FFFF00,88FFFF00,99999988,88999999,99999988,99999999,FFFF99,FFFF00,FFFF00,77FFFF00,99113333,33119999,99113377,99999999,FFFF99,FFFF00 1420 REM APPLE 1430 REM X=6/Y=32 1440 DATA0,0,0,0,0,0,0,0,0,0,1000000,7030301,7070707,7070707,10303,0,0,11111100,F0F0713,2D1E0F0F,F1E0F0F,F3C0F0F,F0F0F3C,70F,CC440000,8888,78E04880,78F0F078,1E0F78F0,F0F03C96,486878F0,848,0,0,0,C0808000,C0C0C0C0,8080C0C0 1450 DATA 0,0,0,0,0,0,0,0,0,0 1460 REM SEVEN 1470 REM X=6/Y=32 1480 DATA0,100,0,0,0,0,0,0,7000000,70F0F0F,0,0,0,0,0,0,F000000,F0F0F0F,0,1010000,3030101,7030303,7070707,6060707,F000000,F0F0F0F,F070703,C0E0E0E,80C0C0C,8080808,0,0,C000000,C0E0F0E,808,0,0,0,0,0,0,0,0,0,0,0,0,0 1490 REM STRAW 1500 REM X=6/Y=32 1510 DATA0,0,0,0,0,0,0,0,10303030,3001010,17072707,3030307,1010101,0,0,0,B0606060,F0F0B0B0,2F0F4F0F,4F0F9F0F,9F0F2F0F,2F0F4F0F,7071707,10303,30303030,E1E06060,4F0F9F0F,8F0F2F0F,F0F4F0F,E0E8E0E,C0C0C0C,808,0,8000000 1520 DATA 8C0C0C0C,808080C,0,0,0,0,0,0,0,0,0,0,0,0 1530 REM GRAPES 1540 REM X=6/Y=32 1550 DATA0,0,0,0,0,0,0,0,0,70111100,70300070,707000,30403030,30700030,10307000,10,33111111,10F0E8EE,E010F060,70E01070,1070E010,609070E0,F0609070,10706090,CC888888,90E07177,6080F060,F06090E0,80F06080,6080F060,F06080F0 1560 DATA 80E06090,0,C0888800,E0E000C0,20E0C000,E020C0C0,E0C000C0,A0E0C000,80,0,0,0,0,0,0,0,0 1570 REM MA 1580 REM X=6/Y=32 1590 DATA0,0,0,0,0,0,0,0,87F00000,87878787,87878787,80878787,87878787,87878787,61C38787,1030,FF00000,8F9FBFEF,8F8F8F8F,F0F8F,3F1F0F0F,3F2F2F2F,2F2F2F2F,30E1870F,FF00000,8FCF6F3F,8F8F8F8F,F0F8F,6FCF0F0F,EF2F2F2F,2F2F2F2F 1600 DATA E03C0F0F,FF00000,8F8F8F8F,8F8F8F8F,F0F8F,F0F0F0F,F0F0F0F,3C1E0F0F,80C068,80800000,80808080,80808080,80808080,80808080,80808080,808080,0 1610 REM TREES 1620 REM X=6/Y=32 1630 DATA0,0,0,0,0,0,0,0,30100000,70706121,707043C3,44103030,1122,2200CC33,1122CC,33110000,F0C3C370,96967878,C3C3F0F0,F0F03C3C,FFFFFDF0,FFFFFFFF,FFFFFFFF,FFFFFFFF,E0C08000,9696F0E0,3CF0F0F0,80C0E02C,EE998880,9988EE88 1640 DATA CCAA9999,EECC8888,0,0,80,0,880000,0,CC00,0,0,0,0,0,0,0,0,0 1650 REM LEMON 1660 REM X=6/Y=32 1670 DATA0,0,0,0,11,0,0,0,0,0,33111100,FF557722,7777EEFF,11113333,0,0,0,77000000,FFDDFFEE,FFDDFFFF,FFDDFFEE,F9FBE2F7,77FC,0,0,EE000000,EEBBFFFF,FFEE77FF,BBFFFFDD,F9FDFCFE,EEF3,0,0,0,CC888800,FFEEEECC,EEEE77FF,8888CCCC 1680 DATA 0,0,0,0,0,0,88,0,0,0 1690 REM WINSPIN2 1700 REM X=6/Y=32 1710 DATAF000F0,D0D0D0D,F0F0D0D,C,22223300,3322,3300,F000F0,F000F0,B0B0B0B,F0F0B0B,3,1111DD00,5555DD11,DD55,F000F0,F000F0,303,3000000,3,2222EE00,EE22,0,F000F0,F000F0,C0C0F0F,F0C0C0C,F,2222FF00,22222222,FF22,F000F0 1720 DATA F000F0,3030303,3030303,3,3333AA00,22222222,AA22,F000F0,F000F0,70F0B03,3030303,3,99111100,113377DD,1111,F000F0 1730 temp=&70 1740 FOR pass=0 TO 2 STEP 2 1750 P%=&900 1760 [ OPT pass 1770 1780 \X,Y --> address 1790 .convert 1800 LDA #0 1810 STA temp+1 1820 TXA 1830 ASL A 1840 ASL A 1850 ROL temp+1 1860 ASL A 1870 ROL temp+1 1880 STA temp 1890 TYA 1900 AND #7 1910 ADC temp 1920 STA temp 1930 LDA temp+1 1940 ADC #0 1950 STA temp+1 1960 TYA 1970 LSR A 1980 LSR A 1990 LSR A 2000 ASL A 2010 TAY 2020 LDA table,Y 2030 ADC temp 2040 STA temp 2050 LDA table+1,Y 2060 ADC temp+1 2070 STA temp+1 2080 LDX #6:LDY #32 2090 JMP Q% 2100 2110 .table 2120 OPT FNtable 2130 ] 2140 NEXT 2150 VDU19,2,2;0; 2160 ENDPROC 2170 2180 DEF FNtable 2190 FOR I%=0 TO 31 2200 [OPT pass 2210 EQUW &5800+I%*&140 2220 ] 2230 NEXT 2240 =pass 2250 DEF PROCscreen 2260 CLS 2270 PRINT'"Money : `";M 2280 GCOL 3,2 2290 MOVE 100,100:DRAW 100,800:DRAW 1200,800:DRAW 1200,100:DRAW 100,100 2300 MOVE 475,100:DRAW 475,800 2310 MOVE 825,100:DRAW 825,800 2320 ENDPROC 2330 DEF PROCreel 2340 FOR I%=0 TO 3:VDU19,I%,0;0;:NEXT 2350 L%=FNmoney 2360 N%=0 2370 RESTORE 2500:IF C%>0 AND S%<>1 R%=RND(70)+10 2380 IF H%(N%)<1 THEN 2400 2390 H%(N%)=0:IF N%<2 GOTO 2490 ELSE GOTO 2510 2400 O%(N%)=R% 2410 FOR I%=0 TO R%-1:READ Z%:NEXT 2420 FOR I%=0 TO 2 2430 READ Z% 2440 L%=FNfruit 2450 IF I%=1 THEN D%=Z% 2460 NEXT 2470 IF N%=0 THEN E%=D% ELSE IF N%=1 THEN F%=D% ELSE IF N%=2 G%=D%:SOUND 1,-15,20-(N%*4),2:GOTO2510 2480 SOUND 1,-15,20-(N%*4),1:SOUND 1,-15,21-(N%*4),2 2490 N%=N%+1:GOTO2370 2500 DATA 10,3,6,0,1,3,2,5,0,3,1,2,0,3,4,0,5,2,6,1,0,4,2,3,4,11,1,5,0,2,1,3,0,6,1,4,11,8,0,7,1,7,0,6,2,7,9,1,4,11,8,0,9,1,4,8,0,9,5,2,3,0,4,1,11,4,2,1,5,3,2,1,5,7,6,8,10,3,6,0,1,3,2,5,0,3,1 2510 FOR I%=0 TO 3:VDU19,I%,I%;0;:NEXT:ENDPROC 2520 IF N%=0 THEN X%=5 ELSE IF N%=1 THEN X%=17 ELSE X%=29 2530 IF I%=0 THEN Y%=70 ELSE IF I%=1 THEN Y%=120 ELSE Y%=170 2540 CALL &900 2550 RETURN 2560 DEF FNfruit 2570 ?(newdata+1)=(sprite+(&C0*Z%)) MOD256 2580 ?(newdata+2)=(sprite+(&C0*Z%)) DIV256 2590 GOSUB2520 2600 =0 2610 DEFPROCcoin 2620 M=M-0.1 2630 IF M<=0 THEN L%=FNcl("YOU ARE BROKE",3):L%=FNcl("PRESS SPACE",5):REPEAT UNTIL GET=32:RUN 2640 L%=FNcl("PRESS START",3) 2650 L%=FNhold 2660 IF L%=1 THEN 2680 2670 REPEAT:G%=GET:UNTIL G%=32 OR G%=61 2680 L%=FNcl(" ",3) 2690 IF G%<>61 C%=1 ELSE C%=0 2700 ENDPROC 2710 DEFFNcl(a$,a) 2720 COLOUR 1 2730 PRINT TAB(0,a);STRING$(19," ") 2740 PRINT TAB((?&30A+1-LEN a$)DIV 2,a)a$ 2750 =0 2760 DEFFNwin 2770 IF E%=F% ELSE =1 2780 IF F%=G% ELSE =1 2790 IF E%=G% ELSE =1 2800 RESTORE2840 2810 IF E%=11 THEN S%=1:R%=RND(70)+10 ELSE S%=0 2820 FOR I%=0 TO E%:READ A$,B$:NEXT 2830 L%=FNcl("3 "+A$+" `"+B$,3):M=M+EVAL(B$):L%=FNwait:=0 2840 DATA CHERRIES,0.10,PINEAPPLES,0.20,MELONS,0.50,BARS,1.00,APPLES,1.50,SEVENS,2.00,STRAWBERRIES,2.50,GRAPES,3.00,SHIELDS,4.00,TREES,5.00,LEMONS,10.00,WIN SPINS,0.10 2850 DEFFNmoney 2860 PRINTTAB(0,3);STRING$(20," ") 2870 @%=&2020A 2880 COLOUR2:PRINTTAB(0,1)"Money : `";M;" " 2890 =0 2900 DEFFNwait 2910 FOR I%=0 TO 100 STEP 4:SOUND 1,-15,I%,1:NEXT 2920 L%=FNmoney 2930 =0 2940 DEFFNhold 2945 IF S%=1 THEN =0 2950 K%=RND(6) 2960 IF K%=1 ELSE =0 2970 COLOUR 3 2980 FOR I%=1 TO 3 2990 PRINT TAB(I%*6-4,29);"HOLD" 3000 NEXT 3010 REPEAT 3020 J%=GET 3030 IF J%<52 AND J%>48 THEN GOTO 3080 3040 IF J%=67 THEN FOR I%=0 TO 2:H%(I%)=0:NEXT:UNTIL H%(0)=0:GOTO 2970 3050 UNTIL J%=32 3060 PRINTTAB(0,29)STRING$(19," ") 3070 =1 3080 H%(J%-49)=1:COLOUR1:PRINT TAB((J%-48)*6-4,29);"HELD" 3090 GOTO3050 3100 DEF PROCnudge 3110 L%=RND(10) 3120 IF L%=1 ELSE ENDPROC 3130 FOR I%=0 TO 2:SOUND 0,1,100,10:SOUND0,0,0,1:NEXT 3140 L%=FNcl("NUDGE ACTIVATED",3) 3150 M%=RND(8)+2:L%=FNcl("MAX NUDGES : "+STR$(M%),5) 3160 Q%=0:REPEAT 3170 N%=GET-49 3180 IF N%<0 OR N%>2 THEN 3170 3190 O%(N%)=O%(N%)-1 3200 RESTORE 2500 3210 FOR I%=0 TO O%(N%)-1:READ Z%:NEXT 3220 FOR I%=0 TO 2 3230 READ Z% 3240 L%=FNfruit 3250 IF I%=1 THEN D%=Z% 3260 NEXT 3270 IF N%=0 THEN E%=D%:GOTO3300 3280 IF N%=1 THEN F%=D%:GOTO3300 3290 IF N%=2 THEN G%=D%:GOTO3300 3300 SOUND 1,-15,20-(N%*4),1:SOUND 1,-15,21-(N%*4),2 3310 L%=FNwin 3320 IF L%=0 THEN UNTIL L%=0:GOTO3350 3330 Q%=Q%+1 3340 UNTIL Q%=M% 3350 PRINTTAB(0,5);STRING$(19," ") 3360 GOTO200