10 REM          PARTY MACHINE
20 REM           BY  G J KEY
30 REM (c) Computing with the Amstrad
40 REM ------------- CPC ------------
50 MODE 0:CALL &BC02:MEMORY &96FF
60 GOSUB 1750:DEFINT a-y:GOSUB 1230
70 running=&FFFF
80 DEF FNinc(h)=h MOD 29+1
90 DEF FNwheel(a$,h)=VAL(MID$(a$,h,1))
100 WHILE running
110 GOSUB 300:GOSUB 1060
120 GOSUB 450:GOSUB 150
130 IF s=0 THEN GOSUB 330
140 WEND
150 IF w=0 THEN RETURN
160 GOSUB 210:GOSUB 560:IF w>0 THEN m=m+w ELSE RETURN
170 FOR t=1 TO w:LOCATE#1,1,19:PRINT#1,CHR$(244)CHR$(245)STRING$(4,CHR$(10)):SOUND 3,t*3,10,14,1,2:NEXT
180 LOCATE#1,1,20:FOR t=1 TO 20:PRINT#1,CHR$(10):NEXT
190 WHILE (SQ(1) AND 128)=128:WEND
200 s=s+w:GOSUB 300:RETURN
210 PAPER#2,12:PEN#2,14:CLS#2:v=w
220 PRINT#2,"  WIN":GOSUB 260:PRINT#2
230 PRINT#2,SPACE$(3-LEN(q$)/2);q$
240 FOR t=20 TO 250 STEP 4
250 SOUND 3,t,5,5:NEXT:RETURN
260 IF v<10 THEN q$=STR$(v*10)+"p":RETURN ELSE q$=STR$(v/10)
270 q$="#"+RIGHT$(q$,LEN(q$)-1)
280 IF INSTR(q$,".")THEN q$=q$+"0"ELSE q$=q$+".00"
290 RETURN
300 CLS#3:v=s:GOSUB 260:z=LEN(q$)/2
310 PRINT#3,SPACE$((3-z)*-(z<=3))q$
320 RETURN
330 CALL &BCA7:n=0:FOR t=200 TO 400 STEP 50
340 SOUND 1,t,30-(t=400)*60,7
350 SOUND 2,t-4,30-(t=400)*60,7
360 FOR o=1 TO 8:IF o MOD 2 THEN PEN#5,n:n=n XOR 4
370 PRINT#5,"  Your Broke!"
380 NEXT:NEXT:CLS#5
390 br$="HAVE #2.00 TO PLAY AGAIN.":GOSUB 1940
400 FOR t=1 TO 42:FOR n=152 TO 128 STEP -8:GOSUB 420:NEXT:NEXT
410 s=20:RETURN
420 SOUND 1,RND(2)*200,2,7:SOUND 2,RND(2)*200,2,7
430 TAG:MOVE n,28:PRINT MID$(br$,t,15);
440 TAGOFF:RETURN
450 w=0
460 ON r(2) GOTO 470,470,470,470,510,530,550,470
470 IF r(0)=r(2) AND r(1)=r(2) THEN w=15:RETURN
480 IF r(2)=8 THEN RETURN
490 IF r(1)=r(2) THEN w=5
500 RETURN
510 w=3:IF r(1)=5 THEN w=6:IF r(0)=5 THEN w=12
520 RETURN
530 IF r(0) MOD 8<5 AND r(1)=r(0) THEN w=10:RETURN
540 IF r(0)=6 AND r(1)=6 THEN w=20
550 RETURN
560 IF w<=0 THEN RETURN
570 IF RND<0.4 THEN RETURN
580 PAPER#2,0:CLS#2:g=-1
590 WHILE g AND INKEY(62):g=INKEY(52)
600 PEN#2,RND*12:PRINT#2,CHR$(30)"Gamble   or   Collect";
610 SOUND 2,RND*255,1,15,0,1
620 WEND:CLS#2:IF g THEN RETURN
630 x=1:y=12:PEN#4,3:GOSUB 1720
640 WHILE x<>6:z=TIME+(RND*30)*10
650 SOUND 1,y*20,20,7:SOUND 2,y*20-4,20,7
660 WHILE TIME<z:WEND:PEN#4,8
670 GOSUB 1720:oy=y:y=y+RND*(1-(y<7))-1
680 IF y=oy THEN x=x+RND
690 IF y<1 THEN y=2
700 PEN#4,3:GOSUB 1720:WEND
710 IF y MOD 2 AND y<10 THEN GOSUB 780:RETURN
720 w=-1:PEN#2,2:PRINT#2
730 PRINT#2," LOSE!"
740 FOR t=300 TO 600 STEP 50
750 SOUND 1,t,30,7,0,1:NEXT
760 GOSUB 840:PEN#4,0:GOSUB 1720
770 CLS#2:RETURN
780 y=(y-1)/2:w=w*(5-y)
790 PEN#4,14:GOSUB 1720:FOR t=1 TO 10
800 SOUND 1,300,20,7,0,2:NEXT
810 GOSUB 840:PEN#4,4:GOSUB 1710
820 GOSUB 210:IF w<50 THEN GOSUB 560
830 RETURN
840 WHILE SQ(1)<>4:WEND:RETURN
850 SOUND 2,100,70,7,1,2:RETURN
860 PAPER #2,14:CLS #2:PEN#2,15:PRINT#2,"deposit"SPACE$(9)"10p":GOSUB 850
870 EVERY 250,1 GOSUB 850:WHILE INKEY(47):WEND:t=REMAIN(1)
880 PRINT#1,CHR$(30)CHR$(244)CHR$(245)
890 FOR t=1 TO 20:SOUND 129,t*4,2:PRINT#1,CHR$(30)CHR$(11):NEXT
900 PAPER #2,0:CLS #2:s=s-1:GOSUB 300
910 RETURN
920 IF w THEN th=1:RETURN
930 th=th+1:IF th<3 THEN RETURN
940 IF RND(4)<0.3 THEN RETURN
950 PAPER #2,14:CLS #2:PEN#2,15:PRINT#2:PRINT#2," HOLD!"
960 WHILE INKEY$<>"":WEND
970 th=th-1:EVERY 10,1 GOSUB 1220
980 k$="":WHILE INKEY(47):IF k$<"1" OR k$>"3" THEN k$=""
990 k=VAL(k$):IF k>0 AND k<4 THEN GOSUB 1020
1000 k$=INKEY$:WEND:t=REMAIN(1)
1010 PAPER#2,0:CLS#2:RETURN
1020 h(k-1)=h(k-1)XOR 1:PEN 6+h(k-1)*8
1030 LOCATE 5-(k=2)*3-(k=3)*5,20
1040 IF k MOD 2 THEN PRINT d$:ELSE PRINT CHR$(248)
1050 RETURN
1060 GOSUB 860:GOSUB 920
1070 n=200:EVERY 2,1 GOSUB 1210
1080 e=RND*7+10:f=RND*4+e+3
1090 g=RND*4+f+2:FOR t=0 TO 30
1100 IF t<=g AND h(0)=0 THEN a(t)=FNwheel(a$,h):h=FNinc(h):ELSE a(t)=0
1110 IF t<=f AND h(1)=0 THEN b(t)=FNwheel(b$,i):i=FNinc(i):ELSE b(t)=0
1120 IF t<=e AND h(2)=0 THEN c(t)=FNwheel(c$,j):j=FNinc(j):ELSE c(t)=0
1130 NEXT:t=REMAIN(1)
1140 FOR t=0 TO 30:SOUND 129,40,100,3,1,1:CALL &9700,a(t),b(t),c(t):NEXT
1150 SOUND 2,240,10,15,4,1,1:FOR t=1 TO 2:PRINT#1,CHR$(30)CHR$(11):NEXT
1160 IF h(0)=0 THEN r(0)=a(g-1)
1170 IF h(1)=0 THEN r(1)=b(f-1)
1180 IF h(2)=0 THEN r(2)=c(e-1)
1190 GOSUB 1700:FOR t=0 TO 2:h(t)=0:NEXT
1200 RETURN
1210 SOUND 129,n,1,15,0,0,1:n=n-4:RETURN
1220 SOUND 1,n,2,15:n=n XOR 68:RETURN
1230 CLS:ENV 1,10,1,5,10,-1,5
1240 ENT -1,1,30,5:ENT -2,5,-5,5
1250 SYMBOL 240,252,248,240,224,192,128,0,0
1260 SYMBOL 241,0,0,128,192,224,240,248,252
1270 SYMBOL 242,63,31,15,7,3,1,0,0
1280 SYMBOL 243,0,0,1,3,7,15,31,63
1290 SYMBOL 244,24,60,60,90,66,94,255,195
1300 SYMBOL 245,219,219,90,66,126,60,60,24
1310 SYMBOL 246,1,3,7,15,15,7,3,1
1320 SYMBOL 247,128,192,224,240,240,224,192,128
1330 SYMBOL 248,24,60,126,255,255,126,60,24
1340 RESTORE 3530:th=0
1350 WINDOW#1,2,2,2,23:PEN#1,4
1360 WINDOW#2,5,11,2,4
1370 WINDOW#3,13,19,3,4:PEN#3,1
1380 WINDOW#4,13,19,6,18:PEN#4,8
1390 WINDOW#5,5,19,24,24:PAPER#5,5:CLS#5:PEN#5,0
1400 FOR x=1 TO 5:FOR y=1 TO 12
1410 GOSUB 1720:NEXT:NEXT:PEN#4,4
1420 FOR y=0 TO 4:GOSUB 1710:NEXT
1430 c=1:MOVE 0,0:GOSUB 1730
1440 PEN 3:FOR t=11 TO 12
1450 LOCATE 4,t:PRINT CHR$(241+(t=12))
1460 LOCATE 12,t:PRINT CHR$(243+(t=12))
1470 NEXT:c=5:MOVE 120,120:GOSUB 1730
1480 MOVE 120,332:GOSUB 1730
1490 RANDOMIZE TIME:FOR t=0 TO 4 STEP 4
1500 MOVE 199+t,120:DRAW 199+t,324
1510 MOVE 276+t,120:DRAW 276+t,324
1520 MOVE 128,32-t*4.5:DRAW 604,33-t*4.5
1530 NEXT:c=12:MOVE 16,356
1540 FOR n=1 TO 3:GOSUB 1730:NEXT
1550 TAG:FOR t=0 TO 2:MOVE 144+t*80,64
1560 PRINT CHR$(49+t);:NEXT:TAGOFF
1570 ORIGIN 0,0,128,604,32,12:CLG 5
1580 LOCATE 13,2:PEN 10:PRINT"-";:PEN 6:PRINT"MONEY";:PEN 10:PRINT"-"
1590 LOCATE 14,20:PEN 10:PRINT"PARTY":LOCATE 13,22:PRINT"MACHINE"
1600 DIM a(30),b(30),c(30),r(2),h(2)
1610 a$="72347678275127476723165783178"
1620 b$="81736754257123718751347273642"
1630 c$="71342758271735487352716752475"
1640 d$=CHR$(246)+CHR$(247):s=20:CLG
1650 h$=d$+" "+CHR$(248)+" "+d$
1660 GOSUB 1700:h=RND*28+1:i=RND*28+1
1670 j=RND*28+1:FOR t=0 TO 6 STEP 3
1680 CALL &9700,t+1,t+2,(t+2)MOD 8+1
1690 NEXT:RETURN
1700 LOCATE 5,20:PEN 6:PRINT h$:RETURN
1710 LOCATE#4,6,y*2+1:PRINT#4,"x";RIGHT$(STR$(5-y),1);:RETURN
1720 LOCATE#4,x,y:PRINT#4,CHR$(233):RETURN
1730 FOR t=1 TO 4:READ x,y:DRAW x,y,c
1740 NEXT:RETURN
1750 INK 0,0:INK 1,24:INK 5,15:BORDER 3
1760 PEN 6:LOCATE 5,5:PRINT"Please  Wait":LOCATE 5,7:PRINT"Reading data"
1770 READ br$:GOSUB 1940:ORIGIN -32,100,128,500,134,112:CLG 6:DEFINT t,n
1780 t=1:n=152:EVERY 12,1 GOSUB 1950
1790 p=&9700:ch=29619:GOSUB 1870:d=p+220
1800 FOR u=0 TO 12:FOR i=0 TO 7
1810 c=49552+i*2048+u*80
1820 hb=INT(c/256):lb=c-hb*256
1830 POKE p,lb:POKE (p+1),hb:p=p+2
1840 NEXT:NEXT:p=d:ch=220222:GOSUB 1870
1850 t=REMAIN(1):ORIGIN 0,0,0,640,0,400
1860 RETURN
1870 READ a$:c=0:WHILE a$<>"gjkey"
1880 FOR q=1 TO 29 STEP 2
1890 r=VAL("&"+MID$(a$,q,2)):c=c+r
1900 POKE p,r:p=p+1:NEXT:READ a$:WEND
1910 IF c=ch THEN RETURN:ELSE t=REMAIN(1)
1920 MODE 1:PRINT"There's an error in the data statements. Please check lines 1980 onwards"CHR$(7)CHR$(7)
1930 END
1940 br$=SPACE$(16)+br$+SPACE$(16):RETURN
1950 GOSUB 430:n=n-8:IF n=120 THEN n=152:t=t MOD 55+1
1960 RETURN
1970 DATA PARTY MACHINE   by   GORDEN J.KEY  1987
1980 DATA DD7E0432E797DD7E0232E897DD7E00
1990 DATA 32E9973AE797FE002807CDDE97ED53
2000 DATA EA973AE897FE002807CDDE97ED53EC
2010 DATA 973AE997FE002807CDDE97ED53EE97
2020 DATA 0608C53AE797FE00280DED5BEA973E
2030 DATA 10CD7F97ED53EA973AE897FE00280D
2040 DATA ED5BEC973E1ACD7F97ED53EC973AE9
2050 DATA 97FE00280DED5BEE973E24CD7F97ED
2060 DATA 53EE97C110C0C9D5329D9732A09732
2070 DATA CF97DD2AF097FD2AF89711F89721F0
2080 DATA 970E5C0608FD7E00DD7700DD23FD23
2090 DATA 10F41313ED53B897232322B497DD2A
2100 DATA F097FD2AF0970D20DCD10E0421A898
2110 DATA 22C897DD2AA89806081ADD7700DD23
2120 DATA 1310F7232322C8970D20E9C93D11CC
2130 DATA 988257C90000000000000000000000
2140 DATA gjkey
2150 DATA F0F0F0F0F0F0F0F0A00000CFCF0000
2160 DATA 50A00047CFCF8B0050A001CFCFCFCF
2170 DATA 0250A00300CFCF000350A0038B458A
2180 DATA 470350A147CF0303CF8B52A1471065
2190 DATA 9A208B52A1CF9A6D9A6DCF52A1CFCF
2200 DATA CFCFCFCF52A1CFCFCFCFCFCF52A1CF
2210 DATA CF458ACFCF52A0CFCF8A45CFCF50A0
2220 DATA CF8ACFCF45CF50A0CF45CFCF8ACF50
2230 DATA A045CECFCFCD8A50A045CFCCCCCF8A
2240 DATA 50A000CF8A45CF0050A0044DCFCF8E
2250 DATA 0850A0C30CCFCF0CC350E1C3865CAC
2260 DATA 49C3D2E1C38654A849C3D2E1C38208
2270 DATA 0441C3D2E1C3865CAC49C3D2E1C3C3
2280 DATA 5CACC3C3D2F0F0F0F0F0F0F0F0F050
2290 DATA F000500050F0F050F0A0F050A0F0F0
2300 DATA 50F0A0F00050F0F050F0A0F050A0F0
2310 DATA F0005000500050F0F0F0F0F0F0F0F0
2320 DATA F03C3C3C3C3C3C3C3C280041030608
2330 DATA 00142800C303030C00142841C30303
2340 DATA 03081428C383C30303061428C343C3
2350 DATA C3C303146983C7CFCFCB031C6906CF
2360 DATA CFCFCF831C6947CFCFCFCF8B1C694D
2370 DATA CF478BCFCB16694D8BCFCF478B1C69
2380 DATA 4D16CF9E8B8B1669479E659E658B16
2390 DATA 694DCF8ACFCF8B16694DCF45CFCF8B
2400 DATA 166947CF8A45CF8B166947CFCFCFCF
2410 DATA 8B166947CFCCCDCF8B166947CE0C4C
2420 DATA CF8B1C6943CF0045CFC31628C3CF00
2430 DATA 45CFC31428C3CFCCCDCF83142841C7
2440 DATA CFCFCB8214280045CFCF8A00142800
2450 DATA 00CFCF0000143C3C3C3C3C3C3C3C68
2460 DATA C094C0C0683C94683C3C9468689494
2470 DATA 683C3C946868C094683C3C94686868
2480 DATA 9468C094C0C0683C943C3C3C3C3C3C
2490 DATA 3C3CCCCCCCCCCCCCCCCC880001CFCF
2500 DATA 8A00448800CFCFCF8B00448845CFC7
2510 DATA CF8307448807CFCFCFCF0244888BCF
2520 DATA 45CF8A8B44894F8A8ACF45014E8947
2530 DATA CF30CF308B4E8807CF34CF34CF4689
2540 DATA 4FCBCF8ACFC74688CFCFCF8ACFCF44
2550 DATA 89CFCFCFCF45CF4488C7CF8ACF8ACF
2560 DATA 4688C7CFCF0000CF4689C7CFCFCFCF
2570 DATA CF448847CF8A00CF8B448841CF45CF
2580 DATA 458A448841CFCECCCF8A448800C78A
2590 DATA 00CF00448800C7CFCFCF00448811C7
2600 DATA CFCFCF2244880367CBC79B03448903
2610 DATA 33CFCF33034689031376B923034689
2620 DATA 030356A9030346CCCCCCCCCCCCCCCC
2630 DATA 98CCCC98649830CC98CCCC649898CC
2640 DATA 6498CCCC30309830CC98CCCC649898
2650 DATA CC6498306464989830CCCCCCCCCCCC
2660 DATA CCCCCCC0C0C0C0C0C0C0C0800041C3
2670 DATA 038200408000C303030B0040804143
2680 DATA 0343830A4080018203034387408082
2690 DATA 43878A8307408082430FCF41034080
2700 DATA C382CFCF8A01408041C78ACF458A40
2710 DATA 8082CF45CF8ACF4080C78A208A65CF
2720 DATA 4080CFCFCFCF45CF4080CFCFCFCF8A
2730 DATA 8A4080C7CFCFCFCF00408041CFCF00
2740 DATA CFCF408041CFCFCF00CF40800045CF
2750 DATA CFCF004080008A8ACC8800408000CF
2760 DATA 45CC8800408014CF45CF9E0040803C
2770 DATA CF458A9E3C40942D4F8ACF8A3C6894
2780 DATA 2D0F0ACF8F3C68943C2D0A00053C68
2790 DATA 943C2D0F001E3C68C0C0C0C0C0C0C0
2800 DATA C0943C683C68943C6894C0C0689494
2810 DATA C068943C686894943C68C0C0686894
2820 DATA 94C0C0943C683C6894C0C0C0C0C0C0
2830 DATA C0C0C0C00C0C0C0303060C0C0C0C0C
2840 DATA 1212060C0C080C041212060C0C080C
2850 DATA 041212060C0C0C000C1212060C0C0C
2860 DATA 000C0321060C0C0C000C0303060C0C
2870 DATA 0C000C1230060C0C080C041212060C
2880 DATA 0C080C041212060C0C0C0C0C121206
2890 DATA 0C0C0C0C0C1230060C0CC0C0C00303
2900 DATA 42C0C0C0C0C0123042C0C0C0C0C003
2910 DATA 2142C0C0C0C0C0032142C0C0C0C0C0
2920 DATA 032142C0C0C0C0C0032142C0C03C3C
2930 DATA 3C0303163C3C3C3C3C1230163C3C3C
2940 DATA 3C3C1203163C3C3C3C3C1221163C3C
2950 DATA 3C3C3C1203163C3C3C3C3C1230163C
2960 DATA 3CCCCCCC030346CCCCCCCCCC123046
2970 DATA CCCC000000120302CCCC3333331230
2980 DATA 1344CC33333303121322CC00000012
2990 DATA 301333440000000303133322333333
3000 DATA 3333333333FCFCFCFCFCFCFCFCACFC
3010 DATA 5CFCFCFCFCFCACFC5CFCFCFCFCFCAC
3020 DATA 5C5CFCFCFCFCFCAC5C5CFCFCFCFCFC
3030 DATA ACAC5C0C5CFCFCFCACAC5C5C5CFCFC
3040 DATA FCACFC5C5C5CFCFCFCACFC5C0C5C5C
3050 DATA FCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
3060 DATA FCFCFCAC0C0C0C0C0C0C5CFCFCFCFC
3070 DATA FCFCFCFCFCFCB8FCFC3074FCFCFC90
3080 DATA FCE8C030FCFCE890FCC0D4C074FCFC
3090 DATA 90FC90FCE874FCFC90FC90FCE874FC
3100 DATA FC90FC90FCE874FCFC90FC90FCE874
3110 DATA FCFC90FC90FCE874FCFC90FC90FCE8
3120 DATA 74FCFC90FC90FCE874FCFC90FC90FC
3130 DATA E874FCFC90FC90FCE874FCFC90FC90
3140 DATA FCE874FCFC90FC90FCE874FCFC90FC
3150 DATA 90FCE874FCFC90FC9074C074FCE890
3160 DATA 74E830C0FCFCE8C0D4FCC0D4FCFCFC
3170 DATA FCFCFCFCFCFC333333333333333322
3180 DATA 880000000044116688103030304499
3190 DATA 661030303030209922103830303420
3200 DATA 1122343E30303D381122343E30303D
3210 DATA 381122303830303430112230386498
3220 DATA 343011223030CCCC303011222064CC
3230 DATA CC981011221064CCCC982011223030
3240 DATA CCCC30301122643064983098112264
3250 DATA 9830306498112230CC3030CC301166
3260 DATA 1064CCCC982099661030CCCC302099
3270 DATA 660030303030009966540030300028
3280 DATA 996614FC0000FC28996654BCFCFC7C
3290 DATA A8996614BCA8547C28996614FC4488
3300 DATA FC28992254A8CCCC54A81133333333
3310 DATA 333333332233331133000011221122
3320 DATA 113311333322000011330000332222
3330 DATA 111133113333223333113300001133
3340 DATA 333333333333330303030303030303
3350 DATA 020000000000000102CC883333143C
3360 DATA 0146CC883333143C2946CC88333314
3370 DATA 3C29020000000000000146CC883333
3380 DATA 143C2946CC883333143C2902CC8833
3390 DATA 33143C010200000000000001030303
3400 DATA 030303030303300330210330031203
3410 DATA 212112120321120303211212030312
3420 DATA 030321121203031203033021120303
3430 DATA 120303210312030312032121031203
3440 DATA 210330032103033003030303030303
3450 DATA 030303030303030303030312031221
3460 DATA 031203033003211203300303300321
3470 DATA 120330031212032103121203121203
3480 DATA 302112120312302121121230210312
3490 DATA 032112031203031203211203120303
3500 DATA 120312210312030303030303030303
3510 DATA 030303030303030300000000000000
3520 DATA gjkey
3530 DATA 639,0,639,399,0,399,0,0
3540 DATA 356,120,356,324,120,324,120
3550 DATA 120,356,332,356,387,120,387
3560 DATA 120,332,28,328,28,64,12,64
3570 DATA 12,12,80,12,80,28,12,28,80
3580 DATA 28,80,64,66,64,66,328,78,356