
0080 RANDOMIZE 
0090 CLOSE 
0095 READ I,W,R,LOC,DIES,DEBUG1,LAMP
0098 DATA 0,0,0,1,0,0,0
0100 DIM LFTABL$[26*5],B$[544],X$[132],Y$[132],W$[10],MSG$[100],I$[80]
0110 DIM OBJS$[100*6],REG[30],LOCS$[200],LOC$[2],ACT$[64],ACT[9]
0120 DIM ACTION$[8],A1$[8],B1$[544],STACK[5,1],VERB$[10],SUB1$[10],PRED$[10]
0125 DIM NOISE1$[24],NOISE2$[18],NOISE3$[48],W1$[6]
0126 DIM LIQ$[100],V[10]
0130 OPEN FILE[0,4],"ADVENTURE.DB"
0131 READ FILE[0],OBJS$
0132 READ FILE[0],LIQ$
0135 POSITION FILE[0,6*512]
0137 READ FILE[0],LOCS$
0140 READ NOISE1$,NOISE2$,NOISE3$
0150 DATA "GO    GOTO  TO    TOWARD"
0151 DATA "THE   A     AN    "
0152 DATA "AT    TO    FROM  IN    INTO  INSIDEWITH  ON    "
0160 LET REG[8]=3
0165 LET REG[6]=330
0200 REM ** OPEN ALL FILES
0205 LET LFTABL$=FILL$(0)
0210 LOPEN FILE[1,B$,1],"WORDS"
0220 LOPEN FILE[2,B$,1],"TEXTIX"
0230 LOPEN FILE[3,B$,1],"TEXT"
0240 LOPEN FILE[4,B$,1],"ACTSIX"
0250 LOPEN FILE[5,B$,1],"ACTS"
0300 STMA 9,0,X$
0310 LET Y$=SYS(25),X$,".LG"
0315 OPEN FILE[14,2],Y$
0320 PRINT FILE[14],X$,SYS(28),SYS(27)
0330 LET LF=14
0900 LET ITM=2249
0910 GOSUB 9190 :  ** DESCRIBE (ITM,-1)
0990 GOSUB 8000 :  ** DESCRIBE CURRENT LOCATION (LOC)
1000 REM ** NEXT COMMAND
1005 IF LOC=0 THEN GOTO 1500 :  ** HANDLE DEATH
1040 INPUT USING "",I$
1042 IF LF THEN PRINT FILE[LF],"? ";I$
1045 LET I$=TRUN$(I$,1)
1050 IF LEN(I$)=0 THEN GOTO 1040
1060 RESTORE 1080
1070 READ COL,VERB$,SUB1$,PRED$,VERB,SUB1,PRED
1080 DATA 0,"","","",0,0,0
1100 IF COL<0 THEN GOTO 1450 :  ** UNKNOWN COMMAND
1105 XCALL 14,W$,I$,"",COL
1108 LET W1$=W$,FILL$(32)
1110 STRPOS I,NOISE1$,W1$,1,6
1115 IF I THEN GOTO 1100
1120 STRPOS I,NOISE2$,W1$,1,6
1125 IF I THEN GOTO 1100
1130 GOSUB 9000 :  ** LOOK UP WORD IN W$
1135 IF W<0 THEN GOTO 1490 :  ** UNKNOWN WORD
1145 LET VERB$=W$
1150 LET VERB=W
1160 IF COL<0 THEN GOTO 1300 :  ** NOW TRY COMMAND
1165 XCALL 14,W$,I$,"",COL
1168 LET W1$=W$,FILL$(32)
1170 STRPOS I,NOISE2$,W1$,1,6
1175 IF I THEN GOTO 1160
1178 GOSUB 9000 :  ** LOOK UP WORD IN W$
1180 IF VERB=2003 THEN GOTO 1700 :  ** SAY
1185 IF W<0 THEN GOTO 1490 :  ** UNKNOWN WORD
1200 LET SUB1$=W$
1205 LET SUB1=W
1210 IF COL<0 THEN GOTO 1300 :  ** NOW TRY COMMAND
1215 XCALL 14,W$,I$,"",COL
1217 LET W1$=W$,FILL$(32)
1220 STRPOS I,NOISE3$,W1$,1,6
1225 IF I THEN GOTO 1210
1230 STRPOS I,NOISE2$,W1$,1,6
1235 IF I THEN GOTO 1210
1238 GOSUB 9000 :  ** LOOK UP WORD IN W$
1239 IF W<0 THEN GOTO 1490 :  ** UNKNOWN WORD
1250 LET PRED$=W$
1255 LET PRED=W
1300 REM ** NOW TRY COMMAND
1305 IF DEBUG1 THEN PRINT VERB,SUB1,PRED
1310 LET REG[1]=LOC
1311 LET REG[2]=RND(100)
1312 LET REG[3]=0
1314 LET REG[4]=0
1320 LET LOC$=CHR$(-1,2)
1325 GOSUB 7800 :  ** COUNT OBJS AT LOC$
1330 LET REG[7]=X
1385 IF VERB<1000 THEN GOTO 2000 :  ** MOVE
1387 IF VERB=2024 THEN GOTO 2600 :  ** SCORE
1388 IF VERB=2020 THEN GOTO 3000 :  ** INVENTORY
1390 GOTO 2300 :  ** ACTION VERB
1400 REM ** OBJECT AS FIRST WORD
1410 LET X$="You must tell me what to do with the ",W$,"!"
1415 REM ** PRINT X$
1416 PRINT X$
1417 IF LF THEN PRINT FILE[LF],X$
1420 GOTO 1000 :  ** NEXT COMMAND
1430 REM ** NO OBJECT TO DO IT TO
1435 LET X$="I don't see anything around here that I can ",VERB$,"."
1440 GOTO 1415 :  ** PRINT X$
1450 REM ** UNKNOWN COMMAND
1451 STMA 8,0
1452 IF VERB>=1000 THEN IF VERB<=1999 THEN IF SUB1=0 THEN GOTO 1400 :  ** OBJECT AS FIRST WORD
1453 IF VERB=2003 THEN GOTO 1710
1455 LET ITM=2013
1460 IF RND(100)<20 THEN LET ITM=2061
1475 GOSUB 9190 :  ** DESCRIBE (ITM,-1)
1480 GOTO 1000 :  ** NEXT COMMAND
1490 REM ** UNKNOWN WORD
1495 LET X$="I don't know what ",W$," means."
1498 GOTO 1415 :  ** PRINT X$
1500 REM ** HANDLE DEATH
1510 LET ITM=2081+(DIES*2)
1520 GOSUB 9190 :  ** DESCRIBE (ITM,-1)
1525 INPUT USING "","(YES OR NO)? ",I$
1530 IF I$[1,1]<>"Y" THEN GOTO 1600
1535 LET ITM=2082+(DIES*2)
1540 GOSUB 9200 :  ** DESCRIBE (ITM,STA)
1545 LET DIES=DIES+1
1550 IF DIES>=3 THEN GOTO 1600
1555 FOR OBJ=1 TO 99
1560   GOSUB 8400 :  ** UNPACK OBJ
1565   IF LOC1<>-1 THEN GOTO 1590
1570   LET LOC1=OLOC
1575   IF OBJ=2 THEN LET LOC1=1
1585   GOSUB 8450 :  PACK OBJ
1590 NEXT OBJ
1595 LET LOC=3
1596 GOSUB 7950 :  ** CHANGE OF LOC
1597 GOTO 1000 :  ** NEXT COMMAND
1600 STOP 
1700 REM ** SAY
1705 IF W>=0 THEN GOTO 1200
1710 STRPOS I,I$,VERB$
1720 IF I=0 THEN GOTO 1455
1730 LET X$="OK, <34>",I$[I+LEN(VERB$)],".<34>"
1740 GOTO 1415 :  ** PRINT X$
1800 REM ** GOOD MOVE
1810 LET REG[5]=REG[5]+1
1815 LET OBJ=2
1820 GOSUB 8400 :  ** UNPACK OBJ
1825 IF PROP=1 THEN LET REG[6]=REG[6]-1
1830 IF REG[6]<>30 THEN GOTO 1845
1835 LET ITM=2183
1840 GOSUB 9190 :  ** DESCRIBE (ITM,-1)
1845 IF REG[6]>0 THEN GOTO 1890
1847 IF PROP=0 THEN GOTO 1890
1850 LET PROP=0
1855 GOSUB 8450 :  PACK OBJ
1860 LET ITM=2184
1865 GOSUB 9190 :  ** DESCRIBE (ITM,-1)
1890 GOTO 1000 :  ** NEXT COMMAND
1900 REM ** SAVE GAME
1902 GOSUB 2610
1905 STMA 9,0,X$
1907 PACK "ZA6LLL*31L",B$,X$,SYS(28),SYS(27),REG,SYS(0)
1910 LET X$[6]=".AD"
1920 OPEN FILE[13,1],X$
1925 WRITE FILE[13],B$,LOCS$,OBJS$,LIQ$
1930 CLOSE 
1945 CHAIN "ADEND"
1950 REM ** RESTORE
1955 STMA 9,0,X$
1960 LET X$[6]=".AD"
1965 OPEN FILE[13,4],X$
1970 READ FILE[13],B$
1972 UNPACK "@7L@139L",B$,I,J
1974 IF SYS(28)=I THEN IF J+1800>=SYS(0) THEN GOTO 1992
1975 READ FILE[13],LOCS$,OBJS$,LIQ$
1976 CLOSE FILE[13]
1977 UNPACK "@15L*31",B$,REG
1980 LET LOC=REG[1]
1985 GOSUB 7950 :  ** CHANGE OF LOC
1990 GOTO 1000 :  ** NEXT COMMAND
1992 CLOSE FILE[13]
1993 LET ITM=2254
1994 GOTO 1475
2000 REM ** MOVE
2010 IF SUB1>0 THEN IF SUB1<1000 THEN GOTO 1450 :  ** UNKNOWN COMMAND
2015 IF PRED THEN GOTO 1450 :  ** UNKNOWN COMMAND
2020 IF VERB=57 THEN GOTO 3100 :  ** LOOK
2025 IF SUB1=0 THEN LET SUB1=LOC
2028 IF LAMP+FLITE THEN LET WZDARK=0
2030 IF LAMP+FLITE THEN GOTO 3200 :  ** LOOKUP COMMAND AND DOIT
2032 IF WZDARK=0 THEN GOTO 2060
2035 IF REG[2]>=35 THEN GOTO 3200 :  ** LOOKUP COMMAND AND DOIT
2040 LET LOC=0
2045 LET ITM=2023
2050 GOSUB 9190 :  ** DESCRIBE (ITM,-1)
2055 GOTO 1800 :  ** GOOD MOVE
2060 LET WZDARK=1
2065 GOTO 3200 :  ** LOOKUP COMMAND AND DOIT
2300 REM ** ACTION VERB
2400 REM ** CHECK FOR PRESENCE OF SUB1 AND PRED
2405 LET TXT=0
2408 IF SUB1/1000<>1 THEN GOTO 2440
2410 LET OBJ=SUB1-1000
2420 GOSUB 8500 :  ** TEST LOCATION OF OBJ (SET HERE,CARRY,ROOM)
2430 IF HERE=0 THEN GOTO 2500
2440 IF PRED=0 THEN GOTO 2490
2442 IF PRED/1000<>1 THEN GOTO 2490
2450 LET OBJ=PRED-1000
2460 GOSUB 8500 :  ** TEST LOCATION OF OBJ (SET HERE,CARRY,ROOM)
2470 IF HERE=0 THEN GOTO 2520
2480 IF SUB1=PRED THEN LET TXT=2025
2490 IF TXT=0 THEN GOTO 3200 :  ** LOOKUP COMMAND AND DOIT
2495 GOTO 1475
2500 LET X$="I see no ",SUB1$," here."
2510 GOTO 1415 :  ** PRINT X$
2520 LET X$="I see no ",PRED$," here."
2530 GOTO 1415 :  ** PRINT X$
2600 REM ** SCORE
2605 GOSUB 2610
2606 GOTO 1000 :  ** NEXT COMMAND
2610 LET MS=0
2615 LET S=0
2620 FOR OBJ=50 TO 66
2625   GOSUB 8400 :  ** UNPACK OBJ
2630   LET MS=MS+15
2635   IF LOC1=-1 THEN LET S=S+15
2640   IF LOC1=3 THEN LET S=S+15
2650 NEXT OBJ
2660 LET MS=MS+25
2665 IF AND(ASC(LOCS$[15,15]),15) THEN LET S=S+25
2670 LET S=S-(20*DIES)
2680 LET S=S-(10*REG[9])
2690 LET X$="You have ",S," points out of a possible ",MS
2691 PRINT X$
2692 IF LF THEN PRINT FILE[LF],X$
2695 LET X$="You have used ",REG[5]," moves."
2696 PRINT X$
2697 IF LF THEN PRINT FILE[LF],X$
2698 RETURN 
3000 REM ** INVENTORY
3010 GOSUB 8200 :  ** INVENTORY
3020 GOTO 1000 :  ** NEXT COMMAND
3100 REM ** LOOK
3110 LET STA=-1
3120 GOSUB 8050
3130 GOTO 1000 :  ** NEXT COMMAND
3200 REM ** LOOKUP COMMAND AND DOIT
3210 PACK "Z8JJ",ACTION$,VERB,SUB1
3220 KFIND 4,B1$,ACTION$,R
3225 LET R=ABS(R)
3230 LET CCNT=0
3240 LET A1$=""
3250 UNPACK "JJ+2J",ACTION$,VERB1,SUB11,PRED1
3255 IF DEBUG1 THEN PRINT "TEST",VERB1,SUB11,PRED1
3260 IF VERB<>VERB1 THEN GOTO 3440
3270 IF SUB11>9999 THEN GOTO 3440
3275 IF SUB1 THEN IF SUB1<>SUB11 THEN IF SUB11<>9999 THEN GOTO 3392
3280 GOSUB 3800 :  ** TEST SUB1,SUB11,PRED,PRED1
3290 IF E=0 THEN GOTO 3380
3300 IF E=1 THEN GOTO 3400
3310 IF LEN(A1$) THEN GOTO 3360
3320 LET A1$=ACTION$
3330 LET SUB12=SUB11
3335 LET PRED2=PRED1
3340 LET CCNT=CCNT+1
3350 GOTO 3380
3360 IF SUB11=SUB12 THEN IF PRED1=PRED2 THEN GOTO 3380
3370 GOTO 3340
3380 KNEXT 4,B1$,ACTION$,R
3390 GOTO 3250
3392 PACK "Z8JJ",ACTION$,VERB,9999
3394 KFIND 4,B1$,ACTION$,R
3396 LET R=ABS(R)
3398 GOTO 3250
3400 LET SUB12=SUB1
3402 LET PRED2=PRED
3404 GOSUB 4000 :  ** READ ACTION RECORD R AND DO IT
3410 IF EE THEN GOTO 1800 :  ** GOOD MOVE
3420 LET CCNT=-1000
3430 GOTO 3380
3440 IF CCNT>1 THEN GOTO 3700 :  ** NEED MORE INFO
3450 IF CCNT<=0 THEN GOTO 3600
3460 LET X$=A1$
3470 LET A1$=ACTION$
3480 LET ACTION$=X$
3490 KFIND 4,B1$,ACTION$,R
3500 UNPACK "JJ+2J",ACTION$,VERB1,SUB11,PRED1
3510 IF SUB11<>SUB12 THEN GOTO 3560
3520 IF PRED1<>PRED2 THEN GOTO 3560
3530 GOSUB 4000 :  ** READ ACTION RECORD R AND DO IT
3540 IF EE THEN GOTO 1800 :  ** GOOD MOVE
3550 KNEXT 4,B1$,ACTION$,R
3555 GOTO 3500
3560 LET ACTION$=A1$
3570 KFIND 4,B1$,ACTION$,R
3580 GOTO 3600
3600 PACK "Z8JJ",ACTION$,VERB,10000
3605 KFIND 4,B1$,ACTION$,R
3606 LET R=ABS(R)
3610 UNPACK "JJ+2J",ACTION$,VERB1,SUB11,PRED1
3612 LET SUB11=MOD(SUB11,10000)
3615 IF DEBUG1 THEN PRINT "DEFAULT",VERB1,SUB11,PRED1
3620 IF VERB<>VERB1 THEN GOTO 1450 :  ** UNKNOWN COMMAND
3630 GOSUB 3800 :  ** TEST SUB1,SUB11,PRED,PRED1
3640 IF E<>1 THEN GOTO 3670
364