10 'DUNEND  -  END THE QUEST AND UPDATE THE FILES
20    DEFINT A-Z
30    P.TOT = 0
40    FOR PX = 1 TO 9
50            IF P.NAME$(PX)="" THEN P.TOT=P.TOT+1: GOTO 70
60            IF P(PX,7) < 3   THEN P.TOT=P.TOT+1
70    NEXT PX
80    IF P.TOT < 9 THEN MSG$="YOU WERE NOT ALL OUT OF THE DUNGEON":                      EXPR!=0: GP!=0: GOSUB 250
90    IF TIMER < SV.TIMER! THEN GOTO 90 'WAIT
100    CLS
110    P.TOT=0
120    FOR P = 1 TO 9
130      IF P.NAME$(P) <> "" THEN P.TOT = P.TOT + 1
140    NEXT
150    IF P.TOT = 0 THEN EARNED.EXPR!=0 ELSE EARNED.EXPR! =  INT(EXPR!/P.TOT)
160    FOR P = 1 TO 9
170      GOSUB 330       'UPDATE THE FILES
180    NEXT P
190    GOSUB 1460       'UPDATE SUPPLIES
200    IF TIMER < SV.TIMER! THEN GOTO 200
210    CLS: PRINT "PLAY AGAIN?"
220    GOSUB 1700
230    IF REPLY$ = "Y" THEN CLS: PRINT "PLEASE STAND BY":  RUN "DUNQUEST"
240    PRINT "CLOSING FILES": CLOSE: CHAIN "MENU",1000
250 'MESSAGE
260    IF TIMER < SV.TIMER! THEN GOTO 260
270    MS$=SPACE$(39)
280    LSET MS$=MSG$
290    LOCATE 25,1
300    PRINT MS$;
310    SV.TIMER!=TIMER+1
320 RETURN
330 ' UPDATE THE FILES
340            IF P.NAME$(P) = "" AND P(P,4) = 0 THEN GOTO 1450 'DIDN'T PLAY
350            GET #1,P
360            PRINT P.NAME$(P)
370            IF P.NAME$(P) = "" THEN LSET NM$ = SPACE$(24): GOTO 1440
380            'PUT AWAY ITEMS THAT WERE IN PLAYERS HANDS
390            S=P(P,8): IF S <> 0 THEN S(S,P+2) = S(S,P+2)+1
400            S=P(P,9): IF S <> 0 THEN S(S,P+2) = S(S,P+2)+1
410 '      UPDATE EXPERIENCE POINTS
420       BONUS!=0
430       IF CLAS$="CLERIC    " THEN PRIME=CVI(WIS$)
440       IF CLAS$="DWARF     " THEN PRIME=CVI(STRN$)
450       IF CLAS$="ELF       " THEN PRIME=INT((CVI(STRN$)+CVI(INTL$))/2)
460       IF CLAS$="FIGHTER   " THEN PRIME=CVI(STRN$)
470       IF CLAS$="HALFLING  " THEN PRIME=INT((CVI(STRN$)+CVI(DEX$))/2)
480       IF CLAS$="MAGIC-USER" THEN PRIME=CVI(INTL$)
490       IF CLAS$="THIEF     " THEN PRIME=CVI(DEX$)
500       WK=INT((PRIME-2)/3)
510       BONUS!=(WK-3)*.1
520       BONUS!=BONUS!*EARNED.EXPR!
530       EXPR!=INT(EARNED.EXPR!+BONUS!)
540      PRINT "YOU EARNED ";EXPR!;" EXPERIENCE POINTS"
550            LSET EXPR$ = MKS$(CVS(EXPR$) + EXPR!)
560 '     CHECK IF PROMOTED
570            ZZ=CVI(LVL$)
580            IF ZZ=1 THEN WK!=500: GOTO 610
590            WK!=2000
600            FOR MX = 2 TO ZZ: WK!=WK!+WK!: NEXT
610            IF CVS(EXPR$) < WK! THEN GOTO 1330
620            IF CVI(LVL$)=9 THEN GOTO 650
630            IF ZZ=6 AND P.CLASS$="ELF       " THEN GOTO 1250
640            GOTO 730 'PROMOTED
650 '   CHECK FOR TERMINATION OF PLAYER
660     ROLL = INT(RND*5)+1
670     IF ROLL <> 5 THEN GOTO 1250
680     MSG$="THE VALKYRIES HAVE CHOSEN " + P.NAME$(P)
690     IF CLAS$="ELF       " THEN MSG$=P.NAME$(P)+" HAS GONE TO THE GREY HAVENS"
700     IF CLAS$="CLERIC    " THEN MSG$="THE GODS HAVE CALLED " + P.NAME$(P)
705     GOSUB 250 'PRINT MSG
710     P.NAME$=(P)="": LSET NM$= SPACE$(24):
720     GOTO 1440
730 '     PROMOTED
740            PRINT "CONGRADULATIONS ";P.NAME$(P)
750            LSET LVL$ = MKI$(CVI(LVL$)+1)
760           IF CVI(LVL$)=3 OR CVI(LVL$)=6 OR CVI(LVL$)=9 THEN GOTO 770                      ELSE GOTO 810
770            IF CVI(SV.POISON$) > 2 THEN                                                        LSET SV.POISON$=MKI$(CVI(SV.POISON$)-2):
780            IF CVI(SV.STONE$) > 2 THEN                                                        LSET SV.STONE$=MKI$(CVI(SV.STONE$)-2):
790            IF CVI(SV.DRAG$) > 2 THEN                                                          LSET SV.DRAG$=MKI$(CVI(SV.DRAG$)-2):
800            IF CVI(SV.MAGIC$) > 2 THEN                                                          LSET SV.MAGIC$=MKI$(CVI(SV.MAGIC$)-2):
810     'GET TITLE
820     IF CLAS$ = "MAGIC-USER" THEN GOTO 940
830     IF CLAS$ = "THIEF     " THEN GOTO 1040
840     IF CLAS$ = "CLERIC    " THEN GOTO 1140
850             IF CVI(LVL$)=2 THEN MSG$="LEGIONNAIRE "+CLAS$
860             IF CVI(LVL$)=3 THEN MSG$="VETERAN "+CLAS$
870             IF CVI(LVL$)=4 THEN MSG$="WARRIOR "+CLAS$
880             IF CVI(LVL$)=5 THEN MSG$="HERO "+CLAS$
890             IF CVI(LVL$)=6 THEN MSG$="SWORDMASTER "+CLAS$
900             IF CVI(LVL$)=7 THEN MSG$="CHAMPION "+CLAS$
910             IF CVI(LVL$)=8 THEN MSG$="GRANDMASTER "+CLAS$
920             IF CVI(LVL$)=9 THEN MSG$="LORD "+CLAS$
930             GOTO 1240
940 '    MAGIC USERS TITLES
950             IF CVI(LVL$)=2 THEN MSG$="MEDIUM "
960             IF CVI(LVL$)=3 THEN MSG$="SEER "
970             IF CVI(LVL$)=4 THEN MSG$="CONJUROR "
980             IF CVI(LVL$)=5 THEN MSG$="ENCHANTER "
990             IF CVI(LVL$)=6 THEN MSG$="WARLOCK/WITCH "
1000             IF CVI(LVL$)=7 THEN MSG$="SORCEROR "
1010             IF CVI(LVL$)=8 THEN MSG$="NECROMANCER "
1020             IF CVI(LVL$)=9 THEN MSG$="WIZARD "
1030             GOTO 1240
1040 '    THIEVES TITLES
1050             IF CVI(LVL$)=2 THEN MSG$="APPRENTICE "
1060             IF CVI(LVL$)=3 THEN MSG$="FOOTPAD "
1070             IF CVI(LVL$)=4 THEN MSG$="ROBBER  "
1080             IF CVI(LVL$)=5 THEN MSG$="BURGLAR "
1090             IF CVI(LVL$)=6 THEN MSG$="CUTPURSE "
1100             IF CVI(LVL$)=7 THEN MSG$="SHARPER "
1110             IF CVI(LVL$)=8 THEN MSG$="MASTER THIEF "
1120             IF CVI(LVL$)=9 THEN MSG$="GRANDMASTER THIEF "
1130             GOTO 1240
1140 '    CLERICS TITLES
1150             IF CVI(LVL$)=2 THEN MSG$="ACOLYTE  "
1160             IF CVI(LVL$)=3 THEN MSG$="ADEPT "
1170             IF CVI(LVL$)=4 THEN MSG$="PRIEST/PRIESTESS "
1180             IF CVI(LVL$)=5 THEN MSG$="VICAR "
1190             IF CVI(LVL$)=6 THEN MSG$="CURATE "
1200             IF CVI(LVL$)=7 THEN MSG$="ELDER "
1210             IF CVI(LVL$)=8 THEN MSG$="BISHOP "
1220             IF CVI(LVL$)=9 THEN MSG$="HIGH PRIEST/PRIESTESS "
1230             GOTO 1240
1240     PRINT "YOU ARE PROMOTED TO ";MSG$;" ";" LEVEL ";CVI(LVL$)
1250            IF P.CLASS$(P) = "CLERIC    " THEN WK=6
1260            IF P.CLASS$(P) = "DWARF     " THEN WK=8
1270            IF P.CLASS$(P) = "ELF       " THEN WK=6
1280            IF P.CLASS$(P) = "FIGHTER   " THEN WK=8
1290            IF P.CLASS$(P) = "HALFLING  " THEN WK=6
1300            IF P.CLASS$(P) = "MAGIC-USER" THEN WK=4
1310            IF P.CLASS$(P) = "THIEF     " THEN WK=4
1320            LSET HIT$=MKI$((CVI(HIT$))+INT(RND*WK)+1)
1330     'UPDATE MONEY
1340     MONEY!=INT(GP!/P.TOT)
1350     PRINT "YOU ACQUIRED ";MONEY!;" GOLD PIECES "
1360     IF (CLAS$ = "MAGIC-USER" OR CLAS$ = "ELF       ") THEN MAX! = 3                  ELSE LET MAX = 9
1370     MIN = 1
1380     TAX!=INT(RND*MAX)+MIN
1390     TAX!=TAX!/10
1400     TAX!=INT(TAX!*MONEY!)
1410     IF CLAS$="CLERIC    " THEN PRINT "YOU DONATE ";TAX!;" TO THE GODS"                ELSE PRINT "LOCAL AUTHORITIES TAX YOU ";TAX!
1420     MONEY!=MONEY!-TAX!
1430            LSET MONEY$=MKS$(CVS(MONEY$)+MONEY!)
1440            PUT #1,P
1450 RETURN
1460 'UPDATE SUPPLIES
1470    LET S=0
1480    LOCATE 25,1: PRINT "PLEASE STAND BY WHILE FILES ARE UPDATED";
1490 'GO THRU FILE
1500    S=S+1
1510    GET #2,S
1520    IF SID$ <> "DS" THEN GOTO 1690 ' END OF FILE
1530    FOR P = 1 TO 9
1540            IF P.NAME$(P) = "" AND P(P,4) = 0 THEN GOTO 1660
1550            IF P.NAME$(P) = "" THEN S(S,P+2) = 0
1560        ON P   GOTO 1570,1580,1590,1600,1610,1620,1630,1640,1650
1570        LSET P1$ = MKI$(S(S,P+2)): GOTO 1660
1580        LSET P2$ = MKI$(S(S,P+2)): GOTO 1660
1590        LSET P3$ = MKI$(S(S,P+2)): GOTO 1660
1600        LSET P4$ = MKI$(S(S,P+2)): GOTO 1660
1610        LSET P5$ = MKI$(S(S,P+2)): GOTO 1660
1620        LSET P6$ = MKI$(S(S,P+2)): GOTO 1660
1630        LSET P7$ = MKI$(S(S,P+2)): GOTO 1660
1640        LSET P8$ = MKI$(S(S,P+2)): GOTO 1660
1650        LSET P9$ = MKI$(S(S,P+2)): GOTO 1660
1660    NEXT P
1670    PUT #2,S
1680    GOTO 1490
1690 RETURN
1700 'GET A REPLY
1710    DEF SEG=0: POKE 1050,PEEK(1052) 'CLEAR KEYBOARD BUFFER
1720    REPLY$=INKEY$: IF REPLY$=""  THEN GOTO 1720
1730    IF LEN(REPLY$)=1 THEN GOTO 1790
1740    REPLY$=RIGHT$(REPLY$,1)
1750    IF ASC(REPLY$)=72 THEN REPLY$=CHR$(30): GOTO 1790
1760    IF ASC(REPLY$)=80 THEN REPLY$=CHR$(31): GOTO 1790
1770    IF ASC(REPLY$)=77 THEN REPLY$=CHR$(28): GOTO 1790
1780    IF ASC(REPLY$)=75 THEN REPLY$=CHR$(29)
1790 RETURN
