10 ' Escape from Stingy's Castle
20 ' By Paul Robson
30 '
40 ON ERROR GOTO 1580
50 MODE 1:FOR f=0 TO 3:INK f,0:NEXT:BORDER 0
60 GOSUB 1590:GOSUB 1270:pr=&A7F8:q=&A85F:DEFINT r,s
70 MODE 0:PAPER 0:CLS:INK 1,0:LOCATE 5,7:PEN 1:PRINT"PLEASE PRESS":LOCATE 8,10:PRINT i$"1"i$" or "i$"2"i$
80 LOCATE 6,16:PEN 2:PRINT"1.JOYSTICK":LOCATE 6,19:PRINT"2.KEYBOARD"
90 INK 0,15:INK 1,0:INK 2,26:BORDER 15
100 IF INKEY(64)=0 THEN up=72:do=73:ri=75:le=74:fi=76:GOTO 110 ELSE IF INKEY(65)=0 THEN up=0:do=2:ri=1:le=8:fi=9:GOTO 110 ELSE 100
110 RESTORE:rm=50:rg=5:c=1:me=13:me2=0
120 pb2=0:CALL &A823:IF rm=70 THEN 860
130 srm=0:IF rm=66 THEN srm=66:rm=54 ELSE IF rm=67 THEN srm=67:rm=52 ELSE IF rm=68 THEN srm=68:rm=50
140 IF rm=65 THEN PEN 13:CALL &A86F
150 PEN 1:CALL &A583,rm:nxt=0:pb=0:gs=0:ss=0
160 IF srm<>0 THEN rm=srm
170 READ n:IF n=-1 THEN READ s:IF s=rm THEN 190
180 GOTO 170
190 READ h,v,h2,v2,d
200 CALL &8057,h2,v2,2
210 ERASE nr:DIM nr(15):x=1
220 READ n:IF n=0 THEN 250
230 READ o,p:nr(x)=n:nr(x+1)=o:nr(x+2)=p:PRINT tr$:CALL pr,n,o,247,10:PRINT op$
240 x=x+3:GOTO 220
250 READ n:IF n=0 THEN 270
260 READ o:PRINT tr$:CALL pr,n,o,243,8:PRINT op$:GOTO 250
270 READ n:IF n=0 THEN 290
280 READ o:LOCATE n,o:PEN 6:PRINT b$:GOTO 270
290 IF rm=50 THEN FOR i=4 TO 17:PRINT tr$:CALL pr,i,10,243,8:PRINT op$:NEXT:LOCATE 11,10:PRINT" ":LOCATE 11,11:PRINT" "
300 IF rm=59 THEN LOCATE 11,14:PEN 13:PRINT b$ ELSE IF rm=61 THEN LOCATE 3,23:PEN 5:PRINT"*!ALL THE BEST!*"
310 IF rm=62 THEN LOCATE 8,14:PEN 13:PRINT b$ ELSE IF rm=63 THEN LOCATE 8,4:PAPER 1:PEN 3:PRINT CHR$(94)"WAY OUT ":PAPER 0:ss=1
320 IF rm=64 THEN LOCATE 7,13:PEN 10:PRINT"SORRY!" ELSE IF rm=67 THEN LOCATE 16,21:PEN 1:PRINT CHR$(94)
330 IF rm=68 THEN FOR i=20 TO 21:LOCATE 4,i:PEN 1:PRINT STRING$(13,b$);:PEN 13:PRINT b$:NEXT:LOCATE 4,22:PEN 13:PRINT"*DO NOT ERASE*":LOCATE 4,23:PRINT"SIGNED-SCROOGE"
340 LOCATE 1,3:PEN 12:PRINT STRING$(me,b$):LOCATE 1,3:PEN 7:PAPER 12
350 FOR j=1 TO me:PRINT MID$(m$,j,1);:NEXT:PAPER 0
360 WINDOW#1,1,20,1,2:PAPER #1,0:PEN #1,1
370 PRINT#1,i$"P"i$"LACE BLOCK";:GOSUB 1250
380 c=c+1:IF c=6 THEN c=7 ELSE IF c=15 THEN c=1
390 POKE q,c:POKE q+14,c:POKE q+15,c:CALL &A841
400 EVERY 10 GOSUB 1000
410 IF pb AND NOT pb2 OR nxt THEN 560
420 CALL &8057,h,v,1
430 IF ss=1 AND h2=14 AND v2=12 THEN FOR del=1 TO 40:NEXT
440 IF INKEY(27)=0 AND pb=0 THEN 1080
450 IF d=1 THEN t=-20:t2=424 ELSE IF d=2 THEN t=-20:t2=378 ELSE IF d=3 THEN t=12:t2=408 ELSE IF d=4 THEN t=-42:t2=408
460 t3=TEST((h*32)+t,t2-(v*16))
470 IF t3=6 THEN GOSUB 1020:GOTO 450
480 IF t3=1 THEN 550
490 CALL &8057,h,v,0
500 v=v-(2 AND d=1)+(2 AND d=2):h=h-(d=3)+(d=4)
510 IF t3=10 THEN 1190
520 IF t3=0 THEN 560
530 IF t3=4 OR t3=5 THEN x=h2:y=v2:e=4:GOTO 940
540 IF t3=8 OR t3=9 THEN x=h:y=v:e=8:GOTO 940
550 IF d=2 THEN d=1:GOTO 450 ELSE IF d=1 THEN d=2:GOTO 450 ELSE IF d=3 THEN d=4:GOTO 450 ELSE IF d=4 THEN d=3:GOTO 450
560 IF INKEY(fi)=0 THEN rg=11-rg:CALL &8057,h2,v2,0:sw=1:GOTO 770
570 IF TEST((h2*32)-16,392-(v2*16))=0 THEN x=h:y=v:e=4:GOTO 940
580 IF rg=6 THEN 800
590 IF INKEY(up)=0 THEN dir=-20:dir2=424:GOTO 670
600 IF INKEY(do)=0 THEN dir=-20:dir2=378:GOTO 670
610 IF INKEY(ri)=0 THEN dir=12:dir2=408:GOTO 670
620 IF INKEY(le)=0 THEN dir=-52:dir2=408:GOTO 670
630 IF INKEY(67)=0 THEN 110
640 IF me=0 THEN x=h:y=v:GOTO 940
650 IF gs THEN 1100
660 GOTO 410
670 t6=TEST((h2*32)+dir,dir2-(v2*16))
680 IF rm=68 AND h2=4 AND v2=22 THEN PRINT TR$:CALL pr,18,8,247,10:PRINT op$
690 IF t6=1 OR t6=6 OR t6=10 THEN 800
700 CALL &8057,h2,v2,0
710 h2=h2-(dir=12)+(dir=-52)
720 v2=v2-(2 AND dir2=424)+(2 AND dir2=378)
730 CALL &8057,h2,v2,2
740 IF t6=8 OR t6=9 THEN x=h2:y=v2:e=8:GOTO 940
750 IF t6=2 OR t6=3 THEN x=h:y=v:e=4:GOTO 940
760 GOTO 800
770 IF rg=6 THEN 790
780 CALL &8057,h2,v2,2:GOTO 800
790 LOCATE h2,v2:PEN 6:PRINT CHR$(242):LOCATE h2,v2+1:PRINT b$
800 IF sw=1 THEN sw=0:FOR del=1 TO 100:NEXT
810 sw=0
820 IF gs THEN 1100
830 IF h2=h AND v2=v AND nxt THEN 120
840 IF nxt=1 THEN FOR del=1 TO 50:NEXT:GOTO 560 ELSE 410
850 ' win
860 z=REMAIN(0)
870 MODE 0:POKE &A85F,1:FOR i=1 TO 250:POKE &C000+(RND*&4000),128:NEXT
880 FOR f=18 TO 24:LOCATE 1,f:PEN 1:PRINT STRING$(20,143);:NEXT
890 FOR i=1 TO 50:r=RND*16+2:s=RND*14+2:CALL &8057,r,s,1:NEXT
900 LOCATE 6,23:PEN 3:PAPER 1:PRINT"THANK YOU!":CALL &A841:RESTORE 1560:FOR j=1 TO 28:READ no,du:SOUND 1,no,du*10,15,2:NEXT
910 LOCATE 4,19:PRINT"ANOTHER GAME?":LOCATE 6,20:PRINT i$"Y"i$"ES or "i$"N"i$"O"
920 IF INKEY(43)=0 THEN RUN ELSE IF INKEY(46)=0 THEN CLS:STOP ELSE 920
930 ' dead
940 z=REMAIN(0)
950 IF nxt=0 THEN CALL &8057,h,v,1
960 SOUND 1,20,0,1,1:SOUND 1,10,0,1,1,1
970 IF me=0 THEN 990
980 j=(x*32)-32:k=382-(y*16):FOR i=1 TO 250:PLOT j+(RND*20+5),k+(RND*20+5),RND*1+e:NEXT
990 SOUND 1,500,0,15,,1,1:CLS:FOR del=1 TO 2000:NEXT:GOTO 110
1000 DI:IF me2>99 THEN LOCATE me,3:PRINT op$;" ":me2=0:me=me-1:IF me=0 THEN RETURN
1010 me2=me2+1:PLOT (me*32-32)+(RND*30),352+(RND*14),0:EI:RETURN
1020 IF rm=66 AND d=3 THEN FOR i=16 TO 23:LOCATE 11,i:PEN 1:PRINT b$:NEXT
1030 r=RND*1+1
1040 IF d>2 THEN d=r:RETURN
1050 IF r=1 THEN d=4 ELSE d=3
1060 RETURN
1070 ' place block
1080 CLS#1:PRINT#1,"  <FIRE> WHEN READY"
1090 h3=h2:v3=v2:gs=1:pb=1
1100 WHILE INKEY(fi)<>0:GOTO 560:WEND
1110 CLS#1:PEN#1,1:PRINT#1," "i$"S"i$"NOWBALL or ";:PEN#1,6:PRINT#1,i$"J"i$"ELLY?"
1120 IF INKEY(60)=0 THEN b=1:GOTO 1130 ELSE IF INKEY(45)=0 THEN b=6:GOTO 1130 ELSE 1120
1130 LOCATE h2,v2:PEN b:PRINT CHR$(242)
1140 LOCATE h2,v2+1:IF b=1 THEN PRINT CHR$(243) ELSE PRINT b$
1150 h2=h3:v2=v3:gs=0:CLS#1:GOSUB 1250
1160 IF rm=60 THEN LOCATE 12,22:PEN 6:PRINT b$
1170 pb2=1:GOTO 730
1180 ' next room
1190 SOUND 1,50,15,5,1,1:GOSUB 1250:GOSUB 1260
1200 IF ga THEN ga=0:RETURN
1210 IF rm=68 THEN rm=70:nxt=1:GOTO 560
1220 x=1
1230 IF h=nr(x) AND v=nr(x+1) THEN rm=nr(x+2):nxt=1:CLS#1:GOSUB 1250:GOTO 560
1240 x=x+3:GOTO 1230
1250 LOCATE #1,17,1:PEN#1,1:PRINT #1,i$"Q"i$"UIT":RETURN
1260 CALL &8057,h,v,0:RETURN
1270 tr$=CHR$(22)+CHR$(1):op$=CHR$(22)+CHR$(0):i$=CHR$(24):b$=CHR$(143)
1280 m$="MELTOMETER":DIM nr(15)
1290 a=102:b=126:d=129:f=255
1300 SYMBOL 242,0,24,60,b,b,b,f,f:SYMBOL 243,f,f,b,b,b,60,24,0
1310 SYMBOL 244,42,93,189,191,b,b,f,f:SYMBOL 245,b,b,b,60,24,0,0,0
1320 SYMBOL 246,0,0,16,0,32,8,34,f:SYMBOL 247,f,165,165,a,a,60,60,a
1330 SYMBOL 248,0,0,b,b,b,b,b,b:SYMBOL 249,b,b,b,b,b,b,0,0
1340 SYMBOL 250,f,f,d,d,d,d,d,133:SYMBOL 251,133,d,d,d,d,d,f,f
1350 ENV 1,100,-2,2:ENT 1,50,5,1:ENV 2,15,-1,15
1360 RETURN
1370 DATA -1,50,4,8,4,22,3,18,16,51,0,17,14,17,18,10,20,10,22,10,12,10,14,10,18,11,22,0,0
1380 DATA -1,51,3,17,2,17,3,13,9,52,17,13,53,13,23,54,0,12,11,14,15,12,15,12,19,16,15,12,21,0,0
1390 DATA -1,52,18,15,18,17,1,1,11,55,0,16,13,7,17,0,0
1400 DATA -1,53,6,7,5,7,3,0,0,0
1410 DATA -1,54,13,8,13,6,2,8,8,56,0,13,22,9,20,11,16,9,12,9,6,0,0
1420 DATA -1,55,14,15,15,15,4,0,9,13,0,0
1430 DATA -1,56,16,7,17,7,4,3,7,57,8,23,59,16,23,61,0,6,9,6,15,7,21,4,9,17,15,11,9,11,15,11,21,0,0
1440 DATA -1,57,13,8,14,8,4,8,22,58,0,0,7,8,0
1450 DATA -1,58,9,19,9,17,2,0,7,9,0,9,23,6,21,0
1460 DATA -1,59,11,8,11,6,2,6,18,60,0,7,22,0,11,10,16,14,17,8,0
1470 DATA -1,60,17,8,18,8,4,8,16,62,0,10,10,0,11,8,0
1480 DATA -1,61,10,10,10,8,2,0,0,10,22,0
1490 DATA -1,62,17,16,18,16,4,6,10,63,0,5,12,4,16,7,12,5,14,0,0
1500 DATA -1,63,19,20,19,22,1,7,4,64,3,22,65,0,2,8,17,12,12,16,2,20,12,12,15,12,16,12,17,4,19,4,13,8,0,3,12,10,10,5,17,19,17,16,18,17,24,4,22,9,16,0
1510 DATA -1,64,10,18,10,20,1,0,0,10,15,0
1520 DATA -1,65,2,7,2,5,2,1,9,58,16,23,66,0,4,5,19,7,10,15,17,21,18,19,6,7,3,21,0,0
1530 DATA -1,66,9,8,9,6,2,14,6,67,0,0,9,24,14,22,13,5,0
1540 DATA -1,67,3,9,2,9,3,20,15,50,16,19,68,0,2,11,9,17,14,13,0,0
1550 DATA -1,68,10,8,10,6,2,0,0,0
1560 DATA 53,7,63,6,60,1.5,53,1.5,40,5,42,1,40,1,36,3,40,3,42,3,47,3,53,7
1570 DATA 42,1,40,1,36,3,40,3,42,3,47,3,53,3,40,3,63,3,53,1,47,1,53,3,60,3,63,3,71,3,80,7
1580 MODE 1:INK 0,0:INK 1,26:PEN 1:PRINT CHR$(7);"Error in line";ERL:END
1590 IF PEEK(250)=255 THEN RETURN
1600 INK 1,26:LOCATE 13,12:PRINT"PLEASE WAIT...."
1610 MEMORY &7FFF:RESTORE 1720:ln=1720
1620 FOR adr=&8032 TO &847F STEP 13
1630 READ byte$:chk=0
1640 FOR i=0 TO 12
1650 v=VAL("&"+MID$(byte$,i*2+1,2))
1660 POKE adr+i,v:chk=chk+v
1670 NEXT
1680 IF chk<>VAL("&"+RIGHT$(byte$,3)) THEN INK 1,26:PEN 1:PRINT"ERROR IN LINE";ln:STOP
1690 ln=ln+10:NEXT
1700 MODE 0:CALL &8032
1710 POKE 250,255:RETURN
1720 DATA 2100c01150000619dd210080dd3bc
1730 DATA 7500dd7401dd23dd231910f321504
1740 DATA 77811183a5012003edb0c9cd7e606
1750 DATA 800602c5d50608c5d5eda0eda06e4
1760 DATA eda0eda0d13e088257c110eed179a
1770 DATA e521500019ebe1c110dfc9dd6e6ff
1780 DATA 00260029292929292911ac8019272
1790 DATA e5dd6e02dd5e04cd9a80d1ebc97dd
1800 DATA 1d2dcb2526804e23466b2600cb3f3
1810 DATA 25cb2509c900000000000000001e7
1820 DATA 00000000000000000000000000000
1830 DATA 00000000000000000000000000000
1840 DATA 00000000000000000000000000000
1850 DATA 00000000000000000000000000000
1860 DATA 0000000000cccc8800cccc8800440
1870 DATA cccc8844cccccc44cccccc000c77c
1880 DATA 0c08040c0c0c048c0c8c040c8c200
1890 DATA 0c040c8c0c040c8c0c040c0c0c184
1900 DATA cc4ccc0ccccc0c0ccc8c0c080050c
1910 DATA 0008000050000000f0a00050b02e8
1920 DATA f000f03070a0f03070a0f0b0f07e0
1930 DATA a050f0f0000050a000b0b03020570
1940 DATA 70303020b0b0302070303020b0440
1950 DATA b0302070303020b0b030207030440
1960 DATA 30200000000000000000000000050
1970 DATA dd460011b3a5131ab820fb131a4b9
1980 DATA feffc8fefe2008131a67131a6f619
1990 DATA 131a47131a32afa5e5cd75bb3e547
2000 DATA 8fcd5abbe12410f318da32fe0469f
2010 DATA 050e24132c0f25142dff33fe0231d
2020 DATA 090f240f2c1025102dfe020a0f202
2030 DATA 24fe02170f24ff34fe010813243df
2040 DATA 0b2c0f25042d0425082dfe0a0920b
2050 DATA 042cfe0a0f042cff37fe05080b3c3
2060 DATA 240b2c0b250b2dff36fe080506309
2070 DATA 24132c0625132dfe0b060a2cff312
2080 DATA 38fe0e110825062c0225082d01211
2090 DATA 25092d0f24112c0a25fe071208219
2100 DATA 24fe060b0c24fe060c0c24fe093aa
2110 DATA 180a24fe04180424fe041704242c9
2120 DATA ff39fe0f070825102c02240d2d315
2130 DATA 0624032dff3afe08140c2d022530d
2140 DATA 0f2c0424072d0225ff35fe04062fa
2150 DATA 0c240f2c0d25102dfe07090a2c21e
2160 DATA fe080d022cfe09090a2cfe0b09399
2170 DATA 0a2cfe0d09062cfe0d11022cff3c5
2180 DATA 3bfe0a050224022c0524092c09203
2190 DATA 25082c02250a2d0125032d0524136
2200 DATA 062dfe0b0a0524fe0b0b0524fe3aa
2210 DATA 080e0924fe080f0924ff3cfe093c7
2220 DATA 050424022c0624032c06250c2c117
2230 DATA 0525042d0124022cfe0906012c1e8
2240 DATA 0125082c0124022dfe0b080c2c1f7
2250 DATA ff3dfe090702240c2c0824052c305
2260 DATA 1125052d07240c2dfe03161024217
2270 DATA ff3efe040a0c24052c0324032c300
2280 DATA 0f25082dfe050b0b24fe070e082c1
2290 DATA 24fe070f0824ff3ffe110303243db
2300 DATA 162c1125fe0117132d1024fe04304
2310 DATA 080624092c0625072cfe0409071d7
2320 DATA 24fe04100724fe020c0724fe02398
2330 DATA 0d0724fe02050f24fe0b0a07242ae
2340 DATA fe0b0b0724fe06150a24052d042bc
2350 DATA 24fe06140924032dfe111103242e0
2360 DATA fe04181024fe1214042cfe02163b8
2370 DATA 0224fe02170224ff40fe060b073b8
2380 DATA 240b2c07250b2dfe070f0624ff2fc
2390 DATA 41fe01041324142c1325142dfe332
2400 DATA 02171224fe0305022cfe030909296
2410 DATA 2c0c24052d0424fe04110b24fe2f6
2420 DATA 100e0324fe050e052d0f24fe062bf
2430 DATA 0a0e24fe070d0424042cfe070e2b9
2440 DATA 0524fe0d0b042cfe11110324fe3b4
2450 DATA 11120324ffdd5602dd7e0006023e1
2460 DATA f5cd90bbdd6606dd6e04e5cd757cc
2470 DATA bb7a3ccd5abb3c57e12ccd75bb6f0
2480 DATA 7acd5abbf13c10dec9cd14bc016de
2490 DATA 0000afcd32bc010000cd38bc06432
2500 DATA 10c578010000cd32bcc110f5c9598
2510 DATA 215fa8aff5464823e5cd32bce16fe
2520 DATA f13cfe10280218ef3a5fa8474853c
2530 DATA cd38bcc9011a1a001a06120f06306
2540 DATA 000f00181a00002105030612c5147
2550 DATA e5cd75bb06113e8fcd5abb10fb6b3
2560 DATA e12cc110edc900000000000000394