1 REM Adapted from original program 2 REM by Roger Pashby 3 REM October 21st 1990 10 *TV255 20 MODE7 25 VDU 23;8202;0;0;0; 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''CHR$130"SUDDENLY!":PROCdelay(10):PRINT'CHR$130:PROCprint_monster:IF B$="a " OR B$="an " THEN PRINTCHR$130B$; 120 PRINTCHR$130;A$;CHR$130"arrives":R1=2:RM=1:PROCdelay(8):PROCoperate_cell(2) 130 V1=0:RM=0 140 UNTIL FALSE 150 DEFPROCpit 160 H=RND(12) 170 PRINT'CHR$130"You fell down a ";H*10;" foot pit" 180 PRINTCHR$130"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 PRINTCHR$130"At the bottom there";:H1=H1-D1 220 R=RND(3) 230 IF R=1 PRINTCHR$130"is a pool of acid"'CHR$130"you take ";:D1=RND(8):PRINT;D1;" hps of damage":GOTO200 240 IF R=2 PRINTCHR$130"are some spikes":R=RND(8):PRINTCHR$130;R;" of which you hit":D1=R*RND(4):PRINTCHR$130"doing ";D1;" hps damage":GOTO200 250 PROCmonster:PROCprint_monster:PROCsuper_monsters:PRINTCHR$130"was"'CHR$130B$;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 rating now is "'CHR$135;CHR$157;CHR$133;CHR$141;"Your rating now is "'CHR$135;CHR$157:GOSUB721:GOTO730 721 FORN=0TO1:PRINTCHR$135;CHR$157;CHR$133;CHR$141; 722 IF INT(SC)<1000 PRINT"Slasher" 723 IF INT(SC)>1000 AND INT(SC)<2000 THEN PRINT"Warrior" 724 IF INT(SC)>2000 AND INT(SC)<4000 THEN PRINT"Champion" 725 IF INT(SC)>4000 AND INT(SC)<8000 THEN PRINT"Lord" 726 IF INT(SC)>8000 AND INT(SC)<16000 THEN PRINT"Warlord" 727 IF INT(SC)>16000 AND INT(SC)<32000 THEN PRINT"Dragonslayer" 728 IF INT(SC)>32000 THEN PRINT"Ultimate Warrior" 729 NEXTN:RETURN 730 PROCstatus_2:ENDPROC 740 DEFPROCoptions 750 PRINT''CHR$130;SPC(4);"LEFT";SPC(7);"FORWARDS";SPC(6)"RIGHT" 760 FOR D1=1TO3 770 PRINTSPC(1); 780 IF A(D1)=1 PRINTCHR$129;" Corridor "; 790 IF A(D1)=2 PRINTCHR$129;" Door "; 800 IF A(D1)=3 PRINTCHR$129;"Blank wall "; 810 IF A(D1)=4 PRINTCHR$129;" Room "; 820 IF A(D1)=5 PRINTCHR$129;" Stairs up "; 830 IF A(D1)=6 PRINTCHR$129;"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''CHR$130"Which 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''CHR$130"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'CHR$130"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 PRINTCHR$130"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 PRINTCHR$130'"...Chicken!":PROCoptions:GOTO890 1250 CLS:PRINT'CHR$136;CHR$131;SPC(5);"You can't move there dummy!" 1260 IF RND(6)=1 PROCoptions:GOTO890 1270 PRINT'CHR$130"But as you have a liking for walls...." 1280 PROCdelay(20) 1290 D1=RND(20) 1300 PRINTCHR$130"it fell over, causing you ";D1;" hps damage" 1310 H1=H1-D1 1320 PROCstatus_1:ENDPROC 1330 R1=A(D1+3) 1340 CLS:PRINT'CHR$130"The room"; 1350 IF R1=1 PRINTCHR$130"is empty":PROCdelay(8):ENDPROC 1360 PRINTCHR$130"contains "; 1370 IF R1=2 PROCprint_monster:PRINT;B$;A$; 1380 IF R1=3 PRINT"treasure"'CHR$130"and ";:PROCprint_monster:PRINT;B$;A$; 1390 IF R1=4 PRINT"treasure":T1=500:T=0 1400 PRINT'CHR$130"What now?"''CHR$130"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 PRINTCHR$130"The ";:PROCprint_monster:PRINT;A$;" has";CHR$129;D1;CHR$130;"hps":GOTO1400 1490 IF R1=4 PROCtreasure(1):ENDPROC 1500 IF SS=2 SS=0:PROCdelay(20):CLS 1510 CLS:PRINT''CHR$130"HIT POINTS:-";CHR$132;A$;CHR$129;D1'CHR$130"HIT POINTS:-";CHR$132"You";CHR$129;H1''CHR$130"Now what?"''CHR$130"C-combat, S-cast spell, 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 S1<1 PRINTCHR$130"Er..you don't seem to have any!"'CHR$130"You're going to have to"CHR$129"FIGHT!":PROCdelay(10) 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 PRINTCHR$130"TOUGH LUCK. It attacks you":PROCdelay(8):PROCcombat:ENDPROC 1600 IF RM=1 CLS:PRINT''CHR$130"With a burst 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 1745 H1=H1-RND(5) 1750 PRINT'CHR$130"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'CHR$130"lies dead on the floor":M1=M1+1:SC=SC+L1:PROCtreasure(2):ENDPROC 1810 IF D1>0 PRINT'CHR$130"is angry, so it advances";:PROCdelay(8) 1820 IF RND(6)<3 PRINT''CHR$129" ... and ATTACKS!!":PROCdelay(8):PROCcombat:ENDPROC 1830 V1=D1:F%=1:ENDPROC 1840 DEFPROCcombat 1850 CLS:PRINT'CHR$130"You had a terrific battle with";:PROCprint_monster:IF B$="a " OR B$="an " PRINT CHR$130"the" 1860 PRINTCHR$130;A$; 1870 IF V1<>0 D1=V1 1880 IF H1>D1 PRINTCHR$130"and you slew it!":PROCdelay(20):M1=M1+1:H1=H1-D1:SC=SC+L1:PROCtreasure(2):ENDPROC 1890 PRINTCHR$130"but it killed you"'CHR$130"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 disc"; 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 2035 CLS 2040 INPUT''"What is your name,"'"(maximum of 7 characters) "NM$ 2050 IF LEN(NM$)>7 PRINT:GOTO2040 2070 PRINT''CHR$130"Press any key when ready"'CHR$130"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 7 characters) ",NM$ 2150 IF LEN(NM$)>10 PRINT"too long...."'GOTO2130 2170 PRINT''CHR$130"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''CHR$130"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:PRINTCHR$130"Ok. Bye for now adventurer."'':END:ENDPROC 2280 DEFPROCtreasure(I%) 2290 ON I% GOTO 2300,2310 2300 IF T1=0 PRINTCHR$130"It was an illusion":PROCdelay(3):ENDPROC 2310 IF R1=2 PROCdelay(8):ENDPROC 2320 PRINT CHR$130"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 PRINTCHR$129;R;CHR$130"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(11) 2400 IF R=1 PRINTCHR$130"and a sword of strength":H1=H1+RND(120) 2410 IF R=2 PRINTCHR$130"and a shield":H1=H1+RND(120) 2420 IF R=3 PRINTCHR$130"and a suit of armour":H1=H1+RND(90) 2430 IF R=4 PRINTCHR$130"and a rune-covered scroll":S1=S1+RND(12) 2440 IF R=5 PRINTCHR$130"and some more spells":S1=S1+RND(8) 2450 IF R=6 PRINTCHR$130"and a potion of healing":H1=H1+RND(75) 2460 IF R=7 PRINTCHR$130"and a special artefact":H1=H1+RND(100):S1=S1+RND(12) 2470 IF R=8 PRINTCHR$130"and an amulet":PROCrandom 2480 IF R=9 PRINTCHR$130"and a magical ring":PROCrandom 2485 IF R=10 PRINTCHR$130"and a spear":H1=H1+RND(100) 2490 IF R=11 Z=RND(6)/2 2500 IF R=11 AND Z>J1 PRINTCHR$130"and a ";Z*25;"% luckstone" 2510 IF R=11 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(8) 3820 VDU23,0,11,255,0,0,0,0,0,0 3830 CLS 3840 ENDPROC 3850 DEFPROCload 3860 PRINT''CHR$130"Do you wish to load a character" 3870 PRINTCHR$130"from disc?"; 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