home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 7 Games / 07-Games.zip / dgdoom.zip / DGDOOM.BAS < prev    next >
BASIC Source File  |  1999-04-28  |  63KB  |  943 lines

  1. 0 v$ = "Version 1.3 27 Apr 99 by MJMan"
  2. 1 CLEAR , , 5000
  3. 5 DEF fna$ (aa&) = RIGHT$(STR$(aa&), LEN(STR$(aa&)) - 1)
  4. 6 DEF fnb (zz) = -5 * (bt = 1) - 10 * (bt = 2) - 20 * (bt = 3)
  5. 10 DIM d%(20, 20), N$(6), hp(6), h2(6), st(6), dx(6), wp(6), ar(6), lv(6), xp&(6), po(6), pa(6), pm(6), mm(6), sb(20), cs(6), bs(6), bd(6)
  6. 20 DIM m$(15), ms(15), md(15), mp(15), mx(15), ma(15): RANDOMIZE TIMER
  7. 30 DIM ar$(27), ap(27), ac(27), wp$(43), wc(43), wd(43), wa(43)
  8. 40 DIM lx#(1000): CLS : PRINT "Welcome to Dungeon Of Doom. "; a$; ". Startup Process:": PRINT
  9. 50 a = 250: FOR z = 1 TO 1000: lx#(z) = lx#(z - 1) + a * z: a = a + 1: NEXT z: PRINT "Player Levels defined"
  10. 51 DATA 1,2,0,0,3,0,0,0,4,0,0,0,5,0,6,0,0,7,0,8,9,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,11,12,13,14,0,15,16,1,0,0,0,0,18,19,0,0,20,21,0,0,0,0,0,0,22,23,0,24,0,32,0,0,0,0,0,0,25,0,26,0,27,0,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,0,0,0,29,0,30,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0
  11. 52 DIM al%(11, 11): FOR y = 1 TO 11: FOR x = 1 TO 11: READ al%(x, y): NEXT x, y: PRINT "Pharmacological data assembled"
  12. 53 DATA Blank Page,0,0,0,Power,1,0,2,Blood Drain,1,0,10,Major Power,1,0,12,Remedy,1,1,1,Mobility,1,1,1,Firestorm,1,0,60,Awaken,1,1,1,Fortitude,1,1,1,Ice Storm,1,0,5,Purgative,1,1,1,Flame,1,0,5,St. Elmo's Fire,1,0,10,Pyrolific Cloud,1,0,12,Sight,1,1,1,Blessing,1,1,1,Fire And Ice,1,0,24,Fireball,1,0,45,Word Of God,1,1,150,Revive,1,1,33,Dark Blessing,1,1,1
  13. 54 DATA Cone Of Cold,1,0,40,Escape,0,1,8,Teleport,0,1,6,Restore,1,1,5,Speed,1,0,6,Deposess,1,1,1,Major Speed,1,0,11,Depoison,1,1,1,Heal,1,1,5,Stone To Flesh,1,1,1,Freeze,1,0,3,Magic Map,0,1,2
  14. 55 DIM sp$(32), sc(32), sf(32), sp(32)
  15. 56 FOR z = 0 TO 32: READ sp$(z), sc(z), sf(z), sp(z): NEXT z: PRINT "Spells loaded"
  16. 60 DATA Hands,0,0,0,Stiletto,20,4,1,Hunting Knife,30,6,1,Club,50,8,2,Short Sword,100,12,2,Scimitar,200,15,2
  17. 70 DATA Morningstar,400,18,3,Battle Hammer,500,20,3,Battle Axe,750,22,4,Longsword,1000,25,4,Broadsword,1500,26,5
  18. 80 DATA Halbard,2000,27,5,Bronze Lance,3000,28,5,Steel Lance,4000,30,5,Earth Hammer,5000,30,10,Sword Of Might,7500,35,10
  19. 90 DATA Sword Of Illusion,10000,38,12,Axe Of The Dwarves,15000,40,15,Hammer Of Might,20000,48,20,King Scepter,25000,50,25
  20. 100 DATA Rod Of Striking,30000,55,30,Self-keying Orc Sword,35000,60,35,Sword of the Roaches,40000,65,40,Claw of the Witch's Cat,50000,70,45
  21. 110 DATA Great Flail,60000,75,50,Light Blade,70000,80,55,Demonstaff,80000,85,60,Frost Blade,90000,90,65,Blast Sword,100000,95,70
  22. 120 DATA Meteor Mace,120000,100,75,Storm Sword,140000,110,80,Sword Of Armageddon,160000,120,85
  23. 130 DATA Pitchfork Of Satan,180000,130,90,God's Scepter,200000,140,95,Armageddon Axe,300000,150,100
  24. 140 DATA Reaver Of The Great Orc,400000,175,110,Thor Hammer,500000,200,120,Hammer Of Death,1000000,250,130,Doom Blade,1500000,300,140,Darkblade,2000000,350,150
  25. 145 DATA Annihilation Axe,3000000,400,200,Light Sabre,4000000,450,250,Deathstaff,5000000,500,500,F.A.R.C.E. Scepter,9999999,1000,1000
  26. 150 FOR z = 0 TO 43: READ wp$(z), wc(z), wd(z), wa(z): NEXT z: PRINT "Weapon data stored"
  27. 155 DATA Blood Root,Mandrake,Wormwood,Sulphur,Holy Water,Astral Tincture,Pixie Dust,Spider Venom,Magic Balm,Frost,Crystal
  28. 156 DIM re$(11): FOR z = 1 TO 11: READ re$(z): NEXT z: PRINT "Reagents loaded"
  29. 160 DATA Loincloth,0,0,Pants and Shirt,10,1,Woven Robe,20,2,Hemp Robe,50,4,Leather Armor,100,8,Studded Leather,200,10
  30. 170 DATA Splint Mail,500,15,Ring Mail,1000,20,Chain Mail,2000,25,Plate Mail,4000,30,Field Plate,6000,35
  31. 180 DATA Frost Armor,8000,40,Sun Armor,10000,45,Magic Plate,15000,50,Dragon Plate,20000,60,Ultra Armor,40000,70,Assault Armor,80000,80
  32. 190 DATA Robe Of Illusion,100000,90,Robe Of Protection,150000,100,Ultimate Armor,200000,120,Fabric Of Reality,300000,130,Robe Of Power,400000,140,Warding Cloak,500000,150,Force Field,750000,200
  33. 195 DATA Vibro Field,1000000,300,Armor Of Light,1500000,400,Robe Of Invulnerability,2000000,500,The F.A.R.C.E. Field,5000000,1000
  34. 200 FOR z = 0 TO 27: READ ar$(z), ap(z), ac(z): NEXT z: PRINT "Armor data loaded"
  35. 210 DATA Badge Of Courage,Cross Of Spirituality,Dagger Of Sacrifice,Medallion Of Honor,Sword Of Valor,Codex Of Wisdom,Staff Of Humility,Cone Of Power
  36. 220 DIM tr$(8), tl(8), tx(8), ty(8), tf(8): FOR z = 1 TO 8: READ tr$(z): NEXT z: PRINT "Treasures loaded"
  37. 224 DATA n,s,ns,e,ne,se,nse,w,nw,sw,nsw,ew,new,sew,nsew
  38. 225 DIM dr$(15): FOR z = 1 TO 15: READ dr$(z): NEXT z: PRINT "Directionals loaded"
  39. 226 DATA Antidote,Smelling Salts,Pinwheel,Menthol Rub,Witch Medicine,Belladonna,Holy Water,Wormwood,Devil's Blood,Hammer,Dark Gem,Stinging Nettle,Heal Balm,Revival Balm,Magic Balm
  40. 227 DIM si$(15), si(15): FOR z = 1 TO 15: READ si$(z): si(z) = 0: NEXT z: PRINT "Apothecary data read"
  41. 228 DATA "POI ","ZZZ ","CNF ","PAR ","DIS ","CHR ","EVL ","WRM ","HOL ","STN ","BLI ","SIL ","HP Loss ","Death ","MP Loss "
  42. 229 DIM as$(15): FOR z = 1 TO 15: READ as$(z): NEXT z: PRINT "Status codes read"
  43. 230 CLS
  44. 231 DATA poisoning,sleep,confusion,paralysis,disease,charm,evil omen,parasites,holy disease,stone,blindness,silence
  45. 232 DIM ad$(12): FOR z = 1 TO 12: READ ad$(z): NEXT z
  46. DATA +  +,+--+,+  +,+--+,+  +,+--+,+  +,+--+,+  +,+--+,+  +,+--+,+  +,+--+,+  +
  47. DATA "|  |","|  |","|  |","|   ","|   ","|   ","|   ","   |","   |","   |","   |","    ","    ","    ","    "
  48. DATA +--+,+  +,+  +,+--+,+--+,+  +,+  +,+--+,+--+,+  +,+  +,+--+,+--+,+  +,+  +
  49. DIM am$(15, 3): FOR y = 1 TO 3: FOR x = 1 TO 15: READ am$(x, y): NEXT x, y
  50. 240 SHELL "type title.txt"
  51. 260 INPUT "Enter your selection "; a: a = INT(a): IF a <> 1 AND a <> 9 THEN 260
  52. 270 IF a = 9 THEN 1000
  53. 280 ON ERROR GOTO 50000
  54. 290 OPEN "doomsave" FOR INPUT AS 1
  55. 300 INPUT #1, px, py, pz
  56. 310 INPUT #1, gp&
  57. 320 FOR z = 1 TO 8: INPUT #1, tf(z), tl(z), tx(z), ty(z): NEXT z
  58. 330 INPUT #1, np
  59. 340 FOR z = 1 TO np
  60. 350 INPUT #1, N$(z), hp(z), h2(z), st(z), dx(z), wp(z), ar(z), lv(z), xp&(z), po(z), pm(z), mm(z)
  61. 360 NEXT z: FOR z = 1 TO 15: INPUT #1, si(z): NEXT z
  62. 361 INPUT #1, bt: FOR z = 1 TO 20: INPUT #1, sb(z): NEXT z
  63. 364 CLOSE 1: ON ERROR GOTO 0
  64. 365 IF pz = 0 THEN 4000
  65. 370 OPEN "lev" + STR$(pz) FOR INPUT AS #1
  66. 380 FOR y = 1 TO 20: FOR x = 1 TO 20: INPUT #1, d%(x, y): NEXT x, y: CLOSE 1
  67. 390 GOTO 8100
  68. 1000 CLS : PRINT "     Fifteen years ago, under the rule of king Tomas Veeder XI, the Cone Of": PRINT "Power and the seven treasures of the kingdom had been stolen from the royal": PRINT "palace.": PRINT
  69. 1001 OPEN "doomsave" FOR OUTPUT AS 1: CLOSE 1: SHELL "del doomsave": SHELL "copy npcs.org npcs >null:"
  70. 1010 PRINT "     These treasures, being vital to the success of the kingdom, are rumored to be found deep within the dungeon below the town of Veederville. This dungeon,": PRINT "known to the locals as the Dungeon Of Doom, holds terrors few have lived to": PRINT "speak of.": PRINT
  71. 1020 PRINT "     You have been commissioned by King Tomas Veeder XII to descend into the": PRINT "Dungeon Of Doom and retrieve them. You are advised to equip yourself with ": PRINT "what you can obtain from the shops in town with the 1000 gold with which you have": PRINT "been provided.": PRINT
  72. 1030 PRINT "     All of the best wishes for your success. There have been many before you,": PRINT "and time is running out! The neighboring enemy lands have become restless, and": PRINT "hungry for the kingdom's assets. You are the last we can send before we are ": PRINT "conquered by the enemy! Good luck and may you be the one to save the kingdom!": PRINT
  73. 1040 INPUT "Enter your character's name to continue"; N$(1)
  74. 1050 np = 1: gp& = 1000: st(1) = INT(12 * RND(1)) + 6: dx(1) = INT(12 * RND(1)) + 6: lv(1) = 1: FOR z = 1 TO st(1): hp(1) = hp(1) + INT(6 * RND(1)) + 4: NEXT z: h2(1) = hp(1): pm(1) = INT(25 * RND(1)) + 25: mm(1) = pm(1)
  75. 1060 FOR z = 0 TO 6: tx(z + 1) = INT(20 * RND(1)) + 1: ty(z + 1) = INT(20 * RND(1)) + 1: tl(z + 1) = INT(10 * RND(1)) + 1 + 10 * z: NEXT z
  76. 1070 bt = 1: tx(8) = INT(20 * RND(1)) + 1: ty(8) = INT(20 * RND(1)) + 1: tl(8) = 70: IF tl(7) = 70 THEN tl(7) = 69
  77. 1080 s2 = 1: GOSUB 2000
  78. 1090 GOTO 3000
  79. 2000 CLS : PRINT "Status for "; N$(s2): PRINT : cs = 0: PRINT "Condition: "; : FOR q = 1 TO 12: IF po(s2) AND (2 ^ (q - 1)) THEN PRINT as$(q); : cs = cs + 1
  80. 2001 NEXT q: IF cs = 0 THEN PRINT " Normal": PRINT
  81. 2002 IF cs > 0 THEN cs = 0: PRINT
  82. 2010 IF lv(s2) > 0 THEN PRINT "Weapon:"; wp$(wp(s2)): PRINT "Armor :"; ar$(ar(s2)): PRINT
  83. 2015 IF lv(s2) = 0 THEN PRINT "This is a monster, it cannot carry weapons or wear armor.": PRINT
  84. 2020 PRINT "Hit Points: ("; fna$(hp(s2)); "/"; fna$(h2(s2)); ")": PRINT "Magic Points: ("; fna$(pm(s2)); "/"; fna$(mm(s2)); ")": PRINT
  85. 2030 IF lv(s2) = 0 THEN 2050
  86. 2035 IF lv(s2) = 400 THEN PRINT "Level: 400 No Further Advancement Possible.": PRINT : GOTO 2050
  87. 2040 PRINT "Level: "; lv(s2); " Experience: ("; fna$(xp&(s2)); "/"; fna$(lx#(lv(s2) + 1)); " )": PRINT
  88. 2050 PRINT "Strength:"; st(s2): PRINT "Dexterity:"; dx(s2): PRINT
  89. 2060 PRINT "Gold available to party:"; gp&: PRINT
  90. 2065 IF pz > 0 THEN PRINT "You are"; pz; " floor(s) underground,": PRINT px; " room(s) east and"; py; " room(s) south.": PRINT
  91. 2069 IF fl = 1 THEN RETURN
  92. 2070 INPUT "Press RETURN to continue"; a$: RETURN
  93. 3000 CLS
  94. 3001 PRINT "You are in the throne room at the castle.": PRINT
  95. 3010 PRINT "Do you want to (1) - Talk to the King, or (2) - Leave for town?"
  96. 3020 INPUT a$: IF a$ = "2" THEN 4000
  97. 3025 PRINT : PRINT "King, What must I do?": PRINT
  98. 3026 FOR z = 1 TO 8: IF tf(z) = 2 THEN 3110
  99. 3028 NEXT z
  100. 3030 PRINT N$(1); ", you must descend into the Dungeon Of Doom to find the "
  101. 3040 FOR z = 1 TO 8: IF tf(z) = 0 THEN PRINT tr$(z); " and bring it back here to unlock the deeper chambers.": PRINT : GOTO 3001
  102. 3050 NEXT z
  103. 3060 CLS : PRINT "Congratulations! You did it! ": END
  104. 3100 GOTO 3000
  105. 3110 PRINT "Congratulations "; N$(1); ", you have found the "; tr$(z); "!": PRINT
  106. 3120 PRINT "With the defeat of its guardian, you have provided for some"
  107. 3130 PRINT "additional stability for the Kingdom."
  108. 3140 IF z = 8 THEN 3060
  109. 3150 PRINT : PRINT "You have also opened deeper levels of the dungeon."
  110. 3160 PRINT "It will be more dangerous, but in this new set of levels"
  111. 3170 PRINT "you should be able to find the "; tr$(z + 1); ".": PRINT
  112. 3180 PRINT "Find it and report back to me.": tf(z) = 3: PRINT
  113. 3190 GOTO 3001
  114. 4000 CLS
  115. 4010 PRINT "You are in the town square.": PRINT
  116. 4020 PRINT "[N]orth of here is a road to the castle,"
  117. 4030 PRINT "[S]outh from here is the Adventurer's Guild,"
  118. 4025 PRINT "[E]ast of here is the Inn,"
  119. 4027 PRINT "[W]est lies the Adventurer's Camp"
  120. 4040 PRINT
  121. 4050 INPUT "Command:"; a$
  122. 4060 IF a$ = "n" OR a$ = "N" THEN 3000
  123. 4070 IF a$ = "s" OR a$ = "S" THEN 5000
  124. 4080 IF a$ = "e" OR a$ = "E" THEN 6000
  125. 4090 IF a$ = "w" OR a$ = "W" THEN 7000
  126. 4100 PRINT "Use N for North, etc to enter directional commands.": GOTO 4040
  127. 5000 CLS
  128. 5010 PRINT "Welcome to the Adventurer's Guild, "; N$(1); "!": PRINT
  129. 5020 PRINT "Would you like to:": PRINT
  130. 5030 PRINT "1. Hire an adventurer for your party"
  131. 5040 PRINT "2. Release an adventurer from your party"
  132. 5050 PRINT "3. Return to the town square": PRINT
  133. 5060 INPUT "Your choice "; a$
  134. 5070 IF a$ < "1" OR a$ > "2" THEN 4000
  135. 5080 IF a$ = "1" THEN 5230
  136. 5090 IF np = 1 THEN PRINT "You are the only adventurer, you can't unjoin your party!": GOTO 5060
  137. 5100 cs = 0: FOR z = 2 TO np: IF hp(z) > 0 THEN cs = cs + 1: PRINT z; ". "; N$(z); " str:"; st(z); " dex:"; dx(z); " hp: ( "; hp(z); "/ "; h2(z); ") Level:"; lv(z)
  138. 5110 NEXT z: IF cs = 0 THEN PRINT "The other members of your party are dead.": GOTO 5060
  139. 5120 PRINT
  140. 5130 INPUT "Who do you wish to release from your party (0=abort)"; a
  141. 5140 IF a < 2 OR a > np THEN 5000
  142. 5150 IF hp(a) = 0 THEN PRINT "This adventurer is dead, sorry!": GOTO 5120
  143. 5160 OPEN "npcs" FOR APPEND AS 1
  144. 5170 PRINT #1, N$(a); ","; hp(a); ","; h2(a); ","; st(a); ","; dx(a); ","; wp(a); ","; ar(a); ","; lv(a); ","; xp&(a); ","; po(a); ","; pm(a); ","; mm(a)
  145. 5180 CLOSE 1
  146. 5190 t$ = N$(a): pg = lv(a) * 50 + st(a) * 2 + dx(a) * 2: IF a = np THEN np = np - 1: GOTO 5210
  147. 5200 N$(a) = N$(np): hp(a) = hp(np): h2(a) = h2(np): st(a) = st(np): dx(a) = dx(np): wp(a) = wp(np): ar(a) = ar(np): lv(a) = lv(np): xp&(a) = xp&(np): po(a) = po(np): pm(a) = pm(np): mm(a) = mm(np): np = np - 1
  148. 5210 gp& = gp& + pg: PRINT "Here is your payment of"; pg; " gold for "; t$; "."
  149. 5220 PRINT : GOTO 5010
  150. 5230 IF np = 6 THEN PRINT "Your party is full. You will need to release an adventurer before hiring another.": GOTO 5060
  151. 5240 nn = 0: CLS : OPEN "npcs" FOR INPUT AS 1: ON ERROR GOTO 5280
  152. 5250 INPUT #1, N$, hp, h2, st, dx, wp, ar, lv, xp&, po, pm, mm: nn = nn + 1
  153. 5252 IF nn / 5 = INT(nn / 5) THEN INPUT "Press RETURN for more", a$: CLS
  154. 5255 IF lv = 0 THEN PRINT nn; ". "; N$: PRINT "     hp: ("; hp; "/ "; h2; ") str:"; st; " dex:"; dx: PRINT "     A monster from the dungeon": PRINT : GOTO 5250
  155. 5260 PRINT nn; ". "; N$: PRINT "     hp: ("; hp; "/ "; h2; ") mp: ("; pm; "/ "; mm; ") str:"; st; " dex:"; dx: PRINT "     Weapon: "; wp$(wp); " Armor: "; ar$(ar); : PRINT "     Level:"; lv: PRINT
  156. 5270 GOTO 5250
  157. 5280 CLOSE 1: RESUME 5290
  158. 5290 PRINT : ON ERROR GOTO 0: IF np = 6 THEN 5000
  159. 5300 INPUT "Who would you like to hire for your party (0=abort)"; nh
  160. 5310 IF nh < 1 OR nh > nn THEN 5000
  161. 5320 OPEN "npcs" FOR INPUT AS 1
  162. 5330 FOR z = 1 TO nh: INPUT #1, N$, hp, h2, st, dx, wp, ar, lv, xp&, po, pm, mm: NEXT z: CLOSE 1
  163. 5340 PRINT : PRINT N$; " hp: ("; hp; "/ "; h2; ") mp: ("; pm; "/ "; mm; ") str:"; st; " dex:"; dx; " Weapon: "; wp$(wp); " Armor: "; ar$(ar); " Level:"; lv
  164. 5350 PRINT : pg = 100 * lv + 5 * st + 5 * dx
  165. 5360 PRINT "Cost to hire "; N$; " is"; pg; " gold."
  166. 5370 IF pg > gp& THEN PRINT "Sorry, you don't have enough gold!": GOTO 5290
  167. 5380 PRINT : INPUT "Hire this adventurer"; a$: IF a$ = "Y" OR a$ = "y" THEN 5400
  168. 5390 GOTO 5290
  169. 5400 gp& = gp& - pg
  170. 5410 np = np + 1: N$(np) = N$: hp(np) = hp: h2(np) = h2: st(np) = st: dx(np) = dx: wp(np) = wp: ar(np) = ar: lv(np) = lv: xp&(np) = xp&: po(np) = po: pm(np) = pm: mm(np) = mm
  171. 5420 OPEN "npcs" FOR INPUT AS 1
  172. 5430 OPEN "npcs.bak" FOR OUTPUT AS 2
  173. 5440 FOR z = 1 TO nn: INPUT #1, N$, hp, h2, st, dx, wp, ar, lv, xp&, po, pm, mm: IF z <> nh THEN PRINT #2, N$; ","; hp; ","; h2; ","; st; ","; dx; ","; wp; ","; ar; ","; lv; ","; xp&; ","; po; ","; pm; ","; mm
  174. 5450 NEXT z: CLOSE 2: CLOSE 1: SHELL "del npcs": SHELL "ren npcs.bak npcs"
  175. 5460 nn = nn - 1: PRINT N$(np); " joins your party!": GOTO 5290
  176. 6000 CLS
  177. 6010 PRINT "Welcome to the Inn Of Veederville!": PRINT
  178. 6020 PRINT "Your options:": PRINT
  179. 6030 PRINT "1. Get a room for the night"
  180. 6040 PRINT "2. Save the game"
  181. 6050 PRINT "3. Return to the town square"
  182. 6060 PRINT
  183. 6070 INPUT "Your choice:", a$: IF a$ = "1" THEN 6100
  184. 6080 IF a$ = "2" THEN fl = 1: GOSUB 8610: GOTO 6000
  185. 6090 GOTO 4000
  186. 6100 ic = 10 * np
  187. 6120 PRINT "It costs 10 GP per night per person."
  188. 6130 PRINT "Your party will cost"; ic; " GP."
  189. 6140 PRINT : IF gp& < ic THEN PRINT "Sorry, you do not have enough gold.": GOTO 6060
  190. 6150 INPUT "Would you like a room for the night"; a$: IF a$ <> "y" THEN 6060
  191. 6160 gp& = gp& - ic: IF np = 1 THEN PRINT "You go to your room and retire for the evening.": GOTO 6180
  192. 6170 PRINT N$(1); " and the members of his party bed down for the evening."
  193. 6180 PRINT "You wake up in the morning refreshed!"
  194. 6190 FOR z = 1 TO np: oh = hp(z): hp(z) = h2(z): IF (po(z) AND 1) + (po(z) AND 16) + (po(z) AND 128) + (po(z) AND 256) + (po(z) AND 512) > 0 THEN hp(z) = oh
  195. 6195 IF pm(z) < mm(z) THEN pm(z) = mm(z)
  196. 6200 NEXT z: PRINT : GOTO 6020
  197. 7000 CLS
  198. 7010 PRINT : PRINT "You are at the adventurer's camp."
  199. 7015 PRINT : PRINT "[E]ast of here is the town square,"
  200. 7020 PRINT "[S]outh of here is the Dungeon Of Doom."
  201. 7022 PRINT "[N]orth of here is a Healer's Hut, the Armory, and the Apothecary."
  202. 7023 PRINT "[W]est of here is the Mage's Workshop.": PRINT
  203. 7030 PRINT "If you need to see "; N$(INT(np * RND(1)) + 1); "'s status, use the STATS command."
  204. 7040 PRINT : FOR zz = 1 TO 8: IF tf(zz) = 1 THEN GOSUB 15000: bb = 0: IF fl = 1 THEN 8540
  205. 7045 NEXT zz
  206. 7050 INPUT a$: IF a$ = "e" OR a$ = "E" THEN 4000
  207. 7055 IF a$ = "W" OR a$ = "w" THEN 16000
  208. 7060 IF a$ = "S" OR a$ = "s" THEN 8000
  209. 7070 IF a$ = "STATS" OR a$ = "stats" THEN 7090
  210. 7071 IF a$ = "CAMP" OR a$ = "camp" THEN na = 1: GOTO 9250
  211. 7075 IF a$ = "n" THEN 7140
  212. 7080 PRINT "A command not understood by this section was entered.": GOTO 7040
  213. 7090 FOR z = 1 TO np: PRINT z; ". "; N$(z): NEXT z
  214. 7100 PRINT
  215. 7110 INPUT "Stats: [#] [E]xit [P]arty [I]nventory [S]pellbook "; s2$: s2 = VAL(s2$)
  216. 7115 IF s2$ = "p" THEN 7131
  217. 7116 IF s2$ = "i" THEN fl = 1: GOSUB 7790: fl = 0: GOTO 7100
  218. 7117 IF s2$ = "s" THEN vs = 1: GOSUB 16300: GOTO 7100
  219. 7120 IF s2 < 1 OR s2 > np THEN 7010
  220. 7130 s2 = INT(s2): GOSUB 2000: GOTO 7090
  221. 7131 CLS : PRINT "Status for "; N$(1); "'s party": PRINT
  222. 7132 FOR z = 1 TO np: PRINT N$(z); TAB(30); " HP: ("; RIGHT$(STR$(hp(z)), LEN(STR$(hp(z))) - 1); "/"; RIGHT$(STR$(h2(z)), LEN(STR$(h2(z))) - 1); " ) MP: ("; RIGHT$(STR$(pm(z)), LEN(STR$(pm(z))) - 1); "/"; RIGHT$(STR$(mm(z)), LEN(STR$(mm(z))) - 1); ") ";
  223. IF hp(z) = 0 THEN PRINT "DEAD "; : cs = 1
  224. FOR q = 1 TO 12: IF po(z) AND (2 ^ (q - 1)) THEN PRINT as$(q); : cs = cs + 1
  225. NEXT q: IF cs = 0 THEN PRINT " Normal"
  226. IF cs > 0 THEN cs = 0: PRINT
  227. 7134 NEXT z: PRINT : GOTO 7090
  228. 7140 CLS
  229. 7141 PRINT "You are in a small plaza north of the campground."
  230. 7142 PRINT : PRINT "[W]est of here is the Armory."
  231. 7150 PRINT "[N]orth leads to the Healer's Hut."
  232. 7155 PRINT "[E]ast of here is the Apothecary": PRINT "[S]outh leads to the Adventurer's Camp."
  233. 7160 PRINT : INPUT "Command"; a$: IF a$ = "s" THEN 7000
  234. 7170 IF a$ = "w" THEN 7430
  235. 7180 IF a$ = "n" THEN 7200
  236. 7185 IF a$ = "e" THEN 7780
  237. 7190 GOTO 7160
  238. 7200 CLS : PRINT "You have entered the Healer's Hut.": PRINT
  239. 7210 PRINT "The healer examines your party.": PRINT
  240. 7220 FOR zz = 1 TO np
  241. 7230 IF hp(zz) = h2(zz) AND po(zz) = 0 THEN PRINT N$(zz); " Is alive and well.": GOTO 7260
  242. 7240 IF hp(zz) < h2(zz) THEN GOSUB 7310
  243. 7250 IF po(zz) > 0 THEN GOSUB 7270
  244. 7260 PRINT : NEXT zz: PRINT : PRINT "You thank the healer for his services and leave.": PRINT : GOTO 7141
  245. 7270 PRINT N$(zz); " has abnormal statuses. It's 150 GP to restore him to normal."
  246. 7280 IF gp& < 150 THEN PRINT "Sorry, you do not have enough gold.": RETURN
  247. 7290 INPUT "Do you wish to restore this player"; a$: IF a$ <> "y" THEN RETURN
  248. 7300 gp& = gp& - 150: po(zz) = 0: PRINT N$(zz); " is cured of all abnormal statuses.": RETURN
  249. 7310 IF hp(zz) = 0 THEN 7330
  250. 7320 PRINT N$(zz); " is not at full health. Rest him at the Inn.": RETURN
  251. 7330 rc = h2(zz) * 2 + lv(zz) * 3: PRINT N$(zz); " is dead."
  252. 7340 PRINT "It will cost"; rc; " GP to bring him back to life."
  253. 7350 IF gp& < rc THEN 7380
  254. 7360 INPUT "Do you wish to resurrect this player"; a$: IF a$ <> "y" THEN 7385
  255. 7370 gp& = gp& - rc: hp(zz) = h2(zz) - INT(10 * RND(1)) + 1: PRINT N$(zz); " lives to fight another day!": RETURN
  256. 7380 PRINT "You do not have enough gold."
  257. 7385 PRINT "Would you like to have a free burial?"
  258. 7390 INPUT a$: IF a$ <> "y" THEN RETURN
  259. 7400 IF lv(zz) = 0 THEN PRINT "The remains of the "; N$(zz); " will be returned to the dungeon.": GOTO 7420
  260. 7410 PRINT N$(zz); " will receive a formal burial at dawn."
  261. 7420 N$(zz) = N$(np): hp(zz) = hp(np): h2(zz) = h2(np): st(zz) = st(np): dx(zz) = dx(np): wp(zz) = wp(np): ar(zz) = ar(np): lv(zz) = lv(np): xp&(zz) = xp&(np): po(zz) = po(np): pm(zz) = pm(np): mm(zz) = mm(np): np = np - 1: RETURN
  262. 7430 CLS
  263. 7440 PRINT "Welcome to the Weapons and Armor Shop!": PRINT
  264. 7450 PRINT "Your options:": PRINT
  265. 7460 PRINT "1. Buy Weapon": PRINT "2. Buy Armor": PRINT "3. Leave the shop"
  266. 7465 PRINT "4. View Weapon List": PRINT "5. View Armor List"
  267. 7470 PRINT : INPUT "Your choice:", a
  268. 7480 IF a = 1 THEN 7510
  269. 7490 IF a = 2 THEN 7650
  270. 7495 IF a = 4 THEN 7880
  271. 7496 IF a = 5 THEN 7900
  272. 7500 GOTO 7140
  273. 7510 FOR z = 1 TO np: IF lv(z) > 0 AND hp(z) > 0 THEN PRINT z; ". "; N$(z)
  274. 7520 NEXT z
  275. 7530 INPUT "Who will make this purchase? (0=no one)", a
  276. 7540 IF a < 1 OR a > np THEN 7430
  277. 7550 IF hp(a) = 0 THEN PRINT N$(a); " is dead and cannot purchase a weapon.": GOTO 7530
  278. 7560 IF lv(a) = 0 THEN PRINT "The "; N$(a); " is a monster, which cannot carry weapons or armor.": GOTO 7530
  279. 7570 bp = INT(wc(wp(a)) * .62): IF wp(a) = 0 THEN 7610
  280. 7580 PRINT "I will buy your "; wp$(wp(a)); " for"; bp; " GP"
  281. 7590 INPUT "Do you accept"; a$: IF a$ <> "y" THEN 7430
  282. 7600 gp& = gp& + bp: wp(a) = 0
  283. 7610 cs = 0: FOR z = 1 TO 43: IF wc(z) < gp& THEN cs = z: PRINT z; ". "; wp$(z); TAB(30); wc(z); " GP"
  284. 7620 NEXT z: PRINT
  285. 7630 INPUT "Buy which weapon or 0 for none"; wb: IF wb < 1 OR wb > cs THEN 7430
  286. 7640 gp& = gp& - wc(wb): wp(a) = wb: GOTO 7430
  287. 7650 FOR z = 1 TO np: IF lv(z) > 0 AND hp(z) > 0 THEN PRINT z; ". "; N$(z)
  288. 7660 NEXT z
  289. 7670 INPUT "Who will make this purchase? (0=no one)", a
  290. 7680 IF a < 1 OR a > np THEN 7430
  291. 7690 IF hp(a) = 0 THEN PRINT N$(a); " is dead and cannot purchase Armor.": GOTO 7670
  292. 7700 IF lv(a) = 0 THEN PRINT "The "; N$(a); " is a monster, which cannot carry weapons or armor.": GOTO 7670
  293. 7710 bp = INT(ap(ar(a)) * .62): IF ar(a) = 0 THEN 7750
  294. 7720 PRINT "I will buy your "; ar$(ar(a)); " for"; bp; " GP"
  295. 7730 INPUT "Do you accept"; a$: IF a$ <> "y" THEN 7430
  296. 7740 gp& = gp& + bp: ar(a) = 0
  297. 7750 cs = 0: FOR z = 1 TO 27: IF ap(z) < gp& THEN cs = z: PRINT fna$(z); ". "; ar$(z); TAB(30); ap(z); " GP"
  298. 7760 NEXT z: PRINT
  299. 7770 INPUT "Buy which Armor or 0 for none"; wb: IF wb < 1 OR wb > cs THEN 7430
  300. 7777 gp& = gp& - ap(wb): ar(a) = wb: GOTO 7430
  301. 7780 CLS : PRINT "Welcome to the Apothecary!": PRINT
  302. 7790 FOR zs = 1 TO 15: PRINT fna$(zs); "."; TAB(7); si$(zs); TAB(23); " inv:"; fna$(si(zs)); TAB(37); "cures:"; as$(zs): NEXT zs: IF fl = 1 THEN RETURN
  303. 7800 PRINT : PRINT "Your party has"; gp&; " gold."
  304. 7810 PRINT "Cost of items 1-12 is 20 gold. The last three may be found after battles."
  305. 7820 INPUT "Buy which item (1-12) or 0 to leave store"; a
  306. 7830 IF a < 1 OR a > 12 THEN 7140
  307. 7840 INPUT "Buy how many (0 for none)"; b
  308. 7850 IF b < 1 THEN 7780
  309. 7860 IF 20 * b > gp& THEN PRINT "Sorry, you don't have enough gold to buy this many.": GOTO 7840
  310. 7870 gp& = gp& - 20 * b: si(a) = si(a) + b: GOTO 7780
  311. 7880 CLS : FOR z = 1 TO 43: PRINT fna$(z); ". "; wp$(z); TAB(30); fna$(wc(z)); " GP": IF z = 23 THEN INPUT "Press ENTER for more"; a$
  312. 7890 NEXT z: PRINT : INPUT "Press ENTER to continue"; a$: GOTO 7440
  313. 7900 CLS : FOR z = 1 TO 27: PRINT fna$(z); ". "; ar$(z); TAB(30); fna$(ap(z)); " GP": IF z = 23 THEN INPUT "Press ENTER for more"; a$
  314. 7910 NEXT z: PRINT : INPUT "Press ENTER to continue"; a$: GOTO 7440
  315. 8000 OPEN "exit" FOR INPUT AS #1: INPUT #1, ux, uy: CLOSE 1
  316. 8010 OPEN "lev 1" FOR INPUT AS #1: FOR y = 1 TO 20: FOR x = 1 TO 20: INPUT #1, d%(x, y): NEXT x, y: CLOSE 1
  317. 8020 px = ux: py = uy: pz = 1
  318. 8100 eb = 0: FOR z = 1 TO np: IF (po(z) AND 64) THEN eb = eb + .03
  319. 8101 NEXT z: IF RND(1) > .88 + (pz / 1000) - eb AND sc = 0 THEN GOSUB 10000: IF fl = 1 THEN 8540
  320. 8102 CLS : sc = 0: a = d%(px, py) AND 15: a$ = "type " + dr$(a): SHELL a$: IF cm = 1 AND RND(1) > .97 THEN cm = 0
  321. 8110 IF d%(px, py) AND 16 THEN PRINT "A ladder leads UP from here."
  322. 8120 IF d%(px, py) AND 32 THEN PRINT "A ladder descends into the depths from here."
  323. 8130 IF d%(px, py) > 63 THEN PRINT "A fountain splashes cool water into a pool here."
  324. 8135 GOSUB 9330: GOSUB 8550: IF fl = 1 THEN 8540
  325. 8136 FOR z = 1 TO 8: IF tf(z) < 1 THEN IF tx(z) = px AND ty(z) = py AND tl(z) = pz THEN PRINT "You find the "; tr$(z); " and stash it in your pack.": tf(z) = 1
  326. 8137 NEXT z: IF am = 1 THEN IF RND(1) > .75 THEN am = 0
  327. 8138 IF pz = 20 AND px = 4 AND py = 20 THEN PRINT "You see 'Highway 420' scratched on the wall."
  328. 8140 PRINT
  329. 8150 INPUT "command, or ? for help"; a$
  330. 8155 IF a$ = "?" THEN 8840
  331. 8160 IF (a$ = "N" OR a$ = "n") AND (d%(px, py) AND 1) THEN py = py - 1: GOTO 8100
  332. 8170 IF (a$ = "S" OR a$ = "s") AND (d%(px, py) AND 2) THEN py = py + 1: GOTO 8100
  333. 8180 IF (a$ = "E" OR a$ = "e") AND (d%(px, py) AND 4) THEN px = px + 1: GOTO 8100
  334. 8190 IF (a$ = "W" OR a$ = "w") AND (d%(px, py) AND 8) THEN px = px - 1: GOTO 8100
  335. 8195 IF a$ = "n" OR a$ = "s" OR a$ = "e" OR a$ = "w" OR a$ = "N" OR a$ = "S" OR a$ = "E" OR a$ = "W" THEN 8101
  336. 8200 IF (a$ = "U" OR a$ = "u") AND (d%(px, py) AND 16) THEN pz = pz - 1: GOSUB 9070: GOTO 8260
  337. 8202 IF a$ = "camp" OR a$ = "CAMP" THEN 9250
  338. 8203 IF a$ = "use" OR a$ = "USE" THEN cs = 0: GOTO 8720
  339. 8204 IF a$ = "cast" OR a$ = "CAST" THEN 17000
  340. 8210 IF (a$ = "D" OR a$ = "d") AND (d%(px, py) AND 32) THEN pz = pz + 1: GOSUB 9000: GOTO 8280
  341. 8220 IF a$ = "STATS" OR a$ = "stats" THEN 8300
  342. 8230 IF LEFT$(a$, 5) = "drink" OR LEFT$(a$, 5) = "DRINK" THEN 8400
  343. 8240 IF a$ = "save" OR a$ = "SAVE" THEN 8610
  344. 8244 IF a$ = "free" OR a$ = "FREE" THEN 9500
  345. 8245 IF a$ = "q" OR a$ = "Q" THEN 9200
  346. 8250 PRINT "A command entered was not understood. Type ? for a list.": GOTO 8140
  347. 8260 IF fl = 1 THEN fl = 0: GOTO 7000
  348. 8270 GOTO 8100
  349. 8280 IF fl = 0 THEN 8100
  350. 8290 PRINT "You get about halfway down the ladder but a force field will not let you pass.": pz = pz - 1: fl = 0: GOTO 8140
  351. 8300 FOR zs = 1 TO np: PRINT zs; ". "; N$(zs): NEXT zs
  352. 8310 PRINT : sc = 1
  353. 8320 INPUT "Whose status: [#] [E]xit [P]arty [I]nventory [S]pellbook "; s2$
  354. 8325 s2 = VAL(s2$): IF s2$ = "p" THEN 8341
  355. 8326 IF s2$ = "i" THEN fl = 1: GOSUB 7790: fl = 0: PRINT : GOTO 8320
  356. 8327 IF s2$ = "s" THEN vs = 1: GOSUB 16300: GOTO 8320
  357. 8330 IF s2 < 1 OR s2 > np THEN 8345
  358. 8340 s2 = INT(s2): GOSUB 2000: CLS : GOTO 8300
  359. 8341 CLS : PRINT "Status for "; N$(1); "'s party": PRINT : cs = 0
  360. 8342 FOR zs = 1 TO np: PRINT N$(zs); TAB(25); " HP:("; fna$(hp(zs)); "/"; fna$(h2(zs)); ") MP:("; fna$(pm(zs)); "/"; fna$(mm(zs)); ") ";
  361. IF hp(zs) = 0 THEN PRINT "DEAD "; : cs = 1
  362. FOR q = 1 TO 12: IF po(zs) AND (2 ^ (q - 1)) THEN PRINT as$(q); : cs = cs + 1
  363. NEXT q: IF cs = 0 THEN PRINT " Normal"
  364. IF cs > 0 THEN cs = 0: PRINT
  365. 8344 NEXT zs: PRINT : fl = 1: GOSUB 2060: fl = 0: GOTO 8300
  366. 8345 IF xf = 1 THEN xf = 0: RETURN
  367. 8346 GOTO 8100
  368. 8400 IF d%(px, py) < 64 THEN PRINT "There's no water here to drink!": GOTO 8140
  369. 8410 FOR z = 1 TO np: PRINT z; ". "; N$(z): NEXT z
  370. 8420 PRINT
  371. 8430 INPUT "Who will drink? (0=exit)"; wd
  372. 8440 IF wd < 1 OR wd > np THEN 8140
  373. 8450 IF hp(wd) = 0 THEN PRINT N$(wd); " is dead.": GOTO 8140
  374. 8460 IF d%(px, py) AND 64 THEN 8590
  375. 8470 IF d%(px, py) AND 128 THEN 8570
  376. 8480 IF d%(px, py) AND 256 THEN 8510
  377. 8485 IF d%(px, py) AND 512 THEN 8601
  378. 8490 PRINT N$(wd); " drinks the black, stagnant water.": PRINT "Suddenly he collapses to the ground!": hp(wd) = 1: GOTO 8140
  379. 8510 PRINT N$(wd); " drinks the yellowish, acrid water.": PRINT "Suddenly he starts screaming in pain!": PRINT "The acid does 75 points of damage!": hp(wd) = hp(wd) - 75: IF hp(wd) < 0 THEN hp(wd) = 0
  380. 8520 GOSUB 8550
  381. 8530 IF fl = 0 THEN 8140
  382. 8540 SHELL "type death.txt": END
  383. 8550 fl = 0: cs = 0: FOR z = 1 TO np: cs = cs - (hp(z) > 0): NEXT z: IF cs = 0 THEN fl = 1
  384. 8560 RETURN
  385. 8570 PRINT N$(wd); " scrapes away some scum and drinks the water underneath.": po(wd) = po(wd) OR 1
  386. 8580 PRINT "A few moments later, he feels kind of sick.": GOTO 8140
  387. 8590 PRINT N$(wd); " drinks some of the clear, cool water.": IF (po(wd) AND 1) + (po(wd) AND 16) + (po(wd) AND 256) + (po(wd) AND 512) > 0 THEN PRINT "No effect!": GOTO 8140
  388. 8600 hp(wd) = h2(wd): PRINT N$(wd); " recovers all of his lost hit points!": GOTO 8140
  389. 8601 PRINT N$(wd); " drinks some of the water then immediately collapses to the ground!": hp(wd) = 1: GOTO 8140
  390. 8610 PRINT "Saving the game...";
  391. 8620 OPEN "doomsave" FOR OUTPUT AS 1
  392. 8630 PRINT #1, px; ","; py; ","; pz
  393. 8640 PRINT #1, gp&
  394. 8650 FOR z = 1 TO 8: PRINT #1, tf(z); ","; tl(z); ","; tx(z); ","; ty(z): NEXT z
  395. 8660 PRINT #1, np
  396. 8670 FOR z = 1 TO np
  397. 8680 PRINT #1, N$(z); ","; hp(z); ","; h2(z); ","; st(z); ","; dx(z); ","; wp(z); ","; ar(z); ","; lv(z); ","; xp&(z); ","; po(z); ","; pm(z); ","; mm(z)
  398. 8690 NEXT z: FOR z = 1 TO 15: PRINT #1, si(z): NEXT z
  399. 8695 PRINT #1, bt: FOR z = 1 TO 20: PRINT #1, sb(z): NEXT z: CLOSE 1
  400. 8700 PRINT "Done!": IF fl = 1 THEN fl = 0: RETURN
  401. 8710 GOTO 8140
  402. 8720 CLS
  403. 8730 FOR z = 1 TO 15: PRINT z; "."; TAB(7); si$(z); TAB(23); " inv:"; si(z); TAB(37); "cures:"; as$(z): NEXT z
  404. 8740 PRINT : INPUT "Use which item (0 to abort)"; a: IF a < 1 OR a > 15 THEN 8140
  405. 8750 IF si(a) = 0 THEN PRINT "You do not have this in your inventory!": GOTO 8740
  406. 8760 FOR z = 1 TO np: cs = 0
  407. 8770 PRINT z; ". "; N$(z); TAB(30); : IF hp(z) = 0 THEN PRINT "DEAD ";
  408. FOR q = 1 TO 12: IF po(z) AND (2 ^ (q - 1)) THEN PRINT as$(q); : cs = cs + 1
  409. NEXT q: IF cs = 0 THEN PRINT " Normal" ELSE cs = 0: PRINT
  410. 8778 NEXT z
  411. 8780 PRINT : INPUT "Use this on who?"; b
  412. 8790 IF b < 1 OR b > np THEN 8140
  413. 8795 IF a > 12 AND a < 16 THEN 8831
  414. 8800 IF hp(b) = 0 THEN PRINT N$(b); " is dead.": GOTO 8780
  415. 8810 PRINT N$(b); " is treated with the "; si$(a); "."
  416. 8820 c = 2 ^ (a - 1): IF (po(b) AND c) = 0 THEN PRINT "No effect!": si(a) = si(a) - 1: GOTO 8140
  417. 8830 PRINT N$(b); " is cured of "; ad$(a); "!": po(b) = po(b) - c: si(a) = si(a) - 1: GOTO 8140
  418. 8831 IF a = 14 AND hp(b) > 0 THEN PRINT N$(b); " is alive and well. No effect!": si(14) = si(14) - 1: GOTO 8140
  419. IF a = 14 THEN PRINT N$(b); " is treated with the Revival Balm!": PRINT N$(b); " is revived!": hp(b) = INT(h2(b) * RND(1)) + 1: si(14) = si(14) - 1: GOTO 8140
  420. 8832 IF a = 13 THEN 8836
  421. 8833 IF hp(b) = 0 THEN PRINT N$(b); " is dead!": GOTO 8780
  422. 8834 mb = INT(50 * RND(1)) + 1: pm(b) = pm(b) + mb: IF pm(b) > mm(b) THEN pm(b) = mm(b)
  423. 8835 PRINT N$(b); " Uses the Magic Balm!": PRINT "+"; mb; " MP!": si(15) = si(15) - 1: GOTO 8140
  424. 8836 IF hp(b) = 0 THEN PRINT N$(b); " is dead!": GOTO 8780
  425. 8837 hg = INT(50 * RND(1)) + 50: hp(b) = hp(b) + hg: PRINT N$(b); " uses the "; si$(13); "! +"; hg; " HP!": si(13) = si(13) - 1: IF hp(b) > h2(b) THEN hp(b) = h2(b)
  426. 8838 GOTO 8140
  427. 8840 CLS : PRINT "Commands available in the dungeon": PRINT
  428. 8850 PRINT "N,S,E,W,U,D are directional commands to allow you to move from room"
  429. 8860 PRINT "to room, and up or down levels, as appropriate.": PRINT
  430. 8870 PRINT "STATS will show character, party, or inventory status."
  431. 8880 PRINT "USE   will allow you to use apothecary items to cure abnormal status."
  432. 8888 PRINT "CAST  will allow you to cast a field spell."
  433. 8890 PRINT "CAMP  will allow you to camp for a night to regain HP and MP."
  434. 8900 PRINT "DRINK will allow you to drink water from fountains in the rooms."
  435. 8910 PRINT "SAVE  saves the game so that you can continue later."
  436. 8920 PRINT "Q     will let you quit the game gracefully.": PRINT
  437. 8930 GOTO 8140
  438. 9000 fl = 0: IF tf(1) < 3 AND pz = 11 THEN fl = 1: RETURN
  439. 9010 IF tf(2) < 3 AND pz = 21 THEN fl = 1: RETURN
  440. 9020 IF tf(3) < 3 AND pz = 31 THEN fl = 1: RETURN
  441. 9030 IF tf(4) < 3 AND pz = 41 THEN fl = 1: RETURN
  442. 9040 IF tf(5) < 3 AND pz = 51 THEN fl = 1: RETURN
  443. 9050 IF tf(6) < 3 AND pz = 61 THEN fl = 1: RETURN
  444. 9060 IF tf(7) < 3 AND pz = 70 THEN fl = 1: RETURN
  445. 9070 IF pz = 0 THEN fl = 1: RETURN
  446. 9080 OPEN "lev" + STR$(pz) FOR INPUT AS #1
  447. 9090 FOR y = 1 TO 20: FOR x = 1 TO 20: INPUT #1, d%(x, y): NEXT x, y
  448. 9100 CLOSE 1
  449. 9110 RETURN
  450. 9200 PRINT "You have chosen to quit.": PRINT
  451. 9210 INPUT "Type Y to confirm, or anything else to abort "; a$
  452. 9220 IF a$ <> "Y" AND a$ <> "y" THEN PRINT "Aborted!": PRINT : GOTO 8140
  453. 9230 PRINT "Game Ended."
  454. 9240 END
  455. 9250 PRINT "You have chosen to camp for a night.": PRINT : IF cm = 1 THEN PRINT N$(INT(np * RND(1)) + 1); " opposes camping right now, says he's not tired.": GOTO 9321
  456. 9251 IF np = 1 THEN PRINT N$(1); " lies down on the cold stone floor and tries to get some sleep.": GOTO 9265
  457. 9252 IF am = 1 THEN PRINT "It is too dangerous to camp right now.": GOTO 9321
  458. 9253 PRINT N$(INT(np * RND(1)) + 1); " sets up camp."
  459. 9254 PRINT N$(INT(np * RND(1)) + 1); " makes dinner."
  460. 9255 PRINT N$(INT(np * RND(1)) + 1); " tells a rousing tale!": IF na = 1 THEN PRINT "Your party beds down for the night.": GOTO 9300
  461. 9260 PRINT "After hoping the coast is clear, your party tries to sleep."
  462. 9265 PRINT : INPUT "Press RETURN to wake up your party", a$
  463. 9270 am = 0: IF RND(1) > .6 THEN am = 1: PRINT "Your party is ambushed!": GOSUB 10000: GOTO 8140
  464. 9280 IF fl = 1 THEN 8540
  465. 9290 IF am = 1 THEN am = 0: GOTO 8140
  466. 9300 FOR z = 1 TO np: oh = hp(z)
  467. 9305 IF hp(z) > 0 THEN hp(z) = hp(z) + INT(50 * RND(1)) + 50
  468. 9306 IF hp(z) > h2(z) THEN hp(z) = h2(z)
  469. 9310 IF (po(z) AND 1) + (po(z) AND 16) + (po(z) AND 512) > 0 THEN hp(z) = oh
  470. 9315 IF pm(z) < mm(z) THEN pm(z) = pm(z) + (INT(36 * RND(1)) + 1) + 24: IF pm(z) > mm(z) THEN pm(z) = mm(z)
  471. 9320 NEXT z: cm = 1: PRINT "You wake up refreshed!"
  472. 9321 IF na = 0 THEN 8140
  473. 9325 na = 0: GOTO 7010
  474. 9330 eb = 0: FOR z = 1 TO np: IF po(z) AND 1 THEN hp(z) = hp(z) - (INT(3 * RND(1)) + 1)
  475. 9331 IF po(z) AND 2 THEN IF RND(1) > .9 THEN po(z) = po(z) - 2
  476. 9332 IF po(z) AND 4 THEN IF RND(1) > .9 THEN po(z) = po(z) - 4
  477. 9333 IF po(z) AND 32 THEN po(z) = po(z) - 32
  478. 9334 IF po(z) AND 64 THEN eb = eb + .02
  479. 9335 IF po(z) AND 128 THEN hp(z) = hp(z) - INT(10 * RND(1)) + 1
  480. 9336 IF po(z) AND 256 THEN hp(z) = hp(z) - INT(25 * RND(1)) + 1
  481. 9340 IF hp(z) < 0 THEN hp(z) = 0
  482. 9350 NEXT z
  483. 9360 RETURN
  484. 9500 cs = 0: FOR z = 1 TO np: cs = cs - (lv(z) = 0): NEXT z: IF cs = 0 THEN PRINT "There are no monsters in your party!": GOTO 8140
  485. 9510 cs = 0: PRINT "Release which monster from your party?": PRINT
  486. 9520 FOR z = 1 TO np: IF lv(z) = 0 THEN PRINT fna$(z); ". "; N$(z)
  487. 9530 NEXT z: PRINT
  488. 9540 INPUT "Select monster or press ENTER to cancel"; a$
  489. 9550 PRINT "Implementation in progress.": GOTO 8140
  490.  
  491. 10000 CLS : IF am = 1 OR np = 6 THEN 10150
  492. 10010 IF RND(1) > .01 THEN 10150
  493. 10015 ml = pz: IF RND(1) > .85 THEN ml = ml + 1
  494. 10020 IF ml = 0 THEN ml = 1
  495. 10030 IF ml = 71 THEN ml = 70
  496. 10040 OPEN "enemy" + STR$(ml) FOR INPUT AS 1
  497. 10050 INPUT #1, nm
  498. 10060 mc = INT(nm * RND(1)) + 1: FOR z = 1 TO mc: INPUT #1, m$, md, ms, mh, xp, ma: NEXT z
  499. 10061 md = md + INT(pz * RND(1)) - INT(pz * RND(1)): ms = ms + INT(pz * RND(1)) - INT(pz * RND(1)): mh = mh + INT(pz * RND(1) * 2) - INT(pz * RND(1) * 2)
  500. 10070 CLOSE 1
  501. 10080 PRINT : a$ = "A": b$ = LEFT$(m$, 1): IF b$ = "A" OR b$ = "E" OR b$ = "I" OR b$ = "O" OR b$ = "U" THEN a$ = a$ + "n"
  502. 10090 PRINT a$; " "; m$; " wants to join your party.": PRINT
  503. 10100 a$ = INKEY$: INPUT "Do you accept?", a$: IF a$ = "y" OR a$ = "Y" THEN 10120
  504. 10105 IF a$ = "n" THEN RETURN
  505. 10110 GOTO 10100
  506. 10120 PRINT "The "; m$; " joins your party!": PRINT
  507. 10130 np = np + 1: N$(np) = m$: hp(np) = mh: h2(np) = hp(np): st(np) = ms: dx(np) = md: lv(np) = 0: wp(np) = 0: ar(np) = 0: xp&(np) = xp: po(np) = 0
  508. 10140 RETURN
  509. 10150 nm = INT((3 * np) * RND(1)) + 1: IF nm > 15 THEN 10150
  510. 10160 FOR z = 1 TO nm: el = pz: IF RND(1) > .7 AND lv(1) > 3 THEN el = el + INT(2 * RND(1)) + 1
  511. 10170 IF el > 70 THEN el = 70
  512. 10180 OPEN "enemy" + STR$(el) FOR INPUT AS #1
  513. 10190 INPUT #1, ne: ec = INT(ne * RND(1)) + 1
  514. 10200 FOR zz = 1 TO ec: INPUT #1, m$(z), ms(z), md(z), mp(z), mx(z), ma(z): NEXT zz
  515. 10205 md(z) = md(z) + INT(pz * RND(1) * 1.5) - INT(pz * RND(1)): ms(z) = ms(z) + INT(pz * RND(1) * 1.5) - INT(pz * RND(1)): mp(z) = mp(z) + INT(pz * RND(1) * 2) - INT(pz * RND(1))
  516. 10210 CLOSE 1: NEXT z: cr = 0
  517. 10220 IF nm = 1 THEN 10260
  518. 10230 cs = 0: FOR z = 1 TO nm - 1
  519. 10240 IF m$(z) > m$(z + 1) THEN cs = 1: SWAP m$(z), m$(z + 1): SWAP ms(z), ms(z + 1): SWAP md(z), md(z + 1): SWAP mp(z), mp(z + 1): SWAP mx(z), mx(z + 1): SWAP ma(z), ma(z + 1)
  520. 10250 NEXT z: IF cs = 1 THEN 10230
  521. 10260 PRINT : a$ = INKEY$: ON INT(6 * RND(1)) + 1 GOTO 10261, 10262, 10263, 10264, 10265, 10266
  522. 10261 PRINT N$(1); "'s party runs into trouble!": PRINT : GOTO 10270
  523. 10262 PRINT "Hope you're ready to kick some butt!": PRINT : GOTO 10270
  524. 10263 PRINT N$(1); "'s party gets to meet the locals...": PRINT : GOTO 10270
  525. 10264 PRINT "They're definitely not on a peace mission!": PRINT : GOTO 10270
  526. 10265 PRINT "This looks like a problem!": PRINT : GOTO 10270
  527. 10266 PRINT "They don't look friendly.": PRINT
  528. 10270 FOR z = 1 TO nm: PRINT m$(z): NEXT z
  529. 10280 PRINT
  530. 10290 PRINT "Status Report For "; N$(1); "'s party": PRINT : FOR z = 1 TO np
  531. 10300 PRINT N$(z); TAB(20); " HP:("; RIGHT$(STR$(hp(z)), LEN(STR$(hp(z))) - 1); "/"; RIGHT$(STR$(h2(z)), LEN(STR$(h2(z))) - 1); ") MP:("; RIGHT$(STR$(pm(z)), LEN(STR$(pm(z))) - 1); "/"; RIGHT$(STR$(mm(z)), LEN(STR$(mm(z))) - 1); ") "; : cs = 0
  532. IF hp(z) = 0 THEN PRINT "DEAD "; : cs = 1
  533. FOR q = 1 TO 12: IF po(z) AND (2 ^ (q - 1)) THEN PRINT as$(q); : cs = cs + 1
  534. NEXT q: IF cs = 0 THEN PRINT " Normal"
  535. IF cs > 0 THEN cs = 0: PRINT
  536. 10305 NEXT z: PRINT
  537. 10310 INPUT "Do you wish to (F)ight, or (R)un"; a$
  538. 10320 IF a$ = "f" OR a$ = "F" THEN 10400
  539. 10330 IF a$ = "R" OR a$ = "r" THEN 10350
  540. 10340 GOTO 10290
  541. 10350 PRINT : IF bb = 1 THEN PRINT m$(1); " has you in his grasp... You can't get away.": GOTO 10310
  542. 10355 PRINT : PRINT "You attempt to make your escape..."
  543. 10360 IF RND(1) > ((pz - INT(lv(1) / 20)) + (np + nm)) / 100 THEN RETURN
  544. 10370 PRINT "Your party was unable to escape!": PRINT
  545. 10400 FOR z = 1 TO np: IF hp(z) = 0 OR (po(z) AND 2) + (po(z) AND 8) + (po(z) AND 32) + (po(z) AND 512) + (po(z) AND 1024) > 0 THEN 10580
  546. 10500 CLS : PRINT "-----------------------------------------------------------------------": PRINT "Attack Setting for :"; N$(z): PRINT "         Condition :";
  547. cs = 0: FOR q = 1 TO 12: IF po(z) AND (2 ^ (q - 1)) THEN PRINT as$(q); : cs = cs + 1
  548. NEXT q: IF cs = 0 THEN PRINT " Normal"
  549. IF cs > 0 THEN cs = 0: PRINT
  550. PRINT
  551. 10510 FOR z1 = 1 TO nm: IF mp(z1) > 0 THEN PRINT z1; ". "; m$(z1)
  552. 10520 NEXT z1
  553. 10530 PRINT
  554. 10540 INPUT "Attack [#] [U]se item [C]ast spell [S]tats "; am$: am = VAL(am$)
  555. 10550 IF am < 0 OR am > nm THEN 10500
  556. 10555 IF am$ = "u" THEN 10690
  557. 10556 IF am$ = "c" THEN 18000
  558. 10557 IF am$ = "s" THEN xf = 1: GOSUB 8300: GOTO 10510
  559. 10560 IF mp(am) = 0 THEN PRINT "That monster is dead!": GOTO 10530
  560. 10570 pa(z) = am
  561. 10580 NEXT z
  562. 10590 INPUT "Do you wish to change your attack settings"; a$: IF a$ = "y" THEN CLS : GOTO 10400
  563. 10600 cr = cr + 1: CLS : PRINT "***** Combat Round #"; cr: PRINT
  564. 10610 cm = 1: cp = 1
  565. 10620 IF cp > np THEN 10640
  566. 10621 IF (po(cp) AND 1) THEN hp(cp) = hp(cp) - (INT(3 * RND(1)) + 1): IF hp(cp) < 1 THEN hp(cp) = 0: PRINT N$(cp); " collapses from the effect of the poison!"
  567. 10622 IF (po(cp) AND 128) THEN hp(cp) = hp(cp) - (INT(10 * RND(1)) + 1): IF hp(cp) < 1 THEN hp(cp) = 0: PRINT N$(cp); " dies from the parasites in his body!"
  568. 10623 IF (po(cp) AND 256) THEN hp(cp) = hp(cp) - (INT(25 * RND(1)) + 1): IF hp(cp) < 1 THEN hp(cp) = 0: PRINT N$(cp); " dies from the holy disease!"
  569. 10625 IF hp(cp) = 0 THEN cp = cp + 1: GOTO 10620
  570. 10626 IF (po(cp) AND 2) + (po(cp) AND 8) + (po(cp) AND 512) + (po(cp) AND 1024) > 0 THEN cp = cp + 1: GOTO 10620
  571. 10627 IF (po(cp) AND 32) THEN GOSUB 14000: cp = cp + 1: GOTO 10635
  572. 10628 IF cs(cp) > 0 THEN 19000
  573. 10629 IF pa(cp) = 0 THEN GOSUB 10800: cp = cp + 1: GOTO 10635
  574. 10630 GOSUB 11000
  575. 10631 cp = cp + 1
  576. 10635 IF fl = 1 THEN 11100
  577. 10636 IF fl = 2 THEN 8540
  578. 10640 IF cm > nm AND cp > np THEN 10680
  579. 10650 IF cm > nm THEN 10620
  580. 10655 IF mp(cm) = 0 THEN cm = cm + 1: GOTO 10650
  581. 10660 GOSUB 12000: cm = cm + 1: IF fl = 1 THEN 8540
  582. 10670 GOTO 10620
  583. 10680 PRINT : PRINT "Press Enter to continue"; : INPUT "", a$: GOTO 10280
  584. 10690 FOR y = 1 TO 15: PRINT y; "."; TAB(7); si$(y); TAB(23); " inv:"; si(y); TAB(37); "cures:"; as$(y): NEXT y
  585. 10700 PRINT : INPUT "Use which item (0 to abort)"; a: IF a < 1 OR a > 15 THEN 10500
  586. 10710 IF si(a) = 0 THEN PRINT "You do not have this in your inventory!": GOTO 8740
  587. 10720 FOR y = 1 TO np
  588. 10730 PRINT y; ". "; N$(y); TAB(30);
  589. FOR q = 1 TO 12: IF po(y) AND (2 ^ (q - 1)) THEN PRINT as$(q); : cs = cs + 1
  590. NEXT q: IF hp(y) = 0 THEN PRINT " DEAD"; : cs = 1
  591. IF cs = 0 THEN PRINT " Normal" ELSE cs = 0: PRINT
  592. 10740 NEXT y
  593. 10750 PRINT : INPUT "Use this on who?"; b
  594. 10760 IF b < 1 OR b > np THEN 10700
  595. 10770 IF hp(b) = 0 AND a <> 14 THEN PRINT N$(b); " is dead.": GOTO 10750
  596. 10780 pa(z) = 0: iu(z) = a: pu(z) = b: si(a) = si(a) - 1
  597. 10790 GOTO 10580
  598. 10800 PRINT N$(cp); " uses the "; si$(iu(cp)); " on "; N$(pu(cp)); ", "; : c = 2 ^ (iu(cp) - 1)
  599. 10805 IF iu(cp) = 13 THEN 10830
  600. 10806 IF iu(cp) = 14 THEN 10840
  601. 10807 IF iu(cp) = 15 THEN 10850
  602. 10810 IF hp(pu(cp)) = 0 OR (po(pu(cp)) AND c) = 0 THEN PRINT "with no effect!": RETURN
  603. 10820 PRINT "curing "; ad$(iu(cp)); "!": po(pu(cp)) = po(pu(cp)) - c: RETURN
  604. 10830 hg = INT(50 * RND(1)) + 50: hp(pu(cp)) = hp(pu(cp)) + hg: PRINT "+"; hg; " HP!"
  605. IF hp(pu(cp)) > h2(pu(cp)) THEN hp(pu(cp)) = h2(pu(cp))
  606. RETURN
  607. 10840 hp(pu(cp)) = INT(h2(pu(cp)) * RND(1)) + 1: PRINT "reviving him!": RETURN
  608. 10850 mg = INT(50 * RND(1)) + 1: pm(pu(cp)) = pm(pu(cp)) + mg: IF pm(pu(cp)) > mm(pu(cp)) THEN pm(pu(cp)) = mm(pu(cp))
  609. 10860 PRINT "+"; mg; " MP!": RETURN
  610. 11000 fl = 0: IF mp(pa(cp)) = 0 THEN pa(cp) = INT(nm * RND(1)) + 1: GOTO 11000
  611. 11010 PRINT N$(cp); " attacks the "; m$(pa(cp));
  612. 11020 hc = (dx(cp) + bd(cp) + wa(cp)) - md(pa(cp)) + 50: IF hc < 25 THEN hc = 25 ELSE IF hc > 75 THEN hc = 75
  613. 11025 IF po(cp) AND 4 THEN hc = 5
  614. 11026 IF po(cp) AND 16 THEN hc = INT(hc / 2)
  615. 11030 ch = INT(100 * RND(1)) + 1: IF ch < hc THEN 11050
  616. 11040 PRINT " and misses!": RETURN
  617. 11050 PRINT " and hits for "; : rr = RND(1): dm = INT((st(cp) + bs(cp) + wd(cp)) * RND(1)) + 1: IF dm > mp(pa(cp)) THEN dm = mp(pa(cp))
  618. 11060 PRINT dm; " damage"; : mp(pa(cp)) = mp(pa(cp)) - dm: IF mp(pa(cp)) > 0 THEN PRINT "!": RETURN
  619. 11070 PRINT ", killing it!"
  620. 11080 cs = 0: FOR z = 1 TO nm: cs = cs - (mp(z) > 0): NEXT z: IF cs > 0 THEN RETURN
  621. 11090 fl = 1: RETURN
  622. 11100 PRINT : fl = 0
  623. 11110 PRINT N$(1); "'s party stands victorious!": PRINT : FOR z = 1 TO 6: bs(z) = 0: bd(z) = 0: cs(z) = 0: NEXT z: am = 0: cm = 0: IF bb = 1 THEN bb = 0: tf(zz) = 2: pz = 0
  624. 11120 xp = INT((cr * pz * 4) * RND(1)) + 1: gg = INT((pz * 5) * RND(1)) + 1: FOR z = 1 TO nm: xp = xp + mx(z): gg = gg + INT(mx(z) * (RND(1) + .4)) + 1 + INT(2 * pz * RND(1)) + 1: NEXT z
  625. 11130 PRINT "Each player receives"; xp; "XP and your party finds"; gg; " GP!": PRINT
  626. 11135 IF RND(1) > (.15 + (np / 100) + (nm / 100) + (pz / 150)) THEN 11140
  627. 11136 pf = INT(np * RND(1)) + 1: cs = cs + 1: IF (po(pf) > 0 OR hp(pf) = 0) AND cs < 30 THEN 11136
  628. 11137 IF cs = 30 THEN cs = 0: GOTO 11140
  629. 11138 fi = INT(12 * RND(1)) + 1: IF RND(1) > .8 - (nm / 100) THEN fi = INT(3 * RND(1)) + 1 + 12
  630. PRINT N$(pf); " finds "; si$(fi): si(fi) = si(fi) + 1
  631. 11140 FOR z = 1 TO np: IF lv(z) < 999 AND lv(z) > 0 AND hp(z) > 0 THEN xp&(z) = xp&(z) + xp
  632. 11150 NEXT z
  633. 11160 gp& = gp& + gg: FOR z = 1 TO np: IF xp&(z) > lx#(lv(z) + 1) AND lv(z) > 0 THEN GOSUB 11170
  634. 11165 NEXT z: GOTO 11210
  635. 11170 PRINT N$(z); " advances a level of experience!": mb = INT(6 * RND(1)) + 1: sb = INT(3 * RND(1)) + 1: db = INT(3 * RND(1)) + 1: hb = INT(16 * RND(1)) + 1
  636. 11180 PRINT "MP +"; mb; " HP +"; hb; " STR +"; sb; " DEX +"; db; "!"
  637. 11190 h2(z) = h2(z) + hb: mm(z) = mm(z) + mb: lv(z) = lv(z) + 1: st(z) = st(z) + sb: dx(z) = dx(z) + db
  638. 11200 RETURN
  639. 11210 INPUT "Press ENTER to continue", a$: RETURN
  640. 12000 fl = 0: ap = INT(np * RND(1)) + 1: IF hp(ap) = 0 THEN 12000
  641. 12010 PRINT "The "; m$(cm); " attacks "; N$(ap);
  642. 12020 hc = md(cm) - (dx(ap) + bd(ap) + ac(ar(ap))) + 50: IF hc < 25 THEN hc = 25 ELSE IF hc > 75 THEN hc = 75
  643. 12025 IF ma(cm) > 0 AND RND(1) > .7 THEN 13000
  644. 12030 ch = INT(100 * RND(1)) + 1: IF ch > hc THEN PRINT " and misses!": RETURN
  645. 12040 PRINT " and hits for "; : dm = (ms(cm) - ac(ar(ap))): IF lv(ap) = 0 THEN dm = (ms(cm) - INT(dx(ap) / 4))
  646. 12045 IF dm < 3 THEN dm = 3
  647. 12046 IF dm > hp(ap) THEN dm = hp(ap)
  648. 12050 dm = INT(dm * RND(1)) + 1
  649. 12055 PRINT dm; " damage"; : hp(ap) = hp(ap) - dm: IF hp(ap) > 0 THEN PRINT : RETURN
  650. 12060 PRINT ", killing him!"
  651. 12070 cs = 0: FOR z = 1 TO np: cs = cs - (hp(z) > 0): NEXT z: IF cs > 0 THEN RETURN
  652. 12080 fl = 1: RETURN
  653. 13000 ON ma(cm) GOTO 13010, 13040, 13070, 13100, 13130, 13150, 13170, 13210, 13230, 13250, 13280, 13310, 13340, 13360, 13380, 13400, 13430, 13460, 13480, 13500, 13520, 13540, 13560, 13580, 13600, 13620
  654. 13010 PRINT " with poison and "; : IF INT(100 * RND(1)) + 1 < hc + (bb * (pz / 2)) THEN 13030
  655. 13020 PRINT "misses!": RETURN
  656. 13030 PRINT "hits, poisoning him!": po(ap) = po(ap) OR 1: RETURN
  657. 13040 PRINT " with a sleep spell! "; : IF INT(100 * RND(1)) + 1 < hc + (bb * (pz / 2)) THEN 13060
  658. 13050 PRINT "No effect!": RETURN
  659. 13060 PRINT N$(ap); " falls asleep!": po(ap) = po(ap) OR 2: RETURN
  660. 13070 PRINT " with a confusing blow! "; : IF INT(100 * RND(1)) + 1 < hc + (bb * (pz / 2)) THEN 13090
  661. 13080 PRINT "No effect!": RETURN
  662. 13090 PRINT N$(ap); " is dazed!": po(ap) = po(ap) OR 4: RETURN
  663. 13100 PRINT " with a paralyzing blow! "; : IF INT(100 * RND(1)) + 1 < hc + (bb * (pz / 2)) THEN 13120
  664. 13110 GOTO 13080
  665. 13120 PRINT N$(ap); " is paralyzed!": po(ap) = po(ap) OR 8: RETURN
  666. 13130 PRINT " with disease! "; : IF INT(100 * RND(1)) + 1 > hc - (bb * (pz / 2)) THEN 13080
  667. 13140 PRINT N$(ap); " is diseased!": po(ap) = po(ap) OR 16: RETURN
  668. 13150 PRINT " with blood drain! "; : IF INT(100 * RND(1)) + 1 > hc - (bb * (pz / 2)) THEN 13080
  669. 13160 dm = INT((50 + (pz * 4)) * RND(1)) + 1: IF dm > hp(ap) THEN dm = hp(ap)
  670. 13165 mp(cm) = mp(cm) + dm: GOTO 12055
  671. 13170 PRINT " with life drain! "; : IF INT(100 * RND(1)) + 1 > 30 THEN 13080
  672. 13180 dm = INT(4 * RND(1)) + 1: IF dm > h2(ap) THEN dm = h2(ap)
  673. 13190 PRINT dm; " max HP lost!": h2(ap) = h2(ap) - dm: IF hp(ap) > h2(ap) THEN hp(ap) = h2(ap)
  674. 13200 IF hp(ap) = 0 THEN PRINT N$(1); " dies!": GOTO 12070
  675. 13205 RETURN
  676. 13210 PRINT " with charm spell! "; : IF INT(100 * RND(1)) + 1 > hc + (bb * (pz / 2)) THEN 13080
  677. 13220 PRINT N$(ap); " is charmed!": po(ap) = po(ap) OR 32: RETURN
  678. 13230 PRINT " with evil omen! "; : IF INT(100 * RND(1)) + 1 > hc + (bb * (pz / 2)) THEN 13080
  679. 13240 PRINT N$(ap); " is cursed!": po(ap) = po(ap) OR 64: RETURN
  680. 13250 PRINT "! Brutal attack! "; : IF INT(100 * RND(1)) + 1 > hc + (bb * (pz / 2)) THEN 12040
  681. 13260 dm = INT((ms(cm)) * 4 * RND(1)) + 1: IF dm > hp(ap) THEN dm = hp(ap)
  682. 13270 GOTO 12055
  683. 13280 PRINT " with Electric Shock! "; : IF INT(100 * RND(1)) > hc + (bb * (pz / 2)) THEN 13080
  684. 13290 dm = 150 + 5 * pz: IF dm > hp(ap) THEN dm = hp(ap)
  685. 13295 IF RND(1) > .7 THEN po(ap) = po(ap) OR 8
  686. 13296 IF RND(1) > .6 THEN po(ap) = po(ap) OR 1024
  687. 13297 IF RND(1) > .5 THEN po(ap) = po(ap) OR 4
  688. 13298 IF RND(1) > .5 THEN po(ap) = po(ap) OR 2
  689. 13300 GOTO 12055
  690. 13310 PRINT " with breath weapon! "; : IF INT(100 * RND(1)) > hc + (bb * (pz / 2)) THEN 13080
  691. 13320 dm = 150 + (INT(10 * RND(1)) + 2) * pz: IF dm > hp(ap) THEN dm = hp(ap)
  692. 13330 GOTO 12055
  693. 13340 PRINT " with fatal blow! "; : IF INT(100 * RND(1)) + 1 > 10 THEN 12040
  694. 13350 dm = hp(ap): GOTO 12055
  695. 13360 PRINT " with parasites! "; : IF INT(100 * RND * (1)) + 1 > hc + (bb * (pz / 2)) THEN 13080
  696. 13370 PRINT N$(ap); " is infected!": po(ap) = po(ap) OR 128: RETURN
  697. 13380 PRINT " With Holy Disease! "; : IF INT(100 * RND(1)) + 1 > hc + (bb * (pz / 2)) THEN 13080
  698. 13390 PRINT N$(ap); " is infected!": po(ap) = po(ap) OR 256: RETURN
  699. 13400 PRINT " with Dark Sleep! "; : IF INT(100 * RND(1)) + 1 > 20 THEN 13080
  700. 13410 po(ap) = po(ap) OR 2130
  701. 13420 PRINT N$(ap); "falls to the ground!": RETURN
  702. 13430 PRINT " with Human Experimentation! "; : IF INT(100 * RND(1)) + 1 > hc + (bb * (pz / 2)) THEN 13080
  703. 13440 po(ap) = INT(4095 * RND(1)) + 1
  704. 13450 PRINT N$(ap); " Undergoes disturbing change!": RETURN
  705. 13460 PRINT " 'I HATE YOU!' "; : IF INT(100 * RND(1)) + 1 > hc + (bb * (pz / 2)) THEN 13080
  706. 13470 PRINT "Strong effects from this curse! "; : po(ap) = po(ap) OR 324: GOTO 13260
  707. 13480 PRINT " with Duplication! "; : IF INT(100 * RND(1)) + 1 > hc + (bb * (pz / 2)) THEN 13080
  708. 13490 PRINT "Successful!": m$(cm) = N$(ap) + " 2": ms(cm) = st(ap): md(cm) = dx(ap): mp(cm) = h2(ap): RETURN
  709. 13500 PRINT " 'I LOVE YOU!' "; : IF INT(100 * RND(1)) + 1 > hc THEN 13080
  710. 13510 PRINT "Love is tough!": po(ap) = po(ap) OR 177: RETURN
  711. 13520 PRINT " with Stone Gaze! "; : IF INT(100 * RND(1)) + 1 > hc + (bb * (pz / 2)) THEN 13080
  712. 13530 PRINT N$(ap); " turns to stone!": po(ap) = po(ap) OR 512: RETURN
  713. 13540 PRINT " with intoxication! "; : IF INT(100 * RND(1)) + 1 > hc + (bb * (pz / 2)) THEN 13080
  714. 13550 PRINT N$(ap); " is intoxicated!": po(ap) = po(ap) OR 5: RETURN
  715. 13560 PRINT " with blindness! "; : IF INT(100 * RND(1)) + 1 > hc + (bb * (pz / 2)) THEN 13080
  716. 13570 PRINT N$(ap); " is blinded!": po(ap) = po(ap) OR 1024: RETURN
  717. 13580 PRINT " with Silence Spell! "; : IF INT(100 * RND(1)) + 1 > hc + (bb * (pz / 2)) THEN 13080
  718. 13590 PRINT N$(ap); " is silenced!": po(ap) = po(ap) OR 2048: RETURN
  719. 13600 PRINT " with Mind Blast! "; : IF INT(100 * RND(1)) + 1 > hc OR pm(ap) = 0 THEN 13080
  720. 13610 dm = INT((5 + (pz * 3)) * RND(1)) + 1: IF dm > pm(ap) THEN dm = pm(ap)
  721. 13615 PRINT dm; " MP Lost!": pm(ap) = pm(ap) - dm: RETURN
  722. 13620 PRINT " with XP drain! "; : IF INT(100 * RND(1)) + 1 > hc OR xp&(ap) = 0 THEN 13080
  723. 13630 dm = INT((250 + (75 * pz)) * RND(1)) + 1: IF dm > xp&(ap) THEN dm = xp&(ap)
  724. 13640 PRINT dm; " XP lost!": xp&(ap) = xp&(ap) - dm: mp(cm) = mp(cm) + dm: RETURN
  725. 14000 fl = 0:
  726. 14010 PRINT N$(cp); " attacks himself ";
  727. 14020 hc = 50
  728. 14025 IF po(cp) AND 4 THEN hc = 5
  729. 14030 ch = INT(100 * RND(1)) + 1: IF ch < hc THEN 14050
  730. 14040 PRINT "and misses!": RETURN
  731. 14050 PRINT "and hits for "; : dm = INT((st(cp) + wd(cp)) * RND(1)) + 1: IF dm > hp(cp) THEN dm = hp(cp)
  732. 14060 PRINT dm; " damage"; : hp(cp) = hp(cp) - dm: IF hp(cp) > 0 THEN PRINT "!": RETURN
  733. 14070 PRINT ", killing himself!"
  734. 14080 cs = 0: FOR z = 1 TO np: cs = cs + (hp(z) = 0): NEXT z: IF cs = np THEN fl = 2
  735. 14090 RETURN
  736. 15000 PRINT "Suddenly, a strange figure approaches!": PRINT : pz = zz * 10: IF pz > 70 THEN pz = 70
  737. 15010 nm = 13: OPEN "bosses" FOR INPUT AS 1
  738. 15020 FOR z = 1 TO zz: INPUT #1, m$(1), ms(1), md(1), mp(1), mx(1), ma(1): NEXT z
  739. 15030 CLOSE 1
  740. 15040 PRINT "I am "; m$(1); ", guardian of the "; tr$(tf(zz)); "!": PRINT
  741. 15050 PRINT "If you are worthy, take out your swords and fight!"
  742. 15060 PRINT "Too bad for you, there's no alternative!": PRINT
  743. 15070 PRINT "En Garde!": PRINT : INPUT "Press ENTER to begin the battle!"; a$
  744. 15080 FOR z = 2 TO 13: ml = (zz - 1) * 10 + INT(9 * RND(1)) + 4: IF ml > 70 THEN ml = 70
  745. 15090 OPEN "enemy" + STR$(ml) FOR INPUT AS 1: INPUT #1, tm
  746. 15100 mc = INT(tm * RND(1)) + 1: FOR y = 1 TO mc: INPUT #1, m$(z), ms(z), md(z), mp(z), mx(z), ma(z): NEXT y: md(z) = md(z) + INT(pz * RND(1)) - INT(pz * RND(1)): ms(z) = ms(z) + INT(pz * RND(1)) - INT(pz * RND(1)): mp(z) = mp(z) + INT(pz * RND(1) * 2) - INT(pz * RND(1) * 2): CLOSE 1: IF ma(z) = 0 THEN 15090
  747. 15110 NEXT z
  748. 15120 bb = 1: GOTO 10264
  749. 16000 CLS
  750. 16010 PRINT "Welcome to the Mage's Workshop": PRINT
  751. 16020 PRINT "1. Mix magical ingredients (100gp per mixture)"
  752. 16030 PRINT "2. View spellbook contents"
  753. 16040 PRINT "3. Upgrade spellbook (5000 for Codex 20000 for Tome)"
  754. 16050 PRINT "4. Return to the camp"
  755. 16060 PRINT
  756. 16070 INPUT a$: IF a$ < "1" OR a$ > "3" THEN 7000
  757. 16080 IF a$ = "3" THEN 16330
  758. 16090 IF a$ = "2" THEN 16300
  759. 16100 CLS
  760. 16110 PRINT "It costs 100 GP to prepare your chosen mixture."
  761. 16120 IF gp& < 100 THEN PRINT "Sorry, you don't have enough gold.": GOTO 16060
  762. 16130 gp& = gp& - 100
  763. 16140 PRINT "Select the first ingredient to use:": PRINT "(Select lowest numbered ingredient first!)": PRINT
  764. 16150 FOR z = 1 TO 11: PRINT z; ". "; re$(z): NEXT z: PRINT
  765. 16160 INPUT a: IF a < 1 OR a > 11 THEN CLS : GOTO 16140
  766. 16170 PRINT "And now select the second ingredient to use:": PRINT
  767. 16180 FOR z = a TO 11: PRINT z; ". "; re$(z): NEXT z
  768. 16190 INPUT b: IF b < a OR b > 11 THEN CLS : GOTO 16170
  769. 16200 PRINT "Carefully you mix the "; re$(a); " with the "; re$(b); "."
  770. 16210 PRINT "As you stir them together, strange vapors and colors"
  771. 16220 PRINT "emanate from the flask.": PRINT : INPUT "press enter to continue"; a$
  772. 16230 IF al%(b, a) > 0 THEN 16250
  773. 16240 PRINT "A black, crusty residue results, of which no use is possible.": PRINT : GOTO 16010
  774. 16250 PRINT "The reagent necessary for "; sp$(al%(b, a)); " results!": PRINT
  775. 16260 FOR z = 1 TO fnb(a): PRINT z; ". "; sp$(sb(z)): NEXT z
  776. 16270 INPUT "Record this spell in which slot, or 0 to discard"; c
  777. 16280 IF c < 1 OR c > fnb(a) THEN PRINT "You discard the mixture created.": PRINT : GOTO 16010
  778. 16290 sb(c) = al%(b, a): PRINT sp$(al%(b, a)); " has been recorded in your spellbook.": PRINT : GOTO 16010
  779. 16300 CLS : PRINT "Contents of "; N$(1); "'s Party Spellbook": PRINT
  780. 16310 FOR zs = 1 TO fnb(zs): PRINT fna$(zs); "."; TAB(6); sp$(sb(zs)): NEXT zs
  781. 16320 PRINT : INPUT "press ENTER to continue"; a$: IF vs = 0 THEN 16000
  782. 16325 vs = 0: RETURN
  783. 16330 IF bt = 3 THEN PRINT "You have the biggest spellbook available.": PRINT : GOTO 16010
  784. 16340 IF bt = 1 THEN pr = 5000: bt$ = "Codex": ob$ = "Spellpad": gb = 2
  785. 16350 IF bt = 2 THEN pr = 20000: bt$ = "Tome": ob$ = "Codex": gb = 3
  786. 16360 PRINT "You have chosen to upgrade your "; ob$; " to a "; bt$
  787. 16370 PRINT "Cost for this is"; pr; " GP.": PRINT
  788. 16380 IF gp& < pr THEN PRINT "Sorry, you don't have enough gold!": GOTO 16010
  789. 16390 INPUT "Do you wish to upgrade your spellbook"; a$
  790. 16400 IF a$ <> "y" THEN 16000
  791. 16410 PRINT "Done!": bt = gb: gp& = gp& - pr: PRINT : GOTO 16010
  792. 17000 CLS : FOR z = 1 TO fnb(a): PRINT z; "."; sp$(sb(z)): NEXT z
  793. 17010 PRINT : INPUT "cast which spell"; a
  794. 17020 IF a < 1 OR a > fnb(z) THEN 8140
  795. 17030 IF sb(a) = 0 THEN PRINT "The page you selected is blank.": PRINT : GOTO 8140
  796. 17040 a = sb(a)
  797. 17050 IF sf(a) = 0 THEN PRINT sp$(a); " can only be cast in combat.": PRINT : GOTO 8140
  798. 17070 FOR y = 1 TO np: cs = 0
  799. 17080 PRINT y; ". "; N$(y); TAB(30);
  800. FOR q = 1 TO 12: IF po(y) AND (2 ^ (q - 1)) THEN PRINT as$(q); : cs = cs + 1
  801. NEXT q: IF hp(y) = 0 THEN PRINT " DEAD"; : cs = 1
  802. IF cs = 0 THEN PRINT " Normal" ELSE cs = 0: PRINT
  803. 17090 NEXT y
  804. 17100 PRINT : INPUT "Who will cast this spell"; c
  805. 17105 IF c < 1 OR c > np THEN PRINT : GOTO 8140
  806. 17110 IF hp(c) = 0 THEN PRINT N$(c); " is dead.": GOTO 17100
  807. 17120 IF (po(c) AND 2) OR (po(c) AND 8) OR (po(c) AND 512) OR (po(c) AND 1024) OR (po(c) AND 2048) THEN PRINT N$(c); " cannot cast spells.": GOTO 17100
  808. 17130 IF pm(c) < sp(a) THEN PRINT N$(c); " does not have enough magic points.": PRINT : GOTO 8140
  809. 17140 IF a = 18 OR a = 22 OR a = 23 THEN 17440
  810. 17145 IF a = 32 THEN 20000
  811. 17150 FOR y = 1 TO np: cs = 0
  812. 17160 PRINT y; ". "; N$(y); TAB(30);
  813. FOR q = 1 TO 12: IF po(y) AND (2 ^ (q - 1)) THEN PRINT as$(q); : cs = cs + 1
  814. NEXT q: IF hp(y) = 0 THEN PRINT " DEAD"; : cs = 1
  815. IF cs = 0 THEN PRINT " Normal" ELSE cs = 0: PRINT
  816. 17170 NEXT y
  817. 17180 PRINT : INPUT "Cast this on whom"; b
  818. 17190 IF b < 1 OR b > np THEN 8140
  819. 17200 IF a = 4 THEN pu = 1: po = 16: c$ = " DIS": GOTO 17350
  820. 17210 IF a = 5 THEN pu = 1: po = 8: c$ = " PAR": GOTO 17350
  821. 17220 IF a = 7 THEN pu = 1: po = 2: c$ = " ZZZ": GOTO 17350
  822. 17230 IF a = 8 THEN pu = 1: po = 4: c$ = " CNF": GOTO 17350
  823. 17240 IF a = 10 THEN pu = 1: po = 128: c$ = " WRM": GOTO 17350
  824. 17250 IF a = 14 THEN pu = 1: po = 1024: c$ = " BLI": GOTO 17350
  825. 17260 IF a = 15 THEN pu = 1: po = 64: c$ = " EVL": GOTO 17350
  826. 17270 IF a = 19 THEN 17370
  827. 17280 IF a = 20 THEN pu = 1: po = 256: c$ = " HOL": GOTO 17350
  828. 17290 IF a = 24 THEN 17400
  829. 17300 IF a = 26 THEN pu = 1: po = 32: c$ = " CHR": GOTO 17350
  830. 17310 IF a = 28 THEN pu = 1: po = 1: c$ = " POI": GOTO 17350
  831. 17320 IF a = 29 THEN 17420
  832. 17330 IF a = 30 THEN pu = 1: po = 512: c$ = " STN": GOTO 17350
  833. 17340 GOTO 8140
  834. 17350 PRINT N$(c); " casts "; sp$(a); " on "; N$(b); ", "; : IF po(b) AND po = 0 THEN PRINT "with no effect!": pm(c) = pm(c) - pu: GOTO 8140
  835. 17360 PRINT "curing"; c$; "!": po(b) = po(b) - po: pm(c) = pm(c) - pu: GOTO 8140
  836. 17370 PRINT N$(c); " casts Revive on "; N$(b); ", "; : pm(c) = pm(c) - 50
  837. 17380 IF hp(b) > 0 THEN PRINT "without effect!": GOTO 8140
  838. 17390 hp(b) = INT(h2(b) * RND(1)) + 1: PRINT "reviving him from the dead!": GOTO 8140
  839. 17400 PRINT N$(c); " casts Restore on "; N$(b); ","; : pm(c) = pm(c) - 5: IF po(b) = 0 THEN PRINT "without effect!": GOTO 8140
  840. 17410 po(b) = 0: PRINT "curing all abnormalities!": GOTO 8140
  841. 17420 PRINT N$(c); " casts Heal on "; N$(b); ", "; : pm(c) = pm(c) - 5: IF (po(b) AND 8) OR (po(b) AND 16) OR (po(b) AND 512) THEN PRINT "No effect!": GOTO 8140
  842. 17430 PRINT "healing him!": hp(b) = h2(b): GOTO 8140
  843. 17440 IF a = 18 THEN 17660
  844. 17450 IF a = 22 THEN 17700
  845. 17550 INPUT "(U)p or (D)own"; a$: di = -1: IF a$ = "d" THEN di = 1
  846. 17560 pm(c) = pm(c) - 6: PRINT N$(c); " casts Teleport!": IF pz + di < 1 OR pz + di > 70 THEN PRINT "No Effect!": GOTO 8140
  847. 17570 IF di = -1 THEN pz = pz - 1: GOSUB 9070: GOTO 8260
  848. 17580 pz = pz + 1: GOSUB 9000: GOTO 8260
  849. 17660 PRINT N$(c); " casts God's Word!": pm(c) = pm(c) - 150
  850. 17670 cs = 0: FOR z = 1 TO np: cs = cs - (hp(z) = 0): NEXT z: IF cs = 0 THEN PRINT "No effect!": GOTO 8140
  851. 17680 FOR z = 1 TO np: IF hp(z) = 0 THEN hp(z) = h2(z): PRINT N$(z); " has been revived!": po(z) = 0
  852. 17690 NEXT z: GOTO 8140
  853. 17700 PRINT N$(c); " casts Escape!": pm(c) = pm(c) - 8: FOR z = 1 TO 10000: NEXT z
  854. 17710 pz = 0: GOTO 7000
  855. 18000 IF (po(z) AND 4) OR (po(z) AND 2048) THEN PRINT "This character cannot cast spells.": GOTO 10500
  856. 18011 CLS : FOR zq = 1 TO fnb(a): PRINT zq; "."; sp$(sb(zq)): NEXT zq
  857. 18010 PRINT : INPUT "cast which spell"; a
  858. 18020 IF a < 1 OR a > fnb(z) THEN 10500
  859. 18030 IF sb(a) = 0 THEN PRINT "The page you selected is blank.": PRINT : GOTO 10500
  860. 18040 a = sb(a)
  861. 18050 IF sc(a) = 0 THEN PRINT sp$(a); " cannot be cast in combat.": PRINT : GOTO 10500
  862. 18060 IF pm(z) < sp(a) THEN PRINT "Not enough MP to cast this spell.": GOTO 18010
  863. 18070 cs(z) = a: IF a = 1 OR a = 4 OR a = 5 OR a = 7 OR a = 8 OR a = 10 OR a = 14 OR a = 15 OR a = 19 OR a = 20 OR a = 24 OR a = 25 OR a = 26 OR a = 28 OR a = 29 OR a = 30 THEN 18110
  864. 18080 IF a = 2 OR a = 11 OR a = 12 OR a = 31 THEN 18100
  865. 18090 pa(z) = 0: GOTO 10580
  866. 18100 PRINT "Spell set. Select monster to attack from list.": PRINT : GOTO 10510
  867. 18110 FOR y = 1 TO np: cs = 0
  868. 18120 PRINT y; ". "; N$(y); TAB(30);
  869. FOR q = 1 TO 12: IF po(y) AND (2 ^ (q - 1)) THEN PRINT as$(q); : cs = cs + 1
  870. NEXT q: IF hp(y) = 0 THEN PRINT " DEAD"; : cs = 1
  871. IF cs = 0 THEN PRINT " Normal" ELSE cs = 0: PRINT
  872. 18130 NEXT y
  873. 18140 PRINT : INPUT "Cast this on whom"; b
  874. 18150 IF b < 1 OR b > np THEN 10530
  875. 18160 pa(z) = b: GOTO 10580
  876. 19000 sc = cs(cp): cs(cp) = 0: PRINT N$(cp); " casts "; sp$(sc); " ";
  877. 19010 ON sc GOTO 19020, 19030, 19060, 19065, 19090, 19095, 19140, 19150, 19160, 19170, 19180, 19210, 19220, 19230, 19240, 19250, 19260, 19270, 19300, 19320, 19330, 0, 0, 19340, 19360, 19370, 19380, 19390, 19400, 19420, 19430
  878. 19020 PRINT "on "; N$(pa(cp)); : bo = INT((lv(cp) + pz) / 4): PRINT "! +"; bo; " str bonus!": pm(cp) = pm(cp) - 2: bs(pa(cp)) = bs(pa(cp)) + bo: GOTO 10631
  879. 19030 pm(cp) = pm(cp) - 18: dm = INT((50 + lv(cp) * 4) * RND(1)) + 1: IF dm > mp(pa(cp)) THEN dm = mp(pa(cp))
  880. 19040 PRINT m$(pa(cp)); " loses"; dm; " HP to "; N$(cp); "!": hp(cp) = hp(cp) + dm: IF hp(cp) > h2(cp) THEN hp(cp) = h2(cp)
  881. 19050 GOSUB 11080: GOTO 10631
  882. 19060 pm(cp) = pm(cp) - 18: bo = INT((lv(cp) + pz) / 4): PRINT "+"; bo; " str bonus to party!": FOR qq = 1 TO np: bs(qq) = bs(qq) + bo: NEXT qq: GOTO 10631
  883. 19065 po = 16: c$ = " DIS"
  884. 19070 PRINT "on "; N$(pa(cp)); "! "; : pm(cp) = pm(cp) - 1: IF po(pa(cp)) AND po THEN PRINT "curing "; c$; "!": po(pa(cp)) = po(pa(cp)) - po: GOTO 10631
  885. 19080 PRINT "No effect!": GOTO 10631
  886. 19090 po = 8: c$ = " PAR": GOTO 19070
  887. 19095 pu = 60: d1 = 200: d2 = 5
  888. 19100 pm(cp) = pm(cp) - pu: dm = INT((d1 + d2 * lv(cp)) * RND(1)) + 1: PRINT dm; " damage to all monsters!"
  889. 19110 FOR q = 1 TO nm: IF mp(q) > 0 THEN mp(q) = mp(q) - dm
  890. 19120 IF mp(q) < 0 THEN mp(q) = 0
  891. 19130 NEXT q: GOSUB 11080: GOTO 10631
  892. 19140 po = 2: c$ = " ZZZ": GOTO 19070
  893. 19150 po = 4: c$ = " CNF": GOTO 19070
  894. 19160 pu = 5: d1 = 30: d2 = .2: GOTO 19100
  895. 19170 po = 128: c$ = " WRM": GOTO 19070
  896. 19180 pu = 5: d1 = 20: d2 = 1 / 7
  897. 19190 pm(cp) = pm(cp) - pu: PRINT "on the "; m$(pa(cp)); "! "; : dm = INT((d1 + d2 * lv(cp)) * RND(1)) + 1: IF dm > mp(pa(cp)) THEN dm = mp(pa(cp))
  898. 19200 mp(pa(cp)) = mp(pa(cp)) - dm: PRINT dm; " damage!": GOSUB 11080: GOTO 10631
  899. 19210 pu = 10: d1 = 60: d2 = .25: GOTO 19190
  900. 19220 pu = 12: d1 = 50: d2 = .25: GOTO 19100
  901. 19230 po = 1024: c$ = " BLI": GOTO 19070
  902. 19240 po = 64: c$ = " EVL": GOTO 19070
  903. 19250 pu = 24: d1 = 90: d2 = .33333333333#: GOTO 19100
  904. 19260 pu = 45: d1 = 250: d2 = .25: GOTO 19100
  905. 19270 pm(cp) = pm(cp) - 150: cs = 0: FOR q = 1 TO np: cs = cs - (hp(q) = 0): NEXT q: IF cs = 0 THEN PRINT "No effect!": GOTO 10631
  906. 19280 cs = 0: FOR q = 1 TO np: IF hp(q) = 0 THEN hp(q) = h2(q): po(q) = 0
  907. 19290 NEXT q: PRINT "All dead players revived!": GOTO 10631
  908. 19300 PRINT "on "; N$(pa(cp)); ","; : pm(cp) = pm(cp) - 50: IF hp(pa(cp)) > 0 THEN PRINT "No effect!": GOTO 10631
  909. 19310 hp(pa(cp)) = h2(pa(cp)): PRINT " reviving him!": GOTO 10631
  910. 19320 po = 256: c$ = " HOL": GOTO 19070
  911. 19330 pu = 40: d1 = 175: d2 = .5: GOTO 19100
  912. 19340 PRINT "on "; N$(pa(cp)); " ,"; : pm(cp) = pm(cp) - 5: IF po(pa(cp)) = 0 THEN PRINT "No effect!": GOTO 10631
  913. 19350 PRINT "restoring him to normal!": po(pa(cp)) = 0: GOTO 10631
  914. 19360 PRINT "on "; N$(pa(cp)); ", "; : pm(cp) = pm(cp) - 6: bo = INT((lv(cp) + pz) / 4): PRINT "+"; bo; " dex bonus!": bd(pa(cp)) = bd(pa(cp)) + bo: GOTO 10631
  915. 19370 po = 32: c$ = " CHR": GOTO 19070
  916. 19380 pm(cp) = pm(cp) - 18: bo = INT((lv(cp) + pz) / 4): PRINT "+"; bo; " dex bonus to party!": FOR qq = 1 TO np: bd(qq) = bd(qq) + bo: NEXT qq: GOTO 10631
  917. 19390 po = 1: c$ = " POI": GOTO 19070
  918. 19400 pm(cp) = pm(cp) - 5: PRINT "on "; N$(pa(cp)); ", "; : IF hp(pa(cp)) = 0 THEN PRINT "No effect!": GOTO 10631
  919. 19405 IF (po(pa(cp)) AND 8) OR (po(pa(cp)) AND 16) OR (po(pa(cp)) AND 512) THEN PRINT "No effect!": GOTO 10631
  920. 19410 PRINT "healing him!": hp(pa(cp)) = h2(pa(cp)): GOTO 10631
  921. 19420 po = 512: c$ = " STN": GOTO 19070
  922. 19430 d1 = 20: d2 = .2: GOTO 19190
  923. 20000 CLS : PRINT N$(c); " casts Magic Map!": PRINT : FOR y = py - 4 TO py + 4: FOR z = 1 - (y > 1) TO 3: FOR x = px - 4 TO px + 4
  924. 20010 IF x < 1 OR y < 1 OR x > 20 OR y > 20 THEN 20040
  925. 20020 a = d%(x, y) AND 15: IF z = 2 AND x = px AND y = py THEN GOSUB 20100: GOTO 20040
  926. 20030 IF x = 1 THEN PRINT am$(a, z);  ELSE PRINT RIGHT$(am$(a, z), 3);
  927. 20040 NEXT x: IF y > 0 AND y < 21 THEN PRINT
  928. 20050 NEXT z, y: mp(c) = mp(c) - 2: GOTO 8140
  929. 20100 IF x = 1 THEN PRINT LEFT$(am$(a, z), 2); "Y"; RIGHT$(am$(a, z), 2);  ELSE PRINT MID$(am$(a, z), 2, 1); "Y"; RIGHT$(am$(a, z), 1);
  930. 20110 RETURN
  931.  
  932.  
  933.  
  934.  
  935. 50000 RESUME 230
  936.  
  937.  
  938.  
  939.  
  940.  
  941.  
  942.  
  943.