10 REM      Killaballs
20 REM        By D.L.Lau
30 REM --------- CPC -------------
40 REM *** Once only initialisation ***
50 MEMORY &7FFF:SPEED KEY 8,1
60 x=&8504:y=&8503:dir=&8505:disp=&8362:flag=&860B
70 CLS:INK 0,0:BORDER 0:INK 15,2,6:INK 9,3,3
80 LOCATE 14,13:PRINT"Please wait ......"
90 FOR f=&8021 TO &8032:READ a:POKE f,a:NEXT
100 DATA 0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0
110 FOR f=&8020 TO &819D STEP 20:POKE f,1:POKE f+19,1:NEXT
120 FOR f=&819D TO &81B0:POKE f,1:NEXT
130 ENT 3,100,5,1,50,2,2:ENV 1,19,-1,30,26,-3,10:ENT -1,50,-1,3:ENV 5,8,8,25
140 FOR f=0 TO 8:READ a:POKE f+&A000,a:NEXT
150 DATA 3,0,0,50,0,0,7,2,0
160 REM ******** Characters' data ******
170 FOR f=&8200 TO &82DF:READ a:POKE f,a:NEXT
180 DATA 4,12,12,8,76,12,28,44,76,12,44,12,12,204,44,12,12,28,204,12,12,28,12,140,28,44,12,140,4,12,12,8
190 DATA 4,12,204,8,12,76,12,12,44,76,12,12,44,76,60,44,28,60,140,28,12,12,140,28,12,12,140,12,4,204,12,8
200 DATA 17,51,252,34,51,118,51,51,57,118,51,51,57,118,51,51,57,118,60,57,54,60,185,54,51,51,185,51,17,252,51,34
210 DATA 17,51,51,34,118,51,54,57,118,51,57,51,51,252,57,51,51,54,252,51,51,54,51,185,54,57,51,185,17,51,51,34
220 DATA 69,195,252,168,68,237,207,203,199,207,237,222,237,12,201,214,237,237,146,220,233,204,48,214,237,204,195,204,84,252,252,136
230 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,16,32,0,0,16,32,0,0,0,0,0,0,0,0,0,0,0,0,0,
240 DATA 0,64,128,0,85,234,213,170,85,234,213,170,193,144,96,192,192,144,96,192,85,234,213,170,85,234,213,170,0,64,128,0
250 GOTO 1970
260 REM ********************************
270 lev=1:sc=0:li=5:scr=1:ball=1:POKE &8605,1
280 REM ********* print screen *********
290 POKE &8600,0:FOR f=&854A TO &854E:POKE f,0:NEXT
300 FOR f=&8551 TO &855A:POKE f,0:NEXT
310 MODE 0:ON scr GOSUB 670,880,1090,1300,1510
320 ad=&8035:FOR g=1 TO 18:READ a$:FOR f=1 TO 18:POKE ad,VAL(MID$(a$,f,1)):ad=ad+1
330 NEXT:ad=ad+2:NEXT
340 PEN 1:LOCATE 2,25:PRINT STRING$(18,CHR$(154))
350 FOR f=2 TO 24:LOCATE 1,f:PRINT CHR$(149):LOCATE 20,f:PRINT CHR$(149):NEXT
360 LOCATE 3,2:PEN 12:PRINT"Hi       Sc":LOCATE 3,3:PEN 10:PRINT"Level"
370 LOCATE  20,25:PRINT CHR$(153):LOCATE 1,1:PRINT CHR$(11):LOCATE 1,25::PRINT CHR$(147):LOCATE 1,1:PRINT CHR$(150):LOCATE 20,1:PRINT CHR$(156)
380 PEN 1:LOCATE 2,1:PRINT STRING$(18,CHR$(154))
390 MOVE 20,345:DRAWR 596,0,3:MOVER 0,-2:DRAWR -596,0
400 PEN 4:LOCATE 5,2:PRINT hi:FOR f=1 TO li:CALL &8362,f+13,3,&8200:NEXT
410 CALL &8320
420 PEN 13:LOCATE 8,3:PRINT lev
430 REM ********** reset **************
440 POKE x,2:POKE y,5:POKE dir,3:POKE &8501,&82:POKE &8500,0:POKE &8507,&21:POKE &8508,&80:POKE flag,0
450 CALL disp,2,5,&8200
460 REM ********* main loop ***********
470 SOUND 2,478,200,7,5:FOR f=1 TO 700:INK 2,6,26:NEXT:INK 2,20
480 CALL &9500:
490 FOR f=1 TO (sp-1)*30:NEXT
500 CALL &9000:PEN 3:LOCATE 14,2:PRINT PEEK(&8600)+sc:ON PEEK(flag) GOTO 520,580
510 GOTO 480
520 REM ********** killed *************
530 SOUND 1,50,110,6,0,3
540 FOR f=1 TO 4:CALL &8362,PEEK(x),PEEK(y),&8200:FOR g=1 TO 150:NEXT
550 LOCATE PEEK(x),PEEK(y):PRINT" ":FOR g=1 TO 140:NEXT:NEXT
560 LOCATE li+13,3:PRINT" ":li=li-1:IF li=0 THEN 1910
570 GOTO 430
580 REM **** completion of screen *****
590 SOUND 4,478,450,0,1,1:INK 0,0,26:FOR f=1 TO 3000:NEXT:INK 0,0
600 LOCATE 1,25:FOR f=1 TO 25:SOUND 1,300-(f*10),2,5:PRINT:NEXT
610 sc=sc+PEEK(&8600):lev=lev+1
620 IF lev=16 THEN MODE 1:LOCATE 2,12:PRINT"  you cheated! there is no way you can complete this game without cheating.":FOR f=1 TO 2000:NEXT:GOTO 1930
630 scr=scr+1:IF scr=6 THEN scr=1:ball=ball+2
640 POKE &8605,ball
650 li=5
660 GOTO 280
670 REM ********** screen 1 ***********
680 RESTORE 690
690 DATA 222222222222222222
700 DATA 211121111212111112
710 DATA 222222222222222222
720 DATA 211121211211121112
730 DATA 222322222222222222
740 DATA 112221112111112112
750 DATA 222222222222232222
760 DATA 211221212111222111
770 DATA 222211212122222222
780 DATA 211222212121211112
790 DATA 211112222221222222
800 DATA 222222111111211212
810 DATA 212212222222212212
820 DATA 212112111112112222
830 DATA 212222222222222112
840 DATA 222212211212112112
850 DATA 112212222212222112
860 DATA 113222222222222222
870 POKE &8601,214:RETURN
880 REM ********** screen 2 ***********
890 RESTORE 900
900 DATA 222222222222222222
910 DATA 211221121112211112
920 DATA 211222222222212222
930 DATA 222211121121212112
940 DATA 111222222222222112
950 DATA 222212111212112112
960 DATA 211212222212222222
970 DATA 211222121213212111
980 DATA 222222321222212222
990 DATA 121112222221211212
1000 DATA 222222121111222222
1010 DATA 211122122222212212
1020 DATA 212222221121112112
1030 DATA 222111321122222222
1040 DATA 212122222223222211
1050 DATA 212222112221211222
1060 DATA 222112222211222222
1070 DATA 112222222222222231
1080 POKE &8601,218:RETURN
1090 REM ********* screen 3 ************
1100 RESTORE 1110
1110 DATA 222222222222111222
1120 DATA 211221112222111212
1130 DATA 212222222122222222
1140 DATA 222122111222111211
1150 DATA 222222222222222222
1160 DATA 211321111211121112
1170 DATA 222222222212222222
1180 DATA 321222122222222123
1190 DATA 221211121112112122
1200 DATA 222222222222222112
1210 DATA 111123222111212222
1220 DATA 222221222222222322
1230 DATA 212122112121221121
1240 DATA 222222222222222222
1250 DATA 312212211221112112
1260 DATA 222222212222212222
1270 DATA 113211222112222221
1280 DATA 222222222222222311
1290 POKE &8601,227:RETURN
1300 REM ********* screen 4 ************
1310 RESTORE 1320
1320 DATA 222212212222111222
1330 DATA 221212212112222222
1340 DATA 221222222112111211
1350 DATA 211233222222122222
1360 DATA 222221111222222112
1370 DATA 222122222222222222
1380 DATA 112122221122121122
1390 DATA 222221111222121122
1400 DATA 211122231211123322
1410 DATA 212222222222222212
1420 DATA 212211221222222222
1430 DATA 222222221211112122
1440 DATA 111223111222222221
1450 DATA 322222222212321221
1460 DATA 221211212222222222
1470 DATA 221211221121121122
1480 DATA 211222223222222222
1490 DATA 222222222222231111
1500 POKE &8601,223:RETURN
1510 REM ********** screen 5 ***********
1520 RESTORE 1530
1530 DATA 222222211112222222
1540 DATA 211112213312211112
1550 DATA 212223212212322212
1560 DATA 212222222222222212
1570 DATA 222121212212121222
1580 DATA 222222212212222222
1590 DATA 111221112211122111
1600 DATA 222222222222222222
1610 DATA 221121211112121122
1620 DATA 223221223322122322
1630 DATA 122211222222112221
1640 DATA 122222211112222221
1650 DATA 221122222222221122
1660 DATA 221321123321123122
1670 DATA 211221122221122112
1680 DATA 211222222222222112
1690 DATA 222212212212212222
1700 DATA 113222222222222311
1710 POKE &8601,216:RETURN
1720 REM *********** Title *************
1730 GOSUB 670:ad=&8035:FOR g=1 TO 18:READ a$:FOR f=1 TO 18:POKE ad,VAL(MID$(a$,f,1)):ad=ad+1:NEXT:ad=ad+2:NEXT
1740 POKE &8600,0:FOR f=&854A TO &854E:POKE f,0:NEXT:POKE x,0:POKE y,0
1750 MODE 0:PEN 1:PRINT"K I L L A B A L L S"
1760 PEN 2:LOCATE 6,3:PRINT"By D.L.Lau":PEN 12:LOCATE 3,7
1770 PRINT"Steer your ball":PRINT:PRINT"  left or right to":PRINT:PRINT"collect white dots."
1780 PEN 4:PRINT:PRINT" Avoid your enemies":PRINT:PRINT"and flashing objects"
1790 PEN 3:PRINT:PRINT" Use left and right":PRINT:PRINT"cursors or joystick"
1800 PRINT:PRINT"   for steering."
1810 PEN 7:PRINT:PRINT" Space Bar to start."
1820 POKE &8605,5
1830 CALL &9500:IF INKEY(47)<>0 THEN 1830
1840 FOR f=1 TO 25:LOCATE 1,1:PRINT CHR$(11):NEXT
1850 MODE 1:LOCATE 8,10:PRINT"Input speed level (1 to 10)"
1860 PRINT:PEN 2:PRINT"        1 is super impossibly fast"
1870 PRINT"      10 is super boringly slow"
1880 PEN 1:LOCATE 20,16:INPUT sp
1890 IF sp<1 OR sp>10 THEN LOCATE 20,16:PRINT SPACE$(20):GOTO 1880
1900 GOTO 270
1910 REM ********** Game over **********
1920 PEN 14:LOCATE 7,14:PRINT"GAME OVER"
1930 sc=sc+PEEK(&8600)
1940 IF sc>hi THEN hi=sc
1950 FOR f=1 TO 1500:NEXT:GOTO 1740
1960 REM
1970 REM ** m/c for printing screen ***
1980 RESTORE 1990:FOR f=&8320 TO &838A:READ a$:POKE f,VAL("&"+a$):NEXT
1990 DATA 21,21,80,e,5,6,2,7e,c5
2000 DATA e5,69,60,fe,1,28,1a,fe,2,28
2010 DATA 1e,fe,3,28,22,e1,23,c1,4,78
2020 DATA fe,14,20,e6,c,79,fe,19,c8,23
2030 DATA 23,18,db,11,80,82,cd,6e,83,18
2040 DATA e6,11,a0,82,cd,6e,83,18,de,11
2050 DATA c0,82,cd,6e,83,18,d6,dd,5e,0
2060 DATA dd,56,1,dd,6e,2,dd,66,4,25
2070 DATA 2d,cd,1a,bc,6,4,e,8,c5,e5
2080 DATA 1a,ae,77,23,13,10,f9,e1,1,0
2090 DATA 8,9,c1,d,c2,77,83,c9
2100 REM ********* Ball m/c ************
2110 adr=&8FFF:FOR f=1 TO 56
2120 READ byte$
2130 FOR g=1 TO 20 STEP 2
2140 POKE adr,VAL("&"+MID$(byte$,g,2))
2150 adr=adr+1:NEXT:NEXT
2160 DATA 003E00320D86CD1BBBFE
2170 DATA F32811FEF22814CD24BB
2180 DATA FE082806FE042809180C
2190 DATA 3E02320D8618053E0432
2200 DATA 0D863A0585FE04CA0191
2210 DATA FE02CA8E90FE03CACA90
2220 DATA 3A0D86FE02CC3D913A0D
2230 DATA 86FE04CC51913A0385FE
2240 DATA 06CA629111ECFFCDC591
2250 DATA 2A07867EFE01CA6291FE
2260 DATA 03CA2092FE02CC6E912A
2270 DATA 07862207852A03857D3D
2280 DATA 320385ED5B0085CD6E83
2290 DATA CDB2912A0385ED5B0085
2300 DATA C36E832A078511140019
2310 DATA 7EFE00CAEF91FE02CAEF
2320 DATA 91110100CDC5912A0786
2330 DATA 7EFE01CC5191FE03CA20
2340 DATA 92FE02CC78912A078622
2350 DATA 07852A03857C3C320485
2360 DATA C37A903A0D86FE02CC3D
2370 DATA 913A0D86FE04CC519111
2380 DATA 1400CDC5912A07867EFE
2390 DATA 01CA6891FE03CA2092FE
2400 DATA 02CC82912A0786220785
2410 DATA 2A03857D3CC377902A07
2420 DATA 85111400197EFE00CA04
2430 DATA 92FE02CA049211FFFFCD
2440 DATA C5912A07867EFE01CC3D
2450 DATA 91FE03CA2092FE02CC8C
2460 DATA 912A07862207852A0385
2470 DATA 7C3D320485C37A902A07
2480 DATA 85237EFE01C8FE03CA1F
2490 DATA 923E02320585E1C92A07
2500 DATA 852B7EFE01C8FE03CA1F
2510 DATA 923E0418EA3E03320585
2520 DATA C93E01320585C92A0385
2530 DATA 2DE511ECFF181E2A0385
2540 DATA 24E511010018142A0385
2550 DATA 2CE5111400180A2A0385
2560 DATA 25E511FFFF18002A0785
2570 DATA 19AF77E13A0186473A00
2580 DATA 863CB8CA199232008611
2590 DATA A082C36E833A0085FE00
2600 DATA 28063E00320085C93E20
2610 DATA 320085C93A0586320A86
2620 DATA 2A078519220786215185
2630 DATA E55E23562A0786BFED52
2640 DATA E1CA1F9223233A0A863D
2650 DATA C8320A8618E63A0D86FE
2660 DATA 02C262912A0785237EFE
2670 DATA 01CA6291C3A0903A0D86
2680 DATA FE04C262912A07852B7E
2690 DATA FE01CA6291C313913E02
2700 DATA 320B86C9E13E01320B86
2710 DATA C9C9E13E01320B86C900
2720 REM ********* enemy m/c ***********
2730 adr=&94FF:FOR f=1 TO 59
2740 READ byte$
2750 FOR g=1 TO 20 STEP 2
2760 POKE adr,VAL("&"+MID$(byte$,g,2))
2770 adr=adr+1:NEXT:NEXT
2780 DATA 003A05863D320A86214A
2790 DATA 85856F7EFE002817FE02
2800 DATA CA8D95FE03CA1096FE04
2810 DATA CA94963A0A86FE00C818
2820 DATA DBED5F2E05FE1E380EFE
2830 DATA 50381426132210862132
2840 DATA 80181226082210862127
2850 DATA 801808260D221086212C
2860 DATA 802212862120853A0A86
2870 DATA CB27856F364023368211
2880 DATA 0F0019ED5B1086D57323
2890 DATA 7211200019ED5B128673
2900 DATA 2372214A853A0A86856F
2910 DATA 3603114082E1CD6E83C3
2920 DATA 2095213085CD3C97ED53
2930 DATA 108614CD9D9518262A03
2940 DATA 85BFED52CA1F92215185
2950 DATA CD3C97ED531286211400
2960 DATA 197EFE02CACF96FE00CA
2970 DATA CF962A1286C9237EFE01
2980 DATA CAEE96CDCF951820FE03
2990 DATA CA1197212085CD3C97ED
3000 DATA 5307862A1086CD6E8321
3010 DATA 30853A0A86CB27856FC9
3020 DATA 5E2334CDF795181256EB
3030 DATA E5CDF696E1CD6E832151
3040 DATA 85CD3C972BC913732372
3050 DATA C32095213085CD3C97ED
3060 DATA 5310861C2A0385BFED52
3070 DATA CA2092215185CD3C97ED
3080 DATA 531286131AFE02CAB996
3090 DATA FE00CAB9961B1B1AFE02
3100 DATA CAC496FE00CAC4962A12
3110 DATA 86111400197EFE01CAE8
3120 DATA 96FE03CA1297212085CD
3130 DATA 3C97ED5307862A1086CD
3140 DATA 6E832130853A0A86CB27
3150 DATA 856F345E2356EBE5CDF6
3160 DATA 96E1CD6E83215185CD3C
3170 DATA 972BE521140019EBE173
3180 DATA 2372C32095213085CD3C
3190 DATA 97ED53108615CD9D952B
3200 DATA 7EFE01CAF296CDCF955E
3210 DATA 2335CDF7951B732372C3
3220 DATA 2095ED5FFE280602381A
3230 DATA C33A96ED5FFE3C060438
3240 DATA 0FC34796ED5FFE3C0603
3250 DATA 3803C3BF95E13A0A8621
3260 DATA 4A85856F7877C32095ED
3270 DATA 5FFE3C3804060418E906
3280 DATA 0218E53A0786FE402810
3290 DATA 1E402120853A0A86CB27
3300 DATA 856F731682C91E6018EE
3310 DATA E1213085CD3C97D52120
3320 DATA 85CD3C97E1CD6E83214A
3330 DATA 853A0A86856FAF772151
3340 DATA 853A0A86CB27856F3600
3350 DATA C320953A0A86CB27856F
3360 DATA 5E2356C9000000000000
3370 GOTO 1720