Velnor’s Lair is a text adventure set in the Goblin Labyrinth beneath Mount Elk. You begin by choosing a class (warrior, wizard or priest), arrive at the cave entrance with a torch, a tinderbox and a club, and work your way through the tunnels by typing commands. Along the way you fight or cast spells against demons, trolls, Medusa and finally the wizard Velnor, with your hit points and spell strength tracked as you go. A game in progress can be saved to tape and reloaded.
The title screen reads “VELNOR’S LAIR / Written by DEREK BREWSTER / © 1983 QUICKSILVA”. The short BASIC loader is the “VLOADER” routine whose REM lines credit S. S. Dosanj of Bitterne Software (25 November 1983), the same loader used by Quicksilva’s Aquaplane. The copy here came from one of Bob Swoger’s Larken disks, which held two versions of the game; the later one, used here, corrects a line of room text.
Program Analysis
Structure
The tape holds three parts: the loader VELNOR.B1, a loading screen (velnor.C$) and the game itself (velnor.B2), a BASIC program of about 38K. The loader shows the screen with LOAD "velnor.C$"SCREEN$ and then loads and runs the game. Room descriptions are handled by a long run of subroutines from line 9000 up, many of them sharing exit messages through GO SUB Q: PRINT U$;....
Notable Techniques
- Numeric constants are written as
VAL "..."(for exampleGO SUB VAL "6E3") to save memory. - The game state is saved as two CODE blocks:
SAVE "1"CODE VAL "61E2",VAL "44500"and a 180-byte block from 23552, reloaded with twoLOAD ""CODEstatements. - Directions out of a room are printed by shared subroutines, so many room lines are a single GO SUB and PRINT.
Potential Issues
- The loader’s lines 9000–9020 are a leftover helper that scans and patches the program in memory; they are not reached when the tape runs normally.
This copy came from a Larken disk and was converted to load from tape: the disk prefixes in the loader were removed, along with the disk save lines and the LOGICALL menu call, and the corrected game file was given the name the loader expects. It was tested in ZEsarUX: the class selection, the opening room and movement into the dark passage all work.
Source Code
; VELNOR.B1
10 REM program VLOADER
20 REM created 25TH NOVEMBER 1983
30 REM version 1.0
40 REM author S. S. DOSANJ (BITTERNE SOFTWARE)
50 REM
53 CLEAR 65535: REM
55 BORDER 0: INK 0: PAPER 0: CLS : REM
57 PRINT #0;AT 0,12; INK 7; FLASH 1;"LOADING"; FLASH 0; INK 0: REM
60 LOAD "velnor.C$"SCREEN$ : REM
100 PRINT AT 19,0;: REM
130 LOAD "velnor.B2": REM
140 STOP
9000 FOR F=(PEEK 23635+256*PEEK 23636) TO 9999999 STEP 2: BORDER 0: BORDER 2: REM
9005 IF PEEK F=88 AND PEEK (F-1)=88 THEN POKE F-1,16: BEEP .1,1: REM
9010 IF (PEEK F=88 AND PEEK (F+1)=88) THEN POKE F,16: BEEP .1,0: REM
9015 IF PEEK F=96 AND PEEK (F+1)=96 THEN STOP : REM
9017 IF PEEK F=88 AND PEEK (F-1)=88 THEN POKE F-1,16: BEEP .1,1: REM
9020 NEXT F: REM
9992 REM removed (LKDOS-only)
9998 REM removed (LKDOS-only)
9999 REM ````````
; velnor.B2
5 GO SUB VAL "6E3"
10 LET Z=VAL "7030": LET Z1=Z
20 GO SUB VAL "3E3"
80 IF HP<=O THEN GO TO VAL "103"
81 IF X=TT AND M(TT)=NM AND NM=O THEN GO TO VAL "6080"
85 INK O: PRINT : GO SUB Z
90 PRINT : GO SUB VAL "555"
95 LET Z1=Z
100 IF O(FT)>O THEN GO SUB VAL "4800"
101 LET HP=HP-B
103 IF K AND A+HP/IHP*SE<=K THEN LET K=K-A: BEEP A,K: BORDER K: IF K THEN GO TO VAL "103"
105 IF K=O THEN GO TO VAL "6100"
106 INK O: IF O(F)=A THEN GO SUB VAL "4500": LET Z1=Z: GO SUB Z: GO SUB VAL "555"
107 IF Z>VAL "9E3" AND M(TW) THEN GO SUB VAL "5400"
108 GO SUB VAL "6300"
112 IF SCREEN$ (A,O)=" " AND C THEN PRINT INK INT PI;AT A,INT PI;"SPELL STRENGTH ";M
113 INPUT "WHAT WILL YOU DO NOW ? "' LINE I$: CLS : POKE V,O
114 PRINT I$: PRINT AT TU,O
115 FOR N=A TO LEN I$
120 IF I$(N)=" " THEN GO TO VAL "140"
125 LET N$=""
130 NEXT N: LET V$=I$: GO TO VAL "155"
140 LET V$=I$( TO N-A)
150 LET N$=I$(N+A TO )
155 GO SUB VAL "180"
160 IF NM AND NOT CH THEN GO SUB VAL "5700"
165 IF MOVE THEN GO TO CODE "d"
170 GO TO CODE "P"
182 IF I$="RUN" THEN PRINT AT TU,O;"IN WHICH DIRECTION ?": INPUT "DIRECTION ? "; LINE V$
183 IF V$="RUN" THEN LET V$=N$: LET N$=""
185 LET MOVE=O: IF N$<>"" THEN GO SUB VAL "1E3": LET CH=O: RETURN
190 GO SUB CODE ">=": IF Z<>Z1 THEN GO SUB VAL "500": RETURN
195 LET CH=O: GO SUB VAL "250": RETURN
210 IF V$="N" OR V$="NORTH" THEN LET z=z1+CODE "_"
220 IF V$="S" OR V$="SOUTH" THEN LET z=z1-CODE "_"
230 IF V$="E" OR V$="EAST" THEN LET Z=Z1+FV
240 IF V$="W" OR V$="WEST" THEN LET Z=Z1-FV
243 IF V$="U" OR V$="UP" THEN GO SUB VAL "400"
245 IF V$="D" OR V$="DOWN" THEN GO SUB VAL "420"
249 RETURN
254 IF V$="SAVE" THEN SAVE "1"CODE VAL "61E2",VAL "44500": SAVE "2"CODE VAL "23552",VAL "180": RETURN
255 IF V$="LEAVE" THEN GO TO VAL "1750"
256 IF V$="LOAD" THEN PRINT #O;TAB 5;"PLEASE START THE TAPE": LOAD ""CODE : LOAD ""CODE : RETURN
260 IF V$="F" OR V$="FIGHT" OR V$="KILL" THEN GO TO VAL "5500"
270 IF V$="HELP" THEN PRINT "SORRY, I CAN'T HELP YOU."': RETURN
280 IF LEN V$>TU THEN IF V$( TO INT PI)="INV" THEN GO TO VAL "440"
300 IF V$="TIAMAT" THEN GO TO VAL "460"
305 IF V$=X$ THEN GO TO VAL "380"
310 IF V$="EXTENDERE" THEN GO TO VAL "480"
312 LET V$=V$+" "
315 FOR N=A TO SI: IF V$( TO FV)=P$(N) THEN LET N$=V$: GO TO VAL "2250"+N*CODE "2"
318 NEXT N
340 PRINT "PARDON ?": RETURN
380 IF Z=VAL "7715" THEN LET Z=VAL "7725": RETURN
390 IF Z=VAL "7725" THEN LET Z=VAL "7715": RETURN
395 PRINT "NOTHING HAPPENS": RETURN
401 IF Z=VAL "8780" THEN LET Z=VAL "8770": RETURN
403 IF Z=VAL "9315" AND NOT Z(VAL "10") THEN LET Z=VAL "8575": RETURN
410 LET Z=VAL "8E3": RETURN
420 IF Z=VAL "8770" THEN LET Z=VAL "8780": RETURN
425 IF O(VAL "20") AND Z=VAL "8575" THEN LET Z=VAL "9315": RETURN
430 GO TO VAL "410"
445 LET NO=A: PRINT "YOU ARE CARRYING :"'
450 FOR N=A TO PO: IF NOT Z(N) THEN PRINT T$(N): LET NO=O
455 NEXT N: IF NO THEN PRINT "NOTHING"
458 RETURN
460 IF Z(J) OR (Z<>VAL "8270" AND Z<>VAL "8280") THEN PRINT "NOTHING HAPPENS.": RETURN
462 IF O(TE) THEN PRINT "THE BRIDGE ACROSS THE CHASM HAS VANISHED.": LET O(TE)=O: RETURN
465 PRINT "A BRIDGE NOW SPANS THE CHASM.": LET O(TE)=A: RETURN
480 IF Z(EL) THEN PRINT "NOTHING HAPPENS": RETURN
482 IF T(EL)=EI THEN LET T(EL)=VAL "22": LET T$(EL)=A$(INT PI): PRINT "THE PLANK HAS SHRUNK TO ";A$(INT PI): RETURN
485 LET T(EL)=EI: LET T$(EL)=A$(F): PRINT "THE";A$(INT PI,TU TO );" HAS EXPANDED TO ";A$(F): RETURN
510 IF NM THEN GO SUB VAL "5150": PRINT AT F,O: IF MON THEN RETURN
530 LET MOVE=A: GO SUB Z
535 IF CHR$ CODE V$="U" AND Z1=VAL "9315" AND Z=VAL "8E3" THEN PRINT "YOU CAN'T CLIMB UP.": LET Z=Z1: GO SUB Z
540 IF SCREEN$ (INT PI,O)=" " THEN PRINT "THERE IS NO WAY TO GO IN THAT DIRECTION."': LET Z=Z1: GO SUB Z
545 LET Z1=Z
558 INK F: LET NO=A
560 FOR N=A TO PO
570 IF Z=Z(N) THEN GO TO VAL "600"
580 NEXT N
590 PRINT : INK O: RETURN
600 IF NO THEN PRINT '"THERE IS ALSO :"'
605 LET NO=O: IF N>A THEN IF T$(N)=T$(N-A) AND Z(N)=Z(N-A) THEN PRINT "ANOTHER";T$(N,TU TO ): GO TO VAL "580"
610 PRINT " ";T$(N)
615 IF O(VAL "23")=N AND Z(FT)=-A THEN PRINT "THE ";T$(FT)'"IS LOOSE."
620 GO TO VAL "580"
1000 IF V$="SAY" THEN LET V$=N$: GO TO VAL "300"
1001 IF V$="SHAKE" THEN GO TO VAL "1950"
1002 IF V$="CLEAN" THEN PRINT "HOW ?": RETURN
1003 IF V$="F" OR V$="FIGHT" OR V$="KILL" THEN GO TO VAL "5500"
1004 IF V$="GET" THEN GO TO 1100
1005 LET v$=v$+" "
1010 FOR n=A TO VAL "17"
1020 IF V$( TO INT PI)=E$(n) THEN GO TO VAL "1050"+VAL "50"*n
1030 NEXT n
1040 IF V$( TO INT PI)="USE" THEN GO TO VAL "2E3"
1090 PRINT "PARDON ?": RETURN
1101 LET QQ=O: FOR N=A TO PO: IF Z(N)=O THEN LET QQ=QQ+A
1102 NEXT N
1103 IF QQ>=TE THEN PRINT "YOU CAN'T CARRY ANY MORE. YOU'LLHAVE TO DROP SOMETHING.": RETURN
1105 IF N$="STAKE" AND Z(F)=-SGN PI AND (Z=VAL "7850" OR Z=VAL "7755") THEN LET Z(F)=SIN PI: PRINT "O.K. THE DOOR HAS SLAMMED SHUT.": LET O(INT PI)=A: RETURN
1106 IF O(VAL "23") THEN IF (N$="SKIN" OR N$="ZALROG SKIN") AND Z=Z(O(VAL "23")) AND Z(FT)=-SGN PI THEN LET Z(FT)=O: PRINT "O.K. BUT, WHAT WILL YOU DO WITH IT ?": RETURN
1108 LET N$=N$+" "
1109 IF N$( TO F)="DRAG" THEN LET N$="STAT"
1110 FOR N=A TO PO
1114 IF Z=Z(N) AND N$( TO F)=T$(N,T(N) TO T(N)+INT PI) THEN GO TO VAL "1120"
1115 NEXT N
1118 PRINT G$: RETURN
1120 LET Z(N)=O: PRINT AT TU,TU;"O.K.": RETURN
1152 LET N$=N$+" "
1155 FOR N=A TO PO
1160 IF N$( TO F)=T$(N,T(N) TO T(N)+INT PI) THEN GO TO VAL "1180"
1165 NEXT N
1170 PRINT "DROP WHAT ?": RETURN
1180 IF Z(N)=O THEN PRINT AT TU,TU;"O.K.": LET Z(N)=Z: RETURN
1185 IF N<VAL "30" THEN PRINT "YOU HAVE NO ";N$: RETURN
1190 GO TO VAL "1165"
1205 IF N$<>"TORCH" THEN PRINT "LIGHT WHAT ?": RETURN
1210 IF Z(TU) THEN PRINT "YOU HAVE NO TORCH.": RETURN
1215 IF Z(TU)=SE THEN PRINT "THE TORCH IS ALREADY LIT.": RETURN
1220 IF Z(VAL "28") THEN PRINT "YOU HAVE NOTHING TO LIGHT IT WITH.": RETURN
1225 LET T$(TU)=A$(TU): LET T(TU)=SE: PRINT "THE TORCH IS NOW LIT.": RETURN
1255 IF N$<>"BRIDGE" THEN GO TO VAL "1275"
1260 IF Z=VAL "7205" OR Z=VAL "7215" THEN PRINT "THE BRIDGE IS AN ILLUSION, YOU HAVE FALLEN 1000 FT TO YOUR DEATH.": LET HP=-SGN PI: RETURN
1262 IF NOT O(TE) THEN GO TO VAL "1275"
1265 IF Z=VAL "8270" THEN LET Z=VAL "8280": LET Z1=Z: RETURN
1270 IF Z=VAL "8280" THEN LET Z=VAL "8270": LET Z1=Z: RETURN
1275 IF N$<>"PLANK" THEN GO TO VAL "1292"
1278 IF T(EL)<>EI THEN PRINT "I SEE NO PLANK": RETURN
1285 IF Z=VAL "7205" THEN LET Z=VAL "7215": LET Z1=Z: RETURN
1290 IF Z=VAL "7215" THEN LET Z=VAL "7205": LET Z1=Z: RETURN
1292 IF N$="RIVER" OR N$="SWAMP" OR N$="CHASM" THEN PRINT '"HOW ?": RETURN
1295 PRINT G$: RETURN
1305 IF N$<>"TORCH" THEN PRINT V$;" WHAT ?": RETURN
1310 IF Z(TU) THEN PRINT "YOU HAVE NO TORCH.": RETURN
1320 LET T$(TU)=A$(A): LET T(TU)=INT PI: PRINT "THE TORCH IS NOW OUT."'"YOU CAN SEE BY THE LIGHT OF THE GLOWING SWORD." AND NOT Z(VAL "16")'
1330 RETURN
1351 LET I$=N$+" ": LET I$=I$( TO INT PI)
1355 IF I$="CAV" AND Z=VAL "7030" THEN LET Z=VAL "7125": RETURN
1357 IF I$="BAT" THEN GO TO VAL "2070"
1359 IF I$="RIV" THEN PRINT "WITH THE CROCODILES, NO WAY !": RETURN
1360 IF I$<>"POO" AND I$<>"WAT" THEN PRINT G$: RETURN
1362 IF Z<>VAL "7630" THEN GO TO VAL "1380"
1364 PRINT "IT'S VERY REFRESHING."
1366 IF HP<IHP THEN LET B=O: LET HP=IHP: PRINT "ALL OF YOUR WOUNDS HAVE BEEN HEALED. MAGIC !": LET K=SE: LET B=O: FOR N=A TO FV: BEEP N/TE,N/INT PI: NEXT N: BORDER K
1368 RETURN
1380 IF NOT O(Y) AND Z=VAL "8735" THEN PRINT "NO WAY, I'VE NO INTENTION OF BECOMING FISH FOOD !": RETURN
1382 IF Z=VAL "8735" THEN PRINT "O.K.": LET Z=VAL "8920": RETURN
1385 IF Z=VAL "8745" THEN PRINT "O.K.": LET Z=VAL "8925": RETURN
1390 PRINT "I SEE NO ";N$;" !": RETURN
1400 LET N$=N$+" ": IF N$( TO F)<>"ROCK" OR Z<>VAL "7945" THEN GO TO VAL "1410"
1401 IF O(FV) THEN PRINT "THE PASSAGE IS ALREADY CLEAR.": RETURN
1403 IF K<SI THEN PRINT "YOU DON'T HAVE THE STRENGTH TO MOVE THEM.": RETURN
1405 PRINT "YOU HAVE CLEARED THE PASSAGE.": LET O(FV)=A: RETURN
1420 IF N$( TO F)="TAPE" AND Z=VAL "7575" THEN LET O(NI)=INT PI: PRINT "YOU HAVE DISCOVERED A SECRET PASSAGE EAST": RETURN
1449 PRINT G$: RETURN
1455 IF T(TU)=INT PI THEN PRINT "YOUR TORCH ISN'T LIT.": RETURN
1460 IF Z(TU) THEN PRINT "WHAT WITH ?": RETURN
1465 IF N$<>"WEB" AND N$<>"SPIDER" AND N$<>"WEBS" THEN GO TO VAL "1480"
1470 IF (Z=VAL "7220" OR Z=VAL "7030") AND M(A)=A THEN PRINT "THE WEB BURNS IN SHEETS OF"'"FLAMES, A SMOULDERING,DEAD,GIANTSPIDER FALLS FROM THE ROOF.": LET X=A: LET M$="GIANT SPIDER": GO SUB MO: GO SUB VAL "4100": RETURN
1475 IF Z=VAL "7125" THEN PRINT "DON'T BE SILLY YOU'LL BE BURNED TO A CRISP !": RETURN
1480 IF N$="MUM" THEN GO TO VAL "2020"
1485 IF NM AND X=TE THEN LET NM=O: PRINT "THE INFLAMMABLE MUMMIES HAVE"'"BEEN BURNED TO SMOULDERING ASHES": RETURN
1499 PRINT G$: RETURN
1501 IF N$<>"DOOR" THEN PRINT "YOU CAN'T.": RETURN
1505 IF Z<>VAL "7645" AND Z<>VAL "7650" THEN GO TO VAL "1520"
1507 IF O(SI)=TU THEN PRINT "THE DOOR IS ALREADY OPEN."
1510 IF O(SI)=A THEN PRINT "O.K.": LET O(SI)=TU
1515 IF NOT O(SI) THEN PRINT "YOU CAN'T, THE DOOR IS LOCKED."
1518 RETURN
1520 IF Z<>VAL "7755" AND Z<>VAL "7850" THEN GO TO VAL "1530"
1523 IF O(INT PI) THEN PRINT "THE DOOR HAS LOCKED ITSELF AND THERE IS NO WAY OF OPENING IT. I'M AFRAID YOU ARE LOCKED ";: IF Z=VAL "7755" THEN PRINT "OUT.": RETURN
1525 PRINT "IN": RETURN
1549 PRINT "I SEE NO DOOR !": RETURN
1552 LET N$=N$+" "
1555 IF N$( TO INT PI)<>T$(TS,T(TS) TO T(TS)+TU) THEN GO TO VAL "1570"
1560 IF Z(TS)=O THEN PRINT "THEY WERE DELICIOUS.": LET Z(TS)=SGN PI: RETURN
1565 PRINT "YOU HAVE NO APPLES !": RETURN
1570 IF N$( TO INT PI)<>T$(INT PI,T(INT PI) TO T(INT PI)+TU) THEN PRINT "DON'T BE SILLY !": RETURN
1575 IF Z(INT PI)=O THEN PRINT "O.K. BUT DON'T COME NEAR ME !": LET Z(INT PI)=A: RETURN
1580 PRINT "YOU HAVE NO GARLIC": RETURN
1602 LET I$=N$+" ": LET I$=I$( TO F)
1605 IF I$="STAT" AND (Z=VAL "8330" OR Z=VAL "8235") THEN PRINT "THEY ARE SO REALISTIC THEY COULDALMOST BE HUMAN !": RETURN
1607 IF I$="STAT" AND (NOT Z(J) OR Z(J)=Z) THEN PRINT "INSCRIBED ON IT IS THE VERSE :": PRINT : PRINT " I STAND HERE IN SOLID STATE,": PRINT " MY PRESENCE HERE DECIDES YOUR FATE,": PRINT " I SPAN FROM A TO B,": PRINT " BUT, FIRST YOU MUST FIND THE KEY.": RETURN
1610 IF ((I$="WARR" OR I$="BODY") AND Z=VAL "8225") OR ((I$="WIZA" OR I$="BODY") AND Z=VAL "7840") THEN PRINT "YES, HE IS QUITE DEAD !": RETURN
1615 IF I$="TAPE" AND Z=VAL "7575" THEN PRINT "THE TAPESTRY IS OLD AND"'"WORTHLESS,BUT,IT WAS HIDING A SECRET PASSAGE TO THE EAST.": LET O(NI)=SGN PI: RETURN
1620 IF (I$="WOOD" OR I$="PLAK") AND (Z=Z(EL) OR NOT Z(EL)) THEN PRINT "BURNED INTO IT IS THE WORD 'EXTENDERE'": RETURN
1630 IF I$="DRAW" AND Z=VAL "7505" THEN PRINT "THE DRAWINGS DEPICT ORCS"'"FIGHTING WITH AND BURNING"'"ANIMATED MUMMIES.": RETURN
1635 IF I$="ROCK" AND Z=VAL "7945" AND NOT O(FV) THEN PRINT "THE ROCKS COULD POSSIBLY BE"'"MOVED.": RETURN
1649 GO TO VAL "2900"
1655 IF (N$<>"BODY" AND N$<>"WARRIOR") OR Z<>VAL "8225" THEN GO TO VAL "1665"
1657 IF Z(INT PI)=-A THEN PRINT "YOU HAVE FOUND SOME GARLIC.": LET Z(INT PI)=Z: RETURN
1660 PRINT "YOU FIND NOTHING OF INTEREST.": RETURN
1665 IF Z<>VAL "7840" OR (N$<>"BODY" AND N$<>"WIZARD") THEN GO TO VAL "1675"
1667 IF Z(TT)=-A THEN LET Z(TT)=Z: PRINT "YOU HAVE FOUND ";T$(TT): RETURN
1670 GO TO VAL "1660"
1699 GO TO VAL "2900"
1702 LET V$=N$+" "
1705 IF V$( TO INT PI)<>"CRO" THEN GO TO VAL "1720"
1707 IF Z<>VAL "8075" AND Z<>VAL "8165" THEN PRINT "I SEE NO ";V$: RETURN
1710 GO SUB VAL "2850"
1712 IF N>PO THEN RETURN
1714 IF N<VAL "31" THEN PRINT "THE ";I$;" SINKS TO THE BOTTOM": PRINT "OF THE RIVER AND IS IGNORED BY THE CROCODILES.": LET Z(N)=SGN PI: RETURN
1718 PRINT "THE CROCODILES EAGERLY DEVOUR THE ";T$(N,INT PI TO ): LET Z(N)=A: LET O(SE)=A: RETURN
1720 IF N$( TO INT PI)<>"SHA" THEN GO TO VAL "1730"
1722 IF Z<>VAL "8735" THEN PRINT "I SEE NO SHARKS !": RETURN
1724 GO SUB VAL "2850"
1726 IF N>PO THEN RETURN
1727 PRINT "THE SHARKS IGNORE THE ";I$;"."'"THEY PREFER LIVE FOOD !" AND N>VAL "31"
1729 RETURN
1730 IF V$( TO INT PI)<>"RAT" THEN PRINT G$: RETURN
1732 IF (Z<>VAL "7190" AND Z<>VAL "7195") OR O(EI)=TU THEN PRINT "I SEE NO RATS": RETURN
1733 GO SUB VAL "2850"
1734 IF N=TS THEN PRINT "THE RATS EAGERLY DEVOUR THE"'"APPLES.": LET O(EI)=A: LET Z(TS)=A: RETURN
1735 IF N>PO THEN RETURN
1736 PRINT "THE RATS IGNORE THE ";I$;".": RETURN
1752 LET I$=N$+" ": LET I$=I$( TO INT PI)
1754 IF I$<>"WAT" AND I$<>"POO" THEN PRINT "I DON'T UNDERSTAND !": RETURN
1756 IF Z=VAL "8920" THEN LET Z=VAL "8735": PRINT "O.K": RETURN
1758 IF Z=VAL "8925" THEN LET Z=VAL "8745": PRINT "O.K.": RETURN
1760 IF Z=VAL "7630" THEN PRINT "O.K.": RETURN
1762 PRINT "YOU'RE NOT IN ANY ";N$: RETURN
1800 GO TO VAL "2E3"
1865 IF Z=VAL "7715" THEN GO TO VAL "2985"
1870 PRINT G$: RETURN
1910 IF Z(FT) OR (N$<>"ZALROG SKIN" AND N$<>"SKIN") THEN PRINT G$: RETURN
1920 IF Z<>VAL "8745" AND Z<>VAL "8735" AND Z<>VAL "8920" AND Z<>VAL "8925" AND Z<>VAL "8165" AND (Z>VAL "8090" OR Z<VAL "8100") AND Z<>VAL "7630" THEN PRINT "THERE IS NO WATER AVAILABLE.": RETURN
1930 PRINT "THE ZALROG SKIN IS NOW INVISIBLE.": LET T$(FT)=A$(SI): LET T(FT)=VAL "18": LET Z(NI)=-TU: RETURN
1950 IF N$<>"SKIN" AND N$<>"ZALROG SKIN" THEN PRINT G$: RETURN
1955 IF Z(FT) THEN PRINT "YOU HAVE NO ";N$: RETURN
1960 GO TO VAL "1930"
2001 LET N$=N$+" "
2002 FOR N=A TO SI: IF N$( TO FV)=P$(N) THEN GO TO VAL "2250"+N*VAL "50"
2003 NEXT N
2004 FOR N=A TO VAL "29": IF N$( TO F)=T$(N,T(N) TO T(N)+INT PI) THEN GO TO VAL "2007"
2005 NEXT N
2006 PRINT G$: RETURN
2007 IF Z(N)<>O THEN PRINT "YOU HAVE NO ";N$: RETURN
2008 GO TO N*TE+VAL "2E3"
2010 PRINT "O.K.": IF Z>VAL "7219" AND Z<VAL "7345" THEN LET O(TT)=A
2015 RETURN
2020 IF T(TU)=INT PI THEN PRINT "IT'S NOT LIT.": RETURN
2023 IF Z=VAL "8785" THEN LET NM=O: PRINT "THE INFLAMMABLE MUMMIES HAVE"'"BEENREDUCED TO SMOULDERING"'"ASHES.": RETURN
2025 PRINT "I THOUGHT YOU WERE !": RETURN
2030 IF Z=VAL "8790" THEN PRINT "THE VAMPIRE LAUGHS - YOU FOOL THAT'S ONLY AN OLD WIVES TALE.": RETURN
2035 GO TO VAL "2006"
2040 IF Z=VAL "8790" AND O(VAL "18")=TU THEN PRINT "YOU CAN'T, IT'S TOO LATE.": RETURN
2042 IF Z=VAL "8790" THEN LET Z(F)=F: PRINT "YOU SLAY THE VAMPIRE AS HE STIRSIN HIS COFFIN.": GO TO VAL "4100"
2045 GO TO VAL "2006"
2050 IF Z=VAL "7715" THEN PRINT "THROUGH THE CRACK YOU CAN NOW MAKE OUT THE LETTERS '";X$;"' PAINTED ON THE OPPOSITE WALL": RETURN
2055 PRINT "O.K. BUT,IT'S NOT MUCH USE HERE.": RETURN
2060 PRINT "HOW VAIN !": RETURN
2070 IF O(FT)=TU OR NM THEN PRINT "YOU DON'T HAVE TIME.": RETURN
2071 IF Z(VAL "27") AND (Z=VAL "8075" OR Z=VAL "8165" OR Z=VAL "8440" OR Z=VAL "8725") THEN PRINT "YOU CAN'T, YOU DON'T HAVE ANY OARS.": RETURN
2072 IF Z=VAL "8075" AND NOT O(SE) THEN PRINT "IT'S FAR TOO DANGEROUS, YOU'LL BE EATEN BY THE HUNGRY"'"CROCODILES !": RETURN
2073 IF Z=VAL "8075" THEN PRINT "O.K.": LET Z=VAL "8165": RETURN
2074 IF Z=VAL "8165" THEN PRINT "O.K.": LET Z=VAL "8075": RETURN
2075 IF Z=VAL "8440" THEN PRINT "O.K.": LET Z=VAL "8725": RETURN
2077 IF Z=VAL "8725" THEN LET Z=VAL "8440": RETURN
2079 PRINT "-AND ABOUT TIME TOO !": RETURN
2080 IF Z<>VAL "7645" AND Z<>VAL "7650" THEN GO TO VAL "2006"
2083 IF O(SI) THEN PRINT "THE DOOR ISN'T LOCKED.": RETURN
2085 PRINT "THE DOOR IS NOW UNLOCKED.": LET O(SI)=A: RETURN
2091 IF NM=A AND X=TW THEN LET T$(FT)="FLOUR COVERED ZALROG SKIN": LET T(FT)=VAL "22": LET MAC=SI: LET Z(NI)=-SGN PI: PRINT "THE ZALROG IS NOW COVERED IN"'"FLOUR AND IS EASILY VISIBLE.": LET M$="FLOUR COVERED ZALROG": LET A(FT)=SI: RETURN
2093 PRINT G$: RETURN
2100 IF Z=VAL "9315" THEN LET Z=VAL "8575": PRINT "O.K.": RETURN
2102 IF Z=VAL "8575" THEN LET Z=VAL "9315": PRINT "O.K.": RETURN
2107 GO TO VAL "2093"
2110 IF T(N)=VAL "23" OR (Z<>VAL "8270" AND Z<>VAL "7205" AND Z<>VAL "7215") THEN GO TO VAL "2006"
2112 IF Z=VAL "8270" THEN PRINT "YOU CAN'T,THE CHASM IS TOO WIDE.": RETURN
2115 PRINT "A LARGE PLANK NOW SPANS THE"'"CREVASSE.": LET O(EL)=A: LET Z(EL)=-SGN PI: RETURN
2120 IF Z<>VAL "8735" OR O(TW) THEN PRINT G$: RETURN
2125 PRINT "THE SHARKS ARE NOW AS CALM AS DOLPHINS.": LET O(N)=A: RETURN
2130 LET WA=WA-A: PRINT "A GREY BEAM DARTS FORTH FROM THEWAND."
2131 GO SUB G
2132 IF NOT NM THEN PRINT "IT STRIKES THE WALL WITH NO"'"EFFECT.": GO TO VAL "2138"
2133 LET Z$="THE ": IF NM>A THEN LET Z$="A "
2134 IF X=TT THEN LET Z$=" "
2135 IF X=EL OR X=Y OR X=TT AND RND>A/TU THEN PRINT "IT STRIKES ";Z$;M$;" WITH NO"'"EFFECT.": GO TO VAL "2138"
2136 LET NM=NM-A: PRINT "IN A BLUE FLASH ";Z$;M$'"IS TURNED TO DUST."
2138 IF NOT WA THEN LET Z(TT)=TU: PRINT '"THE WAND DISINTEGRATES LEAVING ONLY FINE WHITE DUST.": RETURN
2139 RETURN
2140 IF Z(NI)=-A THEN PRINT "YOU ARE NOW WEARING A FLOUR"'"COVERED ZALROG SKIN.": RETURN
2141 PRINT "O.K. YOU ARE NOW INVISIBLE.": LET O(VAL "16")=A: RETURN
2150 PRINT "HOW ?": RETURN
2169 GO TO VAL "2190"
2170 PRINT "YOU ALREADY ARE.": RETURN
2190 PRINT "O.K.": RETURN
2289 PRINT "TO DO WHAT ?": RETURN
2305 IF C<>A THEN PRINT "YOU ARE A ";C$;" NOT A WIZARD,","YOU CAN'T USE THE ";N$,"SPELL": RETURN
2310 IF M<FV THEN PRINT "THE SPELL FAILS, YOU MAGIC STRENGTH IS TOO LOW.": RETURN
2312 IF NM THEN PRINT "YOU CAN'T CAST A FIREBALL DURINGCOMBAT.": RETURN
2315 LET M=M-FV: PRINT "IN WHAT DIRECTION ARE YOU": PRINT "CASTING THE SPELL (N,S,E OR W) ?"
2320 LET I$=INKEY$
2325 LET FI=Z+FV*(I$="E")-FV*(I$="W")+VAL "95"*(I$="N")-VAL "95"*(I$="S")
2330 IF Z=FI THEN GO TO VAL "2320"
2331 IF (Z=VAL "7190" OR Z=VAL "7195") AND O(EI)<>F THEN PAPER TU: CLS : PAUSE F*F: PAPER SE: CLS : PRINT "YOU HAVE KILLED THE RATS.": LET O(EI)=F: RETURN
2332 INK TU: PAPER TU: CLS : GO SUB FI: INK O: PAPER SE
2335 IF SCREEN$ (O,O)=" " THEN CLS : PRINT "YOUR FIREBALL STRIKES THE WALL RIGHT NEXT TO YOU, IN A BLINDINGFLASH YOU ARE INSTANTLY KILLED.": LET HP=O: RETURN
2338 CLS : PRINT AT TU,O
2340 IF NOT NM THEN PRINT "YOUR FIREBALL HAS HAD NO EFFECT.": RETURN
2341 IF X=TT AND RND>VAL ".3" THEN PRINT "VELNOR STEPS OUT FROM THE MIDST OF THE FLAMES, APPARENTLY"'"UNHARMED.": RETURN
2342 IF X=TT THEN LET NM=O: PRINT "YOUR FIREBALL HAS KILLED VELNOR.": RETURN
2343 LET I$="THE": LET S$="": IF NM>A THEN LET I$=STR$ (NM): LET S$="S"
2344 IF X>=TU AND X<=F THEN LET O(4)=TU
2345 PRINT "YOUR FIREBALL HAS KILLED ";I$,M$;S$: FOR N=A TO NM: GO SUB VAL "4100": NEXT N: RETURN
2355 IF C<>A THEN GO TO VAL "2305"
2360 IF M<INT PI THEN GO TO VAL "2310"
2365 LET M=M-INT PI: LET Z=VAL "7030": IF NM THEN LET M(X)=NM: LET NM=O
2370 RETURN
2402 IF O(F)=INT PI AND (Z=VAL "7360" OR Z=VAL "7645") THEN GO SUB MO: LET O(F)=TU
2405 IF C<>A THEN GO TO VAL "2305"
2410 IF M<A THEN GO TO VAL "2310"
2412 GO SUB G
2415 LET M=M-A: IF (X>NI AND X<TT) OR RND>A/TU OR NOT NM THEN GO TO VAL "2440"
2425 LET Z$="ONE ": IF NM=SGN PI THEN LET Z$="THE "
2427 IF X=NI+F THEN LET Z$="": IF RND>F/TE THEN GO TO VAL "2441"
2430 PRINT Z$;M$;" HAS BEEN": PRINT "POLYMORPHED INTO A SMALL FROG. IT HOPS AWAY.": LET NM=NM-A: RETURN
2441 PRINT "THE SPELL FAILS.": RETURN
2455 IF C<>TU THEN PRINT "YOU'RE A ";C$;" NOT A PRIEST","YOU CAN'T USE THE ";N$,"SPELL.": RETURN
2460 IF M<F THEN GO TO VAL "2310"
2465 IF HP=IHP THEN PRINT "YOU'RE NOT INJURED !": RETURN
2470 LET M=M-F: LET HP=IHP: PRINT "ALL OF YOUR WOUNDS HAVE NOW BEENHEALED.": BORDER SE: LET K=SE: RETURN
2505 IF C<>TU THEN GO TO VAL "2455"
2510 IF M<INT PI THEN GO TO VAL "2305"
2515 LET M=M-INT PI: PRINT "YOU ARE NOW PROTECTED BY A MAGICSHIELD.": LET IAC=F: RETURN
2555 IF C<>TU THEN GO TO VAL "2455"
2560 IF M<INT PI THEN GO TO VAL "2310"
2565 LET M=M-INT PI: IF NOT NM THEN GO TO VAL "2590"
2570 IF NOT NM THEN PRINT "I SEE NO UNDEAD!": RETURN
2571 IF X=TE THEN GO TO VAL "2575"
2572 IF X=EL THEN GO TO VAL "2590"
2573 PRINT "DON'T BE SILLY, ";M$;"S","ARE NOT UNDEAD !": RETURN
2575 LET M$="MUMMY": LET Z$=" IS": IF NM=TU THEN LET M$="MUMMIES": LET Z$=" ARE"
2585 PRINT "IN A FLASH AND THUNDERCLAP THE",M$;Z$;" DISPELLED TO THE","OUTER PLANE OF ABYSS.": LET NM=O: RETURN
2590 IF Z=VAL "8790" AND O(VAL "18")>O THEN LET NM=O: PRINT "WITH A FLASH AND PIERCING SCREEMTHE VAMPIRE IS DAMNED TO THE"'"OUTER PLANE OF HADES.": LET O(VAL "18")=O: RETURN
2595 PRINT "NOTHING HAPPENS.": RETURN
2855 PRINT "FEED ";N$;" WITH WHAT ?"
2860 INPUT "WHAT FOOD ? "; LINE I$: CLS : LET V$=I$+" "
2865 FOR N=A TO PO
2870 IF Z(N)=O AND V$( TO INT PI)=T$(N,T(N) TO T(N)+TU) THEN RETURN
2875 NEXT N
2880 PRINT "YOU HAVE NO ";I$;".": RETURN
2901 LET n$=N$+" ": LET N$=N$( TO F)
2903 IF N$<>"TWIG" AND N$<>"STRA" AND N$<>"GROU" AND N$<>"FLOO" THEN GO TO VAL "2907"
2905 IF Z=VAL "8575" THEN PRINT "YOU HAVE DISCOVERED A WELL"'"CONCEALED HOLE IN THE GROUND OPPOSITE THE SOUTH EXIT.": LET O(VAL "20")=SGN PI: RETURN
2907 IF GO THEN IF (N$="LEAD" OR N$="CHIE" OR N$="GOBL") AND (Z=Z(GO) OR NOT Z(GO)) AND Z(EI)=-A THEN LET Z(EI)=Z: PRINT "YOU HAVE FOUND ";T$(EI): RETURN
2935 IF N$<>"BRID" THEN GO TO VAL "2939"
2936 IF Z=VAL "7205" OR Z=VAL "7215" THEN PRINT "THE BRIDGE IS AN ILLUSION.": RETURN
2937 IF O(TE)=A AND (Z=VAL "8270" OR Z=VAL "8280") THEN PRINT "THE BRIDGE IS PERFECTLY SAFE.": RETURN
2938 PRINT "I SEE NO BRIDGE.": RETURN
2939 IF N$( TO INT PI)<>"WEB" AND N$<>"WALL" AND N$<>"ENTR" AND N$<>"PASS" AND N$<>"CAVE" AND N$<>"ROOF" THEN GO TO VAL "2960"
2940 IF (Z=VAL "7030" OR Z=VAL "7220") AND M(A) THEN PRINT "A GIANT SPIDER IS HANGING FROM THE ROOF JUST WAITING FOR A VICTIM.": RETURN
2955 IF Z=VAL "7655" THEN PRINT "THE TRAP IS A MERE ILLUSION.": RETURN
2957 IF Z=VAL "7725" THEN PRINT "THE SOUTH WALL IS AN ILLUSION.": RETURN
2958 IF Z=VAL "7630" THEN PRINT "THE NORTH WALL IS AN ILLUSION.": RETURN
2960 IF Z=VAL "7875" AND N$="MATT" AND Z(VAL "24")=-A THEN PRINT "YOU HAVE FOUND SOME RUBIES WHICHWERE CONCEALED IN A SLIT IN THE MATTRESS.": LET Z(VAL "24")=Z: RETURN
2965 IF Z=VAL "8735" AND N$="POOL" THEN PRINT "AN UNDERWATER PASSAGE LEADS EAST": RETURN
2970 IF (N$="MOUN" OR N$="FUNG") AND Z=VAL "7470" AND Z(VAL "23")=-A THEN PRINT "AMONGST THE VILE PILE OF ORGANICMATTER YOU FIND A PLATINUM"'"PENDANT AND ";T$(VAL "27"): LET Z(VAL "27")=Z: LET Z(VAL "23")=Z: RETURN
2975 IF N$="RAGS" AND (Z=VAL "7190" OR Z=VAL "7195") AND Z(FV)=-A THEN LET Z(FV)=Z: PRINT "YOU HAVE FOUND "'T$(FV): RETURN
2980 IF N$="SARC" AND Z=VAL "8785" THEN PRINT "YOU HAVE FOUND A PAINTING HIDDENIN A FALSE BACK OF ONE OF THE SARCOPHAGI.": LET Z(VAL "22")=Z: RETURN
2985 IF Z=VAL "7715" THEN PRINT "THE WRITING IS TOO FAR AWAY TO BE SEEN CLEARLY.": RETURN
2995 PRINT "YOU FIND NOTHING UNUSUAL.": RETURN
3110 CLS : PRINT AT FV,O;"WHICH CLASS DO YOU WISH TO BE ?"
3120 PRINT AT TE,TU;"CLASSES :";AT TE,J;"WARRIOR";AT TT,J;"WIZARD";AT VAL "16",J;"PRIEST"
3130 INPUT "CLASS ? "; LINE C$
3140 IF C$="WARRIOR" THEN LET C=O: LET IHP=VAL "60": LET ABO=F: LET IAC=INT PI: LET HE=INT PI: LET M=O: GO TO VAL "3180"
3150 IF C$="WIZARD" THEN LET C=A: LET ABO=INT PI: LET M=TE: LET IHP=VAL "40": LET IAC=SI: GO TO VAL "3180"
3160 IF C$="PRIEST" THEN LET C=TU: LET ABO=C: LET M=TE: LET IHP=VAL "50": LET IAC=FV: GO TO VAL "3180"
3170 PRINT AT VAL "19",O;"SORRY, I DON'T UNDERSTAND",C$,TAB TE: GO TO VAL "3130"
3180 CLS : LET HP=IHP: PRINT AT INT PI,O;"YOU ARE NOW A ";C$;"."
3190 PRINT ''" YOU ARRIVE AT THE CAVE"'"ENTRANCE CARRYING A TORCH, A"'"TINDERBOX AND A CLUB.": RETURN
3810 PRINT "YOU HEAR FOOTSTEPS AND A HISSINGSOUND FROM BEHIND YOU.": INPUT "WHAT WILL YOU DO NOW ?"' LINE N$: CLS : PRINT N$: PRINT AT TU,O
3815 IF LEN N$>TU THEN IF N$( TO INT PI)="INV" THEN GO SUB VAL "440": GO TO VAL "3810"
3820 IF LEN N$>=F THEN IF N$( TO F)="TELE" OR N$="USE TELEPORT" THEN GO SUB VAL "2350": IF Z=VAL "7030" THEN GO SUB Z: GO SUB VAL "555": RETURN
3830 IF N$<>"USE MIRROR" THEN GO TO VAL "3860"
3840 IF NOT Z(SI) THEN PRINT "YOU HAVE REFLECTED BACK MEDUSA'SGAZE AND TURNED HER TO STONE."'': LET O(TU)=A: GO TO Z
3850 PRINT "YOU HAVE NO MIRROR."
3860 PRINT "IT WAS MEDUSA, HER GAZE HAS"'"TURNED YOU TO STONE.": LET HP=O: RETURN
4005 FOR N=A TO INT PI: BEEP A/INT PI,O: BEEP A/INT PI,INT PI: BEEP A/INT PI,EI: NEXT N: BEEP A/TU,O
4010 LET MAC=A(X): LET MHP=H(X): LET DMHP=H(X): LET NM=M(X): LET M(X)=O: LET Z3=y(x): LET Z2=Z3
4015 IF X=Y THEN LET Z3=Z: LET Z2=Z
4020 LET Z$="ARE ": LET N$="S": LET V$="THEY": IF NM=A THEN LET Z$="IS ": LET N$="": LET V$="IT"
4025 IF X>TE OR X<SI THEN RETURN
4028 IF NM=TU AND X=TE THEN PRINT "YOU HAVE BEEN ATTACKED BY TWO ANIMATED MUMMIES.": RETURN
4030 PRINT : PRINT "THERE ";Z$;NM;" ";M$;N$;" HERE,"'V$;" ATTACK";"S" AND NM=A;".": RETURN
4050 LET Z$="": IF L>F/FV THEN LET Z$="SLIGHTLY"
4060 IF L<A/TU THEN LET Z$="SERIOUSLY"
4070 IF L<A/FV THEN LET Z$="CRITICALLY"
4080 RETURN
4102 IF x=Y THEN GO TO VAL "4120"
4105 LET PO=PO+A: IF X=FV THEN LET Z(VAL "16")=Z3
4107 IF X=F AND Z(VAL "18")=A THEN LET Z(VAL "18")=Z3: LET GO=PO
4110 LET NM=NM-A: LET T(PO)=EI: LET Z(PO)=Z2: LET T$(PO)="1 DEAD "+M$: RETURN
4120 LET PO=PO+A: LET NM=O: LET T$(PO)="A DEAD ZALROG": LET Z(PO)=Z: LET T(PO)=EI: LET O(VAL "23")=PO: RETURN
4310 LET HT=INT (RND*(TU+TE*(O(VAL "16")=A))): GO TO VAL "4320"+INT (RND*INT PI)*TE
4320 PRINT "VELNOR CASTS A LIGHTNING BOLT ATYOU.": IF HT THEN PRINT "IT MISSES, STRIKING THE WALL"'"WITH A DEAFENING EXPLOSION.": RETURN
4325 LET HP=O: PRINT "IT STRIKES YOU AND BURNS YOU TO A MASS OF SMOULDERING CHARCOAL.": RETURN
4330 PRINT "A GREY RAY SHOOTS FROM VELNOR'S SCEPTRE";: IF HT THEN PRINT " BUT, HARMLESSLY WHIZZES"'"PAST YOU.": RETURN
4335 PRINT " AND STRIKES YOU": IF M THEN LET M=O: PRINT "DRAINING YOUR SPELL STRENGTH.": RETURN
4338 PRINT "BUT, WITH NO EFFECT.": RETURN
4340 PRINT "VELNOR LASHES AT YOU WITH THE"'"SCEPTRE";: IF HT THEN PRINT ",BUT, MISSES.": RETURN
4345 PRINT " AND HITS.": LET HP=HP-VAL "20": IF HP>=O THEN PRINT '"YOUR LIFE ENERGY HAS BEEN"'"SEVERELY DRAINED.": RETURN
4348 PRINT "YOUR BODY HAS BEEN DESTROYED ANDYOUR SOUL DAMNED FOR EVERLASTINGTORMENT.": RETURN
4400 IF O(F)<>TU AND (Z=VAL "7360" OR Z=VAL "7645") THEN LET O(F)=TU: GO TO MO
4401 RETURN
4510 LET O(F)=TU: PRINT "HE CHALLENGES YOU - FRIEND OR FOE ?"
4520 INPUT "REPLY (FRIEND OR FOE?)"' LINE I$: CLS
4530 IF I$="FOE" THEN PRINT "THE GUARD ATTACKS.": GO SUB MO: RETURN
4540 IF I$<>"FRIEND" THEN PRINT "PARDON ?": GO TO VAL "4520"
4550 PRINT "ARE YOU A FRIEND OF THE WIZARD, VELNOR ?"
4560 INPUT "YES OR NO ?"' LINE I$: CLS
4570 IF I$="Y" OR I$="YES" THEN PRINT "GOBLIN GUARD - I THOUGHT SO ! WE HATE THAT VILE DEMON AND ALL HIS FRIENDS !"'"THE GOBLIN ATTACKS.": GO SUB MO: RETURN
4580 IF I$<>"N" AND I$<>"NO" THEN PRINT "PARDON ?": GO TO VAL "4560"
4590 PRINT "THE GOBLIN GUARD TAKES YOU NORTHTO HIS LEADER AND THEN RETURNS TO HIS POST."'''"GOBLIN LEADER - IT'S NOT OFTEN WE GET VISITORS, WOULD YOU LIKE TO STAY FOR LUNCH ?"
4595 LET O(F)=INT PI
4600 INPUT "YES OR NO ?"' LINE I$: CLS
4610 IF I$="NO" THEN PRINT "GOBLIN CHIEF - OH! THERE'S NOT MUCH POINT IN YOU STAYING THEN. HE TAKES YOU BACK TO THE GUARD ROOM.": LET Z=VAL "7360": RETURN
4620 IF I$<>"YES" THEN PRINT "PARDON ?": GO TO VAL "4600"
4630 PRINT "THE GOBLINS GIVE A HUGE FEAST INYOUR HONOUR, AS AN ENEMY OF"'"VELNOR."'" DURING THE FEAST YOU HEAR THAT IT'S RUMOURED THAT FOR VELNOR'S SERVICES TO EVIL, THE DEMONS"'"OFFERED TO MAKE HIM ANY BEAST OFHIS CHOICE TO GUARD HIM. IT'S"'"SAID THAT HE SCOURED THE BOOKS OF MYTH AND LEGEND FOR THE"'"PERFECT BEAST, BUT, NO ONE KNOWSWHAT HE CHOSE."
4640 PRINT " THE CHIEF TELLS YOU THAT THE"'"LAST ADVENTURERS TO VISIT THE CAVES THOUGHT THAT THE KEY TO VELNOR'S LAIR WAS TO THE EAST. THEY LEFT THAT WAY,BUT, TO THIS DAY THEY HAVE NOT RETURNED."
4650 PRINT '"DO YOU WISH TO LEAVE EAST OR WEST ?": INPUT "E OR W ? "; LINE V$
4655 IF v$="" THEN GO TO VAL "4680"
4660 IF V$(A)="E" THEN LET Z=VAL "7645": GO TO VAL "4690"
4670 IF V$(A)="W" THEN LET Z=VAL "7360": GO TO VAL "4690"
4680 PRINT "PARDON ?": GO TO VAL "4650"
4690 CLS : PRINT AT TU,O
4695 IF NOT O(SI) AND Z=VAL "7645" THEN LET O(SI)=A: PRINT "THE CHIEF COMMENTS THAT YOU ARE VERY BRAVE. HE SAYS HE'D BE"'"PETRIFIED GOING THROUGH THERE ! HE UNLOCKS THE DOOR FOR YOU."''
4700 IF Z(VAL "18")=A THEN LET Z(VAL "18")=Z: PRINT "THE CHIEF WISHES YOU LUCK AND LEAVES YOU A SHIELD."''
4705 RETURN
4720 IF RND>A/TU AND NOT Z(VAL "13") THEN PRINT "GOBLIN CHIEF - I SEE YOU'VE"'"FOUND A WAND OF DISINTEGRATION, IT'LL BE USEFUL, BUT,BEWARE,THE INVISIBLE ZALROG IS IMMUNE TO MAGIC !": GO TO NN
4730 IF RND>A/TU AND NOT Z(SE) THEN PRINT "GOBLIN CHIEF - THATS A LARGE"'"BATHTUB YOU'VE GOT, YOU COULD ALMOST USE IT AS A BOAT.": GO TO NN
4735 IF HP<>IHP AND RND>A/TU THEN PRINT "GOBLIN CHIEF - I SEE THAT YOU HAVE BEEN INJURED, I THINK THEREIS A MAGIC POOL SOMEWHERE THAT HEALS ALL WOUNDS.": GO TO NN
4740 PRINT "GOBLIN LEADER - YOU'D BETTER GETA MOVE ON.": GO TO NN
4810 IF O(FT)=A THEN LET Z2=Z : PRINT '"TWO CLUB WIELDING GIANTS ARE"'"CHARGING TOWARDS YOU FROM THE NORTH.": LET O(VAL "14")=TU: RETURN
4820 IF Z=VAL "8270" AND NOT O(VAL "10") THEN PRINT " THE GIANTS HAVE FALLEN TO THEIRDEATH INTO THE FIREY ABYSS.": LET O(VAL "14")=-SGN PI: RETURN
4840 IF Z>=Z2 THEN PRINT " YOU HAVE BEEN CAUGHT AND BEATEN TO AN AMORPHOUS PULP.": LET HP=O: RETURN
4845 IF Z=VAL "8270" THEN PRINT '"THE TWO HUGE CLUB WIELDING"'"GIANTS ARE NOW CROSSING THE"'"BRIDGE CLOSE BEHIND YOU.": RETURN
4850 PRINT '"YOU ARE BEING CHASED BY TWO"'"NASTY CLUB WIELDING GIANTS.": LET Z2=Z: RETURN
5160 IF NOT CH AND RND<A/TU THEN LET Z=Z1: PRINT "THERE ISN'T ROOM TO ESCAPE.": LET Z=Z1: RETURN
5170 IF CH AND RND>VAL ".8" THEN LET Z=Z1: LET Z2=Z: LET Z3=Z: PRINT "YOU HAVE BEEN CAUGHT.": PRINT : LET CH=O: RETURN
5180 LET P=X: INK SE: PRINT AT F,O: GO SUB Z: INK O: PRINT AT TU,O: IF SCREEN$ (FV,O)=" " THEN LET CH=O: RETURN
5190 IF P<>X THEN LET MON=A: PRINT "YOU HAVE RAN STRAIGHT INTO ";"A" AND NM=A;"SOME" AND NM<>A';M$;"S" AND NM<>A;". ";"THEY" AND NM>A;"IT" AND NM=A;" HAD SURPRISE"'"AND YOU DIDN'T STAND A CHANCE.": LET HP=O: RETURN
5200 IF CH AND Z=Z3 THEN PRINT "YOU HAVE RAN STRAIGHT INTO YOUR PURSUER. YOU DIDN'T STAND A CHANCE.": LET HP=O: LET MON=A: RETURN
5205 IF (Z=VAL "7650" AND X=EI) OR Z=VAL "7030" OR Z<>Y(X) AND RND>F/FV THEN PRINT "YOU HAVE ESCAPED. ": LET M(X)=NM: LET NM=O: LET CH=O: RETURN
5210 LET Z3=Z3: LET Z2=Z
5215 IF X=VAL "13" THEN PRINT "YOU ARE BEING PURSUED BY VELNOR.": RETURN
5220 LET CH=A: PRINT "YOU ARE BEING PURSUED BY ";NM'M$;"S" AND NM<>A: RETURN
5400 IF RND>VAL ".8" THEN PRINT '"YOU HEAR FOOTSTEPS BEHIND YOU.": LET X=TW: GO SUB MO: LET M$=("INVISIBLE" AND Z(NI)>=O)+("FLOUR COVERED" AND Z(NI)<O)+" ZALROG"
5405 RETURN
5501 GO SUB G
5502 IF Z=VAL "7195" OR Z=VAL "7190" THEN PRINT "YOU CAN'T, THEY ARE TOO QUICK AND THERE ARE TOO MANY OF THEM.": RETURN
5503 IF O(FT)>O OR Z=VAL "8330" THEN PRINT "I DON'T THINK THAT WAS A GOOD IDEA !": RETURN
5504 IF O(F)=INT PI AND (Z=VAL "7360" OR Z=VAL "7645") THEN GO SUB MO: LET O(F)=TU
5505 IF NM=O THEN PRINT "I SEE NOTHING TO FIGHT.": RETURN
5506 LET AB=ABO: LET DAM=O: IF NOT Z(VAL "19") THEN LET DAM=FV
5508 IF NOT Z(Y) THEN LET DAM=SI
5509 IF NOT Z(VAL "16") THEN LET AB=ABO+TU: LET DAM=TE
5510 IF NOT C THEN LET DAM=DAM+TU
5515 PRINT : IF RND*VAL "20">MAC+AB+SI THEN PRINT INK A;"YOU MISSED"': RETURN
5520 LET DMHP=DMHP-RND*DAM
5530 LET V$="ONE ": IF NM=A THEN LET V$="THE "
5535 IF X=TT THEN LET V$=""
5540 IF DMHP<O THEN PRINT INK A;"YOU HAVE KILLED "'V$;M$: GO SUB VAL "4100": LET DMHP=MHP: RETURN
5560 LET L=DMHP/MHP: GO SUB VAL "4040"
5570 PRINT INK A;"YOU HAVE HIT AND ";Z$'"INJURED ";V$;M$': RETURN
5701 IF Z2<>Z AND X=TT THEN LET Z2=Z: LET Z3=Z
5702 IF Z2<>Z THEN PRINT "YOU HAVE ESCAPED.": LET M(X)=NM: LET NM=O: LET CH=O: RETURN
5705 PRINT : INK TU: IF X=TT THEN GO SUB VAL "4300": RETURN
5715 LET AC=IAC-(F AND O(VAL "16"))-(A AND NOT Z(VAL "18"))-(INT PI AND NOT Z(VAL "17"))
5716 IF X<>EL THEN GO TO VAL "5720"
5717 IF O(VAL "18")=A THEN RETURN
5718 IF RND>A/TU THEN PRINT "THE VAMPIRE ATTEMPTS TO CHARM YOU BUT FAILS.": RETURN
5719 PRINT "YOU HAVE NOW FALLEN UNDER THE INFLUENCE OF THE VAMPIRES CHARM SPELL. HE WILL DRAIN YOUR BLOOD AT HIS LEISURE.": LET HP=O: RETURN
5720 FOR N=A TO NM
5730 IF RND*F*FV>MHP/TE+INT PI+AC THEN GO TO VAL "5790"
5735 IF X=A AND RND>F/SI THEN LET HP=O: PRINT "YOU HAVE BEEN INJECTED WITH A FATAL DOSE OF POISON.": RETURN
5740 PRINT : LET HP=HP-RND*EI
5750 LET L=HP/IHP: GO SUB VAL "4040"
5760 IF A+L*SI<K THEN LET K=K-A: BORDER K: IF K>O THEN GO TO VAL "5760"
5770 IF NOT K THEN PRINT "YOU HAVE BEEN KILLED.": RETURN
5780 FOR I=TE TO VAL "-20" STEP -FV: BEEP A/TE,I: NEXT I: PRINT "YOU HAVE BEEN HIT AND ";Z$: PRINT "WOUNDED"
5790 NEXT N
5794 IF X=TE AND NM=TU THEN PRINT "YOU ARE IN COMBAT WITH TWO"'"MUMMIES.": RETURN
5795 PRINT : PRINT "YOU ARE IN COMBAT WITH ": PRINT NM;" ";M$;"S" AND NM>A;".": RETURN
6000 LET Z=A: OVER O: PAPER SE: INK O: RANDOMIZE : BORDER SE: FLASH O: BRIGHT O
6001 CLS : PRINT AT F,FV; INK TU;"VELNOR'S LAIR";AT EI,SI;"Written by";AT TE,Y;"DEREK BREWSTER.": PRINT AT Y+INT PI,F;"PLEASE WAIT A MOMENT.";AT VAL "20",FV; INK A;"* 1983 QUICKSILVA"
6003 LET B=O: POKE VAL "23658",EI
6005 LET A(Y)=-TE: LET T=O: LET FI=O: LET MON=O: LET WA=INT PI: LET X$="": FOR N=A TO FV: LET X$=X$+CHR$ INT (RND*VAL "26"+CODE "A"): NEXT N
6008 LET MO=VAL "4E3":
6010 DIM O(VAL "23")
6030 FOR N=A TO TT: LET M(N)=PEEK (VAL "23296"+N): NEXT N: FOR N=A TO VAL "30": LET Z(N)=W(N): NEXT N: LET T(TU)=INT PI: LET T(EL)=VAL "23": LET T(FT)=VAL "22": LET T$(TU)=A$(A): LET T$(EL)=A$(INT PI): LET T$(FT)=A$(FV)
6031 LET X=O: LET CH=O: LET PO=VAL "30": LET K=SE: LET NM=O: LET AB=F: RETURN
6080 PRINT INK TU;"CONGRATULATIONS ON THE"'"SUCCESSFUL COMPLETION OF YOUR"'"QUEST."
6105 GO SUB VAL "6200"
6108 IF HP<=O THEN FOR N=A TO TU: BEEP A,O: BEEP A,TU: BEEP A/TU,INT PI: BEEP A/TU,TU: BEEP A,O: NEXT N
6110 PRINT #O;"PLAY AGAIN (Y OR N)?"
6120 IF INKEY$="Y" THEN GO TO 1
6130 IF INKEY$="N" THEN NEW
6140 GO TO VAL "6120"
6210 LET SC=O: FOR N=TU TO VAL "22": IF O(N) THEN LET SC=SC+F
6215 NEXT N
6220 FOR N=A TO VAL "28": IF Z(N)<>W(N) THEN LET SC=SC+TU
6225 NEXT N
6230 FOR N=SGN PI TO TT: IF NOT M(N) THEN LET SC=SC+INT PI
6235 NEXT N
6240 LET SC=SC+(VAL "20" AND O(F)=A)+(VAL "30" AND NOT M(TT))-(VAL "20" AND HP<=O): LET SC=SC AND SC>O
6250 PRINT INK TU'"YOU SCORED ";SC;" OUT OF A"'"POSSIBLE 200.": RETURN
6310 IF Z<=VAL "7030" OR ((Z=Z(TU) OR NOT Z(TU)) AND T(TU)<>INT PI) OR NOT Z(VAL "16") OR Z=Z(VAL "16") THEN GO TO VAL "6330"
6320 PAPER O: PRINT INK SE;AT O,O;"IT IS NOW PITCH BLACK, UNLESS YOU GET SOME LIGHT YOU ARE GOINGTO GET INTO TROUBLE.": RETURN
6330 IF ATTR (TU,TU)=O THEN PAPER SE: RANDOMIZE USR VAL "23310"
6340 RETURN
6500 LET BORD=SE: POKE VAL "23658",EI: GO SUB VAL "6035": GO TO VAL "80"
6935 PRINT "YOU DON'T WANT TO GO THAT WAY. IT'S THE WAY BACK TO THE VILLAGE."'': LET Z=Z1: GO TO Z
7029 RETURN
7030 PRINT F$;"FOOT OF MT ELK; TO YOUR NORTH A NARROW PASSAGE LEADS INTO THE MOUNTAIN SIDE."
7031 IF (z(TU) OR t(TU)=INT PI) AND Z(VAL "17") THEN PRINT "IT IS TOO DARK TO SEE ANYTHING. TO CONTINUE YOU HAD BETTER GET SOME LIGHT.": RETURN
7032 IF M(A) THEN PRINT "THE PASSAGE-WAY IS"'"CRISS-CROSSED AND BLOCKED WITH THICK YELLOW WEBS."
7124 RETURN
7125 GO SUB S: IF NOT NM AND M(A) THEN LET X=A: LET M$="GIANT SPIDER": PRINT '"YOU HAVE BEEN POUNCED UPON BY A",M$: GO TO MO
7189 RETURN
7190 PRINT F$;"WEST END OF A"'"DANK ACRID SMELLING CAVE.THERE ARE MANY BONES AND RAGS"'"SCATTERED ABOUT THE GROUND."'"EXIT N AND ";W$;"E."
7191 IF Z(VAL "26")=Z THEN LET N=VAL "26": GO TO VAL "1734"
7192 IF NOT O(EI) THEN LET B=B+A/TE: PRINT '"YOU HAVE BEEN ATTACKED AND"'"BITTEN BY VICIOUS HUNGRY RATS":
7194 RETURN
7195 PRINT F$;"EAST END OF A"'"DANK ACRID SMELLING CAVE.THERE ARE MANY BONES AND RAGS"'"SCATTERED ABOUT THE GROUND."'"EXIT E AND ";W$;"W."
7196 IF O(EI)=A THEN PRINT "THERE ARE A LOT OF CONTENTED"'"LOOKING RATS HERE.": RETURN
7197 IF Z(TS)=Z THEN LET N=TS: GO TO VAL "1734"
7198 IF NOT O(EI) THEN PRINT "MANY HUNGRY VICIOUS LOOKING RATSARE EYEING YOU INTENTLY.": RETURN
7199 RETURN
7200 GO TO E
7204 RETURN
7205 PRINT F$;"WEST END OF THE CAVERN OF CRACKS. A SMALL STONE BRIDGE SPANS A DEEP CREVASSE TO THE EAST. ";"A WOODEN PLANK ALSO SPANS THE CREVASSE. " AND O(EL)=A;"EXIT W."
7214 RETURN
7215 PRINT B$;"A LONG DUSTY CAVERN OF CRACKS. A DEEP CREVASSE RUNS ACROSS THE CENTRE OF THE CAVERN AND IS SPANNED BY A SMALL STONE BRIDGE. ";"A 25FT PLANK ALSO SPANS THE CREVASSE. " AND O(EL)=A;"EXIT E."
7219 RETURN
7220 PRINT B$;"A LARGE CAVERN WITH WALLS COVERED IN GREEN SLIME. THE FLOOR IS VERY SLIPPY. EXITS N,S,E AND W."
7224 RETURN
7245 PRINT "YOU ARE FIGHTING YOUR WAY","THROUGH THICK FUNGI GROWTHS."'"THE AIR IS FILLED WITH FUNGI"'"SPORES";: IF Z<>VAL "7225" AND (NOT O(TT) OR Z(A)) AND RND>VAL ".8" THEN LET HP=O: PRINT "; ON WHICH YOU HAVE"'"CHOKED TO DEATH.": RETURN
7247 IF Z(A) OR NOT O(TT) THEN PRINT ", ALMOST TO THE POINT"'"OF CHOKEING YOU.": RETURN
7248 PRINT "."
7284 RETURN
7285 GO SUB S
7286 IF M(FV) THEN PRINT '"YOU CAN SEE A ORC TO THE NORTH."
7314 RETURN
7315 GO TO S
7320 RETURN
7337 GO TO VAL "7245"
7342 GO SUB VAL "7245": PRINT "EXIT E."
7344 RETURN
7345 PRINT D$;"CRAWLING THROUGH A"'"NARROW MUDDY LOW ROOFED TUNNEL."'"THERE IS A GOBLIN IN THE CAVE TOTHE EAST." AND M(TU)
7349 RETURN
7350 LET Z=VAL "7360": GO TO Z
7354 RETURN
7355 LET Z=VAL "7345": GO TO Z
7359 RETURN
7360 PRINT B$;"THE GOBLINS GUARD ROOM. EXITS N AND W.": IF NOT m(TU) THEN RETURN
7361 PRINT "THERE IS A GOBLIN GUARD HERE."
7363 LET X=TU: LET M$="GOBLIN GUARD": IF NOT O(F) THEN LET O(F)=SGN PI
7364 IF FI=Y(X) OR O(F)=TU THEN PRINT "HE RUSHES TO ATTACK.": GO SUB MO: RETURN
7369 RETURN
7370 PRINT "THIS EMPTY CAVE HOLDS NOTHING BUT THE MEPHITIC STENCH OF THE AREA. IT MAKES YOU FEEL ILL."'"EXIT N."
7379 RETURN
7380 PRINT B$;"THE ORC GUARD ROOM."'"EXITS N AND S."
7381 IF NOT NM AND M(FV) THEN LET M$="ORC GUARD": LET X=FV: PRINT "A LARGE ";M$;" WIELDING A GLOWING SWORD IS RUSHING AT YOU.": GO TO MO
7409 RETURN
7410 GO TO S
7454 RETURN
7455 GO TO S
7464 RETURN
7465 PRINT B$;"A DIRTY SLIMY CAVE, THE AIR IS FILLED WITH A PUTRID SMELL OF DECAYING FLESH.EXITS N,S AND E."
7469 RETURN
7470 IF Z1=VAL "7475" THEN RETURN
7471 PRINT F$;"SOURCE OF THE"'"NAUSEATING STENCH. BONES AND"'"DECAYING FLESH LIE EVERYWHERE. A LARGE MOUND OF FUNGI DOMINATESONE CORNER OF THE CAVE. EXIT W."
7472 IF NOT NM AND M(EI) THEN LET M$="TROLL": LET X=EI: GO TO MO
7474 RETURN
7475 IF Z1=VAL "7470" THEN RETURN
7476 GO TO S
7504 RETURN
7505 PRINT B$;"THE SOUTH OF A LONG HIGH ROOFED CAVERN. THERE ARE PRIMITIVE DRAWINGS ON THE WALLS AND SCORCH MARKS ON THE FLOOR. EXIT S. ";W$;"N."
7544 RETURN
7545 PRINT B$;"THE GOBLIN CHIEF'S ROOM. EXIT E.": IF Z=VAL "7550" THEN LET O(F)=TU
7546 IF O(F)=INT PI THEN GO SUB VAL "4720": GO TO Z
7547 IF M(F) THEN LET M$="GOBLIN CHIEF": PRINT "THE ";M$;" IS HERE.": LET X=F: IF O(F)=TU OR FI=Y(X) THEN PRINT "HE RUSHES TO ATTACK.": GO SUB MO: RETURN
7549 RETURN
7550 PRINT F$;"END OF A N/S PASSAGE. THERE ARE ROOMS TO THE NORTH AND WEST."
7559 RETURN
7560 GO SUB S: PRINT "AN ACRID SMELL DRIFTS UP FROM THE SOUTH."
7569 RETURN
7570 PRINT F$;"END OF A N/S PASSAGE. THERE ARE CAVES TO THE NORTH AND EAST."
7574 RETURN
7575 PRINT B$;"THE ORC CHIEF'S ROOM.THE PLACE IS MORBIDLY DECORATED AND A GHASTLY TAPESTRY ADORNS THE EAST WALL. EXIT W."
7576 IF NOT NM AND M(SE) THEN LET M$="ORC CHIEF": LET X=SE: GO TO VAL "4E3"
7579 RETURN
7580 IF NOT O(NI) THEN RETURN
7581 PRINT B$;"A SMALL SECRET ROOM BELONGING TO THE ORC CHIEF. EXITW."
7599 RETURN
7600 PRINT B$;"THE CENTRE OF A HIGH ROOFED CAVERN. IT EXTENDS N AND S FROM HERE."
7629 RETURN
7630 PRINT B$;"A MAGICAL ROOM OF GLISTENING CRYSTAL WALLS. A SPARKLING POOL OF ENCHANTED WATER ADORNS THE CENTRE OF THE ROOM. NO EXIT CAN BE SEEN."
7644 RETURN
7645 PRINT B$;"THE GOBLINS LAIR. A LARGE OAK DOOR TO THE EAST IS"'"CLOSED." AND O(SI)<TU;"OPEN." AND O(SI)=TU;" EXIT S."
7647 LET X=INT PI: LET M$="GOBLIN": IF NOT M(X) THEN RETURN
7648 PRINT "THERE ";"ARE " AND M(INT PI)<>A;"IS " AND M(INT PI)=A;M(INT PI);" ";M$;"S" AND M(INT PI)<>A;" HERE.": IF O(F)=TU OR FI=Y(X) THEN GO SUB MO: PRINT "THEY RUSH TO ATTACK."
7649 RETURN
7650 IF Z1=VAL "7645" AND O(VAL "6")<>TU THEN PRINT "YOU CAN'T, THE DOOR IS CLOSED.": LET Z=Z1: PRINT : GO TO Z
7652 GO SUB E: PRINT "TO THE WEST IS THE GOBLIN LAIR.": RETURN
7655 PRINT "PASSAGES GO SOUTH AND WEST FROM HERE. TO THE EAST IS A SMALL"'"WHITE WALLED CAVE. A BED OF"'"SPIKES HANGS FROM THE ROOF AND MANY BONES ARE SCATTERED ABOUT THE BLOODSTAINED FLOOR.": RETURN
7660 IF Z1=VAL "7665" THEN RETURN
7661 PRINT B$;"A CAVE OF ILLUSIONS. IMAGES OF SPIKES AND BONES GIVE THE IMPRESSION OF AN ELABORATE TRAP, BUT NONE OF IT IS REAL."'U$;" AND W.": RETURN
7665 IF Z1=VAL "7660" THEN RETURN
7666 PRINT B$;"THE ORCS LAIR,SEVERALFIRES ARE BURNING AND THE ROOM IS FILLED WITH A FOUL STENCH. EXIT S."
7667 IF NOT NM AND M(SI) THEN LET M$="ORC": LET X=SI: GO TO MO
7694 RETURN
7695 PRINT B$;"THE NORTH OF THE HIGHROOFED CAVERN. EXITS N AND E."'W$;"S.": RETURN
7700 PRINT F$;"WEST END OF A GLITTERING DOMED CHAMBER OF"'"STALAGMITES. EXIT W."'W$;"E.": RETURN
7705 PRINT F$;"EAST END OF THE DOMED CHAMBER. EXIT E."'W$;"W.": RETURN
7710 GO TO E
7715 GO SUB E
7716 PRINT "THE PASSAGE IS TOO NARROW TO"'"CONTINUE ANY FURTHER TO THE"'"EAST. THROUGH THE CRACK YOU CAN VAGUELY SEE SOMETHING WRITTEN ON THE ADJACENT WALL."
7724 RETURN
7725 PRINT B$;"A SMALL SMOOTH WALLED CAVERN.'";X$;"' IS NEATLY PAINTED ON THE WALL HERE.EXIT N."
7754 RETURN
7755 IF Z1=VAL "7850" AND O(INT PI) THEN PRINT "YOU CAN'T, THE DOOR IS CLOSED AND LOCKED.": LET Z=Z1: RETURN
7756 GO SUB S: LET Z$="NORTH": GO TO VAL "7852"
7789 RETURN
7790 GO TO S
7819 RETURN
7820 PRINT B$;"A SMALL DUSTY ROOM. EXIT S."
7839 RETURN
7840 PRINT "YOU ARE IN A SMALL DUG-OUT CAVE.THERE IS THE BODY OF A WIZARD"'"HERE AND THE NAME 'TIAMAT' IS"'"SCRAWLED ON THE WALL. EXIT E.": RETURN
7845 GO TO E
7850 IF Z1=VAL "7755" AND O(INT PI) THEN PRINT "THE DOOR IS CLOSED AND LOCKED.": LET Z=Z1: RETURN
7851 LET Z$="SOUTH": PRINT B$;"A LARGE WORKED CAVE WITH WALLS STREAKED WITH VEINS OF RED AND BLUE MINERALS.": GO SUB VAL "7852": PRINT "EXITS N AND W.": RETURN
7852 IF NOT O(INT PI) THEN PRINT "TO THE ";Z$;" IS A LARGE OAK DOORWEDGED OPEN WITH A WOODEN STAKE.": RETURN
7853 PRINT "THERE IS A LARGE OAK DOOR CLOSEDTO THE ";Z$
7864 RETURN
7865 PRINT B$;"THE OGRES KITCHEN."'"EXIT N."
7866 IF NOT NM AND M(NI) THEN LET M$="OGRE": LET X=NI: GO TO MO
7874 RETURN
7875 PRINT "YOU ARE IN THE OGRES BEDROOM, A FILTHY FLEA-RIDDEN MATTRESS LIESON TOP OF A LARGE STONE SLAB"'"HERE. EXIT N."
7884 RETURN
7885 GO TO S
7944 RETURN
7945 PRINT B$;"A BOULDER FILLED CAVE.";
7946 IF NOT O(FV) THEN PRINT " THE PASSAGE TO THE NORTH IS"'"BLOCKED BY A ROCK-FALL. EXIT S.": RETURN
7947 PRINT U$;" AND S."
7959 RETURN
7960 PRINT "PASSAGES LEAD N,S AND E FROM"'"HERE.": RETURN
7965 GO TO E
7970 GO SUB E: PRINT "THERE IS A SMALL CAVE TO THE"'"SOUTH.": RETURN
7975 GO TO E
7980 PRINT "PASSAGES LEAD N,S AND W FROM"'"HERE."
8039 RETURN
8040 IF NOT O(FV) THEN PRINT "YOU CAN'T GO THAT DIRECTION, THEPASSAGE IS BLOCKED.": LET Z=Z1: PRINT : GO TO Z
8041 GO TO S
8054 RETURN
8055 PRINT B$;"THE OGRES BATHROOM."'"EXIT S.";
8074 RETURN
8076 PRINT B$;"THE SOUTH OF LONG"'"DAMP CAVE, A RIVER POPULATED"'"WITH ";"HUNGRY" AND NOT O(SE);"PLACID" AND O(SE);" LOOKING CROCODILES"'"FLOWS THROUGH THE CENTRE OF THE CAVE. EXIT S."
8134 RETURN
8135 GO TO S
8164 RETURN
8165 PRINT B$;"THE NORTH OF A LONG DAMP CAVERN.A RIVER POPULATED WITH PLACID LOOKING CROCODILES RUNS THROUGH THE CENTRE. EXIT N."
8224 RETURN
8225 PRINT B$;"A SMALL DUSTY CAVERN.THERE IS THE DECOMPOSING BODY OFA WARRIOR HERE. EXIT E.": RETURN
8230 PRINT "PASSAGES LEAD S,E AND W FROM"'"HERE.": RETURN
8235 PRINT F$;"SOUTH END OF A LARGE CAVERN FILLED WITH LIFE- SIZE HUMAN STATUES OF THE"'"HIGHEST QUALITY. EXIT W."'W$;"N."
8249 RETURN
8250 LET Z=VAL "8565": GO TO Z
8259 RETURN
8260 PRINT "FROM HERE A PASSAGE LEADS EAST AND THERE IS A CAVERN TO THE"'"SOUTH.": RETURN
8265 GO TO E
8270 PRINT B$;"THE EAST OF A HOT DUSTY CAVERN,A STRONG SULPHUROUSODOUR IS PROMINENT HERE. THE CAVERN IS SPLIT IN TWO BY A WIDECHASM THROUGH THE CENTRE, MOLTENLAVA CAN BE SEEN BELOW. ";"A SMALL STONE BRIDGE SPANS THE CHASM." AND O(TE)'"EXIT W."
8279 RETURN
8280 PRINT B$;"THE WEST OF A HOT, DUSTY CAVERN. A WIDE CHASM OF LAVA SPLITS THE CAVERN IN TWO."'"A SMALL STONE BRIDGE SPANS THE CHASM." AND O(TE);" EXIT N."
8329 RETURN
8330 PRINT F$;"NORTH END OF THE CAVERN OF STATUES."'W$;"S."
8331 IF NOT O(TU) THEN GO TO VAL "3800"
8344 RETURN
8345 GO SUB S: PRINT "A MARSHY SMELL DRIFTS DOWN FROM THE NORTH";: IF T(TU)<>INT PI AND NOT Z(TU) THEN PRINT " AND YOUR TORCH IS"'"BURNING MUCH BRIGHTER THAN"'"NORMAL."
8374 RETURN
8375 IF Z1=VAL "8380" THEN RETURN
8376 GO TO S
8384 RETURN
8385 PRINT "FROM HERE THERE ARE PASSAGES TO THE NORTH AND EAST.": RETURN
8390 GO TO E
8395 GO SUB E
8397 IF M(TT) THEN PRINT "THE DARK SHADOWY FIGURE OF"'"VELNOR THE WIZARD STEPS OUT"'"INFRONT OF YOU."': LET O(VAL "21")=A: LET M$="VELNOR": LET X=TT: GO SUB VAL "4E3"
8399 RETURN
8400 PRINT "YOU ARE IN THE PLUSHLY FURNISHEDLIVING ROOM OF VELNOR'S LAIR."'"EXITS E AND W": RETURN
8405 PRINT "YOU ARE IN THE NICELY DECORATED BEDROOM OF VELNORS LAIR. EXIT W."
8439 RETURN
8440 IF NOT Z(TU) AND T(TU)>INT PI THEN FOR N=A TO FV: PAPER TU: CLS : BEEP VAL ".02",N*VAL ".1": PAPER SE: CLS : NEXT N: PRINT "THERE HAS BEEN A MASSIVE"'"EXPLOSION"''"YOU HAVE BEEN KILLED BY THE"'"ROCK FALL": LET HP=O: RETURN
8441 PRINT B$;"A LONG DAMP CAVERN, A MASSIVE EXPANSE OF BUBBLING SWAMP STRETCHES OUT TO YOUR"'"NORTH. EXIT S."
8469 RETURN
8470 PRINT F$;"SOUTH END OF A LONG CHAMBER WITH WALLS OF"'"VOLCANIC GLASS. EXIT S."'W$;"N": IF O(FT)=O THEN LET O(FT)=A
8479 RETURN
8480 IF Z1=VAL "8575" AND NOT O(VAL "20") THEN LET O(VAL "20")=SGN PI: LET HP=HP-TE: PRINT "YOU HAVE FALLEN INTO A DEEP PIT.": LET Z=VAL "9315": GO TO Z
8481 GO TO S
8534 RETURN
8535 PRINT "DON'T BE SILLY, YOU'LL BE"'"DROWNED IN THE SWAMP!": LET Z=Z1: GO TO Z
8564 RETURN
8565 PRINT F$;"NORTH OF A LONG VOLCANIC CHAMBER. THIS AREA WAS ONCE A GIANTS LAIR. EXIT N."'W$;"S."
8574 RETURN
8575 PRINT B$;"A SMALL CAVERN WITH ITS FLOOR COVERED IN STRAW AND TWIGS. EXITS ";"N AND S." AND NOT O(VAL "20");"N,S AND D" AND O(VAL "20")
8629 RETURN
8630 GO TO VAL "8535"
8659 RETURN
8660 LET Z=VAL "8345": GO TO Z
8669 RETURN
8670 GO TO S
8724 RETURN
8725 PRINT F$;"NORTH OF A LARGE SWAMP FILLED CAVERN. EXIT E"
8726 IF T(TU)=SE AND NOT Z(TU) THEN PRINT "YOUR TORCH IS BURNING BRIGHTER THAN NORMAL."
8729 RETURN
8730 GO SUB E: PRINT "A STRONG MARSHY SMELL DRIFTS"'"THROUGH FROM WEST.": RETURN
8735 LET Z$="HUNGRY": IF O(Y) THEN LET Z$="PLACID"
8736 PRINT B$;"A SMALL CAVE WITH A LARGE DEEP CRYSTAL CLEAR POOL AGAINST THE EAST WALL. THE POOL IS FULL OF ";Z$;" LOOKING SHARKSEXIT W."
8744 RETURN
8745 PRINT B$;"A SMALL CAVE WITH A LARGE DEEP CRYSTAL CLEAR POOL AGAINST THE WESTERN WALL. THE POOL IS FULL OF PLACID LOOKING SHARKS. EXIT E.": RETURN
8750 LET Z=VAL "8765": GO TO Z
8760 LET Z=VAL "8745": GO TO Z
8765 PRINT "PASSAGES LEAD S,E AND W FROM"'"HERE.": RETURN
8770 PRINT "FROM HERE A PASSAGE GOES WEST AND SOME MARBLE STEPS LEAD DOWN."
8779 RETURN
8780 PRINT B$;"A DARK STALE SMELLINGCRYPT. MOSAICS SHOWING DEVILS AND DEMONS COVER THE WALLS AND FLOOR. EXIT UP AND E.": RETURN
8785 PRINT B$;"THE SECOND CRYPT CHAMBER ,THERE ARE TWO OPEN SARCOPHAGI HERE. EXITS E AND W."
8786 IF NOT NM AND M(TE) THEN LET X=TE: LET M$="MUMMY": GO TO MO
8789 RETURN
8790 PRINT B$;"THE THIRD CRYPT"'"CHAMBER. THERE IS A LARGE OAK COFFIN STANDING ON A BLACK"'"MARBLE DIAS HERE. EXIT W."
8791 IF M(EL) THEN PRINT "A CLOAKED VAMPIRE SLOWLY RISES FROM THE COFFIN.": LET O(VAL "18")=SGN PI: LET M$="VAMPIRE": LET X=EL: GO SUB MO: RETURN
8792 IF NM=SGN PI THEN LET O(VAL "18")=TU: PRINT "THERE IS A VAMPIRE HERE": RETURN
8910 RETURN
8915 LET Z=VAL "8735": GO TO VAL "8931"
8920 PRINT B$;"A DEEP POOL OF PLACIDSHARKS, A NARROW SUBAQUA TUNNEL LEADS EAST FROM HERE."
8921 IF NOT Z(TU) AND T(TU)<>INT PI THEN PRINT "YOUR TORCH IS EXTINGUISHED ON ENTERING THE WATER.": LET T$(TU)=A$(A): LET T(TU)=INT PI
8924 RETURN
8925 IF NOT Z(VAL "17") THEN LET Z=VAL "8920": PRINT "YOU CAN'T,YOUR ARMOUR WON'T PASSTHROUGH THE TUNNEL.": RETURN
8926 PRINT B$;"A LARGE DEEP POOL, ANUNDERWATER PASSAGE LEADS WEST FROM HERE."
8927 GO TO VAL "8921"
8930 LET Z=VAL "8745"
8931 PRINT "YOU LEAVE THE POOL."': GO TO Z
9099 RETURN
9100 GO SUB Q: PRINT U$;" AND E.": RETURN
9150 GO SUB Q: PRINT U$;",E AND W.": RETURN
9155 GO SUB Q: PRINT U$;" AND W."
9194 RETURN
9195 GO SUB Q: PRINT U$;",S AND E.": RETURN
9245 GO SUB Q: PRINT U$;",S,E AND W.": RETURN
9249 RETURN
9250 GO SUB Q: PRINT U$;",S AND W."
9289 RETURN
9290 GO TO VAL "9195"
9310 GO TO VAL "9245"
9315 IF HP<=O THEN PRINT '"YOU HAVE BEEN KILLED BY THE FALL": RETURN
9316 GO SUB Q: PRINT "THERE IS A LARGE HOLE IN THE"'"ROOF HERE.A MESSAGE SCRAWLED ON THE WALL IN DRIED BLOOD READS :"''"'WELCOME TO THE ZALROG PIT, YOUARE JUST IN TIME FOR LUNCH !'": RETURN
9340 GO TO VAL "9245"
9345 GO TO VAL "9250"
9384 RETURN
9385 GO TO VAL "9195"
9435 GO TO VAL "9245"
9440 GO TO VAL "9250"
9479 RETURN
9480 GO TO VAL "9195"
9530 GO SUB Q: PRINT "EXITS S,E AND W.": RETURN
9535 GO SUB Q: PRINT "EXITS S AND W."
9574 RETURN
9575 GO SUB Q: PRINT "EXITS S AND E.": RETURN
9580 GO SUB Q: PRINT "EXITS S AND W."
9814 RETURN
9975 PRINT B$;"A MAZE OF IDENTICAL INTERCONNECTING LITTLE CAVES."'"BONES ARE LIBERALLY SCATTERED ABOUT THE CAVE SYSTEM." AND (RND>VAL ".9" OR Z=VAL "9315"): RETURN
9980 PRINT B$;"A N/S PASSAGE.": RETURN
9985 PRINT B$;"A E/W PASSAGE.": RETURN
9992 REM removed (LKDOS-only)
9998 REM removed (LKDOS-only)Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.


