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

  1. 10 'DUNEND  -  END THE QUEST AND UPDATE THE FILES
  2. 20    DEFINT A-Z
  3. 30    P.TOT = 0
  4. 40    FOR PX = 1 TO 9
  5. 50            IF P.NAME$(PX)="" THEN P.TOT=P.TOT+1: GOTO 70
  6. 60            IF P(PX,7) < 3   THEN P.TOT=P.TOT+1
  7. 70    NEXT PX
  8. 80    IF P.TOT < 9 THEN MSG$="YOU WERE NOT ALL OUT OF THE DUNGEON":                      EXPR!=0: GP!=0: GOSUB 250
  9. 90    IF TIMER < SV.TIMER! THEN GOTO 90 'WAIT
  10. 100    CLS
  11. 110    P.TOT=0
  12. 120    FOR P = 1 TO 9
  13. 130      IF P.NAME$(P) <> "" THEN P.TOT = P.TOT + 1
  14. 140    NEXT
  15. 150    IF P.TOT = 0 THEN EARNED.EXPR!=0 ELSE EARNED.EXPR! =  INT(EXPR!/P.TOT)
  16. 160    FOR P = 1 TO 9
  17. 170      GOSUB 330       'UPDATE THE FILES
  18. 180    NEXT P
  19. 190    GOSUB 1460       'UPDATE SUPPLIES
  20. 200    IF TIMER < SV.TIMER! THEN GOTO 200
  21. 210    CLS: PRINT "PLAY AGAIN?"
  22. 220    GOSUB 1700
  23. 230    IF REPLY$ = "Y" THEN CLS: PRINT "PLEASE STAND BY":  RUN "DUNQUEST"
  24. 240    PRINT "CLOSING FILES": CLOSE: CHAIN "MENU",1000
  25. 250 'MESSAGE
  26. 260    IF TIMER < SV.TIMER! THEN GOTO 260
  27. 270    MS$=SPACE$(39)
  28. 280    LSET MS$=MSG$
  29. 290    LOCATE 25,1
  30. 300    PRINT MS$;
  31. 310    SV.TIMER!=TIMER+1
  32. 320 RETURN
  33. 330 ' UPDATE THE FILES
  34. 340            IF P.NAME$(P) = "" AND P(P,4) = 0 THEN GOTO 1450 'DIDN'T PLAY
  35. 350            GET #1,P
  36. 360            PRINT P.NAME$(P)
  37. 370            IF P.NAME$(P) = "" THEN LSET NM$ = SPACE$(24): GOTO 1440
  38. 380            'PUT AWAY ITEMS THAT WERE IN PLAYERS HANDS
  39. 390            S=P(P,8): IF S <> 0 THEN S(S,P+2) = S(S,P+2)+1
  40. 400            S=P(P,9): IF S <> 0 THEN S(S,P+2) = S(S,P+2)+1
  41. 410 '      UPDATE EXPERIENCE POINTS
  42. 420       BONUS!=0
  43. 430       IF CLAS$="CLERIC    " THEN PRIME=CVI(WIS$)
  44. 440       IF CLAS$="DWARF     " THEN PRIME=CVI(STRN$)
  45. 450       IF CLAS$="ELF       " THEN PRIME=INT((CVI(STRN$)+CVI(INTL$))/2)
  46. 460       IF CLAS$="FIGHTER   " THEN PRIME=CVI(STRN$)
  47. 470       IF CLAS$="HALFLING  " THEN PRIME=INT((CVI(STRN$)+CVI(DEX$))/2)
  48. 480       IF CLAS$="MAGIC-USER" THEN PRIME=CVI(INTL$)
  49. 490       IF CLAS$="THIEF     " THEN PRIME=CVI(DEX$)
  50. 500       WK=INT((PRIME-2)/3)
  51. 510       BONUS!=(WK-3)*.1
  52. 520       BONUS!=BONUS!*EARNED.EXPR!
  53. 530       EXPR!=INT(EARNED.EXPR!+BONUS!)
  54. 540      PRINT "YOU EARNED ";EXPR!;" EXPERIENCE POINTS"
  55. 550            LSET EXPR$ = MKS$(CVS(EXPR$) + EXPR!)
  56. 560 '     CHECK IF PROMOTED
  57. 570            ZZ=CVI(LVL$)
  58. 580            IF ZZ=1 THEN WK!=500: GOTO 610
  59. 590            WK!=2000
  60. 600            FOR MX = 2 TO ZZ: WK!=WK!+WK!: NEXT
  61. 610            IF CVS(EXPR$) < WK! THEN GOTO 1330
  62. 620            IF CVI(LVL$)=9 THEN GOTO 650
  63. 630            IF ZZ=6 AND P.CLASS$="ELF       " THEN GOTO 1250
  64. 640            GOTO 730 'PROMOTED
  65. 650 '   CHECK FOR TERMINATION OF PLAYER
  66. 660     ROLL = INT(RND*5)+1
  67. 670     IF ROLL <> 5 THEN GOTO 1250
  68. 680     MSG$="THE VALKYRIES HAVE CHOSEN " + P.NAME$(P)
  69. 690     IF CLAS$="ELF       " THEN MSG$=P.NAME$(P)+" HAS GONE TO THE GREY HAVENS"
  70. 700     IF CLAS$="CLERIC    " THEN MSG$="THE GODS HAVE CALLED " + P.NAME$(P)
  71. 705     GOSUB 250 'PRINT MSG
  72. 710     P.NAME$=(P)="": LSET NM$= SPACE$(24):
  73. 720     GOTO 1440
  74. 730 '     PROMOTED
  75. 740            PRINT "CONGRADULATIONS ";P.NAME$(P)
  76. 750            LSET LVL$ = MKI$(CVI(LVL$)+1)
  77. 760           IF CVI(LVL$)=3 OR CVI(LVL$)=6 OR CVI(LVL$)=9 THEN GOTO 770                      ELSE GOTO 810
  78. 770            IF CVI(SV.POISON$) > 2 THEN                                                        LSET SV.POISON$=MKI$(CVI(SV.POISON$)-2):
  79. 780            IF CVI(SV.STONE$) > 2 THEN                                                        LSET SV.STONE$=MKI$(CVI(SV.STONE$)-2):
  80. 790            IF CVI(SV.DRAG$) > 2 THEN                                                          LSET SV.DRAG$=MKI$(CVI(SV.DRAG$)-2):
  81. 800            IF CVI(SV.MAGIC$) > 2 THEN                                                          LSET SV.MAGIC$=MKI$(CVI(SV.MAGIC$)-2):
  82. 810     'GET TITLE
  83. 820     IF CLAS$ = "MAGIC-USER" THEN GOTO 940
  84. 830     IF CLAS$ = "THIEF     " THEN GOTO 1040
  85. 840     IF CLAS$ = "CLERIC    " THEN GOTO 1140
  86. 850             IF CVI(LVL$)=2 THEN MSG$="LEGIONNAIRE "+CLAS$
  87. 860             IF CVI(LVL$)=3 THEN MSG$="VETERAN "+CLAS$
  88. 870             IF CVI(LVL$)=4 THEN MSG$="WARRIOR "+CLAS$
  89. 880             IF CVI(LVL$)=5 THEN MSG$="HERO "+CLAS$
  90. 890             IF CVI(LVL$)=6 THEN MSG$="SWORDMASTER "+CLAS$
  91. 900             IF CVI(LVL$)=7 THEN MSG$="CHAMPION "+CLAS$
  92. 910             IF CVI(LVL$)=8 THEN MSG$="GRANDMASTER "+CLAS$
  93. 920             IF CVI(LVL$)=9 THEN MSG$="LORD "+CLAS$
  94. 930             GOTO 1240
  95. 940 '    MAGIC USERS TITLES
  96. 950             IF CVI(LVL$)=2 THEN MSG$="MEDIUM "
  97. 960             IF CVI(LVL$)=3 THEN MSG$="SEER "
  98. 970             IF CVI(LVL$)=4 THEN MSG$="CONJUROR "
  99. 980             IF CVI(LVL$)=5 THEN MSG$="ENCHANTER "
  100. 990             IF CVI(LVL$)=6 THEN MSG$="WARLOCK/WITCH "
  101. 1000             IF CVI(LVL$)=7 THEN MSG$="SORCEROR "
  102. 1010             IF CVI(LVL$)=8 THEN MSG$="NECROMANCER "
  103. 1020             IF CVI(LVL$)=9 THEN MSG$="WIZARD "
  104. 1030             GOTO 1240
  105. 1040 '    THIEVES TITLES
  106. 1050             IF CVI(LVL$)=2 THEN MSG$="APPRENTICE "
  107. 1060             IF CVI(LVL$)=3 THEN MSG$="FOOTPAD "
  108. 1070             IF CVI(LVL$)=4 THEN MSG$="ROBBER  "
  109. 1080             IF CVI(LVL$)=5 THEN MSG$="BURGLAR "
  110. 1090             IF CVI(LVL$)=6 THEN MSG$="CUTPURSE "
  111. 1100             IF CVI(LVL$)=7 THEN MSG$="SHARPER "
  112. 1110             IF CVI(LVL$)=8 THEN MSG$="MASTER THIEF "
  113. 1120             IF CVI(LVL$)=9 THEN MSG$="GRANDMASTER THIEF "
  114. 1130             GOTO 1240
  115. 1140 '    CLERICS TITLES
  116. 1150             IF CVI(LVL$)=2 THEN MSG$="ACOLYTE  "
  117. 1160             IF CVI(LVL$)=3 THEN MSG$="ADEPT "
  118. 1170             IF CVI(LVL$)=4 THEN MSG$="PRIEST/PRIESTESS "
  119. 1180             IF CVI(LVL$)=5 THEN MSG$="VICAR "
  120. 1190             IF CVI(LVL$)=6 THEN MSG$="CURATE "
  121. 1200             IF CVI(LVL$)=7 THEN MSG$="ELDER "
  122. 1210             IF CVI(LVL$)=8 THEN MSG$="BISHOP "
  123. 1220             IF CVI(LVL$)=9 THEN MSG$="HIGH PRIEST/PRIESTESS "
  124. 1230             GOTO 1240
  125. 1240     PRINT "YOU ARE PROMOTED TO ";MSG$;" ";" LEVEL ";CVI(LVL$)
  126. 1250            IF P.CLASS$(P) = "CLERIC    " THEN WK=6
  127. 1260            IF P.CLASS$(P) = "DWARF     " THEN WK=8
  128. 1270            IF P.CLASS$(P) = "ELF       " THEN WK=6
  129. 1280            IF P.CLASS$(P) = "FIGHTER   " THEN WK=8
  130. 1290            IF P.CLASS$(P) = "HALFLING  " THEN WK=6
  131. 1300            IF P.CLASS$(P) = "MAGIC-USER" THEN WK=4
  132. 1310            IF P.CLASS$(P) = "THIEF     " THEN WK=4
  133. 1320            LSET HIT$=MKI$((CVI(HIT$))+INT(RND*WK)+1)
  134. 1330     'UPDATE MONEY
  135. 1340     MONEY!=INT(GP!/P.TOT)
  136. 1350     PRINT "YOU ACQUIRED ";MONEY!;" GOLD PIECES "
  137. 1360     IF (CLAS$ = "MAGIC-USER" OR CLAS$ = "ELF       ") THEN MAX! = 3                  ELSE LET MAX = 9
  138. 1370     MIN = 1
  139. 1380     TAX!=INT(RND*MAX)+MIN
  140. 1390     TAX!=TAX!/10
  141. 1400     TAX!=INT(TAX!*MONEY!)
  142. 1410     IF CLAS$="CLERIC    " THEN PRINT "YOU DONATE ";TAX!;" TO THE GODS"                ELSE PRINT "LOCAL AUTHORITIES TAX YOU ";TAX!
  143. 1420     MONEY!=MONEY!-TAX!
  144. 1430            LSET MONEY$=MKS$(CVS(MONEY$)+MONEY!)
  145. 1440            PUT #1,P
  146. 1450 RETURN
  147. 1460 'UPDATE SUPPLIES
  148. 1470    LET S=0
  149. 1480    LOCATE 25,1: PRINT "PLEASE STAND BY WHILE FILES ARE UPDATED";
  150. 1490 'GO THRU FILE
  151. 1500    S=S+1
  152. 1510    GET #2,S
  153. 1520    IF SID$ <> "DS" THEN GOTO 1690 ' END OF FILE
  154. 1530    FOR P = 1 TO 9
  155. 1540            IF P.NAME$(P) = "" AND P(P,4) = 0 THEN GOTO 1660
  156. 1550            IF P.NAME$(P) = "" THEN S(S,P+2) = 0
  157. 1560        ON P   GOTO 1570,1580,1590,1600,1610,1620,1630,1640,1650
  158. 1570        LSET P1$ = MKI$(S(S,P+2)): GOTO 1660
  159. 1580        LSET P2$ = MKI$(S(S,P+2)): GOTO 1660
  160. 1590        LSET P3$ = MKI$(S(S,P+2)): GOTO 1660
  161. 1600        LSET P4$ = MKI$(S(S,P+2)): GOTO 1660
  162. 1610        LSET P5$ = MKI$(S(S,P+2)): GOTO 1660
  163. 1620        LSET P6$ = MKI$(S(S,P+2)): GOTO 1660
  164. 1630        LSET P7$ = MKI$(S(S,P+2)): GOTO 1660
  165. 1640        LSET P8$ = MKI$(S(S,P+2)): GOTO 1660
  166. 1650        LSET P9$ = MKI$(S(S,P+2)): GOTO 1660
  167. 1660    NEXT P
  168. 1670    PUT #2,S
  169. 1680    GOTO 1490
  170. 1690 RETURN
  171. 1700 'GET A REPLY
  172. 1710    DEF SEG=0: POKE 1050,PEEK(1052) 'CLEAR KEYBOARD BUFFER
  173. 1720    REPLY$=INKEY$: IF REPLY$=""  THEN GOTO 1720
  174. 1730    IF LEN(REPLY$)=1 THEN GOTO 1790
  175. 1740    REPLY$=RIGHT$(REPLY$,1)
  176. 1750    IF ASC(REPLY$)=72 THEN REPLY$=CHR$(30): GOTO 1790
  177. 1760    IF ASC(REPLY$)=80 THEN REPLY$=CHR$(31): GOTO 1790
  178. 1770    IF ASC(REPLY$)=77 THEN REPLY$=CHR$(28): GOTO 1790
  179. 1780    IF ASC(REPLY$)=75 THEN REPLY$=CHR$(29)
  180. 1790 RETURN
  181.