10 DIM ML$(10),PO(10),SN$(50),SX(50),SY(50),SL(50)
11 DIM PN$(10)
12 RESTORE :: FOR A=1 TO 10 :: READ PN$(A) :: NEXT A
13 DATA HURT,CURSE,TELEPORT,LEARN,STRENGTH,FREEZE,HURTMORE,HOLY,SHIELD,HEAL
14 PN$(0)="NONE"
15 CL$=CHR$(10)&CHR$(13)
20 OPEN #1:"DSK5.USERNAME",INPUT,DISPLAY,VARIABLE 80
30 INPUT #1:N$ :: CLOSE #1
40 CALL LINK("RPRINT","GREETINGS, "&N$&CL$)
50 OPEN #1:"DSK5.DNAMES",INPUT,DISPLAY,VARIABLE 80
60 IF EOF(1)THEN 100
70 INPUT #1:A$
80 IF A$=N$ THEN 200 ELSE 60
100 CLOSE #1
110 CALL LINK("RPRINT","WELCOME TO CREATURE OF THE MAZE 2!"&CL$)
115 CALL LINK("RPRINT","ADDING YOU TO USER LIST..."&CL$)
120 OPEN #1:"DSK5.DNAMES",APPEND,DISPLAY,VARIABLE 80 :: PRINT #1:N$ :: CLOSE #1
130 OPEN #1:"DSK5.DPLACES",APPEND,DISPLAY,VARIABLE 80 :: PRINT #1:N$:1:1:1 :: CLOSE #1
140 OPEN #1:"DSK5.D"&N$,OUTPUT,DISPLAY,VARIABLE 80
150 PRINT #1:1:1:1:20:20:20:0:0:0:0:0:0:0:0:0:0:0:0:50
200 CLOSE #1
210 CALL LINK("RPRINT","LOADING YOUR STATS..."&CL$)
220 OPEN #1:"DSK5.D"&N$,INPUT,DISPLAY,VARIABLE 80
230 INPUT #1:LEV,X,Y,LIFE,AST,ASK,DSK,GOLD
240 FOR A=1 TO 10 :: INPUT #1:PO(A) :: NEXT A
250 INPUT #1:TURN :: CLOSE #1
255 A=1
260 OPEN #1:"DSK5.DPLACES",INPUT,DISPLAY,VARIABLE 80
270 IF EOF(1)THEN 300
280 INPUT #1:SN$(A),SX(A),SY(A),SL(A) :: A=A+1
285 IF SN$(A-1)=N$ THEN X=A-1
290 GOTO 270
300 CLOSE #1
310 OPEN #1:"DSK5.DPLACES",OUTPUT,DISPLAY,VARIABLE 80
320 FOR B=1 TO A-1 :: IF B=X THEN 340
330 PRINT #1:SN$(B):SX(B):SY(B):SL(B)
340 NEXT B
345 CLOSE #1
350 CALL LINK("RPRINT","LOADING DUNGEON..."&CL$)
360 OPEN #1:"DSK5.LEVEL"&STR$(LEV),INPUT,DISPLAY,VARIABLE 80
370 FOR A=1 TO 10 :: LINPUT #1:ML$(A) :: NEXT A
380 CLOSE #1
385 MM=2^(LEVEL-1)*10
390 ON ASC(SEG$(ML$(Y),X,1))-37 GOTO 1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,10000
400 CALL LINK("RPRINT",CL$&"TELEPORT TO WHERE?"&CL$)
401 B=A-47
405 CALL LINK("RPRINT","VALUES FROM 0-9"&CL$)
410 CALL LINK("RPRINT","X=")
420 CALL LINK("RSGET",NX) :: IF NX<48 OR NX>57 THEN 420
430 NX=NX-48 :: CALL LINK("RPRINT",STR$(NX)&CL$)
440 CALL LINK("RPRINT","Y=")
450 CALL LINK("RSGET",NY) :: IF NY<48 OR NY>57 THEN 450
460 NY=NY-48 :: CALL LINK("RPRINT",STR$(NY)&CL$)
470 CALL LINK("RPRINT","("&STR$(NX)&","&STR$(NY)&") - ARE YOU SURE?"&CL$)
475 CALL LINK("RSGET",A) :: IF A<>89 AND A<>78 THEN 475
480 IF A=78 THEN 11070
485 PO(B)=0
490 X=NX+1 :: Y=NY+1 :: IF SEG$(ML$(Y),X,1)<>"#" THEN 385
495 CALL LINK("RPRINT","YOU MATERIALIZED INSIDE A WALL! YOU HAVE DIED!"&CL$)
496 GOTO 13000
500 PO(A-47)=0
510 CALL LINK("RPRINT","LEARN SPELL ACTIVATED!"&CL$)
520 ASK=ASK+200 :: DSK=DSK+200 :: GOTO 11070
600 PO(A-47)=0
610 CALL LINK("RPRINT","STRENGTH SPELL ACTIVATED!"&CL$)
620 AST=AST+200 :: GOTO 11070
700 PO(A-47)=0
710 CALL LINK("RPRINT","SHIELD SPELL ACTIVATED!"&CL$)
720 DSK=DSK+1000 :: GOTO 11070
800 PO(A-47)=0
810 CALL LINK("RPRINT","HEAL SPELL ACTIVATED!"&CL$)
820 LIFE=LIFE+2000 :: GOTO 11070
1000 ON INT(RND*14)+1 GOTO 1010,1050,1100,1150,1200,1250,1300,1350,1400,1450,1500,1550,1600,1650
1010 CALL LINK("RPRINT",CL$&"THERE IS NOTHING HERE"&CL$)
1020 GOTO 11000
1050 CALL LINK("RPRINT","YOU HAVE FOUND SOME FOOD!"&CL$)
1060 LIFE=LIFE+INT(RND*50)+1
1070 GOTO 11000
1100 CALL LINK("RPRINT","YOU HAVE FOUND SOME GOLD PIECES!"&CL$)
1110 GOLD=GOLD+INT(RND*500)+1 :: GOTO 11000
1150 CALL LINK("RPRINT","YOU HAVE MET A SLIME MOLD!"&CL$)
1155 ESC=1
1160 MSK=INT(RND*(.3*MM))+1 :: MST=INT(RND*(.4*MM))+1 :: GOTO 12000
1200 IF LEV<4 THEN 1010
1210 CALL LINK("RPRINT","A VAMPIRE APPEARS!"&CL$)
1215 ESC=1
1220 MSK=INT(RND*(.7*MM))+1 :: MST=INT(RND*(.8*MM))+1 :: GOTO 12000
1250 IF LEV<3 THEN 1010
1260 CALL LINK("RPRINT","YOU MUST BATTLE AN OGRE!"&CL$)
1265 ESC=1
1270 MSK=INT(RND*(.3*MM))+1 :: MST=INT(RND*(.8*MM))+1 :: GOTO 12000
1300 IF LEV<5 THEN 1010
1310 CALL LINK("RPRINT","A GREMLIN ATTACKS!"&CL$)
1320 MSK=INT(RND*(.6*MM))+1 :: MST=INT(RND*(.2*MM))+1 :: ESC=1 :: GOTO 12000
1350 IF LEV<8 THEN 1010
1360 CALL LINK("RPRINT","A DEMON MATERIALIZES!"&CL$)
1370 MSK=INT(RND*(.8*MM))+1 :: MST=INT(RND*(.6*MM))+1 :: ESC=1 :: GOTO 12000
1400 IF LEV<7 THEN 1010
1410 CALL LINK("RPRINT","A GIANT SPIDER RUNS AT YOU!"&CL$)
1420 MST=INT(RND*(.6*MM))+1 :: MST=INT(RND*(.4*MM))+1 :: ESC=1 :: GOTO 12000
1500 IF LEV<9 THEN 1010
1510 CALL LINK("RPRINT","YOU ARE CONFRONTED BY A GIANT SCORPION!"&CL$)
1520 MSK=INT(RND*(.7*MM))+1 :: MST=INT(RND*(.5*MM))+1
1530 ESC=1 :: GOTO 12000
1550 IF LEV<6 THEN 1010
1560 CALL LINK("RPRINT","THERE IS A GIANT ANT HERE!"&CL$)
1570 MSK=INT(RND*(.6*MM))+1 :: MST=INT(RND*(.7*MM))+1 :: ESC=1 :: GOTO 12000
1600 IF LEV<2 THEN 1010
1610 CALL LINK("RPRINT","A ZOMBIE SHUFFLES TOWARDS YOU!"&CL$)
1620 MSK=INT(RND*(.2*MM))+1 :: MST=INT(RND*(.5*MM))+1 :: ESC=1 :: GOTO 12000
1650 IF LEV<10 THEN 1010
1660 CALL LINK("RPRINT","AN EVIL WIZARD APPEARS!"&CL$)
1670 MSK=INT(RND*(.9*MM))+1 :: MST=INT(RND*(.8*MM))+1 :: ESC=1 :: GOTO 12000
2000 CALL LINK("RPRINT","THERE IS A STORE HERE."&CL$)
2010 CALL LINK("RPRINT","DO YOU WANT TO BUY SOMETHING?"&CL$)
2020 CALL LINK("RSGET",A) :: A$=CHR$(A) :: IF A$<>"Y" AND A$<>"N" THEN 2020
2030 IF A$="N" THEN 11000
2040 CALL LINK("RPRINT","WHAT DO YOU WANT TO BUY?"&CL$)
2050 CALL LINK("RPRINT","1) LIFE"&CL$)
2060 CALL LINK("RPRINT","2) NEW SWORD"&CL$)
2070 CALL LINK("RPRINT","3) NEW SHIELD"&CL$)
2080 CALL LINK("RPRINT","4) "&PN$(LEV)&" SPELL"&CL$)
2090 CALL LINK("RPRINT","5) NOTHING"&CL$)
2100 CALL LINK("RPRINT",CL$&"(1-5)->")
2110 CALL LINK("RSGET",A) :: IF A<49 OR A>53 THEN 2110
2115 CALL LINK("RPRINT",CL$)
2120 ON A-48 GOTO 2130,2200,2300,2400,11000
2130 A=INT(RND*(LEV*1000))+1
2140 CALL LINK("RPRINT","I WANT "&STR$(A)&" GOLD FOR "&STR$(LEV*100)&" UNITS."&CL$)
2150 CALL LINK("RPRINT","DO YOU WANT IT?"&CL$)
2160 CALL LINK("RSGET",B) :: IF B<>89 AND B<>78 THEN 2160
2170 IF B=78 THEN 11000
2180 IF GOLD<A THEN CALL LINK("RPRINT","YOU HAVEN'T ENOUGH MONEY. GET LOST!"&CL$) :: GOTO 11000
2190 GOLD=GOLD-A :: LIFE=LIFE+LEV*100 :: GOTO 11000
2200 A=INT(RND*((LEV*1.2)*1000))+1
2210 CALL LINK("RPRINT","I HAVE A +"&STR$(LEV)&" SWORD FOR ONLY "&STR$(A)&" GOLD PIECES"&CL$)
2220 CALL LINK("RPRINT","DO YOU WANT IT?"&CL$)
2230 CALL LINK("RSGET",B) :: IF B<>89 AND B<>78 THEN 2230
2240 IF B=78 THEN 11000
2250 IF GOLD<A THEN CALL LINK("RPRINT","GET SOME MONEY, THEN COME BACK."&CL$) :: GOTO 11000
2260 GOLD=GOLD-A :: ASK=ASK+LEV :: GOTO 11000
2300 A=INT(RND*((LEV*1.4)*1000)+1
2310 CALL LINK("RPRINT","I HAVE A NICE +"&STR$(LEV)&" SHIELD FOR JUST "&STR$(A)&" GOLD."&CL$)
2320 CALL LINK("RPRINT","DO YOU WANT IT?"&CL$)
2330 CALL LINK("RSGET",B) :: IF B<>78 AND B<>89 THEN 2330
2340 IF B=78 THEN 11000
2350 IF GOLD<A THEN CALL LINK("RPRINT","YOU DON'T HAVE ENOUGH MONEY!"&CL$) :: GOTO 11000
2360 GOLD=GOLD-A :: DSK=DSK+LEV :: GOTO 11000
2400 A=INT(RND*LEV*1000)+500
2410 CALL LINK("RPRINT","THE "&PN$(LEV)&" SPELL COSTS "&STR$(A)&" GOLD."&CL$)
2420 CALL LINK("RPRINT","DO YOU WANT IT?"&CL$)
2430 CALL LINK("RSGET",B) :: IF B<>78 AND B<>89 THEN 2430
2440 IF B=78 THEN 11000
2450 IF GOLD<A THEN CALL LINK("RPRINT","TOO BAD. YOU CAN'T AFFORD IT."&CL$) :: GOTO 11000
2460 FOR B=1 TO 10 :: IF PO(B)=0 THEN 2480
2470 NEXT B :: CALL LINK("RPRINT","YOU CAN'T HOLD ANY MORE SPELLS!"&CL$) :: GOTO 11000
2480 GOLD=GOLD-A :: PO(B)=LEV :: GOTO 11000
3000 CALL LINK("RPRINT","THERE IS A LADDER LEADING UP HERE. USE IT?"&CL$)
3010 CALL LINK("RSGET",A) :: IF A<>78 AND A<>89 THEN 3010
3020 IF A=78 THEN 11000
3030 LEV=LEV-1 :: GOTO 350
4000 CALL LINK("RPRINT","THERE IS A LADDER GOING DOWN HERE. USE IT?"&CL$)
4010 CALL LINK("RSGET",A) :: IF A<>78 AND A<>89 THEN 4010
4020 IF A=78 THEN 11000
4030 LEV=LEV+1 :: GOTO 350
5000 CALL LINK("RPRINT","YOU ARE IN A FAST MOVING RIVER"&CL$)
5010 IF RND>.3 THEN 11000
5020 CALL LINK("RPRINT","YOU SLIP AND HURT YOURSELF."&CL$)
5030 LIFE=LIFE-(INT(RND*10)+1)
5040 ASK=ASK-(INT(RND*10)+1)
5050 DSK=DSK-(INT(RND*10)+1)
5060 AST=AST-(INT(RND*10)+1)
5070 GOLD=GOLD-(INT(RND*10)+1)
5080 PO(INT(RND*10)+1)=0
5090 IF LIFE<1 THEN LIFE=1
5100 IF DSK<1 THEN DSK=1
5110 IF ASK<1 THEN ASK=1
5120 IF AST<1 THEN AST=1
5130 IF GOLD<1 THEN GOLD=0
5140 GOTO 11000
6000 CALL LINK("RPRINT","YOU ARE ON A BRIDGE OVER A FAST MOVING RIVER."&CL$) :: GOTO 11000
7000 CALL LINK("RPRINT","THERE IS A FOUNTAIN HERE. DRINK FROM IT?"&CL$)
7010 CALL LINK("RSGET",A) :: IF A<>78 AND A<>89 THEN 7010
7020 IF A=78 THEN 11000
7030 ON INT(RND*4)+1 GOTO 7100,7200,7300,7400
7100 CALL LINK("RPRINT","VERY REFRESHING! LIFE IS UP!"&CL$)
7110 LIFE=LIFE+INT(RND*LEV*100)+1 :: GOTO 11000
7200 CALL LINK("RPRINT","YOU FOUND SOME GOLD IN THE FOUNTAIN!"&CL$)
7210 GOLD=GOLD+INT(RND*1000)+1
7220 GOTO 11000
7300 CALL LINK("RPRINT","!!POISON!! LIFE IS DOWN!"&CL$)
7310 LIFE=LIFE-INT(RND*LEV*10)-1 :: IF LIFE<1 THEN LIFE=1
7320 GOTO 11000
7400 CALL LINK("RPRINT","THE FOUNTAIN COMES TO LIFE AND ATTACKS YOU!"&CL$)
7410 MSK=INT(RND*LEV*10)+1 :: MST=INT(RND*LEV*10)+1 :: ESC=2 :: GOTO 12000
8000 CALL LINK("RPRINT","AHHHHHH! YOU FELL DOWN A TRAP DOOR!!"&CL$)
8010 LEV=LEV+1 :: GOTO 350
9000 CALL LINK("RPRINT","THERE IS AN ELEVATOR FOR ANY FLOOR HERE. USE IT?"&CL$)
9010 CALL LINK("RSGET",A) :: IF A<>78 AND A<>89 THEN 9010
9020 IF A=78 THEN 11000
9030 CALL LINK("RPRINT","WHICH LEVEL DO YOU WANT TO GO TO? (0-9)"&CL$)
9040 CALL LINK("RSGET",A) :: IF A<48 OR A>57 THEN 9040
9050 LEV=A-47 :: GOTO 350
10000 CALL LINK("RPRINT","I DON'T KNOW HOW YOU GOT HERE, BUT THE MONSTER ISN'T READY."&CL$) :: GOTO 11830
11000 CALL LINK("RPRINT",CL$&CL$&"YOU ARE AT ("&STR$(X-1)&","&STR$(Y-1)&") ON LEVEL "&STR$(LEV-1)&CL$)
11005 TURN=TURN-1 :: CALL LINK("RPRINT","YOU HAVE "&STR$(TURN)&" TURNS LEFT"&CL$)
11010 CALL LINK("RPRINT","YOU CAN GO:"&CL$)
11015 IF Y=1 THEN 11025
11020 IF SEG$(ML$(Y-1),X,1)<>"#" THEN CALL LINK("RPRINT","NORTH   ")
11025 IF Y=10 THEN 11035
11030 IF SEG$(ML$(Y+1),X,1)<>"#" THEN CALL LINK("RPRINT","SOUTH   ")
11035 IF X=10 THEN 11045
11040 IF SEG$(ML$(Y),X+1,1)<>"#" THEN CALL LINK("RPRINT","EAST    ")
11045 IF X=1 THEN 11060
11050 IF SEG$(ML$(Y),X-1,1)<>"#" THEN CALL LINK("RPRINT","WEST    ")
11060 CALL LINK("RPRINT",CL$&CL$)
11070 CALL LINK("RPRINT","COMMAND (N,S,E,W,M,S,Q,I,?):")
11080 CALL LINK("RSGET",A) :: IF A+1=1 THEN 11080
11090 A$=CHR$(A)
11100 IF A$<>"?" THEN 11200
11110 CALL LINK("RPRINT",CL$&CL$&"(N)ORTH"&CL$)
11120 CALL LINK("RPRINT","(S)OUTH"&CL$&"(E)AST"&CL$&"(W)EST"&CL$)
11130 CALL LINK("RPRINT","(M)AGIC"&CL$&"(S)TATISTICS"&CL$)
11140 CALL LINK("RPRINT","(Q)UIT"&CL$&"(I)NSTRUCTIONS"&CL$&"? THIS LIST"&CL$)
11150 CALL LINK("RPRINT",CL$&"PRESS ANY KEY..."&CL$)
11160 CALL LINK("RSGET",A) :: IF A+1=1 THEN 11160
11170 GOTO 11070
11200 IF A$<>"N" THEN 11300
11210 IF Y=1 THEN 11080
11220 IF SEG$(ML$(Y-1),X,1)<>"#" THEN Y=Y-1 :: GOTO 385
11300 IF A$<>"S" THEN 11400
11310 IF Y=10 THEN 11080
11320 IF SEG$(ML$(Y+1),X,1)<>"#" THEN Y=Y+1 :: GOTO 385
11400 IF A$<>"E" THEN 11500
11410 IF X=1 THEN 11080
11420 IF SEG$(ML$(Y),X-1,1)<>"#" THEN X=X-1 :: GOTO 385
11500 IF A$<>"W" THEN 11600
11510 IF X=10 THEN 11080
11520 IF SEG$(ML$(Y),X+1,1)<>"#" THEN X=X+1 :: GOTO 385
11600 IF A$<>"M" THEN 11699
11610 CALL LINK("RPRINT",CL$&"YOU HAVE THESE SPELLS"&CL$)
11620 FOR A=1 TO 10
11630 CALL LINK("RPRINT",STR$(A-1)&") "&PN$(PO(A))
11640 NEXT A
11650 CALL LINK("RPRINT",CL$&"USE WHICH SPELL? (E=EXIT)"&CL$)
11660 CALL LINK("RSGET",A) :: IF A=69 THEN 11070
11670 IF A<48 OR A>57 THEN 11660
11672 IF PO(A-47)=0 THEN CALL LINK("RPRINT","THAT IS NOT A SPELL!"&CL$) :: GOTO 11070
11674 ON PO(A-47)GOTO 11676,11676,400,500,600,11676,11676,11676,700,800
11676 CALL LINK("RPRINT","CAN ONLY USE DURING A BATTLE!"&CL$) :: GOTO 11070
11699 IF A$<>"S" THEN 11799
11700 CALL LINK("RPRINT",CL$&"YOUR STATISTICS"&CL$&"---------------"&CL$)
11710 CALL LINK("RPRINT","LIFE="&STR$(LIFE)&CL$)
11720 CALL LINK("RPRINT","ATTACK STRENGTH="&STR$(AST)&CL$)
11730 CALL LINK("RPRINT","ATTACK SKILL="&STR$(ASK)&CL$)
11740 CALL LINK("RPRINT","DEFEND SKILL="&STR$(DSK)&CL$)
11750 CALL LINK("RPRINT","GOLD="&STR$(GOLD)&CL$)
11760 CALL LINK("RPRINT",CL$&"PRESS A KEY..."&CL$)
11770 CALL LINK("RSGET",A) :: IF A+1=1 THEN 11770 ELSE 11070
11799 IF A$<>"Q" THEN 11899
11800 CALL LINK("RPRINT","QUIT - ARE YOU SURE?"&CL$)
11810 CALL LINK("RSGET",A) :: IF A<>78 AND A<>89 THEN 11810
11820 IF A=78 THEN 11070
11830 CALL LINK("RPRINT","SAVING STATS..."&CL$)
11840 OPEN #1:"DSK5.DPLACES",APPEND,DISPLAY,VARIABLE 80 :: PRINT #1:N$:X:Y:LEV :: CLOSE #1
11850 OPEN #1:"DSK5.D"&N$,OUTPUT,DISPLAY,VARIABLE 80
11860 PRINT #1:LEV:X:Y:LIFE:AST:ASK:DSK:GOLD
11870 FOR A=1 TO 10 :: PRINT #1:PO(A) :: NEXT A :: PRINT #1:TURN :: CLOSE #1
11880 CALL LINK("RPRINT","RETURNING YOU TO MAIN SYSTEM..."&CL$)
11890 RUN "DSK5.MAIN"
11899 IF A$<>"I" THEN 11080
11900 CALL LINK("RPRINT","INSTRUCTIONS-PRESS S TO STOP OR SPACE TO PAUSE"&CL$)
11910 OPEN #1:"DSK1.COTM2DOCS",INPUT,DISPLAY,VARIABLE 80
11920 IF EOF(1)THEN 11980
11930 LINPUT #1:A$
11940 CALL LINK("RPRINT",A$&CL$)
11950 CALL LINK("RSGET",A) :: IF A<>32 AND A<>83 THEN 11920
11960 IF A=83 THEN CALL LINK("RPRINT","STOPPED"&CL$) :: CLOSE #1 :: GOTO 11070
11970 CALL LINK("RPRINT","...(P TO PROCEED)..."&CL$)
11975 CALL LINK("RSGET",A) :: IF A<>80 THEN 11975 ELSE 11920
11980 CLOSE #1
11990 GOTO 11070
12000 CALL LINK("RPRINT","DURING A BATTLE:"&CL$)
12005 CALL LINK("RPRINT","PRESS 'M' TO USE MAGIC"&CL$)
12010 IF ESC<>0 THEN CALL LINK("RPRINT","PRESS 'E' TO ESCAPE"&CL$)
12020 CALL LINK("RPRINT","YOU:AST="&STR$(AST)&" ASK="&STR$(ASK)&" DSK="&STR$(DSK)&CL$)
12025 CALL LINK("RPRINT","LIFE="&STR$(LIFE)&CL$)
12030 CALL LINK("RPRINT","IT:SK="&STR$(MSK)&"  ST="&STR$(ST)&CL$)
12040 CALL LINK("RPRINT",CL$&"PRESS SPACE TO BEGIN THE BATTLE!"&CL$)
