home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Between Heaven & Hell 2
/
BetweenHeavenHell.cdr
/
100
/
23
/
dunend.bas
< prev
next >
Wrap
BASIC Source File
|
1985-03-24
|
9KB
|
181 lines
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