10 *TV255 20 MODE7 30 DATA34,100,5,9,100,6,10,100,6,6,4,4,10,5 40 PROCtitle 50 PROCload 60 REPEAT 70 PROCbuild_1:CLS 80 PROCmonster 90 IF A(1)=3 AND A(2)=3 AND A(3)=3 PROCpit:GOTO140 100 PROCoptions:PROCoperate_cell(1) 110 IF RND(12)<>1 GOTO 130 ELSE PROCmonster:CLS:PRINT'':PROCprint_monster:IF B$="a " OR B$="an " THEN PRINTB$; 120 PRINTA$;" arrives":R1=2:RM=1:PROCoperate_cell(2) 130 V1=0:RM=0 140 UNTIL FALSE 150 DEFPROCpit 160 H=RND(12) 170 PRINT'"You fell down a ";H*10;" foot pit" 180 PRINT"you took";:D1=RND(6)*H:PRINT;D1;" hps damage" 190 IF RND(6)=1 GOTO 210 200 H1=H1-D1:L1=L1+1:PROCdelay(20):PROCstatus_1:ENDPROC 210 PRINT"At the bottom there ";:H1=H1-D1 220 R=RND(3) 230 IF R=1 PRINT"is a pool of acid"'"you take ";:D1=RND(8):PRINT;D1;" hps of damage":GOTO200 240 IF R=2 PRINT"are some spikes":R=RND(8):PRINT;R;" of which you hit":D1=R*RND(4):PRINT"doing ";D1;" hps damage":GOTO200 250 PROCmonster:PROCprint_monster:PROCsuper_monsters:PRINT"was"'B$;A$':L1=L1+1:PROCdelay(20):PROCcombat:ENDPROC 260 DEFPROCsuper_monsters 270 IF T1>80000 D1=D1+INT(4*(D1*(L1-1))^0.5) 280 ENDPROC 290 DEFPROCdelay(I%) 300 FOR Z%=0TOI%*1000 310 NEXT 320 ENDPROC 330 DEFPROCmonster_noises:RN=RND(4):ON RN GOTO 340,350,360,370 340 PRINT"s snorting":ENDPROC 350 PRINT"s":ENDPROC 360 PRINT"s growling":ENDPROC 370 PRINT"s howling":ENDPROC 380 DEFPROCbuild_1 390 FOR D1=1TO3 400 A1=RND(7) 410 R=RND(100) 420 IF A1<5 A(D1)=A1 430 IF L1=1 AND (A(1)=3 OR A(1)=5) AND (A(2)=3 OR A(2)=5) A(3)=1:GOTO 490 440 IF A1=5 IF R<10 A(D1)=A1:GOTO 490 450 IF A1=6 IF R<25 A(D1)=A1:GOTO 490 460 IF A1=7 IF R=1 A(D1)=A1:GOTO 490 470 IF A1>4 A1=RND(4):A(D1)=A1 480 REM**NO GO HERE** 490 NEXT 500 FOR D1=1TO3 510 IF A(D1)=2 PROCbuild_2 520 IF A(D1)=4 PROCbuild_2 530 NEXT 540 ENDPROC 550 DEFPROCbuild_2 560 A(D1+3)=RND(4) 570 IF A(D1+3)=1 ENDPROC 580 IF A(D1+3)=4 ENDPROC 590 PROCmonster 600 FOR X=1 TO 14 610 A(-30*(D1=1)-45*(D1=2)-60*(D1=3)+X-1)=A(9+X) 620 NEXT 630 ENDPROC 640 DEFPROCstatus_1 650 PRINTCHR$135;CHR$157'CHR$135;CHR$157;CHR$132;"Your hit points stand at: ";H1 660 PRINTCHR$135;CHR$157;CHR$132;"You have ";S1;" spells" 670 PRINTCHR$135;CHR$157;CHR$132;"You are on level :";L1 680 PRINTCHR$135;CHR$157;CHR$132;"You have ";G1;" gold pieces" 690 PRINTCHR$135;CHR$157;CHR$132;"and you have killed ";M1;" monsters!!" 700 IF J1=0 PRINTCHR$135;CHR$157:GOTO720 710 PRINTCHR$135;CHR$157;CHR$132;"You also have a ";J1*25;"% luckstone"'CHR$135;CHR$157 720 PRINTCHR$135;CHR$157'CHR$135;CHR$157;CHR$133;CHR$141;"Your score now is ";INT(SC)'CHR$135;CHR$157;CHR$133;CHR$141;"Your score now is ";INT(SC)'CHR$135;CHR$157 730 PROCstatus_2:ENDPROC 740 DEFPROCoptions 750 PRINT''SPC(5);"LEFT";SPC(7);"FORWARDS";SPC(6)"RIGHT" 760 FOR D1=1TO3 770 PRINTSPC(1); 780 IF A(D1)=1 PRINTCHR$130;" Corridor "; 790 IF A(D1)=2 PRINTCHR$130;" Door "; 800 IF A(D1)=3 PRINTCHR$130;"Blank wall "; 810 IF A(D1)=4 PRINTCHR$130;" Room "; 820 IF A(D1)=5 PRINTCHR$130;" Stairs up "; 830 IF A(D1)=6 PRINTCHR$130;"Stairs down"; 840 IF A(D1)=7 PRINTCHR$136;CHR$131;" Exit ";CHR$137 850 NEXT 860 ENDPROC 870 DEFPROCoperate_cell(I%) 880 ON I% GOTO 890,1500 890 PRINT''"What direction - L,F,R or S(tatus)?";:SS=0 900 L=1:F=2:R=3:S=4 910 PROCread_keyboard:D1=key 920 D1=-((D1=76)+2*(D1=70)+3*(D1=82)+4*(D1=83)) 930 IF D1=S PROCstatus_1:GOTO890 940 IF D1<>0 GOTO 960 950 PRINTCHR$11;CHR$11;CHR$11;CHR$11:GOTO890 960 IF A(D1+3)<>2 IF A(D1+3)<>3 GOTO 1000 970 FOR X=1 TO 4 980 A(9+X)=A(-30*(D1=1)-45*(D1=2)-60*(D1=3)+X-1) 990 NEXT 1000 IF A(D1)=7 PROCexit(1) ELSE ON A(D1) GOTO 1010,1020,1250,1330,1620,1660 1010 ENDPROC 1020 PRINT''"Door...O-open, L-listen "; 1030 O=1:L=2:S=3 1040 PROCread_keyboard:A=key 1050 A=-((A=79)+2*(A=76)+3*(A=83)) 1060 IF A=S PROCstatus_1:GOTO1020 1070 IF A<>0 GOTO 1090 1080 PRINTCHR$11;CHR$11;CHR$11;CHR$11:GOTO1020 1090 IF A=O GOTO 1330 1100 IF A=L R1=A(D1+3) 1110 PRINT'"You hear "; 1120 IF R1<>2 AND R1<>3 PRINT"nothing":GOTO1160 1130 R=RND(6) 1140 IF R>2 PRINT "nothing":GOTO1160 1150 PROCprint_monster:PRINT;A$;:PROCmonster_noises 1160 PRINT"Do you want to open it? "; 1170 Y=1:N=2:S=3 1180 PROCread_keyboard:A=key 1190 A=-((A=89)+2*(A=78)+3*(A=83)) 1200 IF A=S PROCstatus_1:GOTO 1160 1210 IF A<>0 GOTO 1230 1220 PRINTCHR$11;CHR$11:GOTO1160 1230 IF A=Y GOTO 1340 1240 PRINT"...Chicken":PROCoptions:GOTO890 1250 CLS:PRINT'CHR$136;CHR$131;SPC(5);"You cant move there dummy!" 1260 IF RND(6)=1 PROCoptions:GOTO890 1270 PRINT'"But as you have a liking for walls...." 1280 PROCdelay(20) 1290 PRINT"it falls over, you take ";:D1=RND(20) 1300 PRINT;D1;" hps damage" 1310 H1=H1-D1 1320 PROCstatus_1:ENDPROC 1330 R1=A(D1+3) 1340 CLS:PRINT'"The room "; 1350 IF R1=1 PRINT"is empty":PROCdelay(8):ENDPROC 1360 PRINT"contains "; 1370 IF R1=2 PROCprint_monster:PRINT;B$;A$; 1380 IF R1=3 PRINT"treasure"'"+ ";:PROCprint_monster:PRINT;B$;A$; 1390 IF R1=4 PRINT"treasure":T1=500:T=0 1400 PRINT'"What now?"''"G-go in,L-leave,H-help,S-status"; 1410 G=1:L=2:H=3:S=4 1420 PROCread_keyboard:A=key 1430 A=-((A=71)+2*(A=76)+3*(A=72)+4*(A=83)) 1440 IF A=S PROCstatus_1:GOTO1400 1450 IF A<>0 GOTO 1470 1460 PRINTCHR$11;CHR$11;CHR$11;CHR$11;CHR$11:GOTO1400 1470 IF A=L GOTO 1240 1480 IF A=H AND R1<4 PRINT"The ";:PROCprint_monster:PRINT;A$;" has ";D1;" hps":GOTO1400 1490 IF R1=4 PROCtreasure(1):ENDPROC 1500 IF SS=2 SS=0:PROCdelay(20):CLS 1510 PRINT'"Now what?"'"C - combat,S - spell cast,R - retreat "; 1520 C=1:S=2:R=3 1530 PROCread_keyboard:A=key 1540 A=-((A=67)+2*(A=83)+3*(A=82)) 1550 IF A=R GOTO 1590 1560 IF A=C PROCcombat:ENDPROC 1570 IF A=S IF S<1 PRINT"Er..you don't seem to have any":GOTO 1500 ELSE PROCcast_spell:IF F%=1 GOTO 1500 ELSE ENDPROC 1580 PRINTCHR$11;CHR$11;CHR$11;CHR$11;CHR$11:GOTO1500 1590 IF RND(6)=1 PRINT"TOUGH LUCK. He attacks you":PROCdelay(8):PROCcombat:ENDPROC 1600 IF RM=1 CLS:PRINT''"With a bust of cowardly speed...":PROCdelay(8):ENDPROC 1610 GOTO1240 1620 L1=L1-1 1630 IF L1>0 ENDPROC 1640 PRINT'''CHR$134;CHR$136;SPC(2);"Sorry, the stairs are blocked":L1=L1+1:PROCdelay(20) 1650 CLS:PRINT':PROCoptions:GOTO890 1660 L1=L1+1:ENDPROC 1670 DEFPROCexit(I%) 1680 ON I% GOTO 1690,1700 1690 CLS:PRINTCHR$135;CHR$157'CHR$135;CHR$157;CHR$136;CHR$133"Well done, you got out alive"'CHR$135;CHR$157 1700 E=1:PROCstatus_1:ENDPROC 1710 END:ENDPROC 1720 DEFPROCcast_spell 1730 F%=0 1740 S1=S1-1:SS=SS+1 1750 PRINT'"The now spell-blasted ";:PROCprint_monster:PRINT;A$; 1760 IF A$="Intellect devourer" PRINTCHR$11 1770 H=RND(21) 1780 IF V1<>0 D1=V1 1790 D1=D1-H 1800 IF D1<1 PRINT'"lies dead on the floor":M1=M1+1:SC=SC+L1:PROCtreasure(2):ENDPROC 1810 IF D1>0 PRINT'"is angry, he advances";:PROCdelay(8) 1820 IF RND(6)<3 PRINT"..he attacks":PROCdelay(20):PROCcombat:ENDPROC 1830 V1=D1:F%=1:ENDPROC 1840 DEFPROCcombat 1850 CLS:PRINT'"You had a terrific battle with ";:PROCprint_monster:IF B$="a " OR B$="an " PRINT "the" 1860 PRINTA$; 1870 IF V1<>0 D1=V1 1880 IF H1>D1 PRINT" and you killed him":PROCdelay(20):M1=M1+1:H1=H1-D1:SC=SC+L1:PROCtreasure(2):ENDPROC 1890 PRINT", but he killed you"'"and took all your treasure":G1=0:H1=H1-D1:PROCexit(2):ENDPROC 1900 DEFPROCstatus_2 1910 Z$=CHR$135+CHR$157+CHR$129:IF H1<=0 PROCdead:ENDPROC 1920 IF E<>1 THEN 1980 1930 IF H1<150 H1=150 1940 IF S1<15 S1=15 1950 L1=1:E=0:PRINTZ$'Z$'Z$;"Having left the catacombs, you can" 1960 PRINTZ$;"only enter again at level 1 but your" 1970 PRINTZ$;"hps and spells have been replenished"'Z$ 1980 PRINTZ$'Z$+"Press space to continue" 1990 PRINTZ$;"Press Q to save character on tape"; 2000 *FX15,1 2010 z$=GET$:IF ASC(z$)<>32 AND z$<>"Q" PRINTCHR$11:GOTO1990 2020 IF z$<>"Q" ENDPROC ELSE PROCsave_character:PROCdead:END:ENDPROC 2030 DEFPROCsave_character 2040 INPUT''"What is your name,"'"(maximum of 10 characters) "NM$ 2050 IF LEN(NM$)>10 PRINT:GOTO2040 2060 PRINT'"INSERT AND REWIND DATA TAPE" 2070 PRINT''"Press any key when ready"'"to record data"' 2080 ZZ=GET 2090 XY=OPENOUT(NM$) 2100 PRINT#XY,H1,S1,L1,G1,M1,J1,SC 2110 CLOSE#XY 2120 ENDPROC 2130 DEFPROCread_character 2140 INPUT''"What is your name,"'"(maximum of 10 characters) ",NM$ 2150 IF LEN(NM$)>10 PRINT"too long...."'GOTO2130 2160 PRINT'"INSERT AND REWIND DATA TAPE" 2170 PRINT''"Press any key to load data"' 2180 ZZ=GET 2190 XY=OPENIN(NM$) 2200 INPUT#XY,H1,S1,L1,G1,M1,J1,SC 2210 CLOSE#XY 2220 ENDPROC 2230 DEFPROCdead 2240 PRINT''"Do you wish to play again?"; 2250 W$=GET$:IF W$<>"Y" AND W$<>"N" PRINTCHR$11:GOTO 2230 2260 IF W$="Y" RUN 2270 CLS:PRINT"Ok. Bye for now adventurer."'':END:ENDPROC 2280 DEFPROCtreasure(I%) 2290 ON I% GOTO 2300,2310 2300 IF T1=0 PRINT"It was an illusion":PROCdelay(3):ENDPROC 2310 IF R1=2 PROCdelay(8):ENDPROC 2320 PRINT "There are:-"' 2330 R=INT(LOG((RND(1)*T1+10)*INT(RND(1)*L1/2+1))^2) 2340 IF J1>0 R=R+INT(((25*J1)/100)*R) 2350 PRINT;R;" gold pieces";:SC=SC+R/100:G1=G1+R 2360 IF T=0 AND RND(100)<15+L1*2 GOTO2380 2370 IF T=0 PROCdelay(8):ENDPROC 2380 FOR X=1 TO T 2390 R=RND(10) 2400 IF R=1 PRINT" + a sword":H1=H1+RND(120) 2410 IF R=2 PRINT" + a wand":S1=S1+RND(15) 2420 IF R=3 PRINT" + a suit of armour":H1=H1+RND(90) 2430 IF R=4 PRINT" + a scroll":S1=S1+RND(12) 2440 IF R=5 PRINT" + some more spells":S1=S1+RND(8) 2450 IF R=6 PRINT" + a potion":H1=H1+RND(75) 2460 IF R=7 PRINT" + a special artefact":H1=H1+RND(100):S1=S1+RND(12) 2470 IF R=8 PRINT" + a book":PROCrandom 2480 IF R=9 PRINT" + a ring":PROCrandom 2490 IF R=10 Z=RND(6)/2 2500 IF R=10 AND Z>J1 PRINT" + a ";Z*25;"% luckstone" 2510 IF R=10 AND J16 A$="Hobgoblin":D1=6:T1=1000:ENDPROC 3640 A$="Lich":D1=90:T1=80000:T=5:ENDPROC 3650 DEFPROClycanthropes 3660 R=A(23) 3670 IF R=1 A$=A$+"bear":D1=10:T1=2500:ENDPROC 3680 IF R=2 A$=A$+"boar":D1=12:T1=3000:ENDPROC 3690 IF R=3 A$=A$+"rat":D1=8:T1=2000:ENDPROC 3700 IF R=4 A$=A$+"tiger":D1=20:T1=5000:ENDPROC 3710 A$=A$+"wolf":d1=8:t1=2000:ENDPROC 3720 DEFPROCtitle 3730 DIM A(80) 3740 L1=1:G1=0:H1=100:M1=0:J1=0:S1=10:T=0:D1=1:V1=0:SC=0:E=0 3750 Z%=RND(-TIME) 3760 VDU23,0,11,0,0,0,0,0,0 3770 FOR I%=0TO24:PRINTTAB(0,I%)CHR$135;CHR$157; 3780 NEXT 3790 PRINTTAB(13,8)CHR$141;CHR$132;"Cells And";TAB(13,9);CHR$141;CHR$132;"Cells And"' 3800 PRINTTAB(14,12)CHR$141;CHR$132;"Serpents";TAB(14,13)CHR$141;CHR$132;"Serpents" 3810 PROCdelay(30) 3820 VDU23,0,11,255,0,0,0,0,0,0 3830 CLS 3840 ENDPROC 3850 DEFPROCload 3860 PRINT''"Do you wish to load a character" 3870 PRINT"from tape?"; 3880 W$=GET$:IF W$<>"Y" AND W$<>"N" PRINTCHR$11:GOTO3870 3890 IF W$="Y" PROCread_character 3900 ENDPROC 3910 DEFPROCread_keyboard 3920 *FX15,1 3930 key=GET 3940 PRINT CHR$(key) 3950 ENDPROC