Category : A Collection of Games for DOS and Windows
Archive   : DUN.ZIP
Filename : DUNEND.BAS

 
Output of file : DUNEND.BAS contained in archive : DUN.ZIP
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


  3 Responses to “Category : A Collection of Games for DOS and Windows
Archive   : DUN.ZIP
Filename : DUNEND.BAS

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/