1880 IF X$ = CHR$(13) THEN IF I > 0 THEN 2030 ELSE BEEP : GOTO 1830
1890 IF X$ = CHR$(8) THEN IF I = 0 THEN BEEP : GOTO 1830 ELSE X = X - 1 : LOCATE 22,X : PRINT " "; : PASS$ = LEFT$(PASS$, LEN(PASS$) - 1) : I = LEN(PASS$) : GOTO 1830
1900 IF (X$ > = "A" AND X$ < = "Z") OR (X$ > = "a" AND X$ < = "z") OR X$ = " " THEN 1910 ELSE 1830
1910 IF LEN(PASS$) = 20 THEN BEEP : GOTO 1830
1920 PRINT X$;
1930 PASS$ = PASS$ + X$
1940 I = LEN(PASS$)
1950 X = X + 1
1960 GOTO 1830
1970 CLOSE 5
1980 OPEN "R",5,"PLAYERS.DAT",160
1990 FIELD 5,8 AS CO$(1),8 AS CO$(2),8 AS CO$(3),8 AS CO$(4),8 AS CO$(5)
2000 FIELD 5,40 AS DUMMY$,8 AS PA$(1),8 AS PA$(2),8 AS PA$(3),8 AS PA$(4),8 AS PA$(5)
2010 FIELD 5,80 AS DUMMY$,8 AS DLVL$,8 AS LVL$,2 AS ST$,2 AS IN$,2 AS WI$,2 AS CO$,2 AS DX$,2 AS CH$,8 AS EXPR$,8 AS PTS$,8 AS GOLD$,2 AS WE$,2 AS SH$,2 AS AR$,2 AS CL$,2 AS HE$,2 AS BO$,8 AS MA$,2 AS SP1$,2 AS SP2$,2 AS SP3$,2 AS SP4$
2570 IF X = 5 THEN LOCATE 15,11:PRINT "Press 0 for help when playing, and Q to quit. Now hit a key." : WHILE INKEY$ = "" : WEND : GOSUB 2580 : LOGIN = 1 : GOTO 5720 ELSE IF X = 9 THEN 2480 ELSE 2560
4920 FOR J = 1 TO 76 STEP 1 - 2 * (I / 2 = INT(I / 2))
4930 IF Z(I,J) = 32 THEN 5150
4940 IF Z(I,J - 1) = 32 THEN X1 = 0 ELSE X1 = 1
4950 IF Z(I - 1,J) = 32 THEN X2 = 0 ELSE X2 = 1
4960 IF Z(I,J + 1) = 32 THEN X3 = 0 ELSE X3 = 1
4970 IF Z(I + 1,J) = 32 THEN X4 = 0 ELSE X4 = 1
4980 IF X1 AND X2 AND X3 AND X4 THEN X = 206 : GOTO 5140
4990 IF X1 AND X2 AND X3 THEN X = 202 : GOTO 5140
5000 IF X2 AND X3 AND X4 THEN X = 204 : GOTO 5140
5010 IF X3 AND X4 AND X1 THEN X = 203 : GOTO 5140
5020 IF X4 AND X1 AND X2 THEN X = 185 : GOTO 5140
5030 IF X1 AND X2 THEN X = 188 : GOTO 5140
5040 IF X2 AND X3 THEN X = 200 : GOTO 5140
5050 IF X3 AND X4 THEN X = 201 : GOTO 5140
5060 IF X4 AND X1 THEN X = 187 : GOTO 5140
5070 IF X1 AND X3 THEN X = 205 : GOTO 5140
5080 IF X2 AND X4 THEN X = 186 : GOTO 5140
5090 IF X1 THEN X = 181 : GOTO 5140
5100 IF X2 THEN X = 208 : GOTO 5140
5110 IF X3 THEN X = 198 : GOTO 5140
5120 IF X4 THEN X = 210 : GOTO 5140
5130 X = 219
5140 Z(I,J) = X
5150 NEXT
5160 NEXT
5170 FOR I = 2 TO 75
5180 IF Z(1,I) = 32 THEN J = I : GOTO 5200
5190 NEXT
5200 IF J > 2 THEN IF Z(2,J - 1) < > 32 THEN Z(1,J - 1) = 185 ELSE Z(1,J - 1) = 188 ELSE Z(1,1) = 186
5210 IF J < 74 THEN IF Z(2,J + 2) < > 32 THEN Z(1,J + 2) = 204 ELSE Z(1,J + 2) = 200 ELSE Z(1,76) = 186
5220 FOR I = 2 TO 75
5230 IF Z(23,I) = 32 THEN J = I : GOTO 5250
5240 NEXT
5250 IF J > 2 THEN IF Z(22,J - 1) < > 32 THEN Z(23,J - 1) = 185 ELSE Z(23,J - 1) = 187 ELSE Z(23,1) = 186
5260 IF J < 74 THEN IF Z(22,J + 2) < > 32 THEN Z(23,J + 2) = 204 ELSE Z(23,J + 2) = 201 ELSE Z(23,76) = 186
5270 NM = 0
5280 FOR I = 2 TO 22
5290 FOR J = 2 TO 75
5300 IF Z(I,J) = 32 AND Z(I + 1,J) = 32 AND Z(I,J + 1) < > 32 AND Z(I,J + 1) < > 35 AND Z(I - 1,J) < > 35 AND RND<.9 THEN Z(I,J) = 35 : NM = NM + 1
5310 IF Z(I,J) = 32 AND Z(I + 1,J) = 32 AND Z(I,J - 1) < > 32 AND Z(I,J - 1) < > 36 AND Z(I - 1,J) < > 36 AND RND<.9 THEN Z(I,J) = 36
5311 IF Z(I,J) = 32 AND Z(I + 1,J) = 32 AND Z(I - 1,J) = 32 AND Z(I,J + 1) = 32 AND Z(I,J - 1) = 32 THEN Z(I,J) = 126
5320 NEXT
5330 NEXT
5331 FOR I=1 TO INT(RND*10+5)
5332 M=INT(RND*20+2):N=INT(RND*73+2):IF Z(M,N)<>32 THEN 5332 ELSE Z(M,N)=94
5333 M=INT(RND*20+2):N=INT(RND*73+2):IF Z(M,N)=32 THEN Z(M,N)=111
5334 NEXT:TIMER OFF:CLS
5340 XCO = 1
5350 FOR I = 2 TO 75
5360 IF Z(1,I) = 32 THEN YCO = I : GOTO 5380
5370 NEXT
5380 LOCATE XCO,YCO
5390 PRINT "X ";
5400 GOSUB 6550:LL=2
5410 RETURN
5420 CLS
5430 LOCATE 10,20
5440 PRINT "You made it as far as level" STR$(MAXDLVL#)"!"
5450 LOCATE 11,20
5460 PRINT "Which level will you start at now?"
5470 I = 0
5480 X = 25
5490 L$ = ""
5500 LOCATE 13,X,1
5510 X$ = ""
5520 WHILE X$ = ""
5530 X$ = INKEY$
5540 WEND
5550 IF X$ = CHR$(13) THEN IF I > 0 THEN 5630 ELSE BEEP : GOTO 5500
5560 IF X$ = CHR$(8) THEN IF I = 0 THEN BEEP : GOTO 5500 ELSE X = X - 1 : LOCATE 13,X : PRINT " "; : L$ = LEFT$(L$, LEN(L$) - 1) : I = LEN(L$) : GOTO 5500
5570 IF X$ < "0" OR X$ > "9" OR LEN(L$) = 8 THEN BEEP : GOTO 5500
5580 PRINT X$;
5590 L$ = L$ + X$
5600 X = X + 1
5610 I = LEN(L$)
5620 GOTO 5500
5630 LOCATE ,,0
5640 DLVL# = VAL(L$)
5650 CLOSE 1
5660 OPEN "R",1,"DUNGEON.DAT",2
5670 REC = LOF(1) / 2
5680 REC = REC / 1750
5690 CLOSE 1
5700 IF REC = 0 THEN DLVL# = 1 : GOTO 5720
5710 IF DLVL# > REC OR DLVL#=0 THEN LOCATE 15,18 : PRINT "You have only"REC"levels at your disposal.." : LOCATE 13,25 : PRINT STRING$(8,32); : GOTO 5430 ELSE 6470
5720 GOSUB 3180
5730 IF PWL THEN RETURN
5740 X = 0
5750 X$ = INKEY$
5760 WHILE X$ = ""
5770 X$ = INKEY$
5780 WEND
5790 X = VAL(X$)
5800 IF X THEN 5890
5810 IF LEN(X$)<>2 THEN 6000
5820 SP=ASC(MID$(X$,2)):SPN=0
5830 IF SP>58 AND SP<69 THEN SPN=1:SP=SP-58
5840 IF SP>93 AND SP<104 THEN SPN=2:SP=SP-93
5850 IF SP>83 AND SP<94 THEN SPN=3:SP=SP-83
5860 IF SP>103 AND SP<114 THEN SPN=4:SP=SP-103
5870 ON SPN GOTO 10250,10470,10760,11290
5880 GOTO 5730
5890 IF MON THEN 5950
5900 IF X = 2 THEN GOSUB 6040
5901 IF X = 3 THEN GOSUB 5981:GOTO 5730
5910 IF X = 4 THEN GOSUB 6260
5920 IF X = 6 THEN GOSUB 6320
5930 IF X = 8 THEN GOSUB 6380
5940 GOTO 5730
5950 IF X = 1 THEN 7840
5951 IF X = 3 THEN GOSUB 5981:GOTO 5730
5960 IF X = 7 THEN 7540
5970 A$="Type 0 for help, or Q to quit..":GOSUB 9100
5980 GOTO 5730
5981 A$="Type in spell chant: ":GOSUB 9100
5982 I=0:X=22:SPELL$=""
5983 LOCATE 25,X,0
5984 X$ = ""
5985 WHILE X$ = ""
5986 X$ = INKEY$
5987 WEND
5988 IF X$ = CHR$(13) THEN 5997
5989 IF X$ = CHR$(8) THEN IF I = 0 THEN BEEP : GOTO 5983 ELSE X = X - 1 : LOCATE 25,X,0 : PRINT " "; : SPELL$ = LEFT$(SPELL$, LEN(SPELL$) - 1) : I = LEN(SPELL$) : GOTO 5983
5990 IF (X$ > = "A" AND X$ < = "Z") OR (X$ > = "a" AND X$ < = "z") OR X$ = " " THEN 5991 ELSE 5983
5991 IF LEN(CODE$) = 55 THEN BEEP : GOTO 5983
5992 IF X$>="A" AND X$<="Z" THEN X$=CHR$(ASC(X$)+32)
5993 SPELL$ = SPELL$ + X$:PRINT X$;
5994 I = LEN(SPELL$)
5995 X = X + 1
5996 GOTO 5983
5997 RESTORE 10241:GOSUB 9200:FOR I=1 TO 40:READ A$:IF SPELL$=A$ THEN 5999
5998 NEXT:A$="That spell chant does nothing!":GOSUB 9100:RETURN
10230 DATA bandit,basilisk,bugbear,caterwaul,chimera,cloaker,demon,devil,doppleganger,dragon,drider,gargoyle,ghast,ghost,giant,gnome,goblin,golem,grell,grimlock,hydra,kobold,lich,margoyle,mimic,minotaur,mummy,ogre,owlbear,phantom,phycomid,piercer
10240 DATA quaggoth,shocker,skeleton,slaad,solar,solifugid,spectator,stalker,stirge,tarrasque,thoguaa,titan,trapper,troglodyte,troll,ustilagor,vampire,vulching,wight,wraith,zombie
10241 DATA i cleanse thy body,i protect thee,darts fly from my hands,i shield thee,i strengthen thee,your eyes shut tight,objects become visible,flames fly from my fingertips,i call upon winds of fire,i create gold from air
10481 DATA i restore thee,fright causes you to falter,balls of fire engulf you,it becomes hard to see,a shield for my body,i will a wall,i must see,gravity leaves,rise from the dead,i point and you die
10490 A$="You cast a restoration spell!":GOSUB 9100:PTS#=PTS#+CO:GOSUB 6650:GOTO 5730
10500 A$="You cast a scare spell!":GOSUB 9100:MHPM=DX:MHPMC=2:GOTO 5730
10510 A$="You cast a fireball spell!":GOSUB 9100:IF MON=0 THEN 5730 ELSE GOSUB 9200:BONUS=3:GOTO 7910
10520 A$="You cast an obscurement spell!":GOSUB 9100:SHP=AR:SHPC=2:GOTO 5730
10530 A$="You cast a power shield spell!":GOSUB 9100:STP=ST:STPC=2:GOTO 5730
10540 A$="You cast a wall of will spell!":GOSUB 9100:SLP=1:SLPC=2:GOTO 5730
10550 A$="You cast a light spell!":GOSUB 9100:L=3:GOSUB 6690:GOTO 5730
10560 A$="You cast a levitate spell!":GOSUB 9100
10570 FOR K=1 TO INT(RND*4+2)
10580 RAN!=RND:IF RAN!<.3 THEN XO=-2 ELSE IF RAN!>.7 THEN XO=2 ELSE XO=0
10590 RAN!=RND:IF RAN!<.3 THEN YO=-2 ELSE IF RAN!>.7 THEN YO=2 ELSE YO=0
10600 IF XO=0 AND YO=0 THEN 10580
10610 IF XCO+XO<2 OR XCO+XO>21 OR YCO+YO<2 OR YCO+YO>75 THEN 10580
10620 IF Z(XCO+XO,YCO+YO)<>32 THEN 10580
10630 Z(XCO,YCO)=32:XCO=XCO+XO:YCO=YCO+YO
10640 GOSUB 6550:NEXT:GOTO 5730
10650 A$="You cast a monster summon spell!":GOSUB 9100:I=0
10660 FOR I=1 TO INT(RND*4+1)
10670 RAN!=RND:IF RAN!<.3 THEN XO=-1 ELSE IF RAN!>.7 THEN XO=1 ELSE XO=0
10680 RAN!=RND:IF RAN!<.3 THEN YO=-1 ELSE IF RAN!>.7 THEN YO=1 ELSE YO=0
10690 IF (XO<>0 AND YO<>0) OR (XO=0 AND YO=0) THEN 10670
10700 IF XCO+XO<2 OR XCO+XO>22 OR YCO+YO<2 OR YCO+YO>75 THEN 10670
10771 DATA i regenerate thee,you must not remember,a bolt from hell carries thee away,multicolored shield protect me,i create a wall,i cast sleep unto your eyes,i will see more,i will travel through thee,monsters of hell hear me,you will all die
10780 A$="You cast a regeneration spell!":GOSUB 9100:PTS#=PTS#+CO+CO:GOSUB 6650:GOTO 5730
10790 A$="You cast a forget spell!":GOSUB 9100:MHPM=DX:MHPMC=3:GOTO 5730
10800 A$="You cast a lightning bolt spell!":GOSUB 9100:IF MON=0 THEN 5730 ELSE GOSUB 9200:BONUS=4:GOTO 7910
10810 A$="You cast a phantasmal force spell!":GOSUB 9100:SHP=AR:SHPC=3:GOTO 5730
10820 A$="You cast a wall of force spell!":GOSUB 9100:STP=ST:STPC=3:GOTO 5730
10830 A$="You cast a charm monster spell!":GOSUB 9100:SLP=1:SLPC=3:GOTO 5730
10840 A$="You cast a continual light spell!":GOSUB 9100:LL=3:LLC=8:GOSUB 6690:GOTO 5730
10850 A$="You cast a passwall spell!(press cursor key to move)":GOSUB 9100:IF PWL THEN RETURN
10860 PWL=1:FOR K=1 TO INT(RND*4+2):GOSUB 10870:NEXT:WHILE Z(XCO,YCO)<>88:GOSUB 10870:WEND:PWL=0:GOTO 5730
10870 GOSUB 9270:XO=XCO:YO=YCO:IF X=2 THEN XO=XO+1:IF XO<23 THEN 10940
10880 IF X=4 THEN YO=YO-1:IF YO>1 THEN 10940
10890 IF X=6 THEN YO=YO+1:IF YO<76 THEN 10940
10900 IF X=8 THEN XO=XO-1:IF XO>1 THEN 10940
10910 IF X=1 AND MON THEN 7840
10920 IF X=7 AND MON THEN 7540
10921 IF LEN(X$)<>2 THEN 10870
10922 SP=ASC(MID$(X$,2)):SPN=0
10923 IF SP>58 AND SP<69 THEN SPN=1:SP=SP-58
10924 IF SP>93 AND SP<104 THEN SPN=2:SP=SP-93
10925 IF SP>83 AND SP<94 THEN SPN=3:SP=SP-83
10926 IF SP>103 AND SP<114 THEN SPN=4:SP=SP-103
10927 ON SPN GOTO 10250,10470,10760,11290
10930 GOTO 10870
10940 IF Z(XCO,YCO)=88 THEN Z(XCO,YCO)=32:LOCATE XCO,YCO:PRINT " ";
10950 XCO=XO:YCO=YO:IF Z(XCO,YCO)<>32 THEN GOSUB 6560 ELSE GOSUB 6550
10960 RETURN
10970 A$="You cast a demon summon spell!":GOSUB 9100:I=0
10980 FOR I=1 TO INT(RND*3+1)
10990 RAN!=RND:IF RAN!<.3 THEN XO=-1 ELSE IF RAN!>.7 THEN XO=1 ELSE XO=0
11000 RAN!=RND:IF RAN!<.3 THEN YO=-1 ELSE IF RAN!>.7 THEN YO=1 ELSE YO=0
11010 IF (XO<>0 AND YO<>0) OR (XO=0 AND YO=0) THEN 10990
11020 IF XCO+XO<2 OR XCO+XO>22 OR YCO+YO<2 OR YCO+YO>75 THEN 10990
11301 DATA i resurrect thee,i frighten thee,you turn to dust,swirling swords slice you,may my weapon become powerful,you are binded tightly,i travel to parts unknown,you become another,let me pass,everything dies continuously
11310 A$="You cast a resurrection spell!":GOSUB 9100:PTS#=PTS#+CO*3:GOSUB 6650:GOTO 5730
11320 A$="You cast a fear spell!":GOSUB 9100:MHPM=DX:MHPC=4:GOTO 5730
11330 A$="You cast a disintegrate spell!":GOSUB 9100:IF MON=0 THEN 5730 ELSE GOSUB 9200:BONUS=5:GOTO 7910
11340 A$="You cast a blade barrier spell!":GOSUB 9100:SHP=AR:SHPC=4:GOTO 5730
11350 A$="You cast an enchanted weapon spell!":GOSUB 9100:STP=ST:STPC=4:GOTO 5730
11360 A$="You cast a hold monster spell!":GOSUB 9100:SLP=1:SLPC=4:GOTO 5730
11370 A$="You cast a teleport spell!":GOSUB 9100
11380 XO=INT(RND*20+2):YO=INT(RND*73+2):IF Z(XO,YO)<>32 THEN 11380
11390 IF Z(XCO,YCO)=88 THEN Z(XCO,YCO)=32
11400 MON=0:LOCATE XCO,YCO:IF Z(I,J)<>94 THEN PRINT CHR$(Z(XCO,YCO));
11401 XCO=XO:YCO=YO:GOSUB 6550:GOTO 5730
11410 GOSUB 11420
11420 A$="You cast a polymorph spell!":GOSUB 9100:MON=0