10 'DUNPLAY  THE QUEST
20    DEFINT A-Z
30      RANDOMIZE TIMER
40    GOSUB 400 'PLAY A TURN
50    IF LP  = 0 THEN GOSUB 2890
60    GOTO 40
70 'END
80     CLOSE
90     END
100 'GET A MONSTER
110    DEP = R(RX,3)-R(RX,1)
120    WID = R(RX,4)-R(RX,2)
130    SIZ=(DEP-1)*(WID-1)
140    WK.LV =((INT(RX/4)+LV.ADJ)-1)
150    MX = (INT(RND*4)+1)+(4*(WK.LV)): IF MX>40 THEN MX=40
160    WK = MX+60
170    NBR = INT(RND*M.NBR(MX,2))+M.NBR(MX,1)
180    IF NBR > M.NBR(MX,2) THEN NBR=M.NBR(MX,2)
190    IF NBR > SIZ THEN NBR = SIZ-4
200    FOR ZZ = 1 TO NBR
210      V = (INT(RND*DEP)+1)+R(RX,1)
220      H = (INT(RND*WID)+1)+R(RX,2)
230      IF M(V,H) <> 32 GOTO 210
240      ML.MAX=ML.MAX+1: ML(ML.MAX,1)=V: ML(ML.MAX,2)=H
250      ML(ML.MAX,3)=RX: ML(ML.MAX,4)=INT((MX/4)+1)
260      M(V,H) = WK
270      M.H=(H*8)-8: M.V=(V*8)-8: DRAW "C3"
280      DRAW "BM=M.H;,=M.V;": DRAW "BR3;D4;F2;H2;G2"
290      DRAW "BM=M.H;,=M.V;": DRAW "BR3;D2;L2;R4"
300      R(RX,5)=MX: R(RX,6)=1
310    NEXT
320 RETURN
330 'MATCH TO SUPPLY FILE
340    LX=LEN(SK$)
350    FOR S = 1 TO SMAX
360      IF (SK$ = LEFT$(S.NAME$(S),LX)) AND (S(S,P+2) <> 0)                                         THEN FOUND=1: GOTO 390
370    NEXT
380    FOUND = 0: MSG$="YOU DON'T OWN A "+SK$: GOSUB 4460: MSG$="": GOSUB 4460:         GOTO 390
390 RETURN
400 'PLAY A TURN
410    LP=0: ATTACK=2
420    FOR P = 1 TO 9
430            IF P.NAME$(P) = "" THEN GOTO 610
440            LP=LP+1
450            GOSUB 4540 'CHECK PLAYERS LOCATION
460            IF TIMER < SV.TIMER! THEN GOTO 460
470            LOCATE 25,1: PRINT SPACE$(39);: LOCATE 25,1: PRINT P.NAME$(P);
480            DEF SEG=0: POKE(1050),PEEK(1052) 'CLEAR KEYBOARD BUFFER
490            AV=0: OVER.LOAD=0
500            IF P(P,10)<1 GOTO 530
510            P(P,10)=P(P,10)-1
520            IF P(P,10)<1 THEN GOSUB 2740 'THE LIGHTS WENT OUT
530            IF P(P,13)>0 THEN MSG$="YOU ARE RESTING": GOSUB 4460:                            P(P,13) = P(P,13)-1: GOTO 610
540            MV=(4-INT(P(P,1)/400))*ATTACK
550            IF HS>1 THEN MV=MV+MV
560            IF MV<1 THEN MV=1: MSG$="YOU ARE OVERLOADED & CAN'T MOVE":                       GOSUB 4460: OVER.LOAD=1
570            FOR T = 1 TO MV
580                    GOSUB 2470 'PLAY A PLAYERS TURN
590            NEXT T
600            GOSUB 4540 'CHECK PLAYERS LOCATION
610    NEXT P
620    FOR D = 1 TO 3
630            IF D(D,1)=0 THEN GOTO 690
640            V=D(D,2): H=D(D,3)
650            IF M(V,H) <> 32 THEN GOTO 690
660            LOCATE V,H: PRINT CHR$(D(D,1));
670            M(V,H)=D(D,1)
680            D(D,1)=0
690    NEXT D
700    GOSUB 4950 'PLAY MONSTERS
710    IF TE>0 THEN TE=TE-1
720    IF HS>0 THEN HS=HS-1
730 RETURN
740 'SAVE THE CURRENT SCREEN
750     GET (0,0)-(319,199),SV
760 RETURN
770 'RESTORE CURRENT SCREEN
780     PUT (0,0),SV,PSET
790 RETURN
800 'GET A REPLY
810    REPLY$=INKEY$: IF REPLY$=""  THEN GOTO 810
820    IF LEN(REPLY$)=1 THEN GOTO 880
830    REPLY$=RIGHT$(REPLY$,1)
840    IF ASC(REPLY$)=72 THEN REPLY$=CHR$(30): GOTO 880
850    IF ASC(REPLY$)=80 THEN REPLY$=CHR$(31): GOTO 880
860    IF ASC(REPLY$)=77 THEN REPLY$=CHR$(28): GOTO 880
870    IF ASC(REPLY$)=75 THEN REPLY$=CHR$(29)
880 RETURN
890 'HELP SCREEN
900    GOSUB 740 'SAVE CURRENT SCREEN
910    CLS
920    PRINT "        COMMANDS"
930    PRINT "USE THE CURSOR KEYS TO MOVE UP, DOWN,"
940    PRINT "RIGHT OR LEFT ON THE SCREEN"
950    PRINT
960    PRINT "THE FOLLOWING COMMANDS ARE AVAILABLE "
970    PRINT "  A = ATTACK (YOU MUST BE NEXT TO A "
980    PRINT "     MONSTER)"
990    PRINT "  T = THROW AWAY (IT'S GONE FOR GOOD)"
1000    PRINT "  L = LIGHT (TORCH OR LANTERN)
1010    PRINT "  H = HELP (DISPLAY COMMANDS)"
1020    PRINT "  O = OPEN DOOR"
1030    PRINT "  G = GET SOMETHING (FROM ANYWHERE)"
1040    PRINT "  P = PUT (IN PACK, SCABBORD, ETC)"
1050    PRINT "  R = RUN (FROM MONSTERS)
1060    PRINT "  I = INVENTORY (WHAT YOU HAVE)"
1070    PRINT "  Q = QUIT                     "
1080    PRINT "  S = SEARCH (FOR TRAPS ETC)   "
1090    PRINT "  C = CAST A SPELL"
1100    LOCATE 25,1: PRINT "HIT ANY KEY TO CONTINUE";
1110    GOSUB 800 'WAIT
1120    GOSUB 770 'RESTORE CURRENT SCREEN
1130 RETURN
1140 'MOVE
1150    IF OVER.LOAD=1 THEN MSG$="YOU CAN'T MOVE": GOSUB 4460: GOTO 1290
1160    IF ASC(REPLY$)=28 THEN NH=P(P,7)+1: NV=P(P,6)
1170    IF ASC(REPLY$)=29 THEN NH=P(P,7)-1: NV=P(P,6)
1180    IF ASC(REPLY$)=30 THEN NV=P(P,6)-1: NH=P(P,7)
1190    IF ASC(REPLY$)=31 THEN NV=P(P,6)+1: NH=P(P,7)
1200    IF NV < 1 OR NV > 24 OR NH <1 OR NH > 39 THEN BEEP: GOTO 1290
1210    IF M(NV,NH) <> 32 GOTO 1270 'SOMETHING THERE
1220    M(NV,NH)=M(P(P,6),P(P,7)): M(P(P,6),P(P,7)) = 32 'MOVE PLAYER & RESTORE TO BLANK
1230    LOCATE P(P,6),P(P,7): PRINT CHR$(M(P(P,6),P(P,7)))
1240    P(P,6)=NV: P(P,7)=NH
1250    LOCATE P(P,6),P(P,7): PRINT CHR$(M(NV,NH));
1260    GOTO 1290
1270    IF M(NV,NH) <> 0 THEN BEEP: GOTO 1290
1280    GOSUB 3670: GOTO 1220 'A TRAP
1290 RETURN
1300 'LIGHT (TORCH OR LANTERN)
1310    S=P(P,8)
1320    IF S=13 OR S=14 THEN GOTO 1370
1330    S=P(P,9)
1340    IF S=13 OR S=14 THEN GOTO 1370
1350    MSG$="YOU DON'T HAVE TORCH OR LANTERN IN HAND": GOSUB 4460
1360    GOTO 1440
1370    IF S(15,P+2) <> 0 THEN GOTO 1410
1380    MSG$="YOU DON'T HAVE A TINDER BOX": GOSUB 4460
1390    IF P(P,8)=13 OR P(P,8)=14 THEN P(P,8)=0: GOTO 1440    'DUMP IT
1400    IF P(P,9)=13 OR P(P,9)=14 THEN P(P,9)=0: GOTO 1440    'DUMP IT
1410    IF P(P,8)=14 OR P(P,9)=14 THEN P(P,10)=P(P,10)+10: GOTO 1430
1420    IF P(P,8)=13 OR P(P,9)=13 THEN P(P,10)=P(P,10)+40
1430    T=MV+1
1440 RETURN
1450 'GET
1460    LOCATE 25,1: PRINT SPACE$(39);
1470    LOCATE 25,1: PRINT "GET WHAT? ";
1480    GOSUB 7110 'GET REPLY
1490    IF W$="TREASURE"  THEN GOSUB 3210: GOTO 1580
1500    SK$=W$
1510    GOSUB 330
1520    IF FOUND = 0 THEN GOTO 1560
1530    IF P(P,8) = 0 THEN P(P,8) = S: S(S,P+2)=S(S,P+2)-1: MSG$="OK": GOTO 1560
1540    IF P(P,9) = 0 THEN P(P,9) = S: S(S,P+2)=S(S,P+2)-1: MSG$="OK": GOTO 1560
1550    MSG$="YOUR HANDS ARE FULL": GOSUB 4460: GOTO 1580
1560    GOSUB 4460: IF S=4 THEN P(P,5)=P(P,5)+1  'SHIELD
1570    IF S=13 OR S=14 OR S=16 THEN GOSUB 1300 'LIGHT IT
1580 RETURN
1590 'OPEN
1600    IF T <> 1 THEN MSG$="THE DOOR WON'T OPEN": GOSUB 4460: GOTO 1810
1610    IF TO.OPEN = 0 THEN TO.OPEN = INT(RND*6)+1 ELSE TO.OPEN=0
1620    ZZ = INT(RND*6) + ((P(P,2)/3)-3)
1630    IF P.CLASS$(P) = "THIEF     " THEN ZZ=ZZ+P(P,4)
1640    IF ZZ < TO.OPEN THEN MSG$="THE DOOR WON'T OPEN": GOSUB 4460: GOTO 1810
1650    V=P(P,6): H=P(P,7)
1660    LV=V-1: HV=V+1: LH=H-1: HH=H+1
1670    FOR V = LV TO HV
1680      FOR H = LH TO HH
1690            IF M(V,H) <> 179 AND M(V,H) <> 196 THEN GOTO 1780
1700            FOR D=1 TO 3
1710              IF D(D,1)=0 THEN D(D,1)=M(V,H): D(D,2)=V: D(D,3)=H: GOTO 1730
1720            NEXT D
1730           M(V,H)=M(P(P,6),P(P,7)): M(P(P,6),P(P,7)) = 32 'MOVE PLAYER
1740           LOCATE P(P,6),P(P,7): PRINT CHR$(M(P(P,6),P(P,7)))
1750           P(P,6)=V: P(P,7)=H
1760           LOCATE P(P,6),P(P,7): PRINT CHR$(M(V,H));
1770           GOTO 1810
1780      NEXT H
1790    NEXT V
1800    MSG$="YOU ARE NOT BY A DOOR": GOSUB 4460: GOTO 1810
1810    T=MV+1: TO.OPEN=0
1820 RETURN
1830 'THROW AWAY
1840    LOCATE 25,1: PRINT SPACE$(39);
1850    LOCATE 25,1: PRINT "THROW WHAT? ";
1860    GOSUB 7110 'GET REPLY
1870    LX=LEN(W$)
1880 '
1890    FOR S=1 TO SMAX
1900            IF W$ = LEFT$(S.NAME$(S),LX) THEN GOTO 1930
1910    NEXT
1920    MSG$="A WHAT?": GOSUB 4460: GOTO 2030
1930    IF P(P,8) = S THEN P(P,8) = 0: GOTO 1970
1940    IF P(P,9) = S THEN P(P,9) = 0: GOTO 1970
1950    MSG$="IS'S NOT IN YOUR HAND": GOSUB 4460
1960    GOTO 2030
1970    P(P,1) = P(P,1)-S(S,2)
1980    IF S=4 THEN P(P,5)=P(P,5)-1  'SHIELD
1990    IF S=13 THEN P(P,10) = P(P,10)-40
2000    IF S=14 THEN P(P,10) = P(P,10)-10
2010    IF P(P,10) < 1 THEN P(P,10)=0
2020    MSG$="OK IT'S GONE": GOSUB 4460
2030 RETURN
2040 'PUT
2050    LOCATE 25,1: PRINT SPACE$(39);
2060    LOCATE 25,1: PRINT "PUT WHAT? ";
2070    GOSUB 7110 'GET REPLY
2080    LX=LEN(W$)
2090 '
2100    FOR S = 1 TO SMAX
2110            IF W$ = LEFT$(S.NAME$(S),LX) THEN GOTO 2140
2120    NEXT
2130    GOTO 2220
2140    IF P(P,8) = S THEN P(P,8) = 0: S(S,P+2)=S(S,P+2)+1: MSG$="OK":                    GOTO 2170
2150    IF P(P,9) = S THEN P(P,9) = 0: S(S,P+2)=S(S,P+2)+1: MSG$="OK":                    GOTO 2170
2160    MSG$="IS'S NOT IN YOUR HAND": GOSUB 4460: GOTO 2220
2170    GOSUB 4460
2180    IF S=4 THEN P(P,5)=P(P,5)-1 'SHIELD
2190    IF S=13 THEN P(P,10) = P(P,10)-40
2200    IF S=14 THEN P(P,10) = P(P,10)-10
2210    IF P(P,10) < 1 THEN P(P,10)=0
2220 RETURN
2230 'RUN
2240    MSG$=P.NAME$(P)+" IS RUNNING": GOSUB 4460
2250    GOSUB 800: P(P,13)=2
2260    GOSUB 1140: GOSUB 1140: GOSUB 1140 'MOVE 3 TIMES NORMAL RATE
2270 RETURN
2280 'INVENTORY
2290    GOSUB 740 'SAVE CURRENT SCREEN
2300    CLS: ZZ=0
2310    PRINT "          INVENTORY"
2320    PRINT: PRINT "HIT POINTS ";P(P,3);" LIGHT ";P(P,10)
2330    PRINT "WEIGHT YOU ARE CARRYING ";P(P,1)
2340    PRINT
2350    IF P(P,8) = 0 THEN PRINT "YOUR RIGHT HAND IS EMPTY"                               ELSE PRINT "IN YOUR RIGHT HAND IS A ";S.NAME$(P(P,8))
2360    IF P(P,9) = 0 THEN PRINT "YOUR LEFT HAND IS EMPTY"                               ELSE PRINT "IN YOUR LEFT HAND IS A ";S.NAME$(P(P,9))
2370    FOR S = 1 TO SMAX
2380            IF S(S,P+2) = 0 THEN GOTO 2430
2390            PRINT S.NAME$(S);S(S,P+2)
2400            ZZ=CSRLIN: IF ZZ < 23 THEN GOTO 2430
2410            LOCATE 25,1: PRINT "HIT ANY KEY TO CONTINUE";
2420            GOSUB 800: CLS: ZZ=0
2430    NEXT S
2440    LOCATE 25,1: PRINT "HIT ANY KEY TO CONTINUE";: GOSUB 800
2450    GOSUB 770
2460 RETURN
2470  'PLAY A TURN
2480    GOSUB 800 'GET COMMAND
2490    IF REPLY$ <>"A" THEN AV=0
2500    IF REPLY$ = " " THEN GOTO 2650
2510    IF ASC(REPLY$) > 27 AND ASC(REPLY$) < 32 THEN GOSUB 1140: GOTO 2650
2520    IF REPLY$ = "A" THEN GOSUB 3940: GOTO 2650
2530    IF REPLY$ = "C" THEN GOSUB 5870: GOTO 2650
2540    IF REPLY$ = "S" THEN GOSUB 2940: GOTO 2650
2550    IF REPLY$ = "O" THEN GOSUB 1590: GOTO 2650
2560    IF REPLY$ = "G" THEN GOSUB 1450: GOTO 2650
2570    IF REPLY$ = "L" THEN GOSUB 1300: GOTO 2650
2580    IF REPLY$ = "P" THEN GOSUB 2040: GOTO 2650
2590    IF REPLY$ = "R" THEN GOSUB 2230: GOTO 2650
2600    IF REPLY$ = "H" THEN GOSUB 890: GOTO 2650
2610    IF REPLY$ = "I" THEN GOSUB 2280: GOTO 2650
2620    IF REPLY$ = "T" THEN GOSUB 1830: GOTO 2650
2630    IF REPLY$ = "Q" THEN GOSUB 2890: GOTO 2650
2640    GOTO 2470
2650 RETURN
2660 'DRAW THE ROOM
2670    IF R(RX,6) < 1 THEN R(RX,5)=0
2680    IF R(RX,5) <> 0 THEN GOTO 2710
2690    IF WAN.MON <> 6 THEN GOTO 2730
2700    GOSUB 100 'GET A WANDERING MONSTER
2710    SV.MON = R(RX,5)
2720    MSG$=M.NAME$(SV.MON)+"S!": GOSUB 4460
2730 RETURN
2740 'THE LIGHTS WENT OUT
2750    SV.TIMER!=TIMER+1
2760    IF TIMER < SV.TIMER! THEN GOTO 2760
2770    LOCATE 25,1: PRINT SPACE$(38);: LOCATE 25,1: PRINT "YOUR LIGHT WENT OUT";
2780    P.TOT=0
2790    SV.TIMER! = TIMER+2
2800    IF P(P,8)=14 THEN P(P,8)=0
2810    IF P(P,9)=14 THEN P(P,9)=0
2820    IF P(P,8)<>13 AND P(P,9)<>13 THEN GOTO 2870
2830    IF S(16,P+2) = 0 THEN GOTO 2850
2840    S(16,P+2) = S(16,P+2)-1: GOTO 2870
2850    IF P(P,8) = 13 THEN P(P,8)=0
2860    IF P(P,9) = 14 THEN P(P,9)=0
2870    IF TIMER < SV.TIMER! THEN GOTO 2870
2880 RETURN
2890 'QUIT - END GAME
2900    MSG$="YOU WANT TO QUIT? (Y/N)": GOSUB 4460
2910    GOSUB 800
2920    IF REPLY$ <> "Y" THEN RETURN
2930    CHAIN "DUNEND",10,ALL
2940 'SEARCH
2950    IF T <> 1 THEN GOTO 3180
2960    ROLL = INT(RND*6)+1
2970    FOUND = 1
2980    IF P.CLASS$(P) = "DWARF     " THEN FOUND = 2
2990    IF P.CLASS$(P) = "THIEF     " THEN FOUND=FOUND+P(P,4)
3000    IF FT<>0 THEN FT=0: FOUND=6
3010    IF ROLL > FOUND THEN GOTO 3180
3020    RX=0: SV.MON = 0
3030    V=P(P,6): H=P(P,7)
3040    RX = RX+1
3050    IF R(RX,1) = 0 THEN GOTO 3190
3060    IF V => R(RX,1) AND V =< R(RX,3) AND H => R(RX,2) AND H =< R(RX,4)                THEN GOTO 3080
3070    GOTO 3040
3080    FOR V=R(RX,1) TO R(RX,3)
3090      FOR H=R(RX,2) TO R(RX,4)
3100            IF M(V,H) = 0 THEN SV.MON=1:  GOTO 3130
3110      NEXT H
3120    NEXT V
3130    IF SV.MON = 0 THEN GOTO 3180 'NO TRAP
3140    LOCATE V,H: PRINT "T";
3150    ROLL = INT(RND*6)+1
3160    MSG$="YOU FOUND "+TRAP$(ROLL): GOSUB 4460
3170    GOTO 3190
3180    MSG$="YOU FIND NOTHING": GOSUB 4460
3190    T=MV+1
3200 RETURN
3210 'GET TREASURE
3220    IF P(P,8) <> 0 AND P(P,9) <> 0 THEN MSG$="YOUR HANDS ARE FULL":                   GOSUB 4460: GOTO 3660
3230    V=P(P,6): H=P(P,7)
3240    LV=V-1: HV=V+1: LH=H-1: HH=H+1
3250    FOR V = LV TO HV
3260      FOR H = LH TO HH
3270            IF M(V,H) > 0 AND M(V,H) < 20 THEN GOTO 3310
3280      NEXT H
3290    NEXT V
3300    MSG$="YOU ARE NOT BY A TREASURE": GOSUB 4460: GOTO 3660
3310    MX=M(V,H):
3320    TR = INT((MX-1)/4): TP=((MX-(TR*4))*20)+5: IF TP>100 THEN TP=100
3330    ROLL = INT(RND*100)+1
3340    MSG$="THE CHEST IS EMPTY"
3350    ROLL = INT(RND*20)+1
3360    IF ROLL = 10 THEN GOSUB 3670 'A TRAP
3370    IF ROLL > TP THEN GOSUB 4460: TG!=0: GOSUB 3640: GOTO 3410
3380    S$="IT CONTAINS A"
3390    TG!=INT(500*(TR)*(TP/100))
3400    GOSUB 3420 ' THE TREASURE
3410 RETURN
3420 'THE TREASURE
3430    FOR ZZ = 1 TO TR
3440            S=INT((SMAX-1)*RND)+1
3450            IF S(S,12) > (1000*(TR+1)) THEN GOTO 3520
3460            MSG$=S$+" "+S.NAME$(S): SV.TIMER!=TIMER: GOSUB 4460
3470            IF S=33 THEN P(P,5)=P(P,5)-4: GOTO 3490
3480            GOSUB 800: IF REPLY$<>"Y" THEN GOTO 3520
3490            S(S,P+2)=S(S,P+2)+1
3500            EXPR!=EXPR!+S(S,12)
3510            P(P,1) = P(P,1)+S(S,2)
3520    NEXT ZZ
3530    IF TG! < 1 THEN GOTO 3640
3540    TJ=0
3550    IF TG! > 999 THEN TJ = INT(TG!/1000): TG!=TG!-INT(TJ*1000)
3560    TG=0
3570    IF TG! > 99 THEN TG = INT(TG!/100): TG!=TG!-INT(TG*100)
3580    IF TJ >0 THEN MSG$=STR$(TJ)+" JEWELRY": GOSUB 4460
3590    IF TG >0 THEN MSG$=STR$(TG)+" GEMS": GOSUB 4460
3600    MSG$=STR$(TG!)+" GOLD PIECES": GOSUB 4460
3610    GP!=GP!+WG!+(TJ*1000)+(TG*100)
3620    EXPR!=EXPR!+WG!+(TJ*1000)+(TG*100)
3630    P(P,1) = P(P,1)+WG!+(TJ*10)+TG
3640    MSG$=SPACE$(39): GOSUB 4460 'CLEAR MSG LINE
3650    LOCATE V,H: PRINT " ";: M(V,H)=32 'CLEAR THE TREASURE
3660 RETURN
3670 'A TRAP!
3680    ZZ=0
3690    ROLL = INT(RND*6)+1
3700    MSG$="A TRAP!!!": GOSUB 4460
3710    IF ROLL = 1 OR ROLL = 2 THEN MSG$="A CLOUD OF YELLOW GAS FILLS THE ROOM"
3720    IF ROLL = 3 THEN MSG$="YOU FALL INTO A HIDDEN PIT"
3730    IF ROLL = 4 THEN MSG$="A BLOCK FALLS FROM THE CEILING"
3740    IF ROLL = 5 THEN MSG$="A POISON NEEDLE"
3750    IF ROLL = 6 THEN MSG$="A DART FIRES AT YOU"
3760    GOSUB 4460
3770    IF ROLL = 2 THEN MSG$="IT'S HARMLESS": GOSUB 4460: GOTO 3890
3780    IF ROLL = 3 THEN ZZ = INT(RND*6)+1: P(P,3)=P(P,3)-ZZ: GOTO 3890
3790    IF ROLL = 6 THEN ZZ = (INT(RND*6)+1)*(INT(RND*4)+1): P(P,3)=P(P,3)-ZZ:            GOTO 3890
3800    ZZ = INT(RND*20)+1
3810    GET #1,P
3820    IF ROLL <> 4 THEN GOTO 3860
3830    ZZ = INT(RND*20)+1
3840    IF ZZ => CVI(SV.STONE$) THEN MSG$="IT MISSED": GOSUB 4460: ZZ = 0: GOTO 3890
3850    ZZ = INT(RND*10)+1: P(P,3)=P(P,3)-ZZ: GOTO 3890
3860    ZZ = INT(RND*20)+1
3870    IF ZZ => CVI(SV.POISON$) THEN MSG$="THE GODS HAVE SPARED YOU":                    GOSUB 4460: ZZ=0: GOTO 3890
3880    P(P,3)=0
3890    IF ZZ = 0 THEN GOTO 3930
3900    IF P(P,3) > 0 THEN MSG$="IT DID "+STR$(ZZ)+" POINTS DAMAGE"
3910    IF P(P,3) <1 THEN  MSG$=P.NAME$(P)+"IS DEAD": P.NAME$(P) = "":                     V=P(P,6):H=P(P,7): LOCATE V,H: PRINT " ";: M(V,H)=32
3920    GOSUB 4460
3930 RETURN
3940 'ATTACK
3950    IF ATTACK = 2 THEN T=INT(T*2)
3960    ATTACK=1: V=P(P,6): H=P(P,7)
3970 '   CHECK IF NEXT TO A MONSTER
3980    LV=V-1: HV=V+1: LH=H-1: HH=H+1
3990    FOR V = LV TO HV
4000      FOR H = LH TO HH
4010            IF M(V,H) > 60 AND M(V,H) < 124 THEN GOTO 4050
4020      NEXT H
4030    NEXT V
4040    MSG$="YOU ARE NOT BY A MONSTER": GOSUB 4460: GOTO 4450
4050    MN=M(V,H)-60
4060    FOR LX = 1 TO ML.MAX
4070            IF ML(LX,1)=V AND ML(LX,2)=H THEN GOTO 4090
4080    NEXT
4090    S=P(P,8): IF S.CLASS$(S)="W" THEN GOTO 4130
4100    ZZ=S
4110    S=P(P,9)
4120    IF S.CLASS$(S) <> "W" AND S.CLASS$(ZZ) <> "W"                                     THEN MSG$="YOU DON'T HAVE A WEAPON": GOSUB 4460: GOTO 4450
4130    ROLL=INT(RND*10)+1
4140    IF S=34 THEN ROLL=ROLL+5
4150    W$=STR$(M.AC(MN)): W$=RIGHT$(W$,1)
4160    WK=VAL(W$): IF M.AC(MN)=10 THEN WK=10
4170    ZZ = 1+(WK-P(P,4)): IF ZZ > 10 THEN ZZ=10
4180    IF ZZ < 1 THEN ZZ=1
4190    IF ZZ > ROLL THEN MSG$="YOU MISSED":GOSUB 4460: GOTO 4450
4200    IF M.AC(MN) < 11 THEN GOTO 4290  'NO SPECIAL WEAPON REQUIRED
4210    IF M.AC(MN) > 19 THEN GOTO 4230
4220    IF S=10 THEN GOTO 4290 ELSE MSG$="IT DID NO HARM": GOSUB 4460: GOTO 4450           'MUST USE SILVER DAGGER
4230    IF M.AC(MN) > 29 THEN GOTO 4250
4240    IF S=34 THEN GOTO 4290 ELSE MSG$="IT DID NO HARM": GOSUB 4460: GOTO 4450          ,MUST USE MAGIC WEAPON
4250    IF M.AC(MN) > 39 THEN GOTO 4270
4260    IF ((S=34) OR (S=14 AND P(P,10) > 0)) THEN GOTO 4290                               ELSE MSG$="IT DID NO HARM": GOSUB 4460: GOTO 4450                              'MUST USE MAGIC OR FIRE
4270    IF M.AC(MN) > 49 THEN GOTO 4450
4280    IF S=36 THEN GOTO 4290 ELSE MSG$="IT DID NO HARM": GOSUB 4460: GOTO 4450           'MUST USE STAKES
4290 '  CHECK FOR DAMAGE
4300    DM=INT(RND*S(S,1))+1
4310    IF S=34 THEN DM=DM+10
4320    ML(LX,4)=ML(LX,4)-DM
4330    IF MN=32 AND ML(LX,4)<1 AND S<>14 THEN ML(LX,4)=1 'TROLL
4340    IF ML(LX,4)>0 THEN MSG$="THE "+M.NAME$(MN)+" HAS BEEN WOUNDED":GOSUB 4460:              GOTO 4450
4350    MSG$="YOU KILLED THE "+M.NAME$(MN): GOSUB 4460:
4360    RX=ML(LX,3): R(RX,6)=R(RX,6)-1
4370    LOCATE V,H: PRINT " ";: M(V,H)=32: ML(LX,1)=0:
4380    MX=(INT(MN/4))+1
4390    EXPR!=EXPR!+(MX*10)
4400    S$="IT HAD A"
4410    TR = INT((MN-1)/4): TP=((MN-(TR*4))*20)+5: IF TP>100 THEN TP=100
4420    ROLL = INT(RND*100)+1
4430    IF ROLL > TP THEN GOTO 4450
4440    GOSUB 3420      'GET MONSTER'S TREASURE
4450 RETURN
4460 'MESSAGE
4470    IF TIMER < SV.TIMER! THEN GOTO 4470
4480    MS$=SPACE$(39)
4490    LSET MS$=MSG$
4500    LOCATE 25,1
4510    PRINT MS$;
4520    SV.TIMER!=TIMER+1
4530 RETURN
4540 ' GET WHAT ROOM AND DRAW IF LIGHTED
4550   WAN.MON=INT(RND*24*PLAYERS)+1
4560    RX=0: SV.MON = 0: P(P,11)=0: P(P,12)=0
4570    V=P(P,6): H=P(P,7)
4580    RX = RX+1
4590    IF R(RX,1) = 0 THEN GOTO 4930
4600    IF V => R(RX,1) AND V =< R(RX,3) AND H => R(RX,2) AND H =< R(RX,4)                THEN GOTO 4620
4610    GOTO 4580
4620    P(P,11)=RX
4630    HZ=((R(RX,2))*8)
4640    VZ=((R(RX,1))*8)
4650    IF P(P,10) > 1 THEN PAINT(HZ,VZ),1,3: GOSUB 2660: GOTO 4740
4660    IF WAN.MON=6 THEN GOSUB 2660
4670    FOR PX = 1 TO 9
4680            IF PX=P GOTO 4710
4690            IF P(PX,11) = RX AND P(PX,10) > 1 THEN GOTO 4740
4700            IF P(PX,12) = RX AND P(PX,10) > 1 THEN GOTO 4740
4710    NEXT PX
4720    IF (P(P,10) < 1) THEN GOTO 4730 ELSE GOTO 4740
4730    PAINT(HZ,VZ),2,3
4740 'CHECK FOR 2ND ROOM
4750    SV.MON = 0
4760    V=P(P,6): H=P(P,7)
4770    RX = RX+1
4780    IF R(RX,1) = 0 THEN GOTO 4930
4790    IF V => R(RX,1) AND V =< R(RX,3) AND H => R(RX,2) AND H =< R(RX,4)                THEN GOTO 4810
4800    GOTO 4610
4810    P(P,12)=RX
4820    HZ=((R(RX,2))*8)
4830    VZ=((R(RX,1))*8)
4840    IF P(P,10) > 1 THEN PAINT(HZ,VZ),1,3: GOSUB 2660: GOTO 4940
4850    IF WAN.MON=6 THEN GOSUB 2660
4860    FOR PX = 1 TO 9
4870            IF PX=P GOTO 4900
4880            IF P(PX,11) = RX AND P(PX,10) > 1 THEN GOTO 4930
4890            IF P(PX,12) = RX AND P(PX,10) > 1 THEN GOTO 4930
4900    NEXT PX
4910    IF (P(P,10) < 1) THEN GOTO 4920 ELSE GOTO 4930
4920    PAINT(HZ,VZ),2,3
4930    WAN.MON=0
4940 RETURN
4950 'PLAY MONSTER
4960    MSG$="": GOSUB 4460
4970    M.ACT=INT(RND*6)+1: IF TE<>0 THEN M.ACT=2
4980    IF M.ACT = 1 THEN GOTO 5070 ' DO NOTHING
4990    IF M.ACT = 2 THEN M.ACT=-1 ELSE M.ACT=1
5000    FOR LX = 1 TO ML.MAX
5010            IF ML(LX,1) = 0 THEN GOTO 5060
5020            FOR P = 1 TO 9
5030                    IF P.NAME$(P) = "" THEN GOTO 5050
5040                    IF ML(LX,3)=P(P,11) OR ML(LX,3)=P(P,12) THEN                                       GOSUB 5080: GOTO 5060
5050            NEXT P
5060    NEXT LX
5070 RETURN
5080 'MOVE THE MONSTER
5090   MX=M(ML(LX,1),ML(LX,2))-60
5100   IF MX=32 AND ML(LX,4) < 8 THEN ML(LX,4)=ML(LX,4)+1  'TROLL
5110 ' FIND CLOSEST PLAYER
5120   SV.P=0: SV.D=9999
5130   FOR P=1 TO 9
5140           IF (P.NAME$(P)="") OR (P(P,11)<>ML(LX,3) AND P(P,12)<>ML(LX,3))                     THEN GOTO 5170
5150           D=ABS(ML(LX,1)-P(P,6))+ABS(ML(LX,2)-P(P,7))
5160           IF D<SV.D THEN SV.P=P: SV.D=D
5170   NEXT P
5180   P=SV.P
5190   FOR T = 1 TO M.MV(MX)
5200         IF ML(LX,1)<P(P,6) THEN NV=ML(LX,1)+M.ACT: NH=ML(LX,2): GOTO 5240
5210         IF ML(LX,1)>P(P,6) THEN NV=ML(LX,1)-M.ACT: NH=ML(LX,2): GOTO 5240
5220         IF ML(LX,2)<P(P,7) THEN NH=ML(LX,2)+M.ACT: NV=ML(LX,1): GOTO 5240
5230         IF ML(LX,2)>P(P,7) THEN NH=ML(LX,2)-M.ACT: NV=ML(LX,1): GOTO 5240
5240         IF NV < 1 OR NV> 24 OR NH <1 OR NH > 39 THEN GOTO 5330
5250         IF M(NV,NH) <> 32 THEN GOTO 5330
5260         M(NV,NH)=M(ML(LX,1),ML(LX,2)): M(ML(LX,1),ML(LX,2))=32
5270         LOCATE ML(LX,1),ML(LX,2): PRINT " ";
5280         M.H=(NH*8)-8: M.V=(NV*8)-8: DRAW "C3"
5290         DRAW "BM=M.H;,=M.V;": DRAW "BR3;D4;F2;H2;G2"
5300         DRAW "BM=M.H;,=M.V;": DRAW "BR3;D2;L2;R4"
5310         ML(LX,1)=NV: ML(LX,2)=NH
5320   NEXT T
5330 'MONSTER ATTACKS
5340   IF M.ACT<1 THEN GOTO 5860
5350 '  CHECK IF MONSTER NEXT TO PLAYER
5360   V=ML(LX,1): H=ML(LX,2): LV=V-1:  HV=V+1: LH=H-1: HH=H+1
5370   IF P(P,6) => LV AND P(P,6) <= HV AND P(P,7) => LH AND P(P,7) <= HH               THEN GOTO 5430 ELSE GOTO 5380
5380    IF M.DAM(MX,1) < 80 THEN GOTO 5860 'NOT A DRAGON
5390    MSG$="DRAGON FIRE HITS "+LEFT$(P.NAME$(P),13): GOSUB 4460
5400    WC=8: WD=0
5410    GOTO 5530
5420 '  MAKE ATTACK
5430   MN=INT((MX+1)/4) +1
5440   WK=10-MN
5450   WK=WK+P(P,5): IF WK>10 THEN WK=10
5460   IF WK<1 THEN WK=1
5470   ROLL=INT(RND*10)+1
5480   IF WK > ROLL THEN GOTO 5860 'MISSED
5490   MSG$="A "+M.NAME$(MX)+" HAS ATTACKED "+LEFT$(P.NAME$(P),13): GOSUB 4460
5500   IF M.DAM(MX,1) < 10 THEN WD=M.DAM(MX,1): GOTO 5810    'NORMAL ATTACK
5510    WC=(INT(M.DAM(MX,1)/10))
5520    WD=M.DAM(MX,1)-(10*WC)
5530    GET #1,P        'GET PLAYER RECORD TO CHECK SAVING THROWS
5540    IF WC=1 THEN GOTO 5750                     'POISON
5550    IF WC=2 THEN P(P,1) = 1200: GOTO 5790      'DISEASE
5560    IF WC=5 THEN WK=(INT(M.DAM(MX,2)*RND)+WD)+(INT(30*RND)+5)
5570    IF WC=8 THEN WK=(INT(M.DAM(MX,2)*RND)+WD)+ML(MX,4)
5580    IF WC=5 OR WC=8 THEN GOTO 5590 ELSE GOTO 5620
5590    ZZ = INT(RND*20)+1             'DRAGONS BREATH
5600    IF ZZ => CVI(SV.DRAG$) THEN WK=INT(WK/2)
5610    GOTO 5830
5620   IF WC=6 THEN GOTO 5710      'TURN TO STONE
5630 '  ENERGY DRAIN
5640   IF WC = 3 THEN ZZ=CVI(LVL$): ZZ=ZZ-1 'ENERGY DRAIN 1 LEVEL
5650   IF WC = 4 THEN ZZ=CVI(LVL$): ZZ=ZZ-2 'ENERGY DRAIN 2 LEVELS
5660   IF ZZ<1 THEN P(P,3)=0: GOTO 5850  'PLAYER DEAD
5670   IF WC=3 THEN LSET EXPR$ = MKS$(INT(CVS(EXPR$)/2)): P(P,1)=1200
5680   IF WC=4 THEN LSET EXPR$ = MKS$(INT(CVS(EXPR$)/4)): P(P,1)=1200
5690   LSET LVL$=MKI$(ZZ)
5700   GOTO 5790
5710 '  TURN TO STONE
5720   ZZ = INT(RND*20)+1             'TURN TO STONE
5730   IF ZZ => CVI(SV.STONE$) THEN MSG$="THE GODS HAVE SPARED YOU":                      GOSUB 4460: WK=0: GOTO 5790
5740   P(P,3)=0: GOTO 5840
5750 '  POISON
5760   ZZ = INT(RND*20)+1             'POISON
5770   IF ZZ => CVI(SV.POISON$) THEN MSG$="THE GODS HAVE SPARED YOU":                    GOSUB 4460: WK=0: GOTO 5790
5780   P(P,3)=0: GOTO 5840   'PLAYER DEAD
5790   PUT #1,P        'REWRITE PLAYERS RECORD
5800   GOTO 5860
5810 '  CHECK DAMAGE
5820   WK=INT(RND*M.DAM(MX,2))+WD
5830   P(P,3)=P(P,3)-WK
5840   IF P(P,3)>0 THEN MSG$="IT DID "+STR$(WK)+" POINTS DAMAGE": GOSUB 4460:             GOTO 5860
5850   IF P(P,3) <1 THEN  MSG$=P.NAME$(P)+"IS DEAD": P.NAME$(P) = "":                    V=P(P,6):H=P(P,7): LOCATE V,H: PRINT " ";: M(V,H)=32: GOSUB 4460
5860 RETURN
5870 'CAST A SPELL
5880   IF T<>1 THEN MSG$="NO TIME": GOSUB 4460: GOTO 6110 'SPELL TAKES FULL TURN
5890    IF P.CLASS$(P) <> "CLERIC    " AND P.CLASS$(P) <> "ELF       "                     AND P.CLASS$(P) <> "MAGIC-USER"                                                THEN MSG$="YOU CAN'T CAST SPELLS": GOSUB 4460: GOTO 6110
5900    LOCATE 25,1: PRINT SPACE$(39);
5910    LOCATE 25,1: INPUT;"WHAT SPELL ",W$
5920    SK$=W$
5930    GOSUB 330 'MATCH TO SUPPLY FILE
5940    IF FOUND=0 THEN GOTO 6110
5950    S(S,P+2)=S(S,P+2)-1  'SUBTRACT SPELL
5960    IF S(S,2) > P(P,4) THEN MSG$="YOU CAN'T USE THAT SPELL": GOSUB 4460:              GOTO 6090
5970    IF (S(S,1) = 1 AND P.CLASS$(P) <> "CLERIC    ")                                     OR (S(S,1)=3 AND P.CLASS$(P) = "CLERIC    ")                                  THEN MSG$="YOU CAN'T USE THAT SPELL": GOSUB 4460: GOTO 6090
5980   IF S=26 THEN GOSUB 6620: GOTO 6090                    'CLOUDKILL
5990   IF S=28 OR S=22 THEN GOSUB 6780: GOTO 6090            'DEATH
6000   IF S=19 OR S=23 THEN P(P,10)=99: GOTO 6090            'LIGHT
6010   IF S=29 OR S=27 THEN TE=3: GOTO 6090                  'TURN EVIL
6020   IF S=31 OR S=32 THEN TO.OPEN=6: GOTO 6090             'TO OPEN
6030   IF S=30 THEN HS=4: GOTO 6090                          'HASTE
6040   IF S=18 THEN FT=6: GOTO 6090                          'FIND TRAPS
6050   IF S=24 THEN GOSUB 6370: GOTO 6090                    'LIGHTNING
6060   IF S=17 OR S=21 OR S=20 OR S=25 THEN GOSUB 6120: GOTO 6090
6070 ' INVALID SPELL
6080   MSG$="THATS NOT A VALID SPELL": GOSUB 4460: GOTO 6110
6090 'END TURN
6100   T=MV+1
6110 RETURN
6120 'CURE WOUNDS/RAISE DEAD/CURE CURSE
6130   LOCATE 25,1: PRINT SPACE$(39);  'CURE WOUNDS/RAISE DEAD/CURE CURSE
6140   LOCATE 25,1: PRINT "WHAT PLAYER? ";
6150    GOSUB 7110 'GET REPLY
6160    PX=VAL(W$)
6170   IF S=17 AND P.NAME$(PX)="" THEN MSG$="THAT PLAYER IS DEAD": GOSUB 4460:           GOTO 6360
6180 '  CHECK FOR SAME ALIGNMENT
6190    GET #1,P    'GET PLAYER RECORD
6200    SV.ALIGN$=ALIGN$
6210    GET #1,PX   'GET OTHER PLAYERS RECORD
6220    IF SV.ALIGN$ <> ALIGN$ THEN MSG$="YOU WOULDN'T HELP THAT SWINE":                  GOSUB 4460: GOTO 6360
6230   IF S=20 OR S=25 THEN GOTO 6320  'REMOVE CURSE
6240   IF S=21 THEN GOTO 6280   'RAISE DEAD
6250 ' CURE WOUNDS
6260   IF (CVI(HIT$)-P(PX,3)) < P(P,4) THEN P(PX,3)=CVI(HIT$)                            ELSE P(PX,3)=P(PX,3)+P(P,4)
6270   GOTO 6360
6280 ' RAISE DEAD
6290   P.NAME$(PX)=NM$: P(PX,1)=1600: P(PX,3)=1: P(PX,5)=1: P(PX,8)=0:                   P(PX,9)=0: P(PX,10)=0: M(P(PX,6),P(PX,7))=PX+48
6300   LOCATE P(PX,6),P(PX,7): PRINT CHR$(M(P(PX,6),P(PX,7)));
6310   GOTO 6360
6320 ' REMOVE CURSE
6330   S(33,PX+2)=0
6340   P(PX,5)=P(PX,5)+4
6350   P(PX,1)=P(PX,1)-300
6360 RETURN
6370 ' LIGHTNING
6380   LOCATE 25,1: PRINT SPACE$(39);                 'LIGHTNING/DEATH
6390   LOCATE 25,1: PRINT "WHAT WAY (U-D-L-R)? ";
6400    GOSUB 7110 'GET REPLY
6410   IF W$="U" THEN NV=P(P,6)+1:NH=P(P,7):NH2=P(P,7):NV2=P(P,6+2): GOTO 6460
6420   IF W$="D" THEN NV=P(P,6)-1:NH=P(P,7):NH2=P(P,7):NV2=P(P,6-2): GOTO 6460
6430   IF W$="L" THEN NH=P(P,7)-1:NV=P(P,6):NV2=P(P,6):NH2=P(P,7-2): GOTO 6460
6440   IF W$="R" THEN NH=P(P,7)+1:NV=P(P,6):NV2=P(P,6):NH2=P(P,7+2): GOTO 6460
6450   GOTO 6380
6460   FOR LX=1 TO ML.MAX
6470           IF ML(LX,1)<1 THEN GOTO 6600 'DEAD MONSTER
6480           IF (ML(LX,1) = NV OR ML(LX,1) = NV2)                                             AND (ML(LX,2) = NH OR ML(LX,2)=NH2)                                               THEN GOTO 6490 ELSE GOTO 6600
6490           V=ML(LX,1): H=ML(LX,2)
6500           MN=M(V,H)-60
6510           DM=INT(6*P(P,4))
6520           ML(LX,4)=ML(LX,4)-DM
6530           IF ML(LX,4)>0 THEN MSG$="THE "+M.NAME$(MN)+" HAS BEEN WOUNDED":                    GOSUB 4460: GOTO 6600
6540           RX=ML(LX,3): R(RX,6)=R(RX,6)-1
6550           MSG$="YOU KILLED THE "+M.NAME$(MN): GOSUB 4460:
6560           LOCATE V,H: PRINT " ";: M(V,H)=32: ML(LX,1)=0:
6570           MX=(INT(MN/4))+1
6580           RX=ML(LX,3): R(RX,6)=R(RX,6)-1
6590           EXPR!=EXPR!+(MX*10)
6600   NEXT LX
6610 RETURN
6620 '  CLOUDKILL
6630   FOR LX=1 TO ML.MAX
6640           IF ML(LX,1)<1 THEN GOTO 6760 'DEAD MONSTER
6650           IF ML(LX,3) = P(P,11) OR ML(LX,3) = P(P,12) THEN GOTO 6660                       ELSE GOTO 6760
6660           V=ML(LX,1): H=ML(LX,2)
6670           MN=M(V,H)-60
6680           ROLL=INT(RND*2)+1: IF ROLL=1 THEN DM=1 ELSE DM=5
6690           ML(LX,4)=ML(LX,4)-DM
6700           IF ML(LX,4)>0 THEN MSG$="THE "+M.NAME$(MN)+" HAS BEEN WOUNDED":GOSUB 4460:              GOTO 6760
6710           MSG$="YOU KILLED THE "+M.NAME$(MN): GOSUB 4460:
6720           RX=ML(LX,3): R(RX,6)=R(RX,6)-1
6730           LOCATE V,H: PRINT " ";: M(V,H)=32: ML(LX,1)=0:
6740           MX=(INT(MN/4))+1
6750           EXPR!=EXPR!+(MX*10)
6760   NEXT LX
6770 RETURN
6780 'DEATH SPELL
6790   LOCATE 25,1: PRINT SPACE$(39);
6800   LOCATE 25,1: PRINT "WHAT WAY (U-D-L-R)? ";
6810   V=P(P,6): H=P(P,7)
6820    GOSUB 7110 'GET REPLY
6830   IF W$="U" THEN DIR=-1: GOTO 6880
6840   IF W$="D" THEN DIR=1: GOTO 6880
6850   IF W$="L" THEN DIR=-1: GOTO 6920
6860   IF W$="R" THEN DIR=1: GOTO 6920
6870   GOTO 6780
6880 ' LOOK VERT
6890   V=V+DIR: IF V>24 OR V<1 THEN MSG$="YOU MISSED": GOSUB 4460: GOTO 7100
6900   IF M(V,H)=<32 THEN GOTO 6880
6910   GOTO 6950
6920 '  LOOK HOR
6930   H=H+DIR: IF H>39 OR H<1 THEN MSG$="YOU MISSED": GOSUB 4460: GOTO 7100
6940   IF M(V,H)=<32 THEN GOTO 6920
6950 ' CHECK  WHAT YOU HIT
6960   IF M(V,H) > 48 AND M(V,H) < 58 THEN GOTO 7060 'HIT A PLAYER
6970   IF M(V,H) > 60 AND M(V,H) < 124 THEN GOTO 6990 'HIT A MONSTER
6980   MSG$="YOU MISSED": GOSUB 4460: GOTO 7100
6990 '  HIT A MONSTER
7000   FOR LX=1 TO ML.MAX
7010           IF ML(LX,1)=V AND ML(LX,2)=H THEN GOTO 7030
7020   NEXT
7030   MN=M(V,H)-60
7040   GOSUB 4350
7050   GOTO 7100
7060 '  HIT A PLAYER
7070   PX=M(V,H)-48
7080   MSG$="YOU KILLED "+P.NAME$(PX): GOSUB 4460
7090   P.NAME$(PX)="": LOCATE V,H: PRINT " ";: M(V,H)=32
7100 RETURN
7110 'GET INPUT VARIABLE
7120    W$=""
7130    REPLY$=INKEY$
7140    IF REPLY$="" THEN GOTO 7130
7150    IF LEN(REPLY$)=1 THEN GOTO 7220 ELSE REPLY$=RIGHT$(REPLY$,1) 'CHK BACKSP
7160    IF ASC(REPLY$) <> 75 THEN BEEP: GOTO 7130    'INVALID CHAR
7170    L=LEN(W$): IF L=0 THEN BEEP: GOTO 7130
7180    W$=LEFT$(W$,L-1) 'ERASE LAST CHAR FROM INPUT VAR
7190    L=POS(0): L=L-1: LOCATE 25,L: PRINT " "; 'ERASE LAST CHAR FROM SCREEN
7200    LOCATE 25,L 'REPOSITION CURSOR
7210    GOTO 7130
7220    IF ASC(REPLY$)=13 THEN GOTO 7260 'ENTER WAS HIT
7230    PRINT REPLY$;
7240    W$=W$+REPLY$
7250    GOTO 7130
7260 RETURN
