1030 IF X$ = CHR$(13) THEN IF I > 0 THEN CALL ABSOLUTE("",SCRN%):GOTO 1170 ELSE BEEP : GOTO 990
1040 IF X$ = CHR$(8) THEN IF I = 0 THEN BEEP : GOTO 990 ELSE CALL ABSOLUTE("D D",SCRN%) : PASS$ = LEFT$(PASS$, LEN(PASS$) - 1) : I = LEN(PASS$) : GOTO 990
1050 IF (X$ > = "A" AND X$ < = "Z") OR (X$ > = "a" AND X$ < = "z") OR X$ = " " THEN 1060 ELSE 990
1060 IF LEN(PASS$) = 20 THEN BEEP : GOTO 990
1070 CALL ABSOLUTE(".",SCRN%)
1080 PASS$ = PASS$ + X$
1090 I = LEN(PASS$)
1100 GOTO 990
1110 CLOSE 5
1120 OPEN "R",5,"PLAYERS.DAT",160
1130 FIELD 5,8 AS CO$(1),8 AS CO$(2),8 AS CO$(3),8 AS CO$(4),8 AS CO$(5)
1140 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)
1150 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$
1160 RETURN
1170 CODE$ = CODE$ + STRING$(20 - LEN(CODE$),32)
1180 FOR I = 1 TO 20
1190 UC = ASC( MID$(CODE$,I,1))
1200 MID$(CODE$,I,1) = CHR$(UC + 32 * (UC > 90))
1210 NEXT
1220 PASS$ = PASS$ + STRING$(20 - LEN(PASS$),32)
1230 FOR I = 1 TO 20
1240 UC = ASC( MID$(PASS$,I,1))
1250 MID$(PASS$,I,1) = CHR$(UC + 32 * (UC > 90))
1260 NEXT
1270 GOSUB 1110
1280 FOR UX = 1 TO LOF(5) / 152
1290 GET 5,UX
1300 XCRYPT$ = ""
1310 FOR J = 1 TO 5
1320 CRYPT# = CVD(CO$(J))
1330 XCRYPT$ = XCRYPT$ + FN DECRYPT$(CRYPT#)
1340 NEXT
1350 IF CODE$ < > XCRYPT$ THEN 1430
1360 YCRYPT$ = ""
1370 FOR J = 1 TO 5
1380 CRYPT# = CVD(PA$(J))
1390 YCRYPT$ = YCRYPT$ + FN DECRYPT$(CRYPT#)
1400 NEXT
1410 CLOSE 5
1420 IF PASS$ < > YCRYPT$ THEN 600 ELSE LOGIN = 1 : GOSUB 2020 : GOTO 3900
1430 NEXT
1440 CLOSE 5
1450 DLVL# = 1
1460 MAXDLVL# = 1
1470 LVL# = 1
1480 PTS# = 15
1490 MAXPTS# = 15
1500 SP1=10:SP2=10:SP3=10:SP4=10
1510 WE = 0
1520 SH = 0
1530 AR = 0
1540 HE = 0
1550 BO = 0
1560 CL = 0
1570 CALL ABSOLUTE("28HSTR INT WIS CON DEX CHA",SCRN%)
1580 CALL ABSOLUTE("15HRolling Character Stats(cr to keep or 9 to ignore)",SCRN%)
1670 IF X=5 THEN CALL ABSOLUTE("11HPress 0 for help when playing, and Q to quit. Now hit a key.",SCRN%):WHILE INKEY$="":WEND:GOSUB 1680:LOGIN=1:GOTO 4150 ELSE IF X=9 THEN 1590 ELSE 1660
3910 CALL ABSOLUTE("22HYou made it as far as level"+STR$(MAXDLVL#)+"!",SCRN%)
3920 CALL ABSOLUTE("20HWhich level will you start at now?",SCRN%)
3930 I = 0
3940 L$ = ""
3950 CALL ABSOLUTE("30H",SCRN%)
3960 X$ = ""
3970 WHILE X$ = ""
3980 X$ = INKEY$
3990 WEND
4000 IF X$ = CHR$(13) THEN IF I > 0 THEN CALL ABSOLUTE("",SCRN%):GOTO 4070 ELSE BEEP : GOTO 3960
4010 IF X$ = CHR$(8) THEN IF I = 0 THEN BEEP : GOTO 3960 ELSE CALL ABSOLUTE("D D",SCRN%) : L$ = LEFT$(L$, LEN(L$) - 1) : I = LEN(L$) : GOTO 3960
4020 IF X$ < "0" OR X$ > "9" OR LEN(L$) = 8 THEN BEEP : GOTO 3960
4030 CALL ABSOLUTE(X$,SCRN%)
4040 L$ = L$ + X$
4050 I = LEN(L$)
4060 GOTO 3960
4070 DLVL# = VAL(L$)
4080 CLOSE 1
4090 OPEN "R",1,"DUNGEON.DAT",2
4100 REC = LOF(1) / 3592
4120 CLOSE 1
4130 IF REC = 0 THEN DLVL# = 1 : GOTO 4150
4140 IF DLVL#>REC OR DLVL#=0 THEN CALL ABSOLUTE("18HYou have onlylevels at your disposal..25H",SCRN%):GOTO 3910 ELSE 5013
4150 GOSUB 2280
4151 REM
4160 REM **** MAIN INPUT LOOP ****
4161 REM
4170 IF PWL THEN RETURN ' PASSWALL HAS SEPARATE INPUT ROUTINE
4180 X$=INKEY$
4181 WHILE X$=""
4182 X$=INKEY$
4183 WEND
4184 X=VAL(X$)
4190 IF X THEN ON X GOSUB 6260,4350,5780,4400,4275,4450,5910,4500:GOTO 4170
4200 IF LEN(X$)=2 THEN 4280
4201 REM HELP/INFO ETC.
4210 IF X$="0" THEN TIMER OFF:GOSUB 7780:GOSUB 4670:GOTO 4170:TIMER ON
4220 IF X$="+" AND LOGIN THEN TIMER OFF:GOSUB 8080:GOSUB 5390:GOSUB 4670:GOTO 4170:TIMER ON
4230 IF X$="." AND LOGIN THEN TIMER OFF:GOSUB 7380:GOTO 4170:TIMER ON
4240 IF X$="-" AND LOGIN THEN TIMER OFF:GOSUB 11880:GOSUB 5390:GOSUB 4670:GOTO 4170:TIMER ON
4250 IF X$="Q" OR X$ = "q" AND LOGIN THEN TIMER OFF:GOSUB 5020:A$="Leaving Dungeon...":GOSUB 7400:TIMER OFF:GOSUB 7570:GOSUB 7570:GOSUB 1680 : GOTO 400
4260 A$="Type 0 for help, or Q to quit..":GOSUB 7400
4270 GOTO 4170
4275 RETURN ' NULL ACTION FOR CR (5)
4276 REM JUMP TO SPELL
4280 SP=ASC(MID$(X$,2)):SPN=0
4290 IF SP>58 AND SP<69 THEN SPN=1:SP=SP-58
4300 IF SP>93 AND SP<104 THEN SPN=2:SP=SP-93
4310 IF SP>83 AND SP<94 THEN SPN=3:SP=SP-83
4320 IF SP>103 AND SP<114 THEN SPN=4:SP=SP-103
4330 ON SPN GOTO 8660,8970,9280,9880
4340 GOTO 4170
4341 REM MOVE PLAYER DOWN
4350 IF XCO>22 THEN CALL ABSOLUTE("s.u"+MID$(STR$(YCO),2)+"H",SCRN%):XCO=1:GOTO 4540
4360 IF Z(XCO+1,YCO)=176 AND PW=0 THEN RETURN
4370 IF Z(XCO+1,YCO)=35 THEN MXCO=XCO+1:MYCO=YCO:GOSUB 6260:RETURN
4380 XCO=XCO+1:CALL ABSOLUTE("B",SCRN%)
4390 GOTO 4540
4391 REM MOVE PLAYER LEFT
4400 IF YCO<2 THEN CALL ABSOLUTE("s.u"+MID$(STR$(XCO),2)+";80H",SCRN%):YCO=80:GOTO 4540
4410 IF Z(XCO,YCO-1)=176 AND PW=0 THEN RETURN
4420 IF Z(XCO,YCO-1)=35 THEN MXCO=XCO:MYCO=YCO-1:GOSUB 6260:RETURN
4430 YCO=YCO-1:CALL ABSOLUTE("D",SCRN%)
4440 GOTO 4540
4441 REM MOVE PLAYER RIGHT
4450 IF YCO>78 THEN CALL ABSOLUTE("s.u"+MID$(STR$(XCO),2)+";1H",SCRN%):YCO=1:GOTO 4540
4460 IF Z(XCO,YCO+1)=176 AND PW=0 THEN RETURN
4470 IF Z(XCO,YCO+1)=35 THEN MXCO=XCO:MYCO=YCO+1:GOSUB 6260:RETURN
4480 YCO=YCO+1:CALL ABSOLUTE("C",SCRN%)
4490 GOTO 4540
4491 REM MOVE PLAYER UP
4500 IF XCO<2 THEN CALL ABSOLUTE("s.u"+MID$(STR$(YCO),2)+"H",SCRN%):XCO=23:GOTO 4540
4510 IF Z(XCO-1,YCO)=176 AND PW=0 THEN RETURN
4520 IF Z(XCO-1,YCO)=35 THEN MXCO=XCO-1:MYCO=YCO:GOSUB 6260:RETURN
4530 XCO=XCO-1:CALL ABSOLUTE("A",SCRN%)
4531
4532 REM UPDATING
4540 IF LLC THEN LLC=LLC-1:IF LLC<1 THEN LLC=0:LL=2
4551 IF PWC THEN PWC=PWC-1:IF PWC<1 THEN PW=0:SLP=0:SLPC=0
4552 GOSUB 4670 ' MOVE PLAYER AND DISPLAY
4553 IF GDC THEN GDC=GDC-1:IF GDC<1 THEN GDC=0:GD=0 ELSE GOSUB 9730
4555 IF Z(XCO,YCO)=46 THEN RETURN
4561 REM
4562 REM COMPUTE CELL ACTION (scrolls, gold, etc.)
4570 IF Z(XCO,YCO)=36 THEN GOSUB 5470:Z(XCO,YCO)=46:RETURN
4580 IF Z(XCO,YCO)=126 THEN GOSUB 5590:RETURN
4590 IF Z(XCO,YCO)=94 THEN CALL ABSOLUTE("s",SCRN%):MHP#=INT(RND*(DLVL#*10)+1):A$="You triggered a trap! ":GOSUB 6460:RETURN
4600 IF Z(XCO,YCO)=111 THEN CALL ABSOLUTE("s",SCRN%):MHP#=INT(RND*(DLVL#*10)+1):A$="You fell in a pit! ":GOSUB 6460:RETURN
4610 IF Z(XCO,YCO)=60 THEN A$="You find a staircase!(cr to climb up or 9 to ignore)":GOSUB 7400:GOSUB 7630:IF X=5 THEN RETURN 4900 ELSE IF X=9 THEN RETURN ELSE 4610
4620 IF Z(XCO,YCO)=62 THEN A$="You find a staircase!(cr to climb down or 9 to ignore)":GOSUB 7400:GOSUB 7630:IF X=5 THEN RETURN 4950 ELSE IF X=9 THEN RETURN ELSE 4620
4640 IF PTS#<MAXPTS# THEN PTS#=PTS#+CO:IF PTS#>MAXPTS# THEN PTS#=MAXPTS#
4650 RETURN
4660 REM DISPLAY SURROUNDING CELLS
4670 TIMER OFF:A$="s":LI=XCO:LJ=YCO:L=LL
4680 FOR I=XCO-L TO XCO+L:FOR J=YCO-L TO YCO+L:IF I<1 OR I>23 OR J<1 OR J>79 THEN 4780
4700 R=I-LI:S=J-LJ:IF R<0 THEN B$="A" ELSE IF R>0 THEN B$="B" ELSE B$=""
4710 IF S<0 THEN C$="D" ELSE IF S>0 THEN C$="C" ELSE C$=""
4720 D$="":FOR R=1 TO ABS(I-LI):D$=D$+B$:NEXT
4730 FOR S=1 TO ABS(J-LJ):D$=D$+C$:NEXT
4740 LI=I:LJ=J+1:T=Z(I,J):IF T=94 OR T=111 THEN A$=A$+D$+".":GOTO 4780
4750 IF I=XCO AND J=YCO AND T<>176 THEN T=88
4760 IF T=46 OR T=176 THEN A$=A$+D$+CHR$(T) ELSE A$=A$+D$+""+CHR$(T)+""
8600 CALL ABSOLUTE("=3h20HCRASH! The Dungeon collapsed!!",SCRN%):CALL ABSOLUTE(",1H"+STR$(ERL)+STR$(ERR),SCRN%)
8610 RESUME 8620
8620 DEF SEG=0:POKE &H417,0:DEF SEG:END
8630 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
8640 DATA quaggoth,shocker,skeleton,slaad,solar,solifugid,spectator,stalker,stirge,tarrasque,thoguaa,titan,trapper,troglodyte,troll,ustilagor,vampire,vulching,wight,wraith,zombie
8650 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
8660 SP1=SP1-1:IF SP1<0 THEN SP1=0:GOTO 4170
8670 ON SP GOTO 8680,8690,8700,8710,8720,8730,8740,8840,8850,8860
8680 A$="You cast a heal spell!":GOSUB 7400:GOSUB 4640:GOTO 4170
8690 A$="You cast a protection spell!":GOSUB 7400:MHPM=DX:MHPMC=1:GOTO 4170
8710 A$="You cast a shield spell!":GOSUB 7400:SHP=AR:SHPC=1:GOTO 4170
8720 A$="You cast a strength spell!":GOSUB 7400:STP=ST:STPC=1:GOTO 4170
8730 A$="You cast a sleep spell!":GOSUB 7400:SLP=1:SLPC=1:GOTO 4170
8740 A$="You cast a locate spell!":GOSUB 7400:GOSUB 7570:I=0:IF Z(XCO - 1,YCO) = 94 THEN CALL ABSOLUTE("A^DB",SCRN%):I=1
8750 IF Z(XCO + 1,YCO) = 94 THEN CALL ABSOLUTE("B^AD",SCRN%):I=1
8760 IF Z(XCO,YCO - 1) = 94 THEN CALL ABSOLUTE("D^",SCRN%):I=1
8770 IF Z(XCO,YCO + 1) = 94 THEN CALL ABSOLUTE("C^DD",SCRN%):I=1
8780 IF Z(XCO - 1,YCO) = 111 THEN CALL ABSOLUTE("AoDB",SCRN%):I=1
8790 IF Z(XCO + 1,YCO) = 111 THEN CALL ABSOLUTE("BoAD",SCRN%):I=1
8800 IF Z(XCO,YCO - 1) = 111 THEN CALL ABSOLUTE("Do",SCRN%):I=1
8810 IF Z(XCO,YCO + 1) = 111 THEN CALL ABSOLUTE("CoDD",SCRN%):I=1
8820 IF I=0 THEN A$="There are no traps or pits here.." ELSE A$="You discovered some.."
8830 GOSUB 7400:GOSUB 7570:GOTO 4170
8840 A$="You cast a pyrotechnic spell!":GOSUB 7400:GOSUB 7570:BONUS=2:GOSUB 6260:GOTO 4170
8850 A$="You cast a firestorm spell!":GOSUB 7400:GOSUB 7570:BONUS=2:GOSUB 6260:GOTO 4170
8860 A$="You cast a transmute spell!":GOSUB 7400:GOSUB 7570:I=0
8870 IF Z(XCO - 1,YCO) = 46 AND XCO>1 THEN CALL ABSOLUTE("A$DB",SCRN%):Z(XCO-1,YCO)=36:I=1
8880 IF Z(XCO + 1,YCO) = 46 AND XCO<23 THEN CALL ABSOLUTE("B$AD",SCRN%):Z(XCO+1,YCO)=36:I=1
8890 IF Z(XCO,YCO - 1) = 46 AND YCO>1 THEN CALL ABSOLUTE("D$",SCRN%):Z(XCO,YCO-1)=36:I=1
8900 IF Z(XCO,YCO + 1) = 46 AND YCO<76 THEN CALL ABSOLUTE("C$DD",SCRN%):Z(XCO,YCO+1)=36:I=1
8910 IF I=0 THEN GOTO 4170
8920 IF Z(XCO - 1,YCO) = 36 THEN GOSUB 5480:CALL ABSOLUTE("A DB",SCRN%):Z(XCO-1,YCO)=46
8930 IF Z(XCO + 1,YCO) = 36 THEN GOSUB 5480:CALL ABSOLUTE("B AD",SCRN%):Z(XCO+1,YCO)=46
8940 IF Z(XCO,YCO - 1) = 36 THEN GOSUB 5480:CALL ABSOLUTE("D ",SCRN%):Z(XCO,YCO-1)=46
8950 IF Z(XCO,YCO + 1) = 36 THEN GOSUB 5480:CALL ABSOLUTE("C DD",SCRN%):Z(XCO,YCO+1)=46
8960 GOTO 4170
8970 SP2=SP2-2:IF SP2<0 THEN SP2=0:GOTO 4170
8980 ON SP GOTO 9000,9010,9020,9030,9040,9050,9060,9070,9170,9270
8990 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
9000 A$="You cast a restoration spell!":GOSUB 7400:PTS#=PTS#+CO:GOSUB 4640:GOTO 4170
9010 A$="You cast a scare spell!":GOSUB 7400:MHPM=DX:MHPMC=2:GOTO 4170
9020 A$="You cast a fireball spell!":GOSUB 7400:GOSUB 7570:BONUS=3:GOSUB 6260:GOTO 4170
9030 A$="You cast an obscurement spell!":GOSUB 7400:SHP=AR:SHPC=2:GOTO 4170
9040 A$="You cast a power shield spell!":GOSUB 7400:STP=ST:STPC=2:GOTO 4170
9050 A$="You cast a wall of will spell!":GOSUB 7400:SLP=1:SLPC=2:GOTO 4170
9060 A$="You cast a light spell!":GOSUB 7400:L=3:GOSUB 4670:GOTO 4170
9070 A$="You cast a levitate spell!":GOSUB 7400
9080 FOR K=1 TO INT(RND*4+2)
9090 RAN!=RND:IF RAN!<.3 THEN XO=-2 ELSE IF RAN!>.7 THEN XO=2 ELSE XO=0
9100 RAN!=RND:IF RAN!<.3 THEN YO=-2 ELSE IF RAN!>.7 THEN YO=2 ELSE YO=0
9110 IF XCO+XO<2 OR XCO+XO>21 OR YCO+YO<2 OR YCO+YO>75 THEN 9090
9120 IF Z(XCO+XO,YCO+YO)<>46 THEN 9090
9130 IF XO=0 AND YO=0 THEN 9090
9140 A$="":B$="":IF XO<0 THEN A$="A" ELSE IF XO>0 THEN A$="B"
9270 A$="You cast a finger of death spell!":GOSUB 7400:GOSUB 7570:GOSUB 9730:GOTO 4170
9280 SP3=SP3-3:IF SP3<0 THEN SP3=0:GOTO 4170
9290 ON SP GOTO 9310,9320,9330,9340,9350,9360,9370,9380,9560,9660
9300 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
9310 A$="You cast a regeneration spell!":GOSUB 7400:PTS#=PTS#+CO+CO:GOSUB 4640:GOTO 4170
9320 A$="You cast a forget spell!":GOSUB 7400:MHPM=DX:MHPMC=3:GOTO 4170
9830 A$="You killed all the monsters on this level! You gain"+STR$(EX#)+" exp!"
9840 GOSUB 7400
9850 GOSUB 7310
9860 GOSUB 7570
9870 NEXT MN:RETURN
9880 SP4=SP4-4:IF SP4<0 THEN SP4=0:GOTO 4170
9890 ON SP GOTO 9910,9920,9930,9940,9950,9960,9970,10060,10280,10290
9900 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
9910 A$="You cast a resurrection spell!":GOSUB 7400:PTS#=PTS#+CO*3:GOSUB 4640:GOTO 4170
9920 A$="You cast a fear spell!":GOSUB 7400:MHPM=DX:MHPC=4:GOTO 4170
9930 A$="You cast a disintegrate spell!":GOSUB 7400:GOSUB 7570:BONUS=5:GOSUB 6260:GOTO 4170
9940 A$="You cast a blade barrier spell!":GOSUB 7400:SHP=AR:SHPC=4:GOTO 4170
9950 A$="You cast an enchanted weapon spell!":GOSUB 7400:STP=ST:STPC=4:GOTO 4170
9960 A$="You cast a hold monster spell!":GOSUB 7400:SLP=1:SLPC=4:GOTO 4170
9970 A$="You cast a teleport spell!":GOSUB 7400
9980 TIMER OFF:IF Z(I,J)=94 OR Z(I,J)=111 THEN A$="." ELSE A$=CHR$(Z(XCO,YCO))
9990 CALL ABSOLUTE("s"+A$+"u",SCRN%)
10000 A$="":TXO=XCO:TYO=YCO:FOR I=1 TO INT(RND*15+1)
10010 IF RND>.5 THEN XO=-1:A$=A$+"A" ELSE XO=1:A$=A$+"B"
10020 IF RND>.5 THEN YO=-1:A$=A$+"D" ELSE YO=1:A$=A$+"C"
10030 IF TXO+XO<1 OR TXO+XO>22 OR TYO+YO<1 OR TYO+YO>78 THEN 10010
10040 TXO=TXO+XO:TYO=TYO+YO:NEXT:IF Z(TXO,TYO)<>46 THEN 10000