10 BORDER 26:INK 0,26:INK 1,0:INK 2,21:INK 3,16,26:PAPER 0:MODE 1:GOSUB 1600
20 WINDOW#1,8,33,6,20:WINDOW#2,6,36,5,25:WINDOW#3,5,36,4,25:FOR d=1 TO 3:PAPER#d,0:NEXT:WINDOW#7,3,3,12,17:PAPER#7,1:PEN#7,0
30 CLS:xs=1:GOSUB 40:xs=2:GOSUB 40:GOTO 50
40 FOR x=xs TO xs+639 STEP 40:PLOT x,399,xs:DRAW x,1:NEXT:PLOT 636+xs,1:DRAW 636+xs,399:FOR y=xs TO xs+399 STEP 40:PLOT 1,y,xs:DRAW 639,y:NEXT:PLOT 1,396+xs:DRAW 639,396+xs:RETURN
50 PLOT 110,78,1:DRAW 110,320:DRAW 528,320:DRAW 528,78:DRAW 110,78:PLOT 108,76,2:DRAW 108,322:DRAW 530,322:DRAW 530,76:DRAW 108,76:CLS#1
60 EVERY 6,0 GOSUB 1370
70 IF at THEN at=0:GOTO 1020
80 CLS#1:DI:LOCATE 16,10:PEN 1:PRINT"[C]ontrol:"
90 LOCATE 16,11:PEN 3:PRINT c$(cnt)
100 LOCATE 17,13:PEN 1:PRINT"[S]kill:":LOCATE 17,14:PEN 3:PRINT s$(sk)
110 LOCATE 13,16:PEN 1:PRINT"[H]i-Score Table"
120 LOCATE 18,18:PEN 1:PRINT"[P]lay"
130 GOSUB 1420
140 a$=UPPER$(INKEY$):IF a$="C"OR a$="S"OR a$="P"OR a$="H"THEN 150 ELSE 140
150 IF a$="S"THEN 180 ELSE IF a$="P"THEN 200 ELSE IF a$="H"THEN 1020
160 cnt=cnt+1:IF cnt>3 THEN cnt=1
170 DI:PEN 3:LOCATE 16,11:PRINT c$(cnt):EI:GOTO 140
180 sk=sk+1:IF sk>3 THEN sk=1
190 DI:PEN 3:LOCATE 17,14:PRINT s$(sk):EI:GOTO 140
200 a=FNa:BORDER 0:PAPER 1:CLS
210 jr=76:IF cnt=1 THEN lt=74:rt=75:jp=77:up=72:dn=73 ELSE IF cnt=2 THEN lt=8:rt=1:jp=9:up=0:dn=2 ELSE lt=71:rt=63:jp=47:up=38:dn=37
220 lv=1:sc=0:li=3
230 PAPER 1:CLS:CLS#2:CLS#3:PEN 0:LOCATE 17,1:PRINT"Madballs"
240 FOR a=1 TO 20:g$(a)=m$(lv,a):NEXT
250 PEN 2:LOCATE 2,2:PRINT"Score   Lives":LOCATE 27,2:PRINT"Level    Time"
260 PRINT#7,"ENERGY";
270 PLOT 28,126,0:DRAW 50,126:DRAW 50,330:DRAW 28,330:DRAW 28,126:PLOT 28,226:DRAW 50,226
280 PLOT 38,328,3:DRAW 38,228:PLOT 40,328:DRAW 40,228
290 tm=0:ep=4:IF sk=2 THEN tm=60:ep=3 ELSE IF sk=3 THEN tm=45:ep=2
300 en=ep*100
310 PEN#2,1:LOCATE#2,1,20:PRINT#2,TAB(8)"Current control:":PEN#2,3:PRINT#2,TAB(11)c$(cnt)CHR$(18)
320 PEN#2,1:PRINT#2:PRINT#2,TAB(10)"Skill level:":PEN#2,3:PRINT#2,TAB(13)s$(sk):PEN#2,1
330 PRINT#2:PRINT#2:PRINT#2,TAB(8)"Press any key to":PRINT#2,TAB(12)"play....":FOR a=1 TO 6:PRINT#2:NEXT:GOSUB 2510:FOR a=1 TO 17:PRINT#2:NEXT
340 LOCATE#2,1,1:PRINT#2,CHR$(22)CHR$(1);:FOR a=1 TO 20:PEN#2,1:PRINT#2,g$(a);:NEXT:PRINT#2,CHR$(22)CHR$(0);
350 a=x(lv):b=y(lv):se=1:xp=s(lv):yp=0
360 GOSUB 1480:FOR c=1 TO 100:NEXT:LOCATE 5+xp,4+yp:PRINT" "
370 IF a=xp THEN yp=yp+1:SOUND 1,680,10,7,1 ELSE SOUND 1,1500,10,7,1:IF xp<a THEN xp=xp+1 ELSE xp=xp-1
380 IF yp=b+1 THEN 390 ELSE 360
390 LOCATE 2,3:PEN 3:PAPER 1:PRINT USING"#####";sc;:PRINT SPC(4)STRING$(li,204):LOCATE 29,3:PRINT USING"#";lv;:PRINT SPC(7)USING"##";tm
400 fl=0:xp=x(lv):yp=y(lv):IF sk>1 THEN EVERY 50,0 GOSUB 1430
410 GOSUB 1480
420 IF fl=1 THEN 1330 ELSE IF(INKEY(jp)>-1 OR INKEY(jr)>-1)AND INKEY(lt)>-1 THEN a=-1:b=lt:GOTO 590
430 IF(INKEY(jp)>-1 OR INKEY(jr)>-1)AND INKEY(rt)>-1 THEN a=1:b=rt:GOTO 590
440 IF INKEY(rt)>-1 THEN a=1:GOTO 470
450 IF INKEY(lt)>-1 THEN a=-1:GOTO 470
460 GOTO 420
470 xp=xp+a:IF (xp=1 OR xp=30)AND MID$(g$(yp),xp,1)=" "THEN 870
480 IF xp=1 OR xp=30 THEN xp=xp+-a:GOTO 410
490 IF FNc1=143 THEN xp=xp+-a:GOTO 410
500 se=se+1:DI:PAPER 0:LOCATE(5+NOT(a-1))+xp,4+yp:PRINT" ":EI:IF se=5 THEN se=1
510 GOSUB 1500:GOSUB 1520:GOSUB 1570
520 SOUND 1,1500,10,7,1
530 IF FNc2=143 THEN 410
540 SOUND 1,1500,10,7,,4
550 GOSUB 1480:GOSUB 1500:GOSUB 1520
560 IF FNc2=143 THEN SOUND 1,680,10,7,,3:GOTO 410
570 SOUND 1,1500,10,7,1
580 yp=yp+1:DI:LOCATE 5+xp,3+yp:PAPER 0:PRINT" ":EI:GOTO 550
590 IF y=1 OR MID$(g$(yp-1),xp,1)=CHR$(143)THEN 410
600 yp=yp-1:GOSUB 1520
610 DI:PAPER 0:LOCATE xp+5,yp+5:PRINT" ":EI
620 GOSUB 1500:GOSUB 1480
630 SOUND 1,1500,11,7,,1
640 IF fl=1 THEN 1330 ELSE IF INKEY(b)>-1 AND(INKEY(jp)>-1 OR INKEY(jr)>-1)THEN 690
650 SOUND 1,125,10,7,,2:GOTO 550
660 yp=yp+1:GOSUB 1520
670 GOSUB 1500
680 IF FNc2=143 THEN 410 ELSE 550
690 xp=xp+a:IF xp=1 OR xp=30 THEN xp=xp+NOT(a-1)
700 GOSUB 1580
710 IF FNc1=143 THEN xp=xp+(NOT(a-1)):GOTO 650
720 GOSUB 1520:GOSUB 1500
730 DI:PAPER 0:LOCATE(5+NOT(a-1))+xp,4+yp:PRINT" ":EI
740 GOSUB 1480
750 SOUND 1,125,10,7,1
760 GOTO 640
770 a=FNa:a=0:PAPER 0:LOCATE 4+xp,4+yp:PRINT"   ":xp=xp+1:GOSUB 1450:xp=xp-2:GOSUB 1450:xp=xp+1
780 FOR f=yp-1 TO yp+1:LOCATE 5+xp,4+f:PRINT" ":NEXT:yp=yp-1:GOSUB 1450:yp=yp+2:GOSUB 1450:yp=yp-1
790 EVERY 50,0 GOSUB 1390:IF li=1 THEN GOTO 1070
800 t$="Hard Luck!":c=6:GOSUB 1540
810 c=10:t$="You Have Been Killed -":GOSUB 1540
820 t$="But you still have"+STR$(li-1):IF li>2 THEN t$=t$+" lives left!"ELSE t$=t$+" life left!!"
830 c=11:GOSUB 1540:IF li=2 THEN t$="(Phew!!)":c=12:GOSUB 1540
840 t$="Press any key!":c=15:GOSUB 1540
850 GOSUB 2510
860 a=FNa:PAPER 1:LOCATE 1,3:PRINT SPACE$(40):li=li-1:GOTO 230
870 a=FNa
880 LOCATE 5+xp,4+yp:PRINT CHR$(8)"   ":GOSUB 1480:PRINT:IF lv=3 THEN 1000
890 t$="Well Done!":c=8:GOSUB 1540
900 t$="You have completed":c=10:GOSUB 1540
910 t$="Level"+STR$(lv)+".":c=11:GOSUB 1540
920 d=lv*sc:t$="Bonus=Level*Skill*50":c=13:GOSUB 1540:y$=RIGHT$(STR$(lv),1):z$=RIGHT$(STR$(sk),1):t$=SPACE$(5)+"="+y$+"*"+z$+"*50"+SPACE$(8):c=14:GOSUB 1540
930 sc=sc+(lv*sk*50):t$=STR$(lv*sk*50):t$=SPACE$(5)+"="+RIGHT$(t$,LEN(t$)-1)+SPACE$(14-LEN(t$)+1):c=15:GOSUB 1540
940 t$="Press any key:":c=17:GOSUB 1540
950 lv=lv+1:WHILE INKEY$<>"":WEND
960 yp=0:FOR xp=0 TO 31:GOSUB 1460:NEXT:xp=31:FOR yp=0 TO 21:GOSUB 1460:NEXT
970 yp=21:FOR xp=31 TO 0 STEP -1:GOSUB 1460:NEXT:xp=0:FOR yp=21 TO 0 STEP -1:GOSUB 1460:NEXT
980 GOTO 960
990 GOTO 230
1000 t$="CONGRATULATIONS!":c=6:GOSUB 1540:t$="You have completed":c=8:GOSUB 1540:t$="the game!!":c=9:GOSUB 1540
1010 t$="MegaBonus=555":sc=sc+555:c=11:GOSUB 1540:lv=0:GOTO 940
1020 CLS#1:GOSUB 1420
1030 DI:LOCATE 16,10:PEN 2:PRINT"Hi-Scores:":EI
1040 FOR d=1 TO 5:DI:LOCATE 14,11+d:PEN 3:PRINT USING"#";d;:PRINT" "name$(d)"..."USING"#####";sc(d):EI:NEXT
1050 DI:PEN 2:LOCATE 13,18:PRINT"Press any key...":EI
1060 GOSUB 2510:GOTO 80
1070 t$="G A M E    O V E R":c=10:GOSUB 1540
1080 IF sc>sc(5)THEN 1090 ELSE 1320
1090 at=1:t$="Well Done!":c=12:GOSUB 1540
1100 t$="You have":c=14:GOSUB 1540:t$="achieved a new hi-score:":c=15:GOSUB 1540
1110 WINDOW#6,12,29,17,19:PAPER#6,1:CLS#6:DI:LOCATE 13,17:PEN 0:PAPER 1:PRINT"Enter your name:":EI
1120 in$="....":DI:PEN 3:LOCATE 19,19:PRINT in$:EI
1130 d=19
1140 c$=MID$(in$,d-18,1)
1150 DI:PAPER 3:PEN 1:LOCATE d,19:PRINT c$:EI
1160 IF INKEY(up)>-1 THEN c$=CHR$(ASC(c$)+1):GOTO 1220
1170 IF INKEY(dn)>-1 THEN c$=CHR$(ASC(c$)-1):GOTO 1220
1180 IF INKEY(lt)>-1 THEN d=d-1:GOTO 1240
1190 IF INKEY(rt)>-1 THEN d=d+1:GOTO 1240
1200 IF INKEY(jp)>-1 OR INKEY(jr)>-1 THEN 1280
1210 GOTO 1160
1220 IF ASC(c$)<32 THEN c$=CHR$(126)ELSE IF ASC(c$)>126 THEN c$=CHR$(32)
1230 MID$(in$,d-18,1)=c$:FOR e=1 TO 20:NEXT:GOTO 1140
1240 IF d<19 THEN d=22 ELSE IF d>22 THEN d=19
1250 DI:LOCATE 19,19:PAPER 1:PEN 3:PRINT in$:EI
1260 FOR e=1 TO 20:NEXT
1270 GOTO 1140
1280 a=FNa:LOCATE 19,19:PAPER 1:PEN 3:PRINT in$
1290 a=5
1300 IF sc>sc(a) THEN a=a-1:IF a=0 THEN 1310 ELSE GOTO 1300
1310 a=a+1:FOR b=5 TO a STEP -1:sc(b)=sc(b-1):name$(b)=name$(b-1):NEXT:sc(a)=sc:name$(a)=in$
1320 t$="Press any key....":c=22:GOSUB 1540:GOSUB 2510:a=FNa:PAPER 0:BORDER 26:GOTO 30
1330 a=FNa:FOR f=7 TO 1 STEP -1:SOUND 4,94,4,f:NEXT:IF li=1 THEN 1070
1340 t$="You have ran":c=8:GOSUB 1540:IF en<1 THEN 1350 ELSE t$="out of time!":c=9:GOSUB 1540:t$="You are trapped in the maze!":c=11:GOSUB 1540:GOTO 1360
1350 t$="out of energy and are unable":c=9:GOSUB 1540:t$="to continue!":c=10:GOSUB 1540
1360 GOTO 840
1370 tx$=RIGHT$(tx$,LEN(tx$)-1)+LEFT$(tx$,1):LOCATE 15,7:PEN pn:PRINT tx$:pn=pn+1:IF pn>3 THEN pn=1
1380 RETURN
1390 IF a=0 THEN GOSUB 1480 ELSE LOCATE 5+xp,4+yp:PAPER 0:PEN 1:PRINT " "CHR$(8)CHR$(22)CHR$(1)MID$(g$(yp),xp,1)CHR$(8);:PEN 2:PRINT MID$(g$(yp),xp+33,1)CHR$(8);:PEN 3:PRINT MID$(g$(yp),xp+66,1)CHR$(22)CHR$(0)
1400 IF a=0 THEN a=1 ELSE a=0
1410 RETURN
1420 PEN 1:LOCATE 9,20:PRINT"- (C)1990  Lee Barwick -":EI:RETURN
1430 SOUND 4,278,4,4:SOUND 4,0,2:SOUND 4,114,4,4:tm=tm-1:LOCATE 37,3:PEN 3:PAPER 1:PRINT USING"##";tm:IF tm<1 THEN fl=1
1440 RETURN
1450 DI:LOCATE 5+xp,4+yp:PEN 1:PRINT CHR$(22)CHR$(1)MID$(g$(yp),xp,1)CHR$(8);:PEN 2:PRINT MID$(g$(yp),xp+33,1)CHR$(8);:PEN 3:PRINT MID$(g$(yp),xp+66,1)CHR$(22)CHR$(0):EI:RETURN
1460 GOSUB 1480:FOR a=1 TO 10:NEXT:LOCATE 5+xp,4+yp:PAPER 0:PRINT" ";:IF INKEY$<>""THEN 990
1470 RETURN
1480 DI:PAPER 0:PEN 3:LOCATE 5+xp,4+yp:CALL &BD19:PRINT " "CHR$(8)CHR$(22)CHR$(1)CHR$(203+se)CHR$(8);:PEN 1:PRINT CHR$(199+se)CHR$(22)CHR$(0);:EI:se=se+1:IF se=5 THEN se=1
1490 RETURN
1500 IF FNc3=154 THEN sc=sc+5:MID$(g$(yp),xp,1)=" ":MID$(g$(yp),66+xp,1)=" ":DI:LOCATE 2,3:PAPER 1:PEN 3:PRINT USING"#####";sc:EI:SOUND 2,90,14,7,2,5
1510 RETURN
1520 IF FNc3=153 OR FNc3=152 THEN 770
1530 RETURN
1540 b=(40-LEN(t$)) 2:TAG
1550 DI:PLOT (b*16)-2,397-((c-1)*16),1:PRINT t$;:TAGOFF:EI
1560 DI:PEN 3:LOCATE b+1,c:PRINT CHR$(22)CHR$(1)t$CHR$(22)CHR$(0):EI:RETURN
1570 en=en-1:PLOT 38,328,1:DRAW 38,328-(100-(en/ep)):PLOT 40,328:DRAW 40,328-(100-(en/ep)):GOTO 1590
1580 en=en-2:PLOT 38,328,1:DRAW 38,328-(100-(en/ep)):PLOT 40,328:DRAW 40,328-(100-(en/ep))
1590 IF en<1 THEN 1330 ELSE RETURN
1600 CLS:WINDOW#1,13,28,8,18:PAPER#1,1:CLS#1:WINDOW#1,14,27,9,17:PAPER#1,0:CLS#1
1610 ENV 1,5,1,1,5,-1,1:ENT 1,11,-125,1:ENT 2,10,68,1:ENT 3,10,82,1:ENT 4,10,-82,1:ENV 2,14,-1,1:ENT 5,10,2,1,4,-1,1
1620 LOCATE 15,16:PEN 3:PRINT"Initialising"
1630 SYMBOL AFTER 149
1640 SYMBOL 150,255,195,165,153,153,165,195,255
1650 SYMBOL 151,0,16,0,0,146,0,0,16
1660 SYMBOL 152,0,0,56,124,108,124,56,0
1670 SYMBOL 153,0,0,76,238,238,254,255,255
1680 SYMBOL 154,0,0,0,24,24,0,0,0
1690 SYMBOL 155,0,0,24,36,36,24,0,0
1700 SYMBOL 156,0,24,36,66,66,36,24,0
1710 LOCATE 17,10:PEN 1:PRINT"MADBALLS":LOCATE 20,12:PRINT"By":LOCATE 15,14:PRINT"Lee Barwick."
1720 DEF FNa=REMAIN(0)
1730 DIM c$(3),s$(3),g$(20),m$(3,20),x(3),y(3),s(3),a$(12)
1740 x(1)=26:y(1)=3:s(1)=30:x(2)=23:y(2)=5:s(2)=18:x(3)=3:y(3)=3:s(3)=7
1750 tx$="MADBALLS....":pn=1
1760 c$(1)=" Joystick ":c$(2)="  Cursor  ":c$(3)="   Keys   ":cnt=1
1770 DEF FNc1=ASC(MID$(g$(yp),xp,1)):DEF FNc2=ASC(MID$(g$(yp+1),xp,1)):DEF FNc3=ASC(MID$(g$(yp),xp+66,1)):DEF FNc4=ASC(MID$(g$(yp),xp+66,1))
1780 FOR a=1 TO 5:READ sc(a),name$(a):NEXT
1790 DATA 2000,JOEY,1500,MEL.,1200,BOB.,800,PAUL,500,SUE.
1800 s$(1)="Amateur ":s$(2)="Skilled ":s$(3)=" Expert ":sk=1
1810 SYMBOL 200,0,8,0,192,128,0,0,0:SYMBOL 204,60,118,255,63,127,255,126,60
1820 SYMBOL 201,0,0,0,64,0,0,16,24:SYMBOL 205,60,126,255,191,255,255,110,36
1830 SYMBOL 202,0,0,0,1,3,0,16,0:SYMBOL 206,60,126,255,254,252,255,110,60
1840 SYMBOL 203,24,8,0,0,2,0,0,0:SYMBOL 207,36,118,255,255,253,255,126,60
1850 DATA 000000000000000000000000440000
1860 DATA 014444444004144444444444444410
1870 DATA 000004444403333433224444444440
1880 DATA 444444444400000400000000000040
1890 DATA 444444444444440444444444441040
1900 DATA 000000044333330444444433334040
1910 DATA 000004440000000000033400004040
1920 DATA 044444404444444400000400004040
1930 DATA 044333004334344401444404444040
1940 DATA 044000004004044304443304334040
1950 DATA 004440044004444004400004000040
1960 DATA 000444414444440043344444041440
1970 DATA 044004444444400040000044043330
1980 DATA 044444000404444444444440040000
1990 DATA 004400444440444434444404044440
2000 DATA 000444433333000003444044044430
2010 DATA 000044400000444100340444044300
2020 DATA 000004414444444440034433443000
2030 DATA 000000433322333330002333330000
2040 DATA 000000000000000000000000000000
2050 DATA 000000000000000000000040000000
2060 DATA 033340014444423333344040344410
2070 DATA 000044444441400000433040344440
2080 DATA 433404444404444444440144034440
2090 DATA 000340444404433322303344404440
2100 DATA 011034404444400000000000400440
2110 DATA 000000044034044444144410444400
2120 DATA 000004440004444414441444444000
2130 DATA 014444404400004000000000004400
2140 DATA 044444034404444131311103440440
2150 DATA 044430003403444444444403444440
2160 DATA 033404440440400000004400433330
2170 DATA 000344444044444444444044400000
2180 DATA 000044444300003444440233444430
2190 DATA 000004444044430344400000443300
2200 DATA 044444030444443034443044431040
2210 DATA 044440004440044303443044004430
2220 DATA 044404444400004430440444444300
2230 DATA 030444224000000444444424443000
2240 DATA 000000000000000000000000000000
2250 DATA 004000000000000000000000000000
2260 DATA 014444443434444444444444414430
2270 DATA 034334442244444000044444333230
2280 DATA 000004100004000444400044000000
2290 DATA 014104133334044440443404444440
2300 DATA 041404132314444401000340043330
2310 DATA 033304400000004044344034440330
2320 DATA 033330444144444434334404444000
2330 DATA 033000044430000001000300004400
2340 DATA 003333304304444433433330444240
2350 DATA 000003344044004434300000340040
2360 DATA 043330044440424444444430034444
2370 DATA 044244440004300400000444104400
2380 DATA 040000402333444143434044444040
2390 DATA 041334000000434444444404400040
2400 DATA 043414031434404404040440444440
2410 DATA 000014033323444031314414000440
2420 DATA 034334030000440344444444444400
2430 DATA 032434443333403303033332444000
2440 DATA 000000000000000000000000000000
2450 FOR k=1 TO 3:FOR a=1 TO 20:READ a$:m$(k,a)=SPACE$(30)+CHR$(13)+CHR$(15)+CHR$(2)+SPACE$(30)+CHR$(13)+CHR$(15)+CHR$(3)+SPACE$(30)
2460 FOR b=1 TO 30:c=VAL(MID$(a$,b,1))
2470 IF c=0 THEN MID$(m$(k,a),b,1)=CHR$(143):MID$(m$(k,a),33+b,1)=CHR$(150) ELSE IF c=1 THEN MID$(m$(k,a),b,1)=CHR$(151):MID$(m$(k,a),66+b,1)=CHR$(152)
2480 IF c=2 THEN MID$(m$(k,a),66+b,1)=CHR$(153) ELSE IF c=3 THEN MID$(m$(k,a),66+b,1)=CHR$(154):MID$(m$(k,a),b,1)=CHR$(155)
2490 NEXT b,a,k
2500 LOCATE 15,16:PEN 3:PRINT"Press a key:":INK 3,16
2510 WHILE INKEY$<>"":WEND:WHILE INKEY$="":WEND:RETURN