10 REM Discman's Revenge
20 REM By D.L.Lau
30 REM(c)Computing with the Amstrad
40 SYMBOL AFTER 33
50 SYMBOL 38,66,153,86,60,153,86,60:SYMBOL 145,0,24,24,24,24,24,24,24
60 SYMBOL 35,255,129,129,129,129,129,129,255
70 SYMBOL 64,24,60,126,90,126,255,255,213:SYMBOL 91,62,254,247,31,31,255,126,62:SYMBOL 93,62,127,239,248,248,255,126,62
80 SYMBOL 123,100,102,103,255,223,255,126,62:SYMBOL 125,62,126,255,223,255,231,102,100
90 SYMBOL 169,255,129,129,129,129,129,129,255:SYMBOL 170,255,24,24,24,24,24,24,255:SYMBOL 171,171,137,4,80,22,161,132,55
100 DEFINT a-z
110 ENV 1,100,2,5:ENT 1,100,-2,4:ENV 2,50,4,3:ENT 2,50,-2,2:ENT -3,50,30,2
120 ENT 4,239,-2,10:ENV 4,23,4,4:ENV 5,30,2,2:ENV 6,15,-1,4
130 DIM m(20,24),a(2),b(2),dr(2),u(20,24)
140 n$="AMSTRAD":GOTO 1530
150 REM ******** initialise ********
160 FOR f=1 TO 25:LOCATE 1,25:PRINT CHR$(10):SOUND 1,f*7,1,5:NEXT: MODE 0:li=3:gk=0:pl=0
170 FOR f=1 TO 20:FOR g=4 TO 23:m(f,g)=0:NEXT:NEXT  
180 REM ******** set screen ********
190 ON screen GOSUB 2570,2760,2920,3080,3250
200 FOR f=3 TO 17 STEP 2:m(f,3)=4:NEXT
210 GOSUB 220:GOTO 280
220 LOCATE 1,1:PEN 10:PRINT STRING$(20,CHR$(143)):LOCATE 1,2:PRINT STRING$(20,CHR$(143)):LOCATE 1,3:PRINT STRING$(20,CHR$(143))
230 PRINT CHR$(22)+CHR$(1):LOCATE 1,1:PEN 9:PRINT STRING$(20,CHR$(169)):LOCATE 1,2:PRINT STRING$(20,CHR$(170))
240 FOR f=1 TO 20 :LOCATE f,3:PRINT CHR$(169):NEXT
250 PRINT CHR$(22)+CHR$(0):FOR f=3 TO 18 STEP 2:PEN 4:LOCATE f,3:PRINT CHR$(42):NEXT
260 RETURN
270 REM ******** print screen ******
280 PRINT CHR$(22)+CHR$(1)
290 FOR f=1 TO 20:FOR g=4 TO 23:IF m(f,g)=2 THEN PEN 2:LOCATE f,g:PRINT CHR$(143):PEN 5:LOCATE f,g:PRINT CHR$(233):GOTO 310
300 IF m(f,g)=1 THEN PEN 1:LOCATE f,g:PRINT CHR$(38):PEN 6:LOCATE f,g:PRINT CHR$(145)
310 NEXT:NEXT
320 REM ********** start game ******
330 PRINT CHR$(22)+CHR$(0):do=1:LOCATE 10,23:PEN 14:PRINT CHR$(231):m(10,23)=3:ch%=0
340 LOCATE 3,1:PEN 2:PRINT"GHOSTS KILLED 0"
350 PEN 12:LOCATE 1,25:PRINT"HI":LOCATE 9,25:PRINT "SC":LOCATE 1,24:PEN 1:PRINT STRING$(20,"-")  
360 LOCATE 4,25:PEN 3:PRINT hi:LOCATE 12,25:PRINT sc:LOCATE 2,2
370 pu=0:dp=1:PEN 12:LOCATE 17,25:PRINT STRING$(li,"]")
380 a(1)=2:b(1)=10:a(2)=19:b(2)=10:dr(1)=2:dr(2)=4
390 x=10:y=22:LOCATE x,y:PEN 1:PRINT"é":LOCATE a(1),b(1):PEN 8:PRINT"à":LOCATE a(2),b(2):PEN 8:PRINT"à"
400 IF INKEY(36)=0 OR JOY(0) AND 8 THEN GOSUB 570
410 ON pu GOSUB 1730,1850,1960,2080 
420 IF INKEY(37)=0 OR JOY(0) AND 4 THEN GOSUB 660:GOTO 450
430 IF INKEY(69)=0 OR JOY(0) AND 1 THEN GOSUB 740:GOTO 450
440 IF INKEY(71)=0 OR JOY(0) AND 2 THEN GOSUB 820
450 ON pu GOSUB 1730,1850,1960,2080
460 IF (INKEY(47)=0 OR JOY(0)AND 16) AND pu=0 THEN ON dp GOSUB 1680,1770,1900,2010
470 in=INT(RND*6):p=1:ON dr(p) GOSUB 900,1070,1260,1400
480 IF INT(RND*350)=2 THEN h=INT(RND*20)+1:i=INT(RND*20)+4:IF m(h,i)=1 OR (h=x AND y=i) THEN 490 ELSE SOUND 1,250,60,5,5:m(h,i)=2:LOCATE h,i:PEN 2:PRINT CHR$(143):PRINT CHR$(22)+CHR$(1):PEN 5:LOCATE h,i:PRINT CHR$(233):PRINT CHR$(22)+CHR$(0)
490 IF INKEY(36)=0 OR JOY(0) AND 8 THEN GOSUB 570
500 ON pu GOSUB 1730,1850,1960,2080
510 IF INKEY(37)=0 OR JOY(0) AND 4 THEN GOSUB 660:GOTO 540
520 IF INKEY(69)=0 OR JOY(0) AND 1 THEN GOSUB 740:GOTO 540
530 IF INKEY(71)=0 OR JOY(0) AND 2 THEN GOSUB 820
540 ON pu GOSUB 1730,1850,1960,2080  
550 in=INT(RND*5):p=2:ON dr(p) GOSUB 900,1070,1260,1400
560 GOTO 400
570 REM ******* pac right **********
580 LOCATE x,y:PEN 1:PRINT"]":dp=2
590 IF x=20 THEN RETURN
600 IF m(x+1,y)=2 THEN RETURN
610 IF m(x+1,y)=1 THEN 2230
620 IF x+1=a(1) AND y=b(1) THEN 2230
630 IF x+1=a(2) AND y=b(2) THEN 2230
640 IF x+1=10 AND y=23 AND do=1 THEN SOUND 4,286,45,0,4,4:INK 1,24,22:do=0
650 x=x+1:LOCATE x-1,y:PRINT" ]":RETURN
660 REM ******** pac left **********
670 LOCATE x,y:PEN 1:PRINT"[":dp=4:IF x=1 THEN RETURN
680 IF m(x-1,y)=2 THEN RETURN
690 IF m(x-1,y)=1 THEN 2230
700 IF x-1=a(1) AND y=b(1) THEN 2230
710 IF x-1=a(2) AND y=b(2) THEN 2230
720 IF x-1=10 AND y=23 AND do=1 THEN SOUND 4,286,45,0,4,4:INK 1,24,22:do=0
730 x=x-1:LOCATE x,y:PRINT"[ ":RETURN
740 REM ********* man up ************
750 LOCATE x,y:PEN 1:PRINT"é":dp=1
760 IF m(x,y-1)=4 AND do=0 THEN SOUND 1,164,150,1,2,2:PEN 14:LOCATE x,y-1:PRINT CHR$(231):LOCATE 10,23:PRINT CHR$(231):INK 1,24:do=1:pl=pl+1:PEN 3:m(x,y-1)=0:sc=sc+10:LOCATE 12,25:PRINT sc:IF pl=8 AND gk>4 THEN 2500
770 IF y=4 OR m(x,y-1)=2 THEN RETURN
780 IF x=a(1) AND y-1=b(1) THEN 2220
790 IF x=a(2) AND y-1=b(2) THEN 2220
800 IF m(x,y-1)=1 THEN 2220
810 y=y-1:LOCATE x,y+1:PRINT" ":LOCATE x,y:PEN 1:PRINT"é":RETURN
820 REM ********** man down ********
830 LOCATE x,y:PEN 1:PRINT"è":dp=3:IF y=23 THEN RETURN
840 IF m(x,y+1)=2 THEN RETURN
850 IF m(x,y+1)=1 THEN 2220
860 IF x=a(1) AND y+1=b(1) THEN 2220
870 IF x=a(2) AND y+1=b(2) THEN 2220
880 IF x=10 AND y+1=23 AND do=1 THEN SOUND 4,286,45,0,4,4:INK 1,24,22:do=0
890 y=y+1:LOCATE x,y-1:PRINT" ":LOCATE x,y:PEN 1:PRINT"è":RETURN
900 REM ******** ghost up **********
910 IF b(p)=4 OR in=1 THEN 1000
920 IF m(a(p),b(p)-1)=1  THEN 1000
930 IF a(p)=x AND b(p)-1=y THEN 2220
940 IF a(p)=p1 AND b(p)-1=p2 AND pu<>0 THEN LOCATE a(p),b(p)-1:PRINT" ":m(a(p),b(p)-1)=0:GOTO 2300
950 LOCATE a(p),b(p)
960 IF m(a(p),b(p))=2 THEN PEN 2:PRINTCHR$(143):PRINTCHR$(22)+CHR$(1):PEN 5:LOCATE a(p),b(p):PRINTCHR$(233):PRINTCHR$(22)+CHR$(0):GOTO 980
970 PRINT" "
980 b(p)=b(p)-1:LOCATE a(p),b(p):PEN 8:PRINT"à":RETURN
990 REM **** turn left or right ****
1000 IF a(p)>1 THEN 1020
1010 IF m(a(p)+1,b(p))=1 THEN dr(p)=3:RETURN ELSE dr(p)=2:RETURN
1020 IF a(p)<20 THEN 1040
1030 IF m(a(p)-1,b(p))=1 THEN dr(p)=3:RETURN ELSE dr(p)=4:RETURN
1040 IF m(a(p)+1,b(p))<>1 AND x>a(p) THEN dr(p)=2:RETURN
1050 IF m(a(p)-1,b(p))<>1 THEN dr(p)=4 ELSE dr(p)=2
1060 RETURN
1070 REM ******* ghost right ********
1080 IF in=1 OR a(p)=20 THEN 1180
1090 IF m(a(p)+1,b(p))=1 THEN 1180
1100 IF a(p)+1=10 AND b(p)=23 THEN 1180
1110 IF a(p)+1=x AND b(p)=y THEN 2220
1120 IF a(p)+1=p1 AND b(p)=p2 AND pu<>0 THEN LOCATE a(p)+1,b(p):PRINT" ":m(a(p)+1,b(p))=0:GOTO 2300
1130 LOCATE a(p),b(p)
1140 IF m(a(p),b(p))=2 THEN PEN 2:PRINT CHR$(143):PRINT CHR$(22)+CHR$(1):PEN 5:LOCATE a(p),b(p):PRINT CHR$(233):PRINT CHR$(22)+CHR$(0):GOTO 1160
1150 PRINT" "
1160 a(p)=a(p)+1:LOCATE a(p),b(p):PEN 8:PRINT"à":RETURN
1170 REM ** move ghost up or down **
1180 IF b(p)>4 THEN 1200
1190 IF m(a(p),b(p)+1)=1 THEN dr(p)=4:RETURN ELSE dr(p)=3:RETURN
1200 IF b(p)<23 THEN 1220
1210 IF m(a(p),b(p)-1)=1 THEN dr(p)=4:RETURN ELSE dr(p)=1:RETURN
1220 IF m(a(p),b(p)-1)<>1 AND b(p)>y THEN dr(p)=1:RETURN
1230 IF m(a(p),b(p)+1)<>1 THEN dr(p)=3:RETURN ELSE dr(p)=1:RETURN
1240 RETURN
1250 REM ****** ghost down *********
1260 IF b(p)=23 OR in=1 THEN 1350
1270 IF m(a(p),b(p)+1)=1 THEN 1350
1280 IF a(p)=10 AND b(p)+1=23 THEN 1350
1290 IF a(p)=x AND b(p)+1=y THEN 2220
1300 IF a(p)=p1 AND b(p)+1=p2 AND pu<>0 THEN LOCATE a(p),b(p)+1:PRINT" ":m(a(p),b(p)+1)=0:GOTO 2300
1310 LOCATE a(p),b(p)
1320 IF m(a(p),b(p))=2 THEN PEN 2:PRINT CHR$(143):PRINT CHR$(22)+CHR$(1):PEN 5:LOCATE a(p),b(p):PRINT CHR$(233):PRINT CHR$(22)+CHR$(0):GOTO 1340
1330 PRINT" "
1340 b(p)=b(p)+1:LOCATE a(p),b(p):PEN 8:PRINT"à":RETURN
1350 IF a(p)>1 THEN 1370
1360 IF m(a(p)-1,b(p))=1 THEN dr(p)=1:RETURN ELSE dr(p)=2:RETURN
1370 IF a(p)<20 THEN 1040
1380 IF m(a(p)-1,b(p))=1 THEN dr(p)=1:RETURN ELSE dr(p)=4:RETURN
1390 REM ****** ghost left *********
1400 IF in=1 OR a(p)=1 THEN 1490
1410 IF m(a(p)-1,b(p))=1 THEN 1490
1420 IF a(p)-1=10 AND b(p)=23 THEN 1490
1430 IF a(p)-1=x AND b(p)=y THEN 2220
1440 IF a(p)-1=p1 AND b(p)=p2 AND pu<>0 THEN LOCATE a(p)-1,b(p):PRINT" ":m(a(p)-1,b(p))=0:GOTO 2300
1450 LOCATE a(p),b(p)
1460 IF m(a(p),b(p))=2 THEN PEN 2:PRINT CHR$(143):PRINT CHR$(22)+CHR$(1):PEN 5:LOCATE a(p),b(p):PRINT CHR$(233):PRINT CHR$(22)+CHR$(0):GOTO 1480
1470 PRINT" "
1480 a(p)=a(p)-1:LOCATE a(p),b(p):PEN 8:PRINT"à":RETURN
1490 IF b(p)>4 THEN 1510
1500 IF m(a(p),b(p)+1)=1 THEN dr(p)=2:RETURN ELSE dr(p)=3:RETURN
1510 IF b(p)<23 THEN 1230
1520 IF m(a(p),b(p)-1)=1 THEN dr(p)=2:GOTO 1230 ELSE dr(p)=1:RETURN
1530 REM ******** title  ***********
1540 INK 1,24:INK 2,20:INK 3,6:INK 4,18:INK 5,26:INK 8,18:INK 6,2:INK 0,3:BORDER 10:MODE 0:INK 10,15:INK 9,13
1550 LOCATE 1,3:PEN 1:PRINT"  DISCMAN'S REVENGE"
1560 sc=0
1570 screen=1
1580 PEN 4:PRINT:PRINT:PRINT:PRINT"  A-Up      Z-Down":PRINT:PRINT"  K-Left    L-Right"
1590 PRINT:PEN 5:PRINT:PRINT"  Spacebar  to kick":PEN 6:PRINT:PRINT:PRINT"  or use a joystick"
1600 PEN 7:PRINT:PRINT:PRINT"Press a key . . ."
1610 FOR f=1 TO 20:a$=INKEY$:NEXT
1620 FOR F=1 TO 19:IF INKEY$<>"" THEN 1670
1630 PEN 2:LOCATE f,24:PRINTCHR$(231);:PEN 10:PRINT"]":FOR g=1 TO 50:NEXT:NEXT
1640 FOR f=19 TO 1 STEP -1:IF INKEY$<>""THEN 1670
1650 LOCATE f,24:PRINT"[ ":FOR g=1 TO 50:NEXT:NEXT    
1660 GOTO 1620
1670 PRINT:PRINT:PEN 1:PRINT"HI SCORE:";HI:PEN 2:PRINT:PRINT"         BY ";n$:FOR f=1 TO 5000:NEXT:GOTO 160
1680 REM ******* push u, *********
1690 IF m(x,y-1)<>2 OR m(x,y-2)=1 THEN RETURN
1700 IF m(x,y-2)=2 OR y=5 THEN LOCATE x,y-1:SOUND 4,0,65,0,6,0,5:PEN 2:PRINTCHR$(171):FOR f=1 TO 40:NEXT:LOCATE x,y-1:m(x,y-1)=0:PRINT" ":RETURN
1710 SOUND 1,140,10,7,0,0,8:pu=1:p1=x:p2=y-1:m(p1,p2)=0
1720 REM ****** push block up ******
1730 IF m(p1,p2-1)=2 OR m(p1,p2-1)=1 OR p2=4 THEN pu=0:m(p1,p2)=2:LOCATE p1,p2:PEN 2:PRINT"#":PRINT CHR$(22)+CHR$(1):PEN 5:LOCATE p1,p2:PRINT CHR$(233):PRINT CHR$(22)+CHR$(0):p1=0:RETURN
1740 IF p1=a(1) AND p2-1=b(1) THEN a=1:GOTO 2140
1750 IF p1=a(2) AND p2-1=b(2) THEN a=2:GOTO 2140
1760 p2=p2-1:LOCATE p1,p2+1:PRINT" ":LOCATE p1,p2:PEN 2:PRINT"#":RETURN
1770 REM ******* push r. ***********
1780 IF x=20 THEN RETURN
1790 IF m(x+1,y)<>2 THEN RETURN
1800 IF x=19 THEN LOCATE x+1,y:SOUND 4,0,65,0,6,0,5:PEN 2:PRINT CHR$(171):FOR f=1 TO 40:NEXT:p1=0:LOCATE x+1,y:m(x+1,y)=0:PRINT" ":RETURN
1810 IF m(x+2,y)=2 OR (x+2=10 AND y=23) THEN LOCATE x+1,y:SOUND 4,0,65,0,6,0,5:PEN 2:PRINT CHR$(171):FOR f=1 TO 40:NEXT:p1=0:LOCATE x+1,y:m(x+1,y)=0:PRINT" ":RETURN
1820 IF m(x+2,y)=1 THEN RETURN
1830 SOUND 1,140,10,7,0,0,8:pu=2:p1=x+1:p2=y:m(p1,p2)=0
1840 REM ***** push block right ****
1850 IF p1=20 THEN pu=0:m(p1,p2)=2:LOCATE p1,p2:PEN 2:PRINT"#":PRINT CHR$(22)+CHR$(1):PEN 5:LOCATE p1,p2:PRINT CHR$(233):PRINT CHR$(22)+CHR$(0):p1=0:RETURN
1860 IF m(p1+1,p2)=2 OR m(p1+1,p2)=1 OR (p1+1=10 AND p2=23) THEN pu=0:m(p1,p2)=2:LOCATE p1,p2:PEN 2:PRINT"#":PRINT CHR$(22)+CHR$(1):PEN 5:LOCATE p1,p2:PRINT CHR$(233):PRINT CHR$(22)+CHR$(0):p1=0:RETURN
1870 IF p1+1=a(1) AND p2=b(1) THEN a=1:GOTO 2150
1880 IF p1+1=a(2) AND p2=b(2) THEN a=2:GOTO 2150
1890 p1=p1+1:LOCATE p1-1,p2:PRINT" ":LOCATE p1,p2:PEN 2:PRINT"#":RETURN
1900 REM ******** push d. **********
1910 IF m(x,y+1)<>2 THEN RETURN
1920 IF m(x,y+2)=2 OR y=22 OR (x=10 AND y+2=23) THEN LOCATE x,y+1:SOUND 4,0,65,0,6,0,5:PEN 2:PRINT CHR$(171):FOR f=1 TO 40:NEXT:p1=0:LOCATE x,y+1:m(x,y+1)=0:PRINT" ":RETURN
1930 IF m(x,y+2)=1 THEN RETURN
1940 SOUND 1,140,10,7,0,0,8:pu=3:p1=x:p2=y+1:m(p1,p2)=0
1950 REM ****** push block down ****
1960 IF p2=23 THEN pu=0:m(p1,p2)=2:LOCATE p1,p2:PEN 2:PRINT"#":PRINT CHR$(22)+CHR$(1):PEN 5:LOCATE p1,p2:PRINT CHR$(233):PRINT CHR$(22)+CHR$(0):p1=0:RETURN
1970 IF m(p1,p2+1)=2 OR m(p1,p2+1)=1 OR (p1=10 AND p2+1=23) THEN pu=0:m(p1,p2)=2:LOCATE p1,p2:PEN 2:PRINT"#":PRINT CHR$(22)+CHR$(1):PEN 5:LOCATE p1,p2:PRINT CHR$(233):PRINT CHR$(22)+CHR$(0):p1=0:RETURN
1980 IF p1=a(1) AND p2+1=b(1) THEN a=1:GOTO 2160
1990 IF p1=a(2) AND p2+1=b(2) THEN a=2:GOTO 2160
2000 p2=p2+1:LOCATE p1,p2-1:PRINT" ":LOCATE p1,p2:PEN 2:PRINT"#":RETURN
2010 REM ******** push l. **********
2020 IF m(x-1,y)<>2 THEN RETURN
2030 IF x=2 THEN LOCATE x-1,y:SOUND 4,0,65,0,6,0,5:PEN 2:PRINT CHR$(171):FOR f=1 TO 40:NEXT:LOCATE x-1,y:m(x-1,y)=0:p1=0:PRINT" ":RETURN
2040 IF m(x-2,y)=2 OR m(x-2,y)=1 OR (x-2=10 AND y=23)THEN LOCATE x-1,y:SOUND 4,0,65,0,6,0,5:PEN 2:PRINT CHR$(171):FOR f=1 TO 40:NEXT:LOCATE x-1,y:m(x-1,y)=0:PRINT" ":p1=0:RETURN
2050 IF m(x-1,y)=1 THEN RETURN
2060 SOUND 1,140,10,7,0,0,8:pu=4:p1=x-1:p2=y:m(p1,p2)=0
2070 REM ****** push block left ****
2080 IF p1=1 THEN pu=0:m(p1,p2)=2:LOCATE p1,p2:PEN 2:PRINT"#":PRINT CHR$(22)+CHR$(1):PEN 5:LOCATE p1,p2:PRINT CHR$(233):PRINT CHR$(22)+CHR$(0):RETURN
2090 IF m(p1-1,p2)=2 OR m(p1-1,p2)=1 OR (p1-1=10 AND P2=23) THEN pu=0:m(p1,p2)=2:LOCATE p1,p2:PEN 2:PRINT"#":PRINT CHR$(22)+CHR$(1):PEN 5:LOCATE p1,p2:PRINT CHR$(233):PRINT CHR$(22)+CHR$(0):P1=0:RETURN
2100 IF p1-1=a(1) AND p2=b(1) THEN a=1:GOTO 2170
2110 IF p1-1=a(2) AND p2=b(2) THEN a=2:GOTO 2170
2120 p1=p1-1:LOCATE p1+1,p2:PRINT" ":LOCATE p1,p2:PEN 2:PRINT"#":RETURN
2130 REM ******* reset ghosts ******
2140 SOUND 4,0,65,0,6,0,5:pu=0:m(p1,p2)=0:LOCATE p1,p2:PRINT" ":LOCATE p1,p2-1:PEN 2:PRINT CHR$(171):FOR f=1 TO 40:NEXT:LOCATE p1,p2-1:PRINT" ":GOTO 2180
2150 SOUND 4,0,65,0,6,0,5:pu=0:m(p1,p2)=0:LOCATE p1,p2:PRINT" ":LOCATE p1+1,p2:PEN 2:PRINT CHR$(171):FOR f=1 TO 40:NEXT:LOCATE p1+1,p2:PRINT" ":GOTO 2180
2160 SOUND 4,0,65,0,6,0,5:pu=0:m(p1,p2)=0:LOCATE p1,p2:PRINT" ":LOCATE p1,p2+1:PEN 2:PRINT CHR$(171):FOR f=1 TO 40:NEXT:LOCATE p1,p2+1:PRINT" ":GOTO 2180
2170 SOUND 4,0,65,0,6,0,5:pu=0:m(p1,p2)=0:LOCATE p1,p2:PRINT" ":LOCATE p1-1,p2:PEN 2:PRINT CHR$(171):FOR f=1 TO 40:NEXT:LOCATE p1-1,p2:PRINT" "
2180 a(a)=20:b(a)=4:p1=0
2190 gk=gk+1:LOCATE 16,1:PEN 1:PRINT gk:sc=sc+5:PEN 3:LOCATE 12,25:PRINT sc
2200 IF pl=8 AND gk>4 THEN 2500
2210 RETURN
2220 REM ****** deduct life ********
2230 SOUND 2,100,190,7,0,3:INK 2,20,15:INK 8,8,2:INK 0,0,3:PRINT CHR$(22)+CHR$(1):PEN 5:IF pu<>0 THEN LOCATE p1,p2:PRINT CHR$(233)
2240 PRINT CHR$(22)+CHR$(0):p1=0
2250 FOR f=1 TO 2:LOCATE a(f),b(f):IF m(a(f),b(f))=0 THEN PRINT" ":GOTO 2270 
2260 IF m(a(f),b(f))=2 THEN PEN 2:PRINT CHR$(22)+CHR$(1):LOCATE a(f),b(f):PRINT CHR$(143):PEN 5:LOCATE a(f),b(f):PRINT CHR$(233):PRINT CHR$(22)+CHR$(0) ELSE PEN 14:PRINT CHR$(231)
2270 NEXT:FOR f=1 TO 2499:NEXT:INK 2,20:INK 8,18:INK 0,3:LOCATE x,y:PRINT" "  
2280 li=li-1:LOCATE 17,25:PRINT"   ":IF li=0 THEN 2330 ELSE 370
2290 REM *****ghost killed **********
2300 SOUND 4,0,65,0,6,0,5:LOCATE a(p),b(p):PEN 2:PRINT CHR$(171):p1=0:pu=0:qa=a(p):qb=b(p):IF p=1 THEN a(1)=20:b(1)=4 ELSE a(2)=20:b(2)=4
2310 FOR f=1 TO 30:NEXT
2320 LOCATE qa,qb:PRINT" ":gk=gk+1:LOCATE 16,1:PEN 1:PRINT gk:sc=sc+5:PEN 3:LOCATE 12,25:PRINT sc:GOTO 2200
2330 REM ***** pac died *************
2340 FOR f=1 TO 25:LOCATE 1,1:PRINT CHR$(11):SOUND 1,f*2,2:NEXT
2350 IF sc>hi THEN 2360 ELSE 1540
2360 REM ****** enter name **********
2370 FOR f=1 TO 100:k$=INKEY$:NEXT
2380 CLS:n$="":PEN 1:PRINT:PRINT:PRINT"  ENTER YOUR NAME"
2390 PEN 4:LOCATE 7,8:PRINTSTRING$(8,CHR$(208))
2400 LOCATE 1,18:PEN 3:PRINT"  Your score is";sc
2410 f=6:WHILE f<14:f=f+1
2420 IF INKEY(18)=0 THEN 2490
2430 j$=INKEY$:IF j$=""THEN 2430
2440 IF j$=CHR$(127) AND f>7 THEN f=f-1:LOCATE f,7:PRINT " ";:n$=LEFT$(n$,LEN(n$)-1):SOUND 1,30,5,4:f=f-1:GOTO 2480
2450 IF j$=CHR$(127) THEN f=6:GOTO 2480
2460 PEN 2:LOCATE f,7:PRINTUPPER$(j$)
2470 SOUND 1,f*5,5,4:n$=n$+j$
2480 WEND
2490 n$=UPPER$(n$):hi=sc:GOTO 1540
2500 REM ****** screen finished *****
2510 SOUND 1,284,400,1,1,1:INK 0,3,1:FOR f=1 TO 6990:NEXT:INK 0,3:FOR f=1 TO 25:LOCATE 1,1:PRINT CHR$(11):SOUND 1,f*5,1,4:NEXT:MODE 1
2520 LOCATE 11,10:PRINT" *** Well done. ***"
2530 screen=screen+1:IF screen=6 THEN 3470
2540 PEN 2:PRINT:PRINT:PRINT"      You are now going on screen";screen
2550 FOR f=1 TO 6000:NEXT
2560 INK 1,24:gk=0:pl=0:MODE 0:GOTO 170
2570 REM ******** screen 1 **********
2580 REM ******* set blocks *********
2590 FOR f=3 TO 6:m(f,5)=2:m(f+6,5)=2:m(f+12,5)=2:m(f-1,11)=2
2600 m(f+13,11)=2:m(f+1,17)=2:m(f+11,17)=2:m(f-1,20)=2:m(f+13,20)=2:m(f+6,16)=2  
2610 m(f+2,22)=2:m(f+13,22)=2
2620 NEXT
2630 FOR f=8 TO 10:m(f,9)=2:m(f+3,9)=2:m(f-1,11)=2:m(f+4,11)=2
2640 m(f-7,14)=2:m(f+10,14)=2:m(f-6,22)=2:m(f+5,22)=2
2650 NEXT
2660 m(3,13)=2:m(4,13)=2:m(17,13)=2:m(18,13)=2:m(10,20)=2:m(11,20)=2
2670 FOR f=5 TO 8:m(2,f)=2:m(19,f)=2:m(5,f+3)=2:m(16,f+3)=2:m(7,f+6)=2:m(14,f+6)=2
2680 m(2,f+11)=2:m(19,f+11)=2:m(7,f+12)=2:m(14,f+12)=2
2690 NEXT
2700 REM **** set stinging plants **
2710 RESTORE 2730:FOR f=1 TO 22:READ a,b:m(a,b)=1:NEXT
2720 RETURN
2730 DATA 8,5,13,5,7,7,10,7,11,7,14,7,3,10,18,10,9,13,10,13,11,13,12,13
2740 DATA 5,15,16,15,9,18,12,18,5,19,16,19,8,20,13,20,4,23,17,23
2750 REM ****** screen 2 ***********
2760 REM ******* set blocks ********
2770 FOR f=6 TO 9:m(f,4)=2:m(f+6,4)=2:m(f+3,9)=2:m(f-4,12)=2:m(f+10,12)=2
2780 m(f-1,16)=2:m(f+7,16)=2:m(f+3,18)=2:m(f-4,23)=2:m(f+10,23)=2
2790 NEXT
2800 FOR f=6 TO 8:m(f,6)=2:m(f+7,6)=2:m(f-5,10)=2:m(f-2,10)=2:m(f+9,10)=2:m(f+12,10)=2
2810 m(f+2,13)=2:m(f+5,13)=2:m(f-5,20)=2:m(f+12,20)=2:NEXT
2820 FOR f=4 TO 8:m(3,f)=2:m(18,f)=2:m(5,f+8)=2:m(16,f+8)=2
2830 m(3,f+11)=2:m(18,f+11)=2:m(6,f+14)=2:m(15,f+14)=2:NEXT
2840 RESTORE 2850:FOR f=1 TO 10:READ a,b:m(a,b)=2:NEXT
2850 DATA 2,8,6,7,6,8,15,7,15,8,19,8,3,20,18,20,6,23,15,23
2860 REM **** set stinging plants **
2870 RESTORE 2880:FOR f=1 TO 20:READ a,b:m(a,b)=1:NEXT
2880 DATA 5,5,16,5,10,6,11,6,8,11,10,11,11,11,13,11,1,14,20,14
2890 DATA 10,15,11,15,5,19,16,19,9,20,12,20,4,21,17,21,7,22,14,22
2900 RETURN
2910 REM ****** screen 3 ***********
2920 REM ****** set blocks *********
2930 FOR f=5 TO 9:m(f,5)=2:m(f+7,5)=2:m(f-4,7)=2:m(f+4,7)=2:m(f+11,7)=2
2940 m(f-1,10)=2:m(f+8,10)=2:m(f-3,22)=2:m(f+10,22)=2
2950 NEXT
2960 FOR f=1 TO 4:m(f,12)=2:m(f+16,12)=2:m(f+4,15)=2:m(f+8,15)=2:m(f+12,15)=2
2970 m(f+4,20)=2:m(f+12,20)=2:NEXT
2980 FOR f=15 TO 18:m(2,f)=2:m(8,f)=2:m(13,f)=2:m(19,f)=2
2990 m(5,f+2)=2:m(16,f+2)=2:NEXT
3000 RESTORE 3010:FOR f=1 TO 21:READ a,b:m(a,b)=2:NEXT
3010 DATA 8,7,4,11,17,11,7,12,8,12,9,12,7,13,12,12,13,12,14,12,14,13,1,19,20,7,2,19,19,19,20,19,7,22,7,23,14,22,14,23
3020 REM *** set stinging plants ****
3030 RESTORE 3050:FOR f=1 TO 24:READ a,b:m(a,b)=1:NEXT
3040 RETURN
3050 DATA 2,5,4,5,10,5,11,5,17,5,19,5,7,8,14,8,4,9,17,9,10,10,11,10
3060 DATA 10,14,11,14,4,16,17,16,9,17,12,17,10,19,11,19,3,20,18,20,6,23,15,23
3070 REM ******* screen 4 **********
3080 REM **** set blocks ***********
3090 FOR f=3 TO 7:m(f,4)=2:m(f+11,4)=2:m(f+2,6)=2:m(f+9,6)=2:m(f+6,9)=2
3100 m(f-2,11)=2:m(f+13,11)=2:m(f+2,15)=2:m(f+9,15)=2:m(f+2,17)=2:m(f+9,17)=2
3110 m(f-2,21)=2:m(f+13,21)=2:m(f-1,23)=2:m(f+12,23)=2:NEXT
3120 FOR f=10 TO 11:m(f,4)=2:m(f,17)=2:m(f-2,19)=2:m(f+2,19)=2
3130 m(f-3,23)=2:m(f+3,23)=2:NEXT
3140 FOR f=4 TO 9:m(2,f)=2:m(19,f)=2:m(5,f+2)=2:m(16,f+2)=2:m(3,f+9)=2
3150 m(18,f+9)=2:NEXT
3160 FOR f=9 TO 11:m(8,f)=2:m(13,f)=2:m(5,f+4)=2:m(16,f+4)=2
3170 m(5,f+9)=2:m(16,f+9)=2:m(8,f+11)=2:m(13,f+11)=2:NEXT
3180 REM *** set stinging plants ***
3190 RESTORE 3210:FOR f=1 TO 34:READ a,b:m(a,b)=1:NEXT
3200 RETURN 
3210 DATA 8,5,9,5,12,5,13,5,1,6,4,6,17,6,20,6,10,8,11,8,3,9,18,9
3220 DATA 6,10,7,10,14,10,15,10,10,11,11,11,9,13,12,13,1,14,20,14
3230 DATA 10,15,11,15,2,17,19,17,10,18,11,18,7,20,14,20,9,21,12,21,6,23,15,23
3240 REM ******* screen 5 **********
3250 REM **** set blocks ***********
3260 FOR f=2 TO 5:m(f,5)=2:m(f+7,5)=2:m(f+14,5)=2:m(f+2,7)=2:m(f+12,7)=2
3270 m(f-1,11)=2:m(f+15,11)=2:m(f+4,15)=2:m(f+10,15)=2:m(f+5,17)=2:m(f+9,17)=2
3280 m(f-1,21)=2:m(f+15,21)=2:m(f+3,23)=2:m(f+11,23)=2:m(f+10,9)=2
3290 m(f+5,20)=2:m(f+9,20)=2
3300 NEXT
3310 FOR f=2 TO 4:m(f,9)=2:m(f+4,9)=2:m(f+7,9)=2:m(f+15,9)=2
3320 m(f+6,11)=2:m(f+9,11)=2:m(f+1,13)=2:m(f+4,13)=2:m(f+13,13)=2:m(f+14,13)=2
3330 m(f-1,17)=2:m(f+16,17)=2:m(f,23)=2:m(f+15,23)=2:m(f+11,13)=2:NEXT
3340 FOR f=5 TO 7:m(2,f)=2:m(7,f)=2:m(14,f)=2:m(19,f)=2
3350 m(6,f+4)=2:m(15,f+4)=2:m(1,f+8)=2:m(20,f+8)=2:m(3,f+9)=2:m(18,f+9)=2
3360 m(5,f+10)=2:m(16,f+10)=2:m(5,f+14)=2:m(16,f+14)=2:NEXT
3370 RESTORE 3380:FOR f=1 TO 6:READ a,b:m(a,b)=2:NEXT
3380 DATA 10,7,11,7,4,8,17,8,1,12,20,12
3390 REM *** set stinging plants ***
3400 RESTORE 3410:FOR f=1 TO 41:READ a,b:m(a,b)=1:NEXT
3410 DATA 4,4,6,4,8,4,10,4,12,4,14,4,16,4,1,5,20,5,9,7,12,7,2,8,19,8
3420 DATA 5,10,10,10,11,10,16,10,7,12,14,12,2,13,9,13,12,13,19,13,4,18,17,18
3430 DATA 1,19,3,19,7,19,8,19,10,19,11,19,13,19,14,19,18,19,20,19
3440 DATA 6,21,15,21,8,22,13,22,4,23,17,23
3450 RETURN
3460 REM *** end of game ***
3470 MODE 1:PEN 1:LOCATE 16,10:PRINT"EXCELLENT!":PRINT:PRINT"    You have completed the whole game."
3480 PRINT:PEN 2:PRINT"         Score = score * 1.5"
3490 sc=sc*1.5
3500 FOR f=1 TO 8000:NEXT
3510 MODE 0:GOTO 2370
3520 MODE 0:PRINT CHR$(22)+CHR$(1):PEN 1:LOCATE 10,10:PRINT CHR$(233):PEN 6:LOCATE 10,10:PRINT"#"
3530 LOCATE 10,10:ch%=0:CALL &A000,àch%:PRINT ch%
3540 ch%=0:MODE 0:x=10:y=10
3550 LOCATE x,y:PEN 2:PRINT"#":PEN 1:LOCATE x,y:CALL &A000,àch%:PRINT:PRINT ch%