0 GOTO 100
1 GOTO 10200
2 IF C1$="" THEN W1$="":ELSE I=INSTR(C1$+" "," "):W1$=LEFT$(C1$,I-1):W$=W1$:C1$=MID$(C1$,I+1):IF INSTR(UW$," "+W1$+" ") THEN 2
3 Z$="     ":LSET Z$=LEFT$(W1$,5)
4 I=0:A=0:WHILE (A=0 AND I<=NC):A=INSTR(CM$(I),":"+Z$):I=I+1:WEND:A=FNLC(A,I):RETURN
5 PRINT"To <"VERB$"> a <"NOUN$"> with a <"OBJ$"> ";:RETURN
10 Z$=INPUT$(1):A=(Z$="Y" OR Z$="y"):RETURN
12 FOR Z=1 TO 5:CT(Z)=FNAN(CT(0),Z):NEXT Z:CT(6)=FNSN(CT(0)):RETURN
13 CT(0)=CT(6)*(CT(5)*10000+CT(4)*1000+CT(3)*100+CT(2)*10+CT(1)):RETURN
14 IF B THEN PRINT"It is much too dark!":RETURN:ELSE IF C=0 THEN CLS: PRINT RD$(C(0)):RETURN:ELSE PRINT LEFT$(RD$(C(0)),INSTR(RD$(C(0)),CHR$(10))):RETURN
16 IF B THEN RETURN ELSE PRINT"Visible items:":FOR BB=1 TO NOB :IF C(0)=OB(BB,0) THEN PRINT OB$(BB)
17 NEXT BB:RETURN
18 A=FNRMD(RM$(C(0)),D):RETURN
20 FOR Q=1 TO BK:IF FNB2(BK(Q,0))<>C(0) OR OK<>FNB2(BK(Q,1)\100) THEN NEXT Q:A=0 ELSE A=Q
21 RETURN
22 IF BK(A,0)<0 THEN PRINT M$(9):RETURN:ELSE:IF FA THEN PRINT M$(FNB2(BK(A,2))):RETURN:ELSE BK(A,0)=-ABS(BK(A,0)):T=FNAN(BK(A,0),5)-1:BK(A+T,0)=BK(A+T,0)*-(T=0)-ABS(BK(A+T,0)*-(T<>0)):PRINT M$(FNB2(BK(A,2)\100)):RETURN
24 IF BK(A,0)>0 THEN PRINT M$(9):RETURN:ELSE BK(A,0)=ABS(BK(A,0)):T=FNAN(BK(A,0),5)-1:BK(A+T,0)=BK(A+T,0)*-(T=0)+ABS(BK(A+T,0)*-(T<>0)):PRINT M$(4):RETURN
28 W=FNWT(X):IF (R=-1 OR (R<-1 AND OB(ABS(R),0)=-1)) AND (OB(X,0)>-1 OR (OB(X,0)<-1 AND OB(ABS(OB(X,0)),0)<>-1)) THEN IF W+C(2)>WT THEN PRINT M$(8):R=C(0):ELSE C(2)=C(2)+W
29 IF (R>-1 OR (R<-1 AND OB(ABS(R),0)<>-1)) AND (OB(X,0)=-1 OR (OB(X,0)<-1 AND OB(ABS(OB(X,0)),0)=-1)) THEN C(2)=C(2)-W
30 IF R<-1 AND OB(X,0)<>R AND X<>-R THEN OB(ABS(R),1)=FNAW(ABS(R),FNWT(X))
31 IF OB(X,0)<-1 AND R<>OB(X,0) THEN OB(ABS(OB(X,0)),1)=FNAW(ABS(OB(X,0)),-FNWT(X))
32 OB(X,0)=R:RETURN
34 NP2=A:K=FNB2(WD(NP2)):NT=FNM2(WD(NP2)):WHILE(NOT FNA(K) AND NT<>0):NP2=NP2+NT:K=FNB2(WD(NP2)):NT=FNM2(WD(NP2)):WEND
35 IF FNA(K) THEN A=NP2:RETURN:ELSE K=FNB2(WD(A)):RETURN
36 FOR Q=1 TO BK:K=FNM2(BK(Q,1)):IF FNB2(BK(Q,0))=C(0) AND OB(K,0)>0 THEN OB(K,0)=C(0)
37 NEXT Q:RETURN
49 '=============================Get command==================================
50 IF CO$=""THEN LINE INPUT ">";CO$:DEF USR=VARPTR(U(0)):CO$=USR(CO$):IF CO$="" THEN PRINT"Hello?":GOTO 50
51 I=INSTR(CO$+".","."):C1$=MID$(CO$,1,I-1):ECHO$=C1$:CO$=MID$(CO$,I+1,255):I=1:WHILE(MID$(CO$,I,1)=" "):I=I+1:WEND:CO$=MID$(CO$,I,255)
52 GOSUB 2:VB$=Z$:VERB$=W$:VB=A:N=WD(A):GOSUB 2:GOSUB 34:NO$=Z$:NOUN$=W$:NO=K:N2=WD(A):GOSUB 2:GOSUB 34:OB$=Z$:OBJ$=W$:OB=K:RETURN
60 CT(0)=RM(C(0)):GOSUB 12:C=CT(1):B=NOT(FNLT OR ((FNH(LP) OR FNC(LP))AND F(1)):GOSUB 14:IF B=0 AND C=0 THEN CT(1)=1:GOSUB 13:RM(C(0))=CT(0):ELSE IF B THEN IF RND(100)<20 THEN PRINT M$(19):GOTO 500
61 GOSUB 16
62 GOSUB 50
64 CT(0)=N:GOSUB 12:IF CT(5)=0 OR N=0 THEN PRINT M$(2):GOTO 62:ELSE GT=CT(1)+CT(2)*10
200 D=(CT(3)+CT(4)*10)-1:FOR K=1 TO BK:IF BK(K,0)>0 AND D=FNAN(BK(K,0),3) AND C(0)=FNB2(BK(K,0)) THEN M=FNB2(BK(K,1)):GOTO 204
202 NEXT K
204 IF K>BK THEN D=D+1:GOSUB 18:IF A=0 THEN M=3:GOTO 206:ELSE M=4:C(0)=A:PRINT M$(M):GOSUB 36:C(1)=C(1)+1:GOTO 60
206 PRINT M$(M):GOTO 62
299 GOTO 62
300 IF NO$="     " THEN D=11:GOSUB 18:N=A*100+10101:ELSE N=N2
302 GOTO 64
399 GOTO 62
400 PRINT M$(5);:GOSUB 410:PRINT A"points in";C(1);"moves.":GOTO 62
410 A=0:FOR J=1 TO NRM:IF FNAN(RM(J),1)=1 THEN A=A+5
412 NEXT J:FOR I=1 TO NOB:IF OB(I,0)=HM AND FNAN(OB(I,1),4)>0 THEN A=A+10
414 IF OB(I,0)=0 AND OB(I,1)<0 THEN A=A+20
416 NEXT I
418 A=A-C(3)*20
498 RETURN
499 GOTO 62
500 PRINT"Would you like to play again? ";:GOSUB 10:IF A THEN RUN
502 PRINT M$(6)
598 END
599 GOTO 62
600 PRINT M$(7):K=-1:FOR J=1 TO NOB:IF OB(J,0)=-1 THEN PRINT OB$(J):K=0:GOSUB 697
602 NEXT J:IF K THEN PRINT"nothing"
696 GOTO 62
697 IF J=1 THEN RETURN:ELSE:J2=-1:FOR J1=1 TO NOB:IF OB(J1,0)=-J THEN IF J2 THEN J2=0:PRINT" which contains:":PRINT"   ";OB$(J1):ELSE PRINT"   ";OB$(J1)
698 NEXT J1:RETURN
699 GOTO 62
700 C=0:B=NOT(FNLT OR ((FNH(LP) OR FNC(LP)) AND F(1)):GOSUB 14:GOSUB 16
799 GOTO 62
800 LINE INPUT"Enter the filename you wish to save to:";F$:OPEN "o",1,F$:FOR I=1 TO NOB:PRINT#1,OB(I,0);OB(I,1);:NEXT I:FOR I=1 TO BK:PRINT#1,BK(I,0);BK(I,1);BK(I,2);:NEXT I:FOR I=1 TO NRM:PRINT#1,RM(I);:NEXT I:FOR I=0 TO NCT:PRINT#1,C(I);:NEXT I
802 FOR I=1 TO NFG:PRINT#1,FG(I);:NEXT I:CLOSE 1
804 PRINT F$;" has been saved."
899 GOTO 62
900 LINE INPUT"Enter the filename you wish to load from:";F$:OPEN "I",1,F$:FOR I=1 TO NOB:INPUT#1,OB(I,0),OB(I,1):NEXT I:FOR I=1 TO BK:INPUT#1,BK(I,0),BK(I,1),BK(I,2):NEXT I:FOR I=1 TO NRM:INPUT#1,RM(I):NEXT I:FOR I=0 TO NCT:INPUT#1,C(I):NEXT I
902 FOR I=1 TO NFG:INPUT#1,FG(I):NEXT I:CLOSE 1
904 PRINT F$;" has been loaded."
999 GOTO 62
10200 DEFINT A-Z
10210 DEF FNQ$(A$)=CHR$(34)+A$+CHR$(34):DEF FNIV$(A$)=CHR$(16)+A$+CHR$(17)+"  ":DEF FNLC(A,B)=-(A<>0)*(A\6+1+(B-1)*30):DEF FNULC$(A$,B$,C$)=MID$(C$+A$,INSTR(B$+A$,A$),1):DEF FNSN(A)=(A<0)-(A=>0)
10215 DEF FNX(X,Y)=OB(X,0)=Y:DEF FNH(X)=FNX(X,-1):DEF FNC(X)=FNX(X,C(0)):DEF FNA(X)=FNH(X) OR FNC(X) OR(OB(X,0)<-1 AND FNX(ABS(OB(X,0)),-1)):DEF FNN(X)=FNX(X,0):DEF FNR(X)=RND(100)<=X:DEF FNO(X)=OB=X:DEF FND(X)=C(2)>X:DEF FNB(X)=NO=X
10217 DEF FNI(X)=C(0)=X:DEF FNW(X,Y)=OB(X,0)=OB(Y,0):DEF FNLT=NOT(FNAN(RM(C(0)),2)=0):DEF FNWT(X)=ABS(OB(X,1) MOD 1000)
10220 DEF FNS$(A)=MID$(STR$(A),2):DEF FNRMD(A$,A)=ASC(MID$(A$,A,1))-35:DEF FNRCH$(A)=CHR$(A+35):DEF FNAN(A,B)=ABS((A\10^(B-1)) MOD 10):DEF FNRD(A)=(((A+3) MOD 8)+1)*-(A<9)-(A=9)*10-(A=10)*9
10230 DEF FNB2(A)=ABS(A) MOD 100:DEF FNAW(X,A)=SGN(OB(X,1))*(ABS(OB(X,1))+A+(FNWT(X)+A>999)*(FNWT(X)+A-999)):DEF FNM2(X)=(X/100) MOD 100
10240 DEFINT U:DIM U(13):U(0)=27490:U(1)=17920:U(2)=24099:U(3)=22051:U(4)=1259:U(5)=-14331:U(6)=-386:U(7)=14433:U(8)=-505:U(9)=12411:U(10)=-6653:U(11)=30559:U(12)=4131:U(13)=-13839
10250 DA$=CHR$(10):UW$=" A AN AT TO THE WITH IN ON SOME OFF OF FROM "
10300 READ BK,ST,HM,WT,LP,NC,NOB,NWD,NMS,NRM,NFG,NCT
10310 DIM M$(NMS),RM$(NRM),OB$(NOB),F(NFG),WD(NWD),BK(BK,2),RD$(NRM),C(NCT),OB(NOB,1),RM(NRM)
10315 CLS:PRINT"Initializing";
10320 FOR I=1 TO NRM:READ RM(I):PRINT".";:NEXT I:FOR I=1 TO NOB:READ OB(I,0),OB(I,1):PRINT".";:NEXT I:FOR I=1 TO NWD:READ WD(I):PRINT".";:NEXT I:FOR I=1 TO BK:READ BK(I,0),BK(I,1),BK(I,2):PRINT".";:NEXT I
10330 C(0)=ST
19999 '=========================Initialize strings=============================
29998 GOTO 60
29999 '============================Data========================================
                                           