10 NR=14:NT=11:NP=11:NV=29:NO=NT+NP 20 DIM AC(NR,6),VB$(NV),OB$(NO),RM$(NR),TD$(NT),VN(NV),TL(NT),TF(NT) 99 REM *INITIALIZATION* 100 RM=1:CT=0:CF=0:RT=-1:CA=0:MF=0:CD=0:WD=-1:LI=0:BT=-1 120 FOR I=1 TO NR:READ RM$(I):NEXT I 130 FOR I=1 TO NV:READ VB$(I),VN(I):NEXT I 140 FOR I=1 TO NO:READ OB$(I):NEXT I 150 FOR I=1 TO NT:READ TD$(I),TL(I),TF(I):NEXT I 160 FOR I=1 TO NR:READ AC(I,1),AC(I,2),AC(I,3),AC(I,4),AC(I,5),AC(I,6):NEXT I 199 REM *MAIN LOOP: ROOM DESCRIPTION* 200 IF WD=0 THEN 400 210 WD=0:PRINT RM$(RM) 220 K=0 230 FOR I=1 TO NT 240 IF TL(I)<>RM THEN 270 250 IF K=0 THEN PRINT "You see:":K=1 260 PRINT TD$(I) 270 NEXT I 300 PRINT"Exits are:" 310 FOR I=1 TO 6 320 IF AC(RM,I)<>0 THEN PRINT VB$(I);" "; 330 NEXT I 340 PRINT 399 REM *MAIN LOOP:COMMAND INPUT AND PARSER* 400 INPUT C$ 410 L=LEN(C$):IF L=0 THEN 400 420 C1$="":C2$="":C2=0:X=0 430 FOR I=1 TO L 440 A$=MID$(C$,I,1):A=ASC(A$):IF A>=97 AND A<=122 THEN A$=CHR$(A-32) 450 IF A$<>" " THEN 460 455 IF C2$<>"" THEN 500 457 X=1:GOTO 490 460 IF X=0 THEN C1$=C1$+A$:GOTO 490 470 C2$=C2$+A$ 490 NEXT I 500 IF C1$="" THEN PRINT "Excuse me?":GOTO 400 510 C1$=LEFT$(C1$,5):C2$=LEFT$(C2$,5) 520 FOR C1=1 TO NV 530 IF VB$(C1)=C1$ THEN C1=VN(C1):GOTO 600 540 NEXT C1 550 PRINT"I don't know the verb ";C1$:GOTO 400 600 IF C2$="" THEN 700 610 FOR C2=1 TO NO 620 IF OB$(C2)=C2$ THEN 700 630 NEXT C2 635 IF C1=11 THEN C2=1:GOTO 700 640 PRINT"I don't know the object ";C2$:GOTO 400 699 REM *PRELIMINARY FILTERING OF COMMANDS* 700 IF C2>NT+5 AND C1<>7 AND C1<>11 THEN 640 710 IF C2>NT AND C211 THEN 8010 720 IF C2>NT THEN 750 725 TL=TL(C2) 730 IF C1<>11 AND TL<>RM AND TL<>0 THEN PRINT"It isn't here.":GOTO 400 750 ON C1 GOTO 1000,1000,1000,1000,1000,1000,1100,1200,1300,1400 760 ON C1-10 GOTO 1500,1800,1900,2000,2100,2200,2300,2400,2500,9999 770 ON C1-20 GOTO 2600,2700,2800 999 REM *DIRECTIONS* 1000 IF AC(RM,C1)=0 THEN PRINT"You can't go that way.":GOTO 8200 1010 IF RM=4 AND RT<>0 THEN PRINT"The rats look too fierce.":GOTO 8200 1020 RM=AC(RM,C1):WD=-1:GOTO 8200 1099 REM *GO* 1100 IF C2=0 THEN 8050 1105 IF C2<=16 THEN 8040 1110 C1=C2-16:GOTO 1000 1199 REM *EAT* 1200 IF C2<>6 THEN 8010 1210 TL(C2)=-1:PRINT"GAG! COUGH! CHOKE! PUKE!":GOTO 8200 1299 REM *KICK* 1300 IF C2=0 THEN 8050 1305 IF C2<>7 OR CD<>0 THEN 8020 1310 IF CA<>0 THEN CT=9:GOTO 8200 1320 PRINT"The computer starts up!" 1330 PRINT"The console displays: 'PLEASE LOG IN.'":CA=-1:GOTO 8200 1399 REM *INSERT* 1400 IF C2=0 THEN 8050 1410 IF C2<>5 THEN 8010 1420 IF RM<>6 THEN 8030 1430 TL(5)=-1:TL(6)=RM:PRINT "A candy bar comes out.":GOTO 8200 1499 REM *TYPE* 1500 IF C2=0 THEN 8050 1502 IF RM<>10 THEN 8030 1510 IF CA=0 THEN PRINT "The computer isn't running.":GOTO 8200 1520 IF LI<>0 THEN 1600 1530 IF C2<>12 THEN PRINT "'Invalid login ID.'":GOTO 8200 1540 LI=-1:PRINT "'";C2$;" Logged in.'":GOTO 8200 1600 IF CP<>0 THEN 1700 1605 IF C2<=12 THEN PRINT "'Invalid command.'":GOTO 8200 1610 IF C2=13 THEN PRINT "'COPY LOGOU ADVEN'":GOTO 8200 1620 IF C2=14 THEN PRINT "'Welcome to Adventure! W#uld Y#$*'":CT=9:GOTO 8200 1630 IF C2=15 THEN PRINT "'Mount tape then type filename.'":CP=-1:GOTO 8200 1640 PRINT "'Logged out.'":CP=-1:GOTO 8200 1700 CP=0:IF C2<=12 THEN PRINT"'No such file.'":GOTO 8200 1710 IF MT=0 THEN PRINT"'Error: Tape not mounted'":GOTO 8200 1720 PRINT "The tape spins...":FOR I=1 TO 500:NEXT I 1730 PRINT "'File copied.'" 1740 IF C2=14 THEN PRINT "CONGRATULATIONS, you've done it!":END 1750 GOTO 8200 1799 REM *TAKE* 1800 IF C2=0 THEN 8050 1805 IF TF(C2)=0 THEN PRINT "That's beyond your ability.":GOTO 8200 1810 IF TL=0 THEN PRINT"You already have it!":GOTO 200 1820 IF C2=4 AND CF=0 THEN PRINT"There was a coin under it.":TL(5)=RM:CF=-1 1825 IF C2=2 THEN MT=0 1830 TL(C2)=0:GOTO 8000 1899 REM *DROP* 1900 IF C2=0 THEN 8050 1905 IF TL<>0 THEN PRINT "You don't have it.":GOTO 200 1910 TL(C2)=RM:IF RM<>4 OR C2<>6 THEN 8000 1920 PRINT"The rats devour the candy and get sleepy." 1930 TD$(1)="Sleepy rats":TL(6)=-1:RT=0 1940 GOTO 8000 1999 REM *INVENTORY* 2000 K=0:PRINT"You are carrying:" 2010 FOR I=1 TO NT 2020 IF TL(I)=0 THEN PRINT TD$(I):K=1 2030 NEXT I 2040 IF K=0 THEN PRINT "Nothing." 2050 GOTO 8200 2099 REM *MOUNT* 2100 IF C2=0 THEN 8050 2110 IF C2<>2 THEN 8010 2120 IF RM<>10 OR MT<>0 THEN 8030 2130 TL(2)=RM:MT=-1:GOTO 8000 2199 REM *READ* 2200 IF C2=0 THEN 8050 2210 IF C2=3 THEN PRINT"'INSERT COIN.'":GOTO 8200 2220 IF C2<>10 THEN PRINT "Nothing is written on it.":GOTO 8200 2230 PRINT "'...USER ID IS ROAD...'" 2240 PRINT "'TYPE DIR FOR LIST OF COMMANDS...'" 2250 PRINT"The rest is illegible.":GOTO 8200 2299 REM *FIGHT* 2300 PRINT"That won't work.":GOTO 8200 2399 REM *START* 2400 IF C2=0 THEN 8050 2410 IF C2=7 THEN 8020 2420 GOTO 8010 2499 REM *OPEN* 2500 IF C2=0 THEN 8050 2510 IF C2<>9 THEN 8010 2520 IF MF<>0 THEN PRINT"It already is.":GOTO 8200 2530 PRINT"Inside it is a manual.":TL(10)=RM:MF=-1:GOTO 8200 2599 REM *LOOK* 2600 IF C2<>0 THEN 8040 2610 WD=-1:GOTO 8200 2699 REM *WIND* 2700 IF C2<>11 THEN 8010 2710 IF BT=0 THEN PRINT"It's fully wound.":GOTO 8200 2720 PRINT "The clock chimes deafeningly and something flies past." 2730 BT=0:TL(8)=-1 2740 GOTO 8200 2799 REM *EXAMINE* 2800 IF C2=3 OR C2=10 THEN PRINT "Something is written there.":GOTO 8200 2810 IF C2=9 AND MF=0 THEN PRINT"It is closed.":GOTO 8200 2820 IF C2=4 THEN PRINT"It looks beyond repair.":GOTO 8200 2830 IF C2=7 THEN PRINT"This is an ancient mainframe with a console.":GOTO 8200 2840 IF C2=11 THEN PRINT"There is a large handle for winding the clock.":GOTO 8200 2845 IF C2=2 AND MT<>0 THEN PRINT"It is mounted on the computer.":GOTO 8200 2850 PRINT"You see nothing special.":GOTO 8200 7999 REM *COMPLETION MESSAGES* 8000 PRINT"O.K.":GOTO 8200 8010 PRINT"That's silly!":GOTO 200 8020 PRINT"Nothing happens.":GOTO 8200 8030 PRINT"You can't do that now.":GOTO 8200 8040 PRINT"Who's your English teacher?":GOTO 200 8050 PRINT"Please give an object.":GOTO 200 8199 REM *COMPLECTION ROUTINES* 8200 IF CA=0 THEN 8300 8210 CT=CT+1:IF CT<10 THEN 8300 8220 IF RM=10 THEN PRINT"The computer dies with a loud pop." 8230 CD=-1:CA=0:TD$(7)="Dead computer" 8300 IF RM=TL(8) THEN PRINT"A horde of bats carries you out.":RM=1:WD=-1 8310 GOTO 200 9000 DATA You are in front of an old factory with a clock tower. 9002 DATA You are at the bottom of the stairwell. 9004 DATA You are at the top of some basement steps. 9006 DATA You are in a damp celler. 9008 DATA You are in a storeroom. 9010 DATA You are in the cafeteria. 9012 DATA You're at a landing on the stairs. 9014 DATA Around you is a manufacturing area. 9016 DATA You're at a landing on the third floor. 9018 DATA You are in the computer room. 9020 DATA You are inside the clock tower. 9022 DATA You're at the top of the stairs. 9024 DATA You are in a long corridor going east. 9026 DATA You're at the east end of the corridor. 9050 DATA N,1,S,2,E,3,W,4,U,5,D,6,GO,7,EAT,8,KICK,9,INSER,10,DEPOS,10,TYPE,11 9055 DATA TAKE,12,GET,12,DROP,13,THROW,13,INVEN,14,I,14,MOUNT,15,READ,16 9060 DATA FIGHT,17,KILL,17,START,18,POWER,18,OPEN,19,QUIT,20,LOOK,21 9065 DATA WIND,22,EXAMI,23 9100 DATA RATS,TAPE,MACHI,TERMI,COIN,CANDY,COMPU,BATS,DESK,MANUA,CLOCK,ROAD 9105 DATA DIR,ADVEN,COPY,LOGOU,NORTH,SOUTH,EAST,WEST,UP,DOWN 9150 DATA Hungry rats,4,0,Computer tape,5,1,Vending machine,6,0 9155 DATA Broken-down terminal,8,1,Coin,-1,1,Candy Bar,-1,1,Computer,10,0 9160 DATA Bats,13,0,Desk,14,0,Computer Manual,-1,1,Elaborate Clockwork,11,0 9200 DATA 2,0,0,0,0,0 9205 DATA 3,1,0,0,7,0 9210 DATA 0,2,0,0,0,4 9215 DATA 0,0,5,0,3,0 9220 DATA 0,0,0,4,0,0 9225 DATA 0,0,7,0,0,0 9230 DATA 0,0,8,6,9,2 9235 DATA 0,0,0,7,0,0 9240 DATA 0,0,10,0,12,7 9245 DATA 0,0,0,9,0,0 9250 DATA 0,12,0,0,0,0 9255 DATA 11,0,13,0,0,9 9260 DATA 0,0,14,12,0,0 9270 DATA 0,0,0,13,0,0 9999 END