10 POKE 16561,255:POKE 16562,191:CLS:CLEAR 6000:DEFINT P,I,E,K 15 DIM D$(50),N$(156),TY$(156),P(2000),V$(100),F$(100),LB$(60),I(50,19),E(50,5),A(130) 20 REM (C) Copyright 1983 by Anthony wood 30 REM Last update: 4/23/83 40 CLS:PRINT"MICRO-ADVENTURE (C) COPYRIGHT 1983 ANTHONY WOOD" 50 PRINT:LINEINPUT"ENTER ROOM DATA FILENAME: ";F1$ 60 LINEINPUT"ENTER ADVENTURE FLOW FILENAME: ";F2$ 65 LINEINPUT"ENTER TITLE PAGE FILENAME: ";F3$ 66 LINEINPUT"PAUSE TO DISPLAY TABLES? ";Q$ 67 Q$=LEFT$(Q$,1) 68 INPUT"CREATE 1. TEST 2. TAPE 3. DISK/TAPE CODE";W 69 IF W<>1 AND W<>2 AND W<>3 THEN 68 70 MSB(X)=INT((X+65536)/256) 80 LSB(X)=X+65536-MSB(X)*256 90 FOR Y=0 TO 30:FOR X=0 TO 19:I(Y,X)=255:NEXT X,Y 95 F$(0)="COUNT":F$(1)="SIZE":FL=2:FD=2 100 "I",1,F1$ 110 PRINT"Loading room data..." 120 REM DESCRIPTION, NO. ITEMS, ITEMS, N, S, E, W, U, D 125 LINEINPUT #1,X$:IF X$=".END" THEN 1:GOTO 170 130 D$(RN)=X$:INPUT #1,X$:X=VAL(X$):IF X=0 THEN 140 :ELSE FOR Y=0 TO X-1:INPUT#1,R$:GOSUB 1030:I(RN,Y)=Z:NEXT 140 FOR Y=0 TO 5:INPUT #1,E$:E(RN,Y)=VAL(E$):NEXT 160 RN=RN+1:GOTO 125 170 PRINT"Loading flow data..." 180 "I",1,F2$ 190 LINEINPUT #1,C$:IF C$=".END" THEN 1:GOTO 560 200 IF LEFT$(C$,1)="*" THEN R$=RIGHT$(C$,LEN(C$)-1):GOSUB 1010:P(KK)=20:KK=KK+2:P(KK-1)=Z:GOTO 190 210 TK=0:IF LEFT$(C$,2)<>"Y:" AND LEFT$(C$,2)<>"N:" THEN 235 220 IF LEFT$(C$,2)="Y:" THEN TK=192 :ELSE TK=128 230 C$=RIGHT$(C$,LEN(C$)-2) 235 IF C$=".BACKGROUND" THEN BG=KK:GOTO 190 240 IF C$="IN+NOUN" THEN CD=1:GOTO 300 250 IF C$="IN-NOUN" THEN CD=2:GOTO 300 260 IF C$="RM+NOUN" THEN CD=3:GOTO 300 270 IF C$="RM-NOUN" THEN CD=4:GOTO 300 280 IF C$="?IN:NOUN" THEN CD=5:GOTO 300 281 IF C$="NCHK" THEN CD=8:GOTO 300 282 IF C$="DEL:NOUN" THEN CD=9:GOTO 300 283 IF C$="NEND" THEN CD=40:GOTO 300 284 IF C$="EXTB" THEN CD=41:GOTO 300 285 IF C$="RET" THEN CD=7:GOTO 300 286 IF C$="INP" THEN CD=10:GOTO 300 287 IF C$="DIE" THEN CD=42:GOTO 300 290 IF C$="?RM:NOUN" THEN CD=6 :ELSE 310 300 P(KK)=TK OR CD:KK=KK+1:GOTO 190 310 L$=LEFT$(C$,3) 320 IF L$="TY:" THEN P(KK)=11OR TK:KK=KK+2:R$=RIGHT$(C$,LEN(C$)-3):GOSUB 1150:P(KK-1)=Z:GOTO 190 330 IF L$="RM+" THEN CD=12:GOTO 370 340 IF L$="RM-" THEN CD=13:GOTO 370 350 IF L$="IN+" THEN CD=14:GOTO 370 360 IF L$="IN-" THEN CD=15 :ELSE 372 370 P(KK)=TK OR CD:KK=KK+2:R$=RIGHT$(C$,LEN(C$)-3):GOSUB 1030:P(KK-1)=Z:GOTO 190 372 IF L$="VB:" THEN C$=RIGHT$(C$,LEN(C$)-3) :ELSE 380 373 X=0:P(KK)=TK OR 31:KK=KK+2:Q=KK-1 374 I=INSTR(C$,","):X=X+1:IF I=0 THEN 377 :ELSE R$=LEFT$(C$,I-1):GOSUB 1070:P(KK)=Z:KK=KK+1:C$=RIGHT$(C$,LEN(C$)-I):GOTO 374 377 R$=C$:GOSUB 1070:P(Q)=X:P(KK)=Z:KK=KK+1:GOTO 190 380 L$=LEFT$(C$,4):IF L$="INC " THEN CD=16:GOTO 410 390 IF L$="DEC " THEN CD=17:GOTO 410 400 IF L$="CLR " THEN CD=18 :ELSE 420 410 P(KK)=CD OR TK:KK=KK+2:R$=RIGHT$(C$,LEN(C$)-4):GOSUB 1050:P(KK-1)=Z:GOTO 190 420 IF L$="?RM#" THEN P(KK)=TK OR 21:KK=KK+2:P(KK-1)=VAL(RIGHT$(C$,LEN(C$)-4)):GOTO 190 422 IF L$="DEL:" THEN CD=23:GOTO 425 423 IF L$="?RM:" THEN CD=25:GOTO 425 424 IF L$<>"?IN:" THEN 430 :ELSE CD=26 425 P(KK)=CD OR TK:KK=KK+2:R$=RIGHT$(C$,LEN(C$)-4):GOSUB 1030:P(KK-1)=Z:GOTO 190 430 L$=LEFT$(C$,3):IF L$="JP " THEN P(KK)=TK OR 19:KK=KK+2:R$=RIGHT$(C$,LEN(C$)-3):GOSUB 1010:P(KK-1)=Z:GOTO 190 440 IF L$="RM=" THEN P(KK)=TK OR 22:KK=KK+2:P(KK-1)=VAL(RIGHT$(C$,LEN(C$)-3)):GOTO 190 445 L$=LEFT$(C$,5):IF L$<>"?FLG/" THEN 460 446 U$=RIGHT$(C$,LEN(C$)-5):R$=LEFT$(U$,INSTR(U$,"/")-1):V$=RIGHT$(U$,LEN(U$)-LEN(R$)-1) 447 V=VAL(RIGHT$(V$,LEN(V$)-1)):V$=LEFT$(V$,1):IF V$="=" THEN CD=30:GOTO 450 448 IF V$=">" THEN CD=28:GOTO 450 449 IF V$="<" THEN CD=29 :ELSE PRINT"Bad '?flg' stmt: ";C$:END 450 GOSUB 1050:KK=KK+3:P(KK-3)=TK OR CD:P(KK-2)=Z:P(KK-1)=V:GOTO 190 460 IF L$<>"NOUN:" THEN 500 :ELSE P(KK)=32:KK=KK+2:X=0:Q=KK-1:C$=RIGHT$(C$,LEN(C$)-5) 470 I=INSTR(C$,","):X=X+1:IF I=0 THEN 480 :ELSE R$=LEFT$(C$,I-1):GOSUB 1030:P(KK)=Z:KK=KK+1:C$=RIGHT$(C$,LEN(C$)-I):GOTO 470 480 R$=C$:GOSUB 1030:P(Q)=X:P(KK)=Z:KK=KK+1:GOTO 190 500 IF L$=".SIZE" THEN FD=VAL(RIGHT$(C$,LEN(C$)-6)):GOTO 190 510 PRINT"Undefined command: ";C$;" Position:";KK:GOTO 190 550 REM SAVE TO MEMORY 560 IF Q$<>"Y" AND Q$<>"y" THEN 585 565 GOSUB 1160:PRINT"NOUNS:":FOR Y=0 TO N-1:PRINTN$(Y),:NEXT:GOSUB 1160 570 PRINT"VERBS:": FOR Y=0 TO VC-1:PRINTV$(Y),:NEXT:GOSUB 1160 575 PRINT"TEXT:":FOR Y=0 TO MK-1:PRINTTY$(Y):NEXT:GOSUB 1160 580 INPUT"Save to memory";Q$:IF LEFT$(Q$,1)="Y" OR LEFT$(Q$,1)="y" THEN 585 :ELSE END 585 PRINT"Saving adventure to memory..." 586 IF W=1 THEN M=-16384:GOTO 590 587 IF W=2 THEN M=20306 :ELSE M=24593 590 IF M>-1 THEN M=M-65536 595 D=&HC000-M:ST=M 600 SM=M:M=M+20 605 POKE D+SM+18,LSB(M+BG):POKE D+SM+19,MSB(M+BG) 610 FOR Y=0 TO KK-1:POKE D+M,P(Y):M=M+1:NEXT:POKE D+M,255:M=M+1 620 POKE D+SM+16,LSB(M):POKE D+SM+17,MSB(M):IF F3$<>"" THEN 630 625 FOR Y=1 TO 19:READ X:POKE D+M,X:M=M+1:NEXT:GOTO 650 630 "I",1,F3$ 635 INPUT #1,B,L:IF B=0 AND L=0 THEN POKE D+M,B:POKE D+M+1,B:M=M+2::GOTO 650 636 B=B-65536:L=L-65536 640 POKE D+M,LSB(B):POKE D+M+1,MSB(B):POKE D+M+2,LSB(L):POKE D+M+3,MSB(L):M=M+4:FOR Y=1 TO L+65536:INPUT #1,X:POKE D+M,X:M=M+1:NEXT:GOTO 635 650 GOSUB 1130:FOR Y=0 TO RN-1:FOR X=0 TO 5:POKE D+M,E(Y,X):M=M+1:NEXT X,Y 660 FOR Y=1 TO N:A(Y)=M:R$=N$(Y-1):GOSUB 1095:NEXT 670 GOSUB 1130 680 X=N:GOSUB 1110:FOR Y=1 TO VC:A(Y)=M:R$=V$(Y-1):GOSUB 1095:NEXT 690 GOSUB 1130:X=VC:GOSUB 1110 700 FOR Y=1 TO MK:A(Y)=M:R$=TY$(Y-1):GOSUB 1090:NEXT 710 GOSUB1130:X=MK:GOSUB 1110 720 FOR Y=1 TO RN:A(Y)=M:R$=D$(Y-1):GOSUB 1090:NEXT 730 GOSUB 1130:X=RN:GOSUB 1110 740 GOSUB 1130 750 FOR Y=0 TO RN-1:FOR X=0 TO 19:POKE D+M,I(Y,X):M=M+1:NEXT X,Y 760 GOSUB 1130 770 POKE D+M,0:POKE D+M+1,FD:M=M+2:FOR Y=2 TO FL:POKE D+M,0:M=M+1:NEXT 780 GOSUB 1130:POKE D+M,255:INPUT"ENTER ANY ITEMS INTO INVENTORY";Q$ 782 IF LEFT$(Q$,1)<>"Y" THEN 800 784 INPUT"HOW MANY";Y:FOR X=1 TO Y:INPUT"ITEM ";R$:GOSUB 1030 786 POKE D+M,Z:M=M+1:NEXT:POKE D+M,255 800 PRINT"Len = ";M-SM-16:PRINT"START:";SM+65536-16;", END:";M+65536:PRINT"LOAD START:";SM+65536-16+D,"END:";M+65536+D 810 POKE &HFFF0,LSB(ST):POKE &HFFF1,MSB(ST):POKE &HFFF2,LSB(ST+D):POKE &HFFF3,MSB(ST+D):POKE &HFFF4,LSB(M-ST-65535):POKE &HFFF5,MSB(M-ST-65535):END 1000 REM SEARCH LABLE FILE FOR R$. ADD IF NESSASERY 1010 FOR Z=0 TO LB:IF R$=LB$(Z) THEN RETURN :ELSE NEXT:LB$(LB)=R$:Z=LB:LB=LB+1:RETURN 1020 REM SEARCH NOUN LIST FOR R$. ADD IS NESSASERY 1030 FOR Z=0 TO N:IF N$(Z)=R$ THEN RETURN :ELSE NEXT:N$(N)=R$:Z=N:N=N+1:RETURN 1040 REM FIND THEN FLAG R$. ADD IF NEEDED 1050 FOR Z=0 TO FL:IF F$(Z)=R$ THEN RETURN :ELSE NEXT:F$(FL)=R$:Z=FL:FL=FL+1:RETURN 1060 REM FIND A VERB OR ADD TO TABLE 1070 FOR Z=0 TO VC:IF V$(Z)=R$ THEN RETURN :ELSE NEXT:V$(VC)=R$:Z=VC:VC=VC+1:RETURN 1080 REM POKE STRING R$+C/R @ M 1090 IF R$="" THEN RETURN :ELSE FOR Z=1 TO LEN(R$):POKE D+M,ASC(MID$(R$,Z,1)):M=M+1:NEXT:POKE D+M,13:M=M+1:RETURN 1094 REM POKE IN R$ + 0 AT M 1095 IF R$="" THEN RETURN :ELSEFOR Z=1 TO LEN(R$):POKE D+M,ASC(MID$(R$,Z,1)):M=M+1:NEXT:POKE D+M,0:M=M+1:RETURN 1100 REM SAVE A(X) TO M 1110 FOR Y=1 TO X:POKE D+M,LSB(A(Y)):M=M+1:POKE D+M,MSB(A(Y)):M=M+1:NEXT:POKE D+M,0:POKE D+M+1,0:M=M+2:RETURN 1120 REM PUT VALUE M INTO SM AND INC SM 1130 POKE D+SM,LSB(M):POKE D+SM+1,MSB(M):SM=SM+2:RETURN 1140 REM ADD A TY TO TY$ 1150 FOR Z=0 TO MK:IF TY$(Z)=R$ THEN RETURN :ELSE NEXT:TY$(MK)=R$:Z=MK:MK=MK+1:RETURN 1160 PRINT:PRINT"Press to continue." 1170 IF INKEY$<>CHR$(13) THEN 1170 :ELSE RETURN 2000 DATA 00,60,13,0,78,79,32,84,73,84,76,69,32,80,65,71,69,0,0