home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / games / dungeon.zip / DUNGEON1.BAS next >
BASIC Source File  |  1980-01-01  |  65KB  |  1,458 lines

  1. 10 ON ERROR GOTO 10200:DEF SEG=0:POKE &H417,32:ON TIMER(1) GOSUB 30000
  2. 20 DEF FN ENCRYPT#(Z$)
  3. 30 J# = 0
  4. 40 FOR Q = 1 TO 4
  5. 50 J# = J# * 1000 + ASC( MID$(Z$,Q,1))
  6. 60 NEXT
  7. 70 FN ENCRYPT#= J#
  8. 80 END DEF
  9. 90 DEF FNDECRYPT$(Z#)
  10. 100 Z$ = ""
  11. 110 FOR Q = 1 TO 4
  12. 120 DVID# = INT(Z# / 1000)
  13. 130 NUM# = Z# - DVID# * 1000
  14. 140 Z# = DVID#
  15. 150 Z$ = Z$ + CHR$(NUM#)
  16. 160 NEXT
  17. 170 Y$ = LEFT$(Z$,1)
  18. 180 MID$(Z$,1,1) = MID$(Z$,4,1)
  19. 190 MID$(Z$,4,1) = Y$
  20. 200 Y$ = MID$(Z$,2,1)
  21. 210 MID$(Z$,2,1) = MID$(Z$,3,1)
  22. 220 MID$(Z$,3,1) = Y$
  23. 230 FN DECRYPT$ = Z$
  24. 240 END DEF
  25. 250 KEY 15,CHR$(0)+CHR$(&H45)
  26. 260 KEY 16,CHR$(32)+CHR$(&H45)
  27. 270 KEY 17,CHR$(64)+CHR$(&H45)
  28. 280 KEY 18,CHR$(96)+CHR$(&H45)
  29. 290 ON KEY(15)GOSUB 9250
  30. 300 ON KEY(16)GOSUB 9250
  31. 310 ON KEY(17)GOSUB 9250
  32. 320 ON KEY(18)GOSUB 9250
  33. 330 KEY(15)ON
  34. 340 KEY(16)ON
  35. 350 KEY(17)ON
  36. 360 KEY(18)ON
  37. 370 V = 11
  38. 380 H = 25
  39. 390 KEY OFF
  40. 400 SCREEN 0,1,1,0:CLS
  41. 410 LOCATE 10,1:PRINT"Function Keys"
  42. 420 LOCATE 11,1:PRINT"╔════════════╗"
  43. 430 LOCATE 12,1:PRINT"║Key    Spell║"
  44. 440 LOCATE 13,1:PRINT"║Shift  Level║"
  45. 450 LOCATE 14,1:PRINT"╟────────────╢"
  46. 460 LOCATE 15,1:PRINT"║Normal "+CHR$(16)+" 1  ║"
  47. 470 LOCATE 16,1:PRINT"║Ctrl-  "+CHR$(16)+" 2  ║"
  48. 480 LOCATE 17,1:PRINT"║Shift- "+CHR$(16)+" 3  ║"
  49. 490 LOCATE 18,1:PRINT"║Alt-   "+CHR$(16)+" 4  ║"
  50. 500 LOCATE 19,1:PRINT"╚════════════╝"
  51. 520 LOCATE 10,20:PRINT"Numeric Keypad"
  52. 530 LOCATE 11,20:PRINT"╔═══════════════════════════════════╗"
  53. 540 LOCATE 12,20:PRINT"║ 7=Evade 8=North 9=Ignore          ║"
  54. 550 LOCATE 13,20:PRINT"║                                   ║"
  55. 560 LOCATE 14,20:PRINT"║ 4=West  5=<CR>  6=East   -=Chants ║"
  56. 570 LOCATE 15,20:PRINT"║                                   ║"
  57. 580 LOCATE 16,20:PRINT"║ 1=Fight 2=South 3=Cast   +=Info   ║"
  58. 590 LOCATE 17,20:PRINT"║                                   ║"
  59. 600 LOCATE 18,20:PRINT"║ 0=Help  .=Stats                   ║"
  60. 610 LOCATE 19,20:PRINT"╚═══════════════════════════════════╝"
  61. 621 LOCATE 10,60:PRINT"Dungeon Runes"
  62. 622 LOCATE 11,60:PRINT"╔══════════════════╗"
  63. 623 LOCATE 12,60:PRINT"║ X     Your Player║"
  64. 624 LOCATE 13,60:PRINT"║ #     Monster    ║"
  65. 625 LOCATE 14,60:PRINT"║ $     Gold       ║"
  66. 626 LOCATE 15,60:PRINT"║ ~     Scroll     ║"
  67. 627 LOCATE 16,60:PRINT"║ ^     Trap       ║"
  68. 628 LOCATE 17,60:PRINT"║ o     Pit        ║"
  69. 629 LOCATE 18,60:PRINT"║ "+CHR$(254)+"     Chest      ║"
  70. 630 LOCATE 19,60:PRINT"╚══════════════════╝"
  71. 631 LOCATE 2,10:PRINT "While playing, type 0 for help, or Q for quit. The 24th status line"
  72. 632 LOCATE 3,10:PRINT "displays the following information:"
  73. 633 LOCATE 5,10:PRINT "DLVL is the Dungeon level, LVL is your player's level, HP is your"
  74. 634 LOCATE 6,10:PRINT "player's hit points, EXP is your player's experience, GOLD is the"
  75. 635 LOCATE 7,10:PRINT "amount of gold hoarded, and NM the number of monster remaining in"
  76. 636 LOCATE 8,10:PRINT "the Dungeon level.":LOCATE 9,1:PRINT STRING$(79,"_");
  77. 637 LOCATE 25,1:PRINT STRING$(79,32);
  78. 640 LOCATE 24,22:PRINT "Press a listed key for further help on it.."
  79. 650 LOCATE 25,23:PRINT "Or press space to return to the Dungeon..";
  80. 660 SCREEN 0,1,2,0:CLS
  81. 670 LOCATE 1,8
  82. 680 PRINT "MLVL=INT(RND*DLVL+DLVL/2+1)"
  83. 690 LOCATE 2,8
  84. 700 PRINT "MHP=INT((RND*DLVL*2+1)*MLVL^2/2+DLVL*2+RND*MLVL+50)"
  85. 710 LOCATE 3,8
  86. 720 PRINT "EXP=INT(HP/MLVL)*INT(DLVL/2+1)+INT(RND*HP)"
  87. 730 LOCATE 4,8
  88. 740 PRINT "MHITS=INT(RND*(MHP/ARMOR)+MLVL)"
  89. 750 LOCATE 5,8
  90. 760 PRINT "HITS=INT(RND*STRENGTH+LEVEL/2)*BONUS+WEAPON+DLVL"
  91. 770 LOCATE 7,2
  92. 780 PRINT "Where MLVL is the monster level, DLVL is the Dungeon level, MHP is the monster"
  93. 790 LOCATE 8,2
  94. 800 PRINT "hit points, EXP is the monsters experience, ARMOR is your combined armor plus,"
  95. 810 LOCATE 9,2
  96. 820 PRINT "WEAPON is your weapon plus, STRENGTH is your strength, LEVEL is your expertise"
  97. 830 LOCATE 10,2
  98. 840 PRINT "level, HITS is the number of points damage your can do to a monster, and MHITS"
  99. 850 LOCATE 11,2
  100. 860 PRINT "is the number of points damage a monster can do to you."
  101. 870 LOCATE 13,25
  102. 880 PRINT "You now have an armor plus of    "
  103. 890 LOCATE 14,29
  104. 900 PRINT "and a weapon plus of   "
  105. 910 LOCATE 16,1
  106. 920 PRINT "On this Dungeon level, monsters have the following statistics:"
  107. 930 LOCATE 19,1
  108. 940 PRINT " ","Level","Hit points","Experience","Combat Hits"
  109. 950 LOCATE 20,1
  110. 960 PRINT "min."
  111. 970 LOCATE 21,1
  112. 980 PRINT "max."
  113. 990 LOCATE 22,1
  114. 1000 PRINT "avg."
  115. 1010 LOCATE 25,1:PRINT STRING$(79,32);
  116. 1020 LOCATE 25,35
  117. 1030 PRINT "Press a key..";
  118. 1040 SCREEN 0,1,3,0
  119. 1050 LOCATE 25,1:PRINT STRING$(79,32);
  120. 1060 SCREEN 0,1,0,0
  121. 1070 CLS
  122. 1080 LOGIN = 0
  123. 1090 LOCATE 10,27:COLOR 31:PRINT "╔═════════════════════════╗"
  124. 1100 LOCATE 11,27:PRINT "║";:COLOR 7:PRINT " Welcome to the Dungeon! ";:COLOR 31:PRINT "║"
  125. 1120 LOCATE 12,27:PRINT "║";:COLOR 7:PRINT " Hit [ENTER] to play or  ";:COLOR 31:PRINT "║"
  126. 1130 LOCATE 13,27:PRINT "║";:COLOR 7:PRINT " any other key to quit.. ";:COLOR 31:PRINT "║"
  127. 1140 LOCATE 14,27:PRINT "╚═════════════════════════╝":COLOR 7
  128. 1141 LOCATE 23,10:PRINT "Version 1.0 (C)opyright 1987 Erik Oredson, All rights reserved.";
  129. 1142 LOCATE 24,10:PRINT "Permission given to copy this software by all electronic means.";
  130. 1150 X$ = ""
  131. 1160 WHILE X$ = ""
  132. 1170 X$ = INKEY$
  133. 1180 WEND
  134. 1190 IF X$ < > CHR$(13) THEN POKE &H417,0:END
  135. 1200 DIM W(25,11),V(25,11),CO$(5),PA$(5),Z(24,77),MONSTERS$(53),SPELLS(40):FOR I=1 TO 40:SPELLS(I)=0:NEXT
  136. 1210 RESTORE
  137. 1220 FOR I = 1 TO 53
  138. 1230 READ MONSTERS$(I)
  139. 1240 NEXT
  140. 1250 RANDOMIZE TIMER
  141. 1260 CLS
  142. 1270 LOCATE 11,25
  143. 1280 PRINT "Before you enter the Dungeon,"
  144. 1290 LOCATE 12,25
  145. 1300 PRINT "you must inscibe your name in"
  146. 1310 LOCATE 13,25
  147. 1320 PRINT "   the book of adventurers."
  148. 1330 X = 29
  149. 1340 CODE$ = ""
  150. 1350 LOCATE 15,28
  151. 1360 PRINT CHR$(201); STRING$(20, CHR$(205)); CHR$(187);
  152. 1370 LOCATE 16,49
  153. 1380 PRINT CHR$(186);
  154. 1390 LOCATE 17,49
  155. 1400 PRINT CHR$(188);
  156. 1410 FOR I = 48 TO 29 STEP - 1
  157. 1420 LOCATE 17,I
  158. 1430 PRINT CHR$(205);
  159. 1440 NEXT
  160. 1450 LOCATE 17,28
  161. 1460 PRINT CHR$(200);
  162. 1470 LOCATE 16,28
  163. 1480 PRINT CHR$(186);
  164. 1490 I = 0
  165. 1500 LOCATE 16,X,1
  166. 1510 X$ = ""
  167. 1520 WHILE X$ = ""
  168. 1530 X$ = INKEY$
  169. 1540 WEND
  170. 1550 IF X$ = CHR$(13) THEN IF I > 0 THEN 1640  ELSE BEEP  : GOTO 1500
  171. 1560 IF X$ = CHR$(8) THEN IF I = 0 THEN BEEP  : GOTO 1500  ELSE X = X - 1  : LOCATE 16,X : PRINT " "; : CODE$ = LEFT$(CODE$, LEN(CODE$) - 1) : I = LEN(CODE$) : GOTO 1500
  172. 1570 IF (X$ > = "A" AND X$ < = "Z") OR (X$ > = "a" AND X$ < = "z") OR X$ = " " THEN 1580  ELSE 1500
  173. 1580 IF LEN(CODE$) = 20 THEN BEEP  : GOTO 1500
  174. 1590 PRINT X$;
  175. 1600 CODE$ = CODE$ + X$
  176. 1610 I = LEN(CODE$)
  177. 1620 X = X + 1
  178. 1630 GOTO 1500
  179. 1640 LOCATE 19,25
  180. 1650 PRINT "Now inscribe your secret name."
  181. 1660 X = 29
  182. 1670 PASS$ = ""
  183. 1680 LOCATE 21,28
  184. 1690 PRINT CHR$(201); STRING$(20, CHR$(205)); CHR$(187);
  185. 1700 LOCATE 22,49
  186. 1710 PRINT CHR$(186);
  187. 1720 LOCATE 23,49
  188. 1730 PRINT CHR$(188);
  189. 1740 FOR I = 48 TO 29 STEP - 1
  190. 1750 LOCATE 23,I
  191. 1760 PRINT CHR$(205);
  192. 1770 NEXT
  193. 1780 LOCATE 23,28
  194. 1790 PRINT CHR$(200);
  195. 1800 LOCATE 22,28
  196. 1810 PRINT CHR$(186);
  197. 1820 I = 0
  198. 1830 LOCATE 22,X,1
  199. 1840 X$ = ""
  200. 1850 WHILE X$ = ""
  201. 1860 X$ = INKEY$
  202. 1870 WEND
  203. 1880 IF X$ = CHR$(13) THEN IF I > 0 THEN 2030  ELSE BEEP  : GOTO 1830
  204. 1890 IF X$ = CHR$(8) THEN IF I = 0 THEN BEEP  : GOTO 1830  ELSE X = X - 1  : LOCATE 22,X : PRINT " "; : PASS$ = LEFT$(PASS$, LEN(PASS$) - 1) : I = LEN(PASS$) : GOTO 1830
  205. 1900 IF (X$ > = "A" AND X$ < = "Z") OR (X$ > = "a" AND X$ < = "z") OR X$ = " " THEN 1910  ELSE 1830
  206. 1910 IF LEN(PASS$) = 20 THEN BEEP  : GOTO 1830
  207. 1920 PRINT X$;
  208. 1930 PASS$ = PASS$ + X$
  209. 1940 I = LEN(PASS$)
  210. 1950 X = X + 1
  211. 1960 GOTO 1830
  212. 1970 CLOSE 5
  213. 1980 OPEN "R",5,"PLAYERS.DAT",160
  214. 1990 FIELD 5,8 AS CO$(1),8 AS CO$(2),8 AS CO$(3),8 AS CO$(4),8 AS CO$(5)
  215. 2000 FIELD 5,40 AS DUMMY$,8 AS PA$(1),8 AS PA$(2),8 AS PA$(3),8 AS PA$(4),8 AS PA$(5)
  216. 2010 FIELD 5,80 AS DUMMY$,8 AS DLVL$,8 AS LVL$,2 AS ST$,2 AS IN$,2 AS WI$,2 AS CO$,2 AS DX$,2 AS CH$,8 AS EXPR$,8 AS PTS$,8 AS GOLD$,2 AS WE$,2 AS SH$,2 AS AR$,2 AS CL$,2 AS HE$,2 AS BO$,8 AS MA$,2 AS SP1$,2 AS SP2$,2 AS SP3$,2 AS SP4$
  217. 2020 RETURN
  218. 2030 CODE$ = CODE$ + STRING$(20 - LEN(CODE$),32)
  219. 2040 FOR I = 1 TO 20
  220. 2050 UC = ASC( MID$(CODE$,I,1))
  221. 2060 MID$(CODE$,I,1) = CHR$(UC + 32 * (UC > 90))
  222. 2070 NEXT
  223. 2080 PASS$ = PASS$ + STRING$(20 - LEN(PASS$),32)
  224. 2090 FOR I = 1 TO 20
  225. 2100 UC = ASC( MID$(PASS$,I,1))
  226. 2110 MID$(PASS$,I,1) = CHR$(UC + 32 * (UC > 90))
  227. 2120 NEXT
  228. 2130 GOSUB 1970
  229. 2140 FOR UX = 1 TO LOF(5) / 152
  230. 2150 GET 5,UX
  231. 2160 XCRYPT$ = ""
  232. 2170 FOR J = 1 TO 5
  233. 2180 CRYPT# = CVD(CO$(J))
  234. 2190 XCRYPT$ = XCRYPT$ + FN DECRYPT$(CRYPT#)
  235. 2200 NEXT
  236. 2210 IF CODE$ < > XCRYPT$ THEN 2290
  237. 2220 YCRYPT$ = ""
  238. 2230 FOR J = 1 TO 5
  239. 2240 CRYPT# = CVD(PA$(J))
  240. 2250 YCRYPT$ = YCRYPT$ + FN DECRYPT$(CRYPT#)
  241. 2260 NEXT
  242. 2270 CLOSE 5
  243. 2280 IF PASS$ < > YCRYPT$ THEN 1260  ELSE LOGIN = 1  : LOCATE ,,0  : GOSUB 2920  : GOTO 5420
  244. 2290 NEXT
  245. 2300 CLOSE 5
  246. 2310 DLVL# = 1
  247. 2320 MAXDLVL# = 1
  248. 2330 LVL# = 1
  249. 2340 PTS# = 15
  250. 2350 MAXPTS# = 15
  251. 2360 SP1=10:SP2=10:SP3=10:SP4=10
  252. 2370 WE = 0
  253. 2380 SH = 0
  254. 2390 AR = 0
  255. 2400 HE = 0
  256. 2410 BO = 0
  257. 2420 CL = 0
  258. 2430 CLS
  259. 2440 LOCATE 11,28,0
  260. 2450 PRINT "STR INT WIS CON DEX CHA";
  261. 2460 LOCATE 13,15
  262. 2470 PRINT "Rolling Character Stats(cr to keep or 9 to ignore)";
  263. 2480 ST = INT( RND * 9 + 10)
  264. 2490 IN = INT( RND * 9 + 10)
  265. 2500 WI = INT( RND * 9 + 10)
  266. 2510 CO = INT( RND * 9 + 10)
  267. 2520 DX = INT( RND * 9 + 10)
  268. 2530 CH = INT( RND * 9 + 10)
  269. 2540 LOCATE 12,29
  270. 2550 PRINT RIGHT$( STR$(ST),2)"  " RIGHT$( STR$(IN),2)"  " RIGHT$( STR$(WI),2)"  " RIGHT$( STR$(CO),2)"  " RIGHT$( STR$(DX),2)"  " RIGHT$( STR$(CH),2);
  271. 2560 GOSUB 9270
  272. 2570 IF X = 5 THEN LOCATE 15,11:PRINT "Press 0 for help when playing, and Q to quit. Now hit a key." : WHILE INKEY$ = "" : WEND  : GOSUB 2580  : LOGIN = 1  : GOTO 5720  ELSE IF X = 9 THEN 2480  ELSE 2560
  273. 2580 GOSUB 1970
  274. 2590 FOR I = 1 TO 5
  275. 2600 CRYPT# = FN ENCRYPT#( MID$(CODE$,I * 4 - 3,4))
  276. 2610 LSET CO$(I) = MKD$(CRYPT#)
  277. 2620 NEXT
  278. 2630 FOR I = 1 TO 5
  279. 2640 CRYPT# = FN ENCRYPT#( MID$(PASS$,I * 4 - 3,4))
  280. 2650 LSET PA$(I) = MKD$(CRYPT#)
  281. 2660 NEXT
  282. 2670 LSET DLVL$ = MKD$(MAXDLVL#)
  283. 2680 LSET LVL$ = MKD$(LVL#)
  284. 2690 LSET ST$ = MKI$(ST)
  285. 2700 LSET IN$ = MKI$(IN)
  286. 2710 LSET WI$ = MKI$(WI)
  287. 2720 LSET CO$ = MKI$(CO)
  288. 2730 LSET DX$ = MKI$(DX)
  289. 2740 LSET CH$ = MKI$(CH)
  290. 2750 LSET EXPR$ = MKD$(EXPR#)
  291. 2760 LSET PTS$ = MKD$(PTS#)
  292. 2770 LSET GOLD$ = MKD$(GOLD#)
  293. 2780 LSET WE$ = MKI$(WE)
  294. 2790 LSET SH$ = MKI$(SH)
  295. 2800 LSET AR$ = MKI$(AR)
  296. 2810 LSET CL$ = MKI$(CL)
  297. 2820 LSET HE$ = MKI$(HE)
  298. 2830 LSET BO$ = MKI$(BO)
  299. 2840 LSET MA$ = MKD$(MAXPTS#)
  300. 2850 LSET SP1$=MKI$(SP1)
  301. 2860 LSET SP2$=MKI$(SP2)
  302. 2870 LSET SP3$=MKI$(SP3)
  303. 2880 LSET SP4$=MKI$(SP4)
  304. 2890 PUT 5,UX
  305. 2900 CLOSE 5
  306. 2910 RETURN
  307. 2920 GOSUB 1970
  308. 2930 GET 5,UX
  309. 2940 MAXDLVL# = CVD(DLVL$)
  310. 2950 LVL# = CVD(LVL$)
  311. 2960 ST = CVI(ST$)
  312. 2970 IN = CVI(IN$)
  313. 2980 WI = CVI(WI$)
  314. 2990 CO = CVI(CO$)
  315. 3000 DX = CVI(DX$)
  316. 3010 CH = CVI(CH$)
  317. 3020 EXPR# = CVD(EXPR$)
  318. 3030 PTS# = CVD(PTS$)
  319. 3040 GOLD# = CVD(GOLD$)
  320. 3050 WE = CVI(WE$)
  321. 3060 SH = CVI(SH$)
  322. 3070 AR = CVI(AR$)
  323. 3080 CL = CVI(CL$)
  324. 3090 HE = CVI(HE$)
  325. 3100 BO = CVI(BO$)
  326. 3110 MAXPTS# = CVD(MA$)
  327. 3120 SP1=CVI(SP1$)
  328. 3130 SP2=CVI(SP2$)
  329. 3140 SP3=CVI(SP3$)
  330. 3150 SP4=CVI(SP4$)
  331. 3160 CLOSE 5
  332. 3170 RETURN
  333. 3180 TIMER ON
  334. 3185 FOR I = 1 TO H
  335. 3190 FOR J = 1 TO V
  336. 3200 W(I,J) = 0
  337. 3210 V(I,J) = 0
  338. 3220 NEXT
  339. 3230 NEXT
  340. 3240 Q = 0
  341. 3250 Z = 0
  342. 3260 X = INT( RND * H + 1)
  343. 3270 XX = X
  344. 3280 C = 1
  345. 3290 W(X,1) = C
  346. 3300 C = C + 1
  347. 3310 R = X
  348. 3320 S = 1
  349. 3330 GOTO 3440
  350. 3340 IF R < > H THEN 3420
  351. 3350 IF S < > V THEN 3390
  352. 3360 R = 1
  353. 3370 S = 1
  354. 3380 GOTO 3430
  355. 3390 R = 1
  356. 3400 S = S + 1
  357. 3410 GOTO 3430
  358. 3420 R = R + 1
  359. 3430 IF W(R,S) = 0 THEN 3340
  360. 3440 IF R - 1 = 0 THEN 3880
  361. 3450 IF W(R - 1,S) < > 0 THEN 3880
  362. 3460 IF S - 1 = 0 THEN 3660
  363. 3470 IF W(R,S - 1) < > 0 THEN 3660
  364. 3480 IF R = H THEN 3540
  365. 3490 IF W(R + 1,S) < > 0 THEN 3540
  366. 3500 X = INT( RND * 3 + 1)
  367. 3510 IF X = 1 THEN 4280
  368. 3520 IF X = 2 THEN 4350
  369. 3530 IF X = 3 THEN 4420
  370. 3540 IF S < > V THEN 3580
  371. 3550 IF Z = 1 THEN 3630
  372. 3560 Q = 1
  373. 3570 GOTO 3590
  374. 3580 IF W(R,S + 1) < > 0 THEN 3630
  375. 3590 X = INT( RND * 3 + 1)
  376. 3600 IF X = 1 THEN 4280
  377. 3610 IF X = 2 THEN 4350
  378. 3620 IF X = 3 THEN 4510
  379. 3630 X = INT( RND * 2 + 1)
  380. 3640 IF X = 1 THEN 4280
  381. 3650 IF X = 2 THEN 4350
  382. 3660 IF R = H THEN 3800
  383. 3670 IF W(R + 1,S) < > 0 THEN 3800
  384. 3680 IF S < > V THEN 3720
  385. 3690 IF Z = 1 THEN 3770
  386. 3700 Q = 1
  387. 3710 GOTO 3730
  388. 3720 IF W(R,S + 1) < > 0 THEN 3770
  389. 3730 X = INT( RND * 3 + 1)
  390. 3740 IF X = 1 THEN 4280
  391. 3750 IF X = 2 THEN 4420
  392. 3760 IF X = 3 THEN 4510
  393. 3770 X = INT( RND * 2 + 1)
  394. 3780 IF X = 1 THEN 4280
  395. 3790 IF X = 2 THEN 4420
  396. 3800 IF S < > V THEN 3840
  397. 3810 IF Z = 1 THEN 4280
  398. 3820 Q = 1
  399. 3830 GOTO 3850
  400. 3840 IF W(R,S + 1) < > 0 THEN 4280
  401. 3850 X = INT( RND * 2 + 1)
  402. 3860 IF X = 1 THEN 4280
  403. 3870 IF X = 2 THEN 4510
  404. 3880 IF S - 1 = 0 THEN 4120
  405. 3890 IF W(R,S - 1) < > 0 THEN 4120
  406. 3900 IF R = H THEN 4040
  407. 3910 IF W(R + 1,S) < > 0 THEN 4040
  408. 3920 IF S < > V THEN 3960
  409. 3930 IF Z = 1 THEN 4010
  410. 3940 Q = 1
  411. 3950 GOTO 3970
  412. 3960 IF W(R,S + 1) < > 0 THEN 4010
  413. 3970 X = INT( RND * 3 + 1)
  414. 3980 IF X = 1 THEN 4350
  415. 3990 IF X = 2 THEN 4420
  416. 4000 IF X = 3 THEN 4510
  417. 4010 X = INT( RND * 2 + 1)
  418. 4020 IF X = 1 THEN 4350
  419. 4030 IF X = 2 THEN 4420
  420. 4040 IF S < > V THEN 4080
  421. 4050 IF Z = 1 THEN 4350
  422. 4060 Q = 1
  423. 4070 GOTO 4090
  424. 4080 IF W(R,S + 1) < > 0 THEN 4350
  425. 4090 X = INT( RND * 2 + 1)
  426. 4100 IF X = 1 THEN 4350
  427. 4110 IF X = 2 THEN 4510
  428. 4120 IF R = H THEN 4220
  429. 4130 IF W(R + 1,S) < > 0 THEN 4220
  430. 4140 IF S < > V THEN 4180
  431. 4150 IF Z = 1 THEN 4420
  432. 4160 Q = 1
  433. 4170 GOTO 4360
  434. 4180 IF W(R,S + 1) < > 0 THEN 4420
  435. 4190 X = INT( RND * 2 + 1)
  436. 4200 IF X = 1 THEN 4420
  437. 4210 IF X = 2 THEN 4510
  438. 4220 IF S < > V THEN 4260
  439. 4230 IF Z = 1 THEN 3340
  440. 4240 Q = 1
  441. 4250 GOTO 4510
  442. 4260 IF W(R,S + 1) < > 0 THEN 3340
  443. 4270 GOTO 4510
  444. 4280 W(R - 1,S) = C
  445. 4290 C = C + 1
  446. 4300 V(R - 1,S) = 2
  447. 4310 R = R - 1
  448. 4320 IF C = H * V + 1 THEN 4710
  449. 4330 Q = 0
  450. 4340 GOTO 3440
  451. 4350 W(R,S - 1) = C
  452. 4360 C = C + 1
  453. 4370 V(R,S - 1) = 1
  454. 4380 S = S - 1
  455. 4390 IF C = H * V + 1 THEN 4710
  456. 4400 Q = 0
  457. 4410 GOTO 3440
  458. 4420 W(R + 1,S) = C
  459. 4430 C = C + 1
  460. 4440 IF V(R,S) = 0 THEN 4470
  461. 4450 V(R,S) = 3
  462. 4460 GOTO 4480
  463. 4470 V(R,S) = 2
  464. 4480 R = R + 1
  465. 4490 IF C = H * V + 1 THEN 4710
  466. 4500 GOTO 3880
  467. 4510 IF Q = 1 THEN 4610
  468. 4520 W(R,S + 1) = C
  469. 4530 C = C + 1
  470. 4540 IF V(R,S) = 0 THEN 4570
  471. 4550 V(R,S) = 3
  472. 4560 GOTO 4580
  473. 4570 V(R,S) = 1
  474. 4580 S = S + 1
  475. 4590 IF C = H * V + 1 THEN 4710
  476. 4600 GOTO 3440
  477. 4610 Z = 1
  478. 4620 IF V(R,S) = 0 THEN 4660
  479. 4630 V(R,S) = 3
  480. 4640 Q = 0
  481. 4650 GOTO 3340
  482. 4660 V(R,S) = 1
  483. 4670 Q = 0
  484. 4680 R = 1
  485. 4690 S = 1
  486. 4700 GOTO 3430
  487. 4710 CLS
  488. 4720 FOR I = 0 TO 24
  489. 4730 FOR J = 0 TO 77
  490. 4740 Z(I,J) = 32
  491. 4750 NEXT
  492. 4760 NEXT
  493. 4770 FOR J = 1 TO V
  494. 4780 Z(J * 2,1) = 1
  495. 4790 FOR I = 1 TO H
  496. 4800 IF V(I,J) < 2 THEN Z(J * 2,I * 3 - 1) = 32 : Z(J * 2,I * 3) = 32 : Z(J * 2,I * 3 + 1) = 1  ELSE Z(J * 2,I * 3 - 1) = 32 : Z(J * 2,I * 3) = 32 : Z(J * 2,I * 3 + 1) = 32
  497. 4810 NEXT
  498. 4820 FOR I = 1 TO H
  499. 4830 IF V(I,J) = 0 OR V(I,J) = 2 THEN Z(J * 2 + 1,I * 3 - 2) = 1 : Z(J * 2 + 1,I * 3 - 1) = 1 : Z(J * 2 + 1,I * 3) = 1  ELSE Z(J * 2 + 1,I * 3 - 2) = 1 : Z(J * 2 + 1,I * 3 - 1) = 32 : Z(J * 2 + 1,I * 3) = 32
  500. 4840 NEXT
  501. 4850 Z(J * 2 + 1,76) = 1
  502. 4860 NEXT
  503. 4870 Z(1,1) = 1
  504. 4880 FOR I = 1 TO H
  505. 4890 IF I = XX THEN Z(1,I * 3 - 1) = 32 : Z(1,I * 3) = 32 : Z(1,I * 3 + 1) = 1  ELSE Z(1,I * 3 - 1) = 1 : Z(1,I * 3) = 1 : Z(1,I * 3 + 1) = 1
  506. 4900 NEXT
  507. 4910 FOR I = 1 TO 23
  508. 4920 FOR J = 1 TO 76 STEP 1 - 2 * (I / 2 = INT(I / 2))
  509. 4930 IF Z(I,J) = 32 THEN 5150
  510. 4940 IF Z(I,J - 1) = 32 THEN X1 = 0  ELSE X1 = 1
  511. 4950 IF Z(I - 1,J) = 32 THEN X2 = 0  ELSE X2 = 1
  512. 4960 IF Z(I,J + 1) = 32 THEN X3 = 0  ELSE X3 = 1
  513. 4970 IF Z(I + 1,J) = 32 THEN X4 = 0  ELSE X4 = 1
  514. 4980 IF X1 AND X2 AND X3 AND X4 THEN X = 206  : GOTO 5140
  515. 4990 IF X1 AND X2 AND X3 THEN X = 202  : GOTO 5140
  516. 5000 IF X2 AND X3 AND X4 THEN X = 204  : GOTO 5140
  517. 5010 IF X3 AND X4 AND X1 THEN X = 203  : GOTO 5140
  518. 5020 IF X4 AND X1 AND X2 THEN X = 185  : GOTO 5140
  519. 5030 IF X1 AND X2 THEN X = 188  : GOTO 5140
  520. 5040 IF X2 AND X3 THEN X = 200  : GOTO 5140
  521. 5050 IF X3 AND X4 THEN X = 201  : GOTO 5140
  522. 5060 IF X4 AND X1 THEN X = 187  : GOTO 5140
  523. 5070 IF X1 AND X3 THEN X = 205  : GOTO 5140
  524. 5080 IF X2 AND X4 THEN X = 186  : GOTO 5140
  525. 5090 IF X1 THEN X = 181  : GOTO 5140
  526. 5100 IF X2 THEN X = 208  : GOTO 5140
  527. 5110 IF X3 THEN X = 198  : GOTO 5140
  528. 5120 IF X4 THEN X = 210  : GOTO 5140
  529. 5130 X = 219
  530. 5140 Z(I,J) = X
  531. 5150 NEXT
  532. 5160 NEXT
  533. 5170 FOR I = 2 TO 75
  534. 5180 IF Z(1,I) = 32 THEN J = I : GOTO 5200
  535. 5190 NEXT
  536. 5200 IF J > 2 THEN IF Z(2,J - 1) < > 32 THEN Z(1,J - 1) = 185  ELSE Z(1,J - 1) = 188  ELSE Z(1,1) = 186
  537. 5210 IF J < 74 THEN IF Z(2,J + 2) < > 32 THEN Z(1,J + 2) = 204  ELSE Z(1,J + 2) = 200  ELSE Z(1,76) = 186
  538. 5220 FOR I = 2 TO 75
  539. 5230 IF Z(23,I) = 32 THEN J = I : GOTO 5250
  540. 5240 NEXT
  541. 5250 IF J > 2 THEN IF Z(22,J - 1) < > 32 THEN Z(23,J - 1) = 185  ELSE Z(23,J - 1) = 187  ELSE Z(23,1) = 186
  542. 5260 IF J < 74 THEN IF Z(22,J + 2) < > 32 THEN Z(23,J + 2) = 204  ELSE Z(23,J + 2) = 201  ELSE Z(23,76) = 186
  543. 5270 NM = 0
  544. 5280 FOR I = 2 TO 22
  545. 5290 FOR J = 2 TO 75
  546. 5300 IF Z(I,J) = 32 AND Z(I + 1,J) = 32 AND Z(I,J + 1) < > 32 AND Z(I,J + 1) < > 35 AND Z(I - 1,J) < > 35 AND RND<.9 THEN Z(I,J) = 35 : NM = NM + 1
  547. 5310 IF Z(I,J) = 32 AND Z(I + 1,J) = 32 AND Z(I,J - 1) < > 32 AND Z(I,J - 1) < > 36 AND Z(I - 1,J) < > 36 AND RND<.9 THEN Z(I,J) = 36
  548. 5311 IF Z(I,J) = 32 AND Z(I + 1,J) = 32 AND Z(I - 1,J) = 32 AND Z(I,J + 1) = 32 AND Z(I,J - 1) = 32 THEN Z(I,J) = 126
  549. 5320 NEXT
  550. 5330 NEXT
  551. 5331 FOR I=1 TO INT(RND*10+5)
  552. 5332 M=INT(RND*20+2):N=INT(RND*73+2):IF Z(M,N)<>32 THEN 5332 ELSE Z(M,N)=94
  553. 5333 M=INT(RND*20+2):N=INT(RND*73+2):IF Z(M,N)=32 THEN Z(M,N)=111
  554. 5334 NEXT:TIMER OFF:CLS
  555. 5340 XCO = 1
  556. 5350 FOR I = 2 TO 75
  557. 5360 IF Z(1,I) = 32 THEN YCO = I : GOTO 5380
  558. 5370 NEXT
  559. 5380 LOCATE XCO,YCO
  560. 5390 PRINT "X ";
  561. 5400 GOSUB 6550:LL=2
  562. 5410 RETURN
  563. 5420 CLS
  564. 5430 LOCATE 10,20
  565. 5440 PRINT "You made it as far as level" STR$(MAXDLVL#)"!"
  566. 5450 LOCATE 11,20
  567. 5460 PRINT "Which level will you start at now?"
  568. 5470 I = 0
  569. 5480 X = 25
  570. 5490 L$ = ""
  571. 5500 LOCATE 13,X,1
  572. 5510 X$ = ""
  573. 5520 WHILE X$ = ""
  574. 5530 X$ = INKEY$
  575. 5540 WEND
  576. 5550 IF X$ = CHR$(13) THEN IF I > 0 THEN 5630  ELSE BEEP  : GOTO 5500
  577. 5560 IF X$ = CHR$(8) THEN IF I = 0 THEN BEEP  : GOTO 5500  ELSE X = X - 1  : LOCATE 13,X : PRINT " "; : L$ = LEFT$(L$, LEN(L$) - 1) : I = LEN(L$) : GOTO 5500
  578. 5570 IF X$ < "0" OR X$ > "9" OR LEN(L$) = 8 THEN BEEP  : GOTO 5500
  579. 5580 PRINT X$;
  580. 5590 L$ = L$ + X$
  581. 5600 X = X + 1
  582. 5610 I = LEN(L$)
  583. 5620 GOTO 5500
  584. 5630 LOCATE ,,0
  585. 5640 DLVL# = VAL(L$)
  586. 5650 CLOSE 1
  587. 5660 OPEN "R",1,"DUNGEON.DAT",2
  588. 5670 REC = LOF(1) / 2 
  589. 5680 REC = REC / 1750
  590. 5690 CLOSE 1
  591. 5700 IF REC = 0 THEN DLVL# = 1  : GOTO 5720
  592. 5710 IF DLVL# > REC OR DLVL#=0 THEN LOCATE 15,18  : PRINT "You have only"REC"levels at your disposal.." : LOCATE 13,25  : PRINT STRING$(8,32); : GOTO 5430  ELSE 6470
  593. 5720 GOSUB 3180
  594. 5730 IF PWL THEN RETURN
  595. 5740 X = 0
  596. 5750 X$ = INKEY$
  597. 5760 WHILE X$ = ""
  598. 5770 X$ = INKEY$
  599. 5780 WEND
  600. 5790 X = VAL(X$)
  601. 5800 IF X THEN 5890
  602. 5810 IF LEN(X$)<>2 THEN 6000
  603. 5820 SP=ASC(MID$(X$,2)):SPN=0
  604. 5830 IF SP>58 AND SP<69 THEN SPN=1:SP=SP-58
  605. 5840 IF SP>93 AND SP<104 THEN SPN=2:SP=SP-93
  606. 5850 IF SP>83 AND SP<94 THEN SPN=3:SP=SP-83
  607. 5860 IF SP>103 AND SP<114 THEN SPN=4:SP=SP-103
  608. 5870 ON SPN GOTO 10250,10470,10760,11290
  609. 5880 GOTO 5730
  610. 5890 IF MON THEN 5950
  611. 5900 IF X = 2 THEN GOSUB 6040
  612. 5901 IF X = 3 THEN GOSUB 5981:GOTO 5730
  613. 5910 IF X = 4 THEN GOSUB 6260
  614. 5920 IF X = 6 THEN GOSUB 6320
  615. 5930 IF X = 8 THEN GOSUB 6380
  616. 5940 GOTO 5730
  617. 5950 IF X = 1 THEN 7840
  618. 5951 IF X = 3 THEN GOSUB 5981:GOTO 5730
  619. 5960 IF X = 7 THEN 7540
  620. 5970 A$="Type 0 for help, or Q to quit..":GOSUB 9100
  621. 5980 GOTO 5730
  622. 5981 A$="Type in spell chant: ":GOSUB 9100
  623. 5982 I=0:X=22:SPELL$=""
  624. 5983 LOCATE 25,X,0
  625. 5984 X$ = ""
  626. 5985 WHILE X$ = ""
  627. 5986 X$ = INKEY$
  628. 5987 WEND
  629. 5988 IF X$ = CHR$(13) THEN 5997
  630. 5989 IF X$ = CHR$(8) THEN IF I = 0 THEN BEEP  : GOTO 5983  ELSE X = X - 1  : LOCATE 25,X,0 : PRINT " "; : SPELL$ = LEFT$(SPELL$, LEN(SPELL$) - 1) : I = LEN(SPELL$) : GOTO 5983
  631. 5990 IF (X$ > = "A" AND X$ < = "Z") OR (X$ > = "a" AND X$ < = "z") OR X$ = " " THEN 5991  ELSE 5983
  632. 5991 IF LEN(CODE$) = 55 THEN BEEP  : GOTO 5983
  633. 5992 IF X$>="A" AND X$<="Z" THEN X$=CHR$(ASC(X$)+32)
  634. 5993 SPELL$ = SPELL$ + X$:PRINT X$;
  635. 5994 I = LEN(SPELL$)
  636. 5995 X = X + 1
  637. 5996 GOTO 5983
  638. 5997 RESTORE 10241:GOSUB 9200:FOR I=1 TO 40:READ A$:IF SPELL$=A$ THEN 5999
  639. 5998 NEXT:A$="That spell chant does nothing!":GOSUB 9100:RETURN
  640. 5999 SPN=INT((I-1)/10)+1:SP=I-(SPN-1)*10:GOSUB 9200:GOSUB 9200:RETURN 5870
  641. 6000 IF X$ = "0" THEN GOSUB 9480 : GOTO 5730
  642. 6001 IF X$ = "+" AND LOGIN THEN GOSUB 9670 : GOTO 5730
  643. 6010 IF X$ = "." AND LOGIN THEN GOSUB 9080 : GOTO 5730
  644. 6011 IF X$ = "-" AND LOGIN THEN GOSUB 12760 : GOTO 5730
  645. 6020 IF X$ = "Q" OR X$ = "q" AND LOGIN THEN GOSUB 6730 : A$="Leaving Dungeon...":GOSUB 9100:GOSUB 9200:GOSUB 9200:GOSUB 2580 : GOTO 1070
  646. 6025 A$="Type 0 for help, or Q to quit..":GOSUB 9100
  647. 6030 GOTO 5730
  648. 6040 IF XCO+1>23 THEN RETURN 6390 ELSE 6200
  649. 6050 A$ = "You escaped the Dungeon!(hit a key)"
  650. 6060 GOSUB 9100
  651. 6070 WHILE INKEY$ = ""
  652. 6080 WEND
  653. 6090 GOSUB 2580
  654. 6100 GOTO 1070
  655. 6110 A$ = "You return to Dungeon level" + STR$(DLVL#) + "!(hit a key)"
  656. 6120 GOSUB 9100
  657. 6130 WHILE INKEY$ = ""
  658. 6140 WEND
  659. 6150 GOSUB 6970
  660. 6160 XCO = 1
  661. 6170 YCO = XX * 3 - 1
  662. 6180 GOSUB 6550
  663. 6190 GOTO 5730
  664. 6200 IF Z(XCO+1,YCO)<>32 AND PW=0 THEN RETURN
  665. 6210 IF PW AND XCO+1>22 THEN RETURN
  666. 6220 IF Z(XCO,YCO)=88 THEN Z(XCO,YCO)=32
  667. 6230 XCO=XCO+1
  668. 6240 IF Z(XCO,YCO)<>32 THEN GOSUB 6560 ELSE GOSUB 6550
  669. 6250 RETURN
  670. 6260 IF Z(XCO,YCO-1)<>32 AND PW=0 THEN RETURN
  671. 6270 IF PW AND YCO-1<2 THEN RETURN
  672. 6280 IF Z(XCO,YCO)=88 THEN Z(XCO,YCO)=32
  673. 6290 YCO=YCO-1
  674. 6300 IF Z(XCO,YCO)<>32 THEN GOSUB 6560 ELSE GOSUB 6550
  675. 6310 RETURN
  676. 6320 IF Z(XCO,YCO+1)<>32 AND PW=0 THEN RETURN
  677. 6330 IF PW AND YCO+1>75 THEN RETURN
  678. 6340 IF Z(XCO,YCO)=88 THEN Z(XCO,YCO)=32
  679. 6350 YCO=YCO+1
  680. 6360 IF Z(XCO,YCO)<>32 THEN GOSUB 6560 ELSE GOSUB 6550
  681. 6370 RETURN
  682. 6380 IF XCO-1>0 THEN 6510 ELSE DLVL#=DLVL#-1:IF DLVL#<1 THEN RETURN 6050 ELSE RETURN 6110
  683. 6390 GOSUB 6730
  684. 6400 DLVL# = DLVL# + 1
  685. 6410 IF DLVL# > MAXDLVL# THEN MAXDLVL# = DLVL#
  686. 6420 A$ = "You made it to Dungeon level" + STR$(DLVL#) + "!(hit a key)"
  687. 6430 GOSUB 9100
  688. 6440 WHILE INKEY$ = ""
  689. 6450 WEND
  690. 6460 IF DLVL# * 208 > REC THEN 5720
  691. 6470 GOSUB 6970
  692. 6480 GOSUB 5340
  693. 6490 GOSUB 9140
  694. 6500 GOTO 5730
  695. 6510 IF Z(XCO-1,YCO)<>32 AND PW=0 THEN RETURN
  696. 6520 IF PW AND XCO-1<2 THEN RETURN
  697. 6530 IF Z(XCO,YCO)=88 THEN Z(XCO,YCO)=32
  698. 6540 XCO=XCO-1:IF Z(XCO,YCO)<>32 THEN 6560
  699. 6550 Z(XCO,YCO)=88
  700. 6560 LLC=LLC-1:IF LLC<0 THEN LLC=0:LL=2
  701. 6570 L=LL:IF PW THEN SLP=1:SLPC=1
  702. 6580 PWC=PWC-1:IF PWC<0 THEN PW=0:SLP=0:SLPC=0
  703. 6590 GOSUB 6690
  704. 6600 GOSUB 7220:GDC=GDC-1:IF GDC<=0 THEN GDC=0:GD=0 ELSE GOSUB 11440
  705. 6610 SP1C=SP1C+1:IF SP1C>1 THEN SP1C=0:SP1=SP1+1:IF SP1>LVL#*10 THEN SP1=LVL#*10
  706. 6620 SP2C=SP2C+1:IF SP2C>2 THEN SP2C=0:SP2=SP2+1:IF SP2>LVL#*10 THEN SP2=LVL#*10
  707. 6630 SP3C=SP3C+1:IF SP3C>3 THEN SP3C=0:SP3=SP3+1:IF SP3>LVL#*10 THEN SP3=LVL#*10
  708. 6640 SP4C=SP4C+1:IF SP4C>4 THEN SP4C=0:SP4=SP4+1:IF SP4>LVL#*10 THEN SP4=LVL#*10
  709. 6650 PTS#=PTS#+CO
  710. 6660 IF PTS# > MAXPTS# THEN PTS# = MAXPTS#
  711. 6670 GOSUB 9140
  712. 6680 RETURN
  713. 6690 FOR I = XCO - L TO XCO + L
  714. 6700 FOR J = YCO - L TO YCO + L
  715. 6710 IF I > 0 AND J > 0 AND I < 24 AND J < 77 THEN IF Z(I,J)<>94 THEN LOCATE I,J : PRINT CHR$(Z(I,J));
  716. 6720 NEXT:NEXT:RETURN
  717. 6730 DEF SEG = &HB800
  718. 6740 FILE$ = RIGHT$( STR$(DLVL# + 100000000#),8) + ".LVL"
  719. 6750 IF SCREEN(XCO,YCO)=88 THEN LOCATE XCO,YCO:PRINT " ";:Z(XCO,YCO)=32
  720. 6760 LOCATE 25,1
  721. 6770 PRINT STRING$(79,32);
  722. 6780 LOCATE 24,1
  723. 6790 PRINT STRING$(79,32);
  724. 6800 BSAVE FILE$,0,&H1000
  725. 6810 CLOSE 1
  726. 6820 OPEN "R",1,"DUNGEON.DAT",2
  727. 6830 FIELD 1,2 AS DAT$
  728. 6840 REC = LOF(1)
  729. 6850 LSET DAT$ = MKI$(XX)
  730. 6860 PUT 1, (DLVL# - 1) * 1750 + 1
  731. 6870 LSET DAT$ = MKI$(NM)
  732. 6880 PUT 1, (DLVL# - 1) * 1750 + 2
  733. 6890 FOR I = 1 TO 23
  734. 6900 FOR J = 1 TO 76
  735. 6910 LSET DAT$ = MKI$(Z(I,J))
  736. 6920 PUT 1, (DLVL# - 1) * 1750 + (I - 1) * 76 + J + 2
  737. 6930 NEXT
  738. 6940 NEXT
  739. 6950 CLOSE 1
  740. 6960 RETURN
  741. 6970 DEF SEG = &HB800
  742. 6980 FILE$ = RIGHT$( STR$(DLVL# + 100000000#),8) + ".LVL"
  743. 6990 CLOSE 1
  744. 7000 OPEN "R",1,FILE$,1
  745. 7010 IF LOF(1) = 0 THEN CLOSE 1  : RETURN 5720
  746. 7020 CLOSE 1
  747. 7030 BLOAD FILE$,0
  748. 7040 OPEN "R",1,"DUNGEON.DAT",2
  749. 7050 FIELD 1,2 AS DAT$
  750. 7060 GET 1, (DLVL# - 1) * 1750 + 1
  751. 7070 XX = CVI(DAT$)
  752. 7080 GET 1, (DLVL# - 1) * 1750 + 2
  753. 7090 NM = CVI(DAT$)
  754. 7100 FOR I = 1 TO 23
  755. 7110 FOR J = 1 TO 76
  756. 7120 GET 1, (DLVL# - 1) * 1750 + (I - 1) * 76 + J + 2
  757. 7130 Z(I,J) = CVI(DAT$)
  758. 7140 NEXT
  759. 7150 NEXT
  760. 7160 RETURN
  761. 7170 SCREEN 0,1,0,1
  762. 7180 WHILE INKEY$ = ""
  763. 7190 WEND
  764. 7200 SCREEN 0,1,0,0
  765. 7210 RETURN
  766. 7220 IF Z(XCO-1,YCO)=32 THEN 7260
  767. 7230 IF Z(XCO-1,YCO)=94 THEN LOCATE XCO-1,YCO:PRINT"^";:MHP#=INT(RND*(DLVL#*10)+1):A$="You triggered a trap! ":GOSUB 8040:GOSUB 9200:GOTO 7240
  768. 7231 IF Z(XCO-1,YCO)=111 THEN LOCATE XCO-1,YCO:PRINT"o";:MHP#=INT(RND*(DLVL#*10)+1):A$="You fell in a pit! ":GOSUB 8040:GOSUB 9200
  769. 7240 IF Z(XCO-1,YCO)=36 THEN GOSUB 7320:LOCATE XCO-1,YCO:PRINT" ";:Z(XCO-1,YCO)=32
  770. 7250 IF Z(XCO-1,YCO)=126 THEN GOSUB 7451:LOCATE XCO-1,YCO:PRINT" ";:Z(XCO-1,YCO)=32
  771. 7260 IF Z(XCO+1,YCO)=32 THEN 7283
  772. 7271 IF Z(XCO+1,YCO)=94 THEN LOCATE XCO+1,YCO:PRINT"^";:MHP#=INT(RND*(DLVL#*10)+1):A$="You triggered a trap! ":GOSUB 8040:GOSUB 9200:GOTO 7273
  773. 7272 IF Z(XCO+1,YCO)=111 THEN LOCATE XCO+1,YCO:PRINT"o";:MHP#=INT(RND*(DLVL#*10)+1):A$="You fell in a pit! ":GOSUB 8040:GOSUB 9200
  774. 7273 IF Z(XCO+1,YCO)=36 THEN GOSUB 7320:LOCATE XCO+1,YCO:PRINT" ";:Z(XCO+1,YCO)=32
  775. 7280 IF Z(XCO+1,YCO)=126 THEN GOSUB 7451:LOCATE XCO+1,YCO:PRINT" ";:Z(XCO+1,YCO)=32
  776. 7283 IF Z(XCO,YCO-1)=32 THEN 7288
  777. 7284 IF Z(XCO,YCO-1)=94 THEN LOCATE XCO,YCO-1:PRINT"^";:MHP#=INT(RND*(DLVL#*10)+1):A$="You triggered a trap! ":GOSUB 8040:GOSUB 9200:GOTO 7286
  778. 7285 IF Z(XCO,YCO-1)=111 THEN LOCATE XCO,YCO-1:PRINT"o";:MHP#=INT(RND*(DLVL#*10)+1):A$="You fell in a pit! ":GOSUB 8040:GOSUB 9200
  779. 7286 IF Z(XCO,YCO-1)=36 THEN GOSUB 7320:LOCATE XCO,YCO-1:PRINT" ";:Z(XCO,YCO-1)=32
  780. 7287 IF Z(XCO,YCO-1)=126 THEN GOSUB 7451:LOCATE XCO,YCO-1:PRINT" ";:Z(XCO,YCO-1)=32
  781. 7288 IF Z(XCO,YCO+1)=32 THEN 7293
  782. 7289 IF Z(XCO,YCO+1)=94 THEN LOCATE XCO,YCO+1:PRINT"^";:MHP#=INT(RND*(DLVL#*10)+1):A$="You triggered a trap! ":GOSUB 8040:GOSUB 9200:GOTO 7291
  783. 7290 IF Z(XCO,YCO+1)=111 THEN LOCATE XCO,YCO+1:PRINT"o";:MHP#=INT(RND*(DLVL#*10)+1):A$="You fell in a pit! ":GOSUB 8040:GOSUB 9200
  784. 7291 IF Z(XCO,YCO+1)=36 THEN GOSUB 7320:LOCATE XCO,YCO+1:PRINT" ";:Z(XCO,YCO+1)=32
  785. 7292 IF Z(XCO,YCO+1)=126 THEN GOSUB 7451:LOCATE XCO,YCO+1:PRINT" ";:Z(XCO,YCO+1)=32
  786. 7293 IF Z(XCO,YCO+1)=35 THEN MXCO=XCO:MYCO=YCO+1:GOTO 7460
  787. 7294 IF Z(XCO-1,YCO)=35 THEN MXCO=XCO-1:MYCO=YCO:GOTO 7460
  788. 7295 IF Z(XCO+1,YCO)=35 THEN MXCO=XCO+1:MYCO=YCO:GOTO 7460
  789. 7296 IF Z(XCO,YCO-1)=35 THEN MXCO=XCO:MYCO=YCO-1:GOTO 7460
  790. 7300 MON=0:STPC=0:STP=0:SLPC=0:SLP=0:SHP=0:SHPC=0:MHPM=0:MHPC=0:IF PW THEN SLP=1:SLPC=1
  791. 7310 RETURN
  792. 7320 RAN! = RND
  793. 7330 BONUS = 1
  794. 7340 IF RAN! > .75 THEN BONUS = BONUS + 1
  795. 7350 IF RAN! > .85 THEN BONUS = BONUS + 1
  796. 7360 IF BONUS = 1 THEN B$ = "silver"
  797. 7370 IF BONUS = 2 THEN B$ = "gold"
  798. 7380 IF BONUS = 3 THEN B$ = "platinum"
  799. 7390 A$ = "You find some " + B$ + "!(cr to take or 9 to ignore)"
  800. 7400 GOSUB 9100
  801. 7410 GOSUB 9270
  802. 7420 IF X = 5 THEN 7430  ELSE IF X = 9 THEN RETURN  ELSE 7410
  803. 7430 GOLD# = GOLD# + INT(( RND * DLVL# + RND * LVL# + 10) * BONUS * 10)
  804. 7440 GOSUB 9140
  805. 7450 RETURN
  806. 7451 A$ = "You find a scroll!(cr to take or 9 to ignore)"
  807. 7452 GOSUB 9100
  808. 7453 GOSUB 9270
  809. 7454 IF X = 5 THEN 7455  ELSE IF X = 9 THEN RETURN  ELSE 7453
  810. 7455 RAND=INT(RND*40+1)
  811. 7456 RESTORE 10241:SPELLS(RAND)=1
  812. 7457 FOR I=1 TO RAND
  813. 7458 READ A$:NEXT
  814. 7459 A$="The scroll reads '"+A$+"'":GOSUB 9100:GOSUB 9200:GOSUB 9200:RETURN
  815. 7460 MON$ = MONSTERS$( INT( RND * 53 + 1))
  816. 7470 MLVL# = INT( RND * DLVL# + DLVL# / 2 + 1)
  817. 7480 A$ = "You encounter a level" + STR$(MLVL#) + " " + MON$ + "!(hit 1 to attack or 7 to evade)"
  818. 7490 GOSUB 9100
  819. 7500 HP# = INT(( RND * DLVL# * 2 + 1) * MLVL# ^ 2 / 2 + DLVL# * 2 + RND * MLVL# * 50)
  820. 7510 EX# = INT(HP# / MLVL#) * INT(DLVL# / 2 + 1) + INT( RND * HP#)
  821. 7520 MON = 1
  822. 7530 RETURN
  823. 7540 IF MON = 0 THEN 5730
  824. 7550 XO = 0
  825. 7560 YO = 0
  826. 7570 MON = 0
  827. 7580 STPC=0:STP=0:SLPC=0:SLP=0:SHP=0:SHPC=0:MHPM=0:MHPC=0
  828. 7590 IF RND > .5 THEN 7620
  829. 7600 GOSUB 7800
  830. 7610 IF XO THEN 7730  ELSE GOSUB 7810 : IF XO THEN 7730  ELSE 7640
  831. 7620 GOSUB 7810
  832. 7630 IF XO THEN 7730  ELSE GOSUB 7800 : IF XO THEN 7730
  833. 7640 IF RND > .5 THEN 7670
  834. 7650 GOSUB 7820
  835. 7660 IF YO THEN 7730  ELSE GOSUB 7830 : IF YO THEN 7730  ELSE 7690
  836. 7670 GOSUB 7830
  837. 7680 IF YO THEN 7730  ELSE GOSUB 7820 : IF YO THEN 7730
  838. 7690 LOCATE MXCO,MYCO
  839. 7700 PRINT " ";
  840. 7710 Z(MXCO,MYCO) = 32
  841. 7720 GOTO 5730
  842. 7730 IF Z(XCO,YCO)=88 THEN Z(XCO,YCO) = 32
  843. 7740 IF XCO+XO<1 THEN 6390
  844. 7750 IF XCO+XO>23 THEN XCO=23:GOSUB 6040
  845. 7760 XCO = XCO + XO
  846. 7770 YCO = YCO + YO
  847. 7780 GOSUB 6550
  848. 7790 GOTO 5730
  849. 7800 IF Z(XCO - 1,YCO) = 32 THEN XO = - 1  : RETURN  ELSE XO = 0 : RETURN
  850. 7810 IF Z(XCO + 1,YCO) = 32 THEN XO = 1  : RETURN  ELSE XO = 0 : RETURN
  851. 7820 IF Z(XCO,YCO - 1) = 32 THEN YO = - 1  : RETURN  ELSE YO = 0 : RETURN
  852. 7830 IF Z(XCO,YCO + 1) = 32 THEN YO = 1  : RETURN  ELSE YO = 0 : RETURN
  853. 7840 IF MON = 0 THEN 5730
  854. 7850 IF INT( RND * (20 + MLVL#)) > DX + BO THEN  : A$ = "You missed! " : GOTO 7970
  855. 7860 RAN! = RND
  856. 7870 BONUS = 1
  857. 7880 IF RAN! > .86 THEN BONUS = BONUS + 1
  858. 7890 IF RAN! > .91 THEN BONUS = BONUS + 1
  859. 7900 IF RAN! > .96 THEN BONUS = BONUS + 1
  860. 7910 HITS# = INT( RND * (ST+STP) + LVL# / 2) * BONUS + WE + DLVL#
  861. 7920 STPC=STPC-1:IF STPC<0 THEN STPC=0:STP=0
  862. 7930 IF HITS# < = 0 THEN A$ = "You missed! " : GOTO 7970
  863. 7940 A$ = "You hit the " + MON$ + " for" + STR$(HITS#) + " hits! "
  864. 7950 HP# = HP# - HITS#
  865. 7960 IF HP# < 0 THEN 8170
  866. 7970 MHP# = INT( RND * (HP# / (SH + AR + HE + CL + SHP + 1)) + MLVL#)-MHPM
  867. 7980 SHPC=SHPC-1:IF SHPC<0 THEN SHPC=0:SHP=1
  868. 7990 MHPMC=MHPMC-1
  869. 8000 IF SLP=0 THEN 8030
  870. 8010 A$=A$+"It's helpless!":GOSUB 9100:SLPC=SLPC-1:IF SLPC<0 THEN SLPC=0:SLP=0
  871. 8020 GOTO 5730
  872. 8030 IF INT( RND * (25 + MLVL#)) < (DX + BO) / 2 OR MHP# < = 0 THEN A$ = A$ + "It missed!" : GOSUB 9100  : GOTO 5730
  873. 8035 GOSUB 8040:GOTO 5730
  874. 8040 A$ = A$ + "It hit you for" + STR$(MHP#) + " hits!"
  875. 8050 PTS# = PTS# - MHP#
  876. 8060 IF PTS# > 0 THEN 8140
  877. 8070 A$ = A$ + " You died!"
  878. 8080 MAXPTS# = MAXPTS# - CO
  879. 8090 IF MAXPTS# < 15 THEN MAXPTS# = 15
  880. 8100 PTS# = MAXPTS#
  881. 8110 LVL# = LVL# - 1:SP1=LVL#*10:SP2=SP1:SP3=SP1:SP4=SP1
  882. 8120 EXPR# = 2 ^ (LVL# + 5)
  883. 8130 IF LVL# < 1 THEN LVL# = 1  : PTS# = 15  : MAXPTS# = 15
  884. 8140 GOSUB 9100
  885. 8150 GOSUB 9140
  886. 8160 RETURN
  887. 8170 NM = NM - 1
  888. 8180 GOSUB 8980
  889. 8190 MON = 0
  890. 8200 STPC=0:STP=0:SLPC=0:SLP=0:SHP=0:SHPC=0:MHPM=0:MHPC=0
  891. 8210 Z(MXCO,MYCO) = 32
  892. 8220 LOCATE MXCO,MYCO
  893. 8230 PRINT "$";
  894. 8240 RAN! = RND
  895. 8250 BONUS = 1
  896. 8260 IF RAN! > .75 THEN BONUS = BONUS + 1
  897. 8270 IF RAN! > .85 THEN BONUS = BONUS + 1
  898. 8280 IF BONUS = 1 THEN B$ = "silver"
  899. 8290 IF BONUS = 2 THEN B$ = "gold"
  900. 8300 IF BONUS = 3 THEN B$ = "platinum"
  901. 8310 A$ = "You killed the " + MON$ + "! On it is some " + B$ + "!(cr to take or 9 to ignore)"
  902. 8320 GOSUB 9100
  903. 8330 GOSUB 9270
  904. 8340 IF X = 5 THEN 8350  ELSE IF X = 9 THEN 8370  ELSE 8330
  905. 8350 GOLD# = GOLD# + INT(( RND * HP# + RND * EX# + 10) * BONUS * 10)
  906. 8360 GOSUB 9140
  907. 8370 LOCATE MXCO,MYCO
  908. 8380 IF RND > .5 THEN PRINT " "; : GOSUB 7220  : GOTO 8900
  909. 8390 PRINT "*";
  910. 8400 IF RND > .6 THEN A$ = "jewels" : BONUS = 2  ELSE A$ = "gems" : BONUS = 1
  911. 8410 A$ = "You find some " + A$ + "!(cr to take or 9 to ignore)"
  912. 8420 GOSUB 9100
  913. 8430 GOSUB 9270
  914. 8440 IF X = 5 THEN 8450  ELSE IF X = 9 THEN 8470  ELSE 8430
  915. 8450 GOLD# = GOLD# + INT(( RND * HP# + RND * EX# + 10) * BONUS)
  916. 8460 GOSUB 9140
  917. 8470 LOCATE MXCO,MYCO
  918. 8480 IF NM = 0 THEN 8500
  919. 8490 IF RND < .75 THEN PRINT " "; : GOSUB 7220  : GOTO 8900
  920. 8500 PRINT CHR$(254);
  921. 8510 A$ = "You find a chest!(cr to open or 9 to ignore)"
  922. 8520 GOSUB 9100
  923. 8530 GOSUB 9270
  924. 8540 IF X = 5 THEN 8600  ELSE IF X = 9 THEN 8860  ELSE 8530
  925. 8550 LOCATE MXCO,MYCO
  926. 8560 PRINT " ";
  927. 8570 Z(MXCO,MYCO) = 32
  928. 8580 GOSUB 7220
  929. 8590 GOTO 8900
  930. 8600 NUMBER = INT( RND * 4 + 1)
  931. 8610 FOR I = 1 TO NUMBER
  932. 8620 CHOICE = INT( RND * 6 + 1)
  933. 8630 IF CHOICE = 1 THEN B$ = "a weapon"
  934. 8640 IF CHOICE = 2 THEN B$ = "a shield"
  935. 8650 IF CHOICE = 3 THEN B$ = "some armor"
  936. 8660 IF CHOICE = 4 THEN B$ = "a cloak"
  937. 8670 IF CHOICE = 5 THEN B$ = "a helmet"
  938. 8680 IF CHOICE = 6 THEN B$ = "some boots"
  939. 8690 A$ = "In it you find " + B$ + "!(cr to take or 9 to ignore)"
  940. 8700 GOSUB 9100
  941. 8710 GOSUB 9270
  942. 8720 IF X = 5 THEN 8730  ELSE IF X = 9 THEN 8850  ELSE 8710
  943. 8730 BONUS = INT( RND * DLVL# * 2 + 1)
  944. 8740 IF BONUS > 99 THEN BONUS = 99
  945. 8750 IF CHOICE = 1 THEN IF BONUS > WE THEN A = 0  : WE = BONUS ELSE A = 1  : MAX = WE
  946. 8760 IF CHOICE = 2 THEN IF BONUS > SH THEN A = 0  : SH = BONUS ELSE A = 1  : MAX = SH
  947. 8770 IF CHOICE = 3 THEN IF BONUS > AR THEN A = 0  : AR = BONUS ELSE A = 1  : MAX = AR
  948. 8780 IF CHOICE = 4 THEN IF BONUS > CL THEN A = 0  : CL = BONUS ELSE A = 1  : MAX = CL
  949. 8790 IF CHOICE = 5 THEN IF BONUS > HE THEN A = 0  : HE = BONUS ELSE A = 1  : MAX = HE
  950. 8800 IF CHOICE = 6 THEN IF BONUS > BO THEN A = 0  : BO = BONUS ELSE A = 1  : MAX = BO
  951. 8810 IF A THEN A$ = "You already have " + B$ + "(+" + MID$( STR$(MAX),2) + ")!" : GOSUB 9100  : GOSUB 9200  : GOTO 8850
  952. 8820 A$ = "You now have " + B$ + "(+" + MID$( STR$(BONUS),2) + ")!"
  953. 8830 GOSUB 9100
  954. 8840 GOSUB 9200
  955. 8850 NEXT
  956. 8860 LOCATE MXCO,MYCO
  957. 8870 PRINT " ";
  958. 8880 Z(MXCO,MYCO) = 32
  959. 8890 GOSUB 7220
  960. 8900 IF NM THEN 5730
  961. 8910 EX# = INT(( RND * DLVL# * 2 + 1) * LVL# ^ 2 / 2 + DLVL# * 2 + RND * LVL# * 50)
  962. 8920 A$ = "You killed all the monsters on this level! You gain" + STR$(EX#) + " exp!"
  963. 8930 GOSUB 9100
  964. 8940 GOSUB 8980
  965. 8950 GOSUB 9200
  966. 8960 GOSUB 9200
  967. 8970 GOTO 8220
  968. 8980 EXPR# = EXPR# + EX#
  969. 8990 GOSUB 9140
  970. 9000 IF LVL#>100 THEN RETURN
  971. 9010 IF EXPR# < 2 ^ (LVL# + 6) OR 2 ^ LVL# > GOLD# THEN RETURN
  972. 9020 MAXPTS# = MAXPTS# + CO
  973. 9030 PTS# = MAXPTS#
  974. 9040 LVL# = LVL# + 1:SP1=LVL#*10:SP2=SP1:SP3=SP1:SP4=SP1
  975. 9050 GOSUB 9140
  976. 9060 RETURN
  977. 9070 GOTO 8550
  978. 9080 A$="STR"+STR$(ST)+" INT"+STR$(IN)+" WIS"+STR$(WI)+" CON"+STR$(CO)+" DEX"+STR$(DX)+" CHA"+STR$(CH)
  979. 9090 A$=A$+" WE"+STR$(WE)+" SH"+STR$(SH)+" AR"+STR$(AR)+" CL"+STR$(CL)+" HE"+STR$(HE)+" BO"+STR$(BO)
  980. 9100 LOCATE 25,1
  981. 9110 PRINT A$+STRING$(79-LEN(A$),32);
  982. 9120 A$=""
  983. 9130 RETURN
  984. 9140 A$="DLVL"+STR$(DLVL#)+" LVL"+STR$(LVL#)+" HP"+STR$(PTS#)+" EXP"+STR$(EXPR#)+" GOLD"+STR$(GOLD#)+" NM"+STR$(NM)
  985. 9150 B$=" SP"+STR$(SP1)+" "+STR$(SP2)+" "+STR$(SP3)+" "+STR$(SP4)
  986. 9160 IF LEN(A$+B$)<79 THEN A$=A$+B$
  987. 9170 LOCATE 24,1
  988. 9180 GOSUB 9110
  989. 9190 RETURN
  990. 9200 TIM! = TIMER + .8
  991. 9210 WHILE TIMER < TIM!
  992. 9220 DU$ = INKEY$
  993. 9230 WEND
  994. 9240 RETURN
  995. 9250 SOUND 3850,1:DEF SEG=0:POKE &H417,32
  996. 9260 RETURN
  997. 9270 X = 0
  998. 9280 X$ = INKEY$
  999. 9290 WHILE X$ = ""
  1000. 9300 X$ = INKEY$
  1001. 9310 WEND
  1002. 9320 X = VAL(X$)
  1003. 9330 IF X THEN RETURN
  1004. 9340 IF X$ = "0" THEN GOSUB 9480 : GOTO 9270
  1005. 9350 IF X$ = "+" AND LOGIN THEN GOSUB 9670 : GOTO 9270
  1006. 9360 IF X$ = "." AND LOGIN THEN GOSUB 9080 : GOTO 9270
  1007. 9365 IF X$ = "-" AND LOGIN THEN GOSUB 12760 : GOTO 5730
  1008. 9370 IF X$ = CHR$(13) THEN X = 5 : RETURN
  1009. 9380 IF X$ = "Q" OR X$ = "q" AND LOGIN THEN GOSUB 6730 : A$="Leaving Dungeon...":GOSUB 9100:GOSUB 9200 : GOSUB 9200 : GOSUB 2580 : RETURN 1070
  1010. 9390 GOTO 9270
  1011. 9480 SCREEN 0,1,1,1
  1012. 9490 X=0
  1013. 9500 X$=INKEY$
  1014. 9510 WHILE X$=""
  1015. 9520 X$=INKEY$
  1016. 9530 WEND
  1017. 9540 X=VAL(X$)
  1018. 9550 IF X THEN SCREEN 0,1,3,1:CLS:ON X GOSUB 12370,12410,12450,12480,12520,12560,12600,12630,12660:GOTO 9480
  1019. 9560 IF X$="+" THEN SCREEN 0,1,3,1:CLS:GOSUB 12310:GOTO 9480
  1020. 9570 IF X$="." THEN SCREEN 0,1,3,1:CLS:GOSUB 12690:GOTO 9480
  1021. 9571 IF X$="-" THEN SCREEN 0,1,3,1:CLS:GOSUB 12820:GOTO 9480
  1022. 9572 IF X$="X" OR X$="x" THEN SCREEN 0,1,3,1:CLS:GOSUB 12850:GOTO 9480
  1023. 9573 IF X$="#" THEN SCREEN 0,1,3,1:CLS:GOSUB 12910:GOTO 9480
  1024. 9574 IF X$="~" THEN SCREEN 0,1,3,1:CLS:GOSUB 12950:GOTO 9480
  1025. 9575 IF X$="$" THEN SCREEN 0,1,3,1:CLS:GOSUB 12980:GOTO 9480
  1026. 9576 IF X$="^" THEN SCREEN 0,1,3,1:CLS:GOSUB 13030:GOTO 9480
  1027. 9577 IF X$="o" OR X$="O" THEN SCREEN 0,1,3,1:CLS:GOSUB 13060:GOTO 9480
  1028. 9578 IF X$=CHR$(254) THEN SCREEN 0,1,3,1:CLS:GOSUB 13010:GOTO 9480
  1029. 9580 IF LEN(X$)<>2 THEN 9650
  1030. 9590 SP=ASC(MID$(X$,2)):SPN=0
  1031. 9600 IF SP>58 AND SP<69 THEN SPN=1:SP=SP-58
  1032. 9610 IF SP>93 AND SP<104 THEN SPN=2:SP=SP-93
  1033. 9620 IF SP>83 AND SP<94 THEN SPN=3:SP=SP-83
  1034. 9630 IF SP>103 AND SP<114 THEN SPN=4:SP=SP-103
  1035. 9640 IF SPN THEN SCREEN 0,1,3,1:CLS:ON SPN GOSUB 11650,11930,12190,12229:GOTO 9480
  1036. 9650 IF X$=" " THEN SCREEN 0,1,0,0:RETURN ELSE 9490
  1037. 9670 SCREEN 0,1,2,2
  1038. 9680 LOCATE 24,1
  1039. 9690 PRINT STRING$(79,32);
  1040. 9691 LOCATE 24,1
  1041. 9692 PRINT STRING$(79,32);
  1042. 9700 LOCATE 13,54
  1043. 9710 PRINT AR+SH+CL+HE"   "
  1044. 9720 LOCATE 14,49
  1045. 9730 PRINT WE" "
  1046. 9740 FOR I = 20 TO 22
  1047. 9750 LOCATE I,5
  1048. 9760 PRINT STRING$(74,32);
  1049. 9770 NEXT
  1050. 9780 MIN.MLVL = 0
  1051. 9790 MAX.MLVL = 0
  1052. 9800 TOT.MLVL = 0
  1053. 9810 MIN.HP = 0
  1054. 9820 MAX.HP = 0
  1055. 9830 TOT.HP# = 0
  1056. 9840 MIN.EX = 0
  1057. 9850 MAX.EX = 0
  1058. 9860 TOT.EX# = 0
  1059. 9870 MIN.HITS = 0
  1060. 9880 MAX.HITS = 0
  1061. 9890 TOT.HITS# = 0
  1062. 9900 FOR I = 1 TO 100
  1063. 9910 MMLVL = INT( RND * DLVL# + DLVL# / 2 + 1)
  1064. 9920 IF MIN.MLVL = 0 THEN MIN.MLVL = MMLVL
  1065. 9930 IF MMLVL < MIN.MLVL THEN MIN.MLVL = MMLVL
  1066. 9940 IF MMLVL > MAX.MLVL THEN MAX.MLVL = MMLVL
  1067. 9950 TOT.MLVL = TOT.MLVL + MMLVL
  1068. 9960 MHP = INT(( RND * DLVL# * 2 + 1) * MMLVL ^ 2 / 2 + DLVL# * 2 + RND * MMLVL * 50)
  1069. 9970 IF MIN.HP = 0 THEN MIN.HP = MHP
  1070. 9980 IF MHP < MIN.HP THEN MIN.HP = MHP
  1071. 9990 IF MHP > MAX.HP THEN MAX.HP = MHP
  1072. 10000 TOT.HP# = TOT.HP# + MHP
  1073. 10010 MEX = INT(MHP / MMLVL) * INT(DLVL# / 2 + 1) + INT( RND * MHP)
  1074. 10020 IF MIN.EX = 0 THEN MIN.EX = MEX
  1075. 10030 IF MEX < MIN.EX THEN MIN.EX = MEX
  1076. 10040 IF MEX > MAX.EX THEN MAX.EX = MEX
  1077. 10050 TOT.EX# = TOT.EX# + MEX
  1078. 10060 MHITS = INT( RND * MHP / (SH + AR + HE + CL + 1) + MMLVL)
  1079. 10070 IF MIN.HITS = 0 THEN MIN.HITS = MHITS
  1080. 10080 IF MHITS < MIN.HITS THEN MIN.HITS = MHITS
  1081. 10090 IF MHITS > MAX.HITS THEN MAX.HITS = MHITS
  1082. 10100 TOT.HITS# = TOT.HITS# + MHITS
  1083. 10110 NEXT
  1084. 10120 LOCATE 20,1
  1085. 10130 PRINT "min.",MIN.MLVL,MIN.HP,MIN.EX,MIN.HITS
  1086. 10140 LOCATE 21,1
  1087. 10150 PRINT "max.",MAX.MLVL,MAX.HP,MAX.EX,MAX.HITS
  1088. 10160 LOCATE 22,1
  1089. 10170 PRINT "avg.", INT(TOT.MLVL / 500+.5), INT(TOT.HP# / 500+.5), INT(TOT.EX# / 500+.5), INT(TOT.HITS# / 500+.5)
  1090. 10171 NEED#=2 ^ LVL# - GOLD#:IF NEED# > 0 THEN A$=STR$(NEED#)+" gold and" ELSE A$=""
  1091. 10172 A$="You need"+A$+STR$(2^(LVL#+6)-EXPR#)+" experience to reach the next level..":IF LEN(A$)<80 THEN 10175
  1092. 10174 A$="You need"+STR$(2^(LVL#+6)-EXPR#)+" experience to reach the next level..":IF LEN(A$)>79 THEN 10180
  1093. 10175 LOCATE 23,1:PRINT A$
  1094. 10180 IF MON THEN LOCATE 24,1:A$="The current monster has"+STR$(HP#)+" hit points left and"+STR$(EX#)+" experience":IF LEN(A$)<80 THEN PRINT A$;
  1095. 10190 GOTO 12360
  1096. 10200 SCREEN 0,1,1,0:CLS:SCREEN 0,1,2,0:CLS:SCREEN 0,1,3,0:CLS:SCREEN 0,1,0,0:CLS:LOCATE 10,15:PRINT "CRASH! The Dungeon collapsed!!"
  1097. 10210 RESUME 10220
  1098. 10220 POKE &H417,0:END
  1099. 10230 DATA bandit,basilisk,bugbear,caterwaul,chimera,cloaker,demon,devil,doppleganger,dragon,drider,gargoyle,ghast,ghost,giant,gnome,goblin,golem,grell,grimlock,hydra,kobold,lich,margoyle,mimic,minotaur,mummy,ogre,owlbear,phantom,phycomid,piercer
  1100. 10240 DATA quaggoth,shocker,skeleton,slaad,solar,solifugid,spectator,stalker,stirge,tarrasque,thoguaa,titan,trapper,troglodyte,troll,ustilagor,vampire,vulching,wight,wraith,zombie
  1101. 10241 DATA i cleanse thy body,i protect thee,darts fly from my hands,i shield thee,i strengthen thee,your eyes shut tight,objects become visible,flames fly from my fingertips,i call upon winds of fire,i create gold from air
  1102. 10250 SP1=SP1-1:IF SP1<0 THEN SP1=0:GOTO 5730
  1103. 10260 GOSUB 9140:ON SP GOTO 10270,10280,10290,10300,10310,10320,10330,10340,10350,10360
  1104. 10270 A$="You cast a heal spell!":GOSUB 9100:GOSUB 6650:GOTO 5730
  1105. 10280 A$="You cast a protection spell!":GOSUB 9100:MHPM=DX:MHPMC=1:GOTO 5730
  1106. 10290 A$="You cast a magic missile spell!":GOSUB 9100:IF MON=0 THEN 5730 ELSE GOSUB 9200:BONUS=2:GOTO 7910
  1107. 10300 A$="You cast a shield spell!":GOSUB 9100:SHP=AR:SHPC=1:GOTO 5730
  1108. 10310 A$="You cast a strength spell!":GOSUB 9100:STP=ST:STPC=1:GOTO 5730
  1109. 10320 A$="You cast a sleep spell!":GOSUB 9100:SLP=1:SLPC=1:GOTO 5730
  1110. 10330 A$="You cast a locate spell!":GOSUB 9100:GOSUB 9200:I=0:J=0:IF Z(XCO - 1,YCO) = 94 THEN LOCATE XCO - 1,YCO : PRINT "^";:I=I+1
  1111. 10331 IF Z(XCO + 1,YCO) = 94 THEN LOCATE XCO + 1,YCO : PRINT "^";:I=I+1
  1112. 10332 IF Z(XCO,YCO - 1) = 94 THEN LOCATE XCO,YCO - 1 : PRINT "^";:I=I+1
  1113. 10333 IF Z(XCO,YCO + 1) = 94 THEN LOCATE XCO,YCO + 1 : PRINT "^";:I=I+1
  1114. 10334 IF Z(XCO - 1,YCO) = 111 THEN LOCATE XCO - 1,YCO : PRINT "o";:J=J+1
  1115. 10335 IF Z(XCO + 1,YCO) = 111 THEN LOCATE XCO + 1,YCO : PRINT "o";:J=J+1
  1116. 10336 IF Z(XCO,YCO - 1) = 111 THEN LOCATE XCO,YCO - 1 : PRINT "o";:J=J+1
  1117. 10337 IF Z(XCO,YCO + 1) = 111 THEN LOCATE XCO,YCO + 1 : PRINT "o";:J=J+1
  1118. 10338 IF I=0 AND J=0 THEN A$="There are no traps or pits here.." ELSE A$="You discovered some.."
  1119. 10339 GOSUB 9100:GOSUB 9200:GOTO 5730
  1120. 10340 A$="You cast a pyrotechnic spell!":GOSUB 9100:IF MON=0 THEN 5730 ELSE GOSUB 9200:BONUS=2:GOTO 7910
  1121. 10350 A$="You cast a firestorm spell!":GOSUB 9100:IF MON=0 THEN 5730 ELSE GOSUB 9200:BONUS=2:GOTO 7910
  1122. 10360 A$="You cast a transmute spell!":GOSUB 9100:GOSUB 9200:I=0
  1123. 10370 IF Z(XCO - 1,YCO) = 32 THEN LOCATE XCO - 1,YCO : PRINT "$";:Z(XCO-1,YCO)=36:I=1
  1124. 10380 IF Z(XCO + 1,YCO) = 32 THEN LOCATE XCO + 1,YCO : PRINT "$";:Z(XCO+1,YCO)=36:I=1
  1125. 10390 IF Z(XCO,YCO - 1) = 32 THEN LOCATE XCO,YCO - 1 : PRINT "$";:Z(XCO,YCO-1)=36:I=1
  1126. 10400 IF Z(XCO,YCO + 1) = 32 THEN LOCATE XCO,YCO + 1 : PRINT "$";:Z(XCO,YCO+1)=36:I=1
  1127. 10410 IF I=0 THEN GOTO 5730
  1128. 10420 IF Z(XCO - 1,YCO) = 36 THEN GOSUB 7320:LOCATE XCO - 1,YCO : PRINT " ";:Z(XCO-1,YCO)=32
  1129. 10430 IF Z(XCO + 1,YCO) = 36 THEN GOSUB 7320:LOCATE XCO + 1,YCO : PRINT " ";:Z(XCO+1,YCO)=32
  1130. 10440 IF Z(XCO,YCO - 1) = 36 THEN GOSUB 7320:LOCATE XCO,YCO - 1 : PRINT " ";:Z(XCO,YCO-1)=32
  1131. 10450 IF Z(XCO,YCO + 1) = 36 THEN GOSUB 7320:LOCATE XCO,YCO + 1 : PRINT " ";:Z(XCO,YCO+1)=32
  1132. 10460 GOTO 5730
  1133. 10470 SP2=SP2-2:IF SP2<0 THEN SP2=0:GOTO 5730
  1134. 10480 GOSUB 9140:ON SP GOTO 10490,10500,10510,10520,10530,10540,10550,10560,10650,10750
  1135. 10481 DATA i restore thee,fright causes you to falter,balls of fire engulf you,it becomes hard to see,a shield for my body,i will a wall,i must see,gravity leaves,rise from the dead,i point and you die
  1136. 10490 A$="You cast a restoration spell!":GOSUB 9100:PTS#=PTS#+CO:GOSUB 6650:GOTO 5730
  1137. 10500 A$="You cast a scare spell!":GOSUB 9100:MHPM=DX:MHPMC=2:GOTO 5730
  1138. 10510 A$="You cast a fireball spell!":GOSUB 9100:IF MON=0 THEN 5730 ELSE GOSUB 9200:BONUS=3:GOTO 7910
  1139. 10520 A$="You cast an obscurement spell!":GOSUB 9100:SHP=AR:SHPC=2:GOTO 5730
  1140. 10530 A$="You cast a power shield spell!":GOSUB 9100:STP=ST:STPC=2:GOTO 5730
  1141. 10540 A$="You cast a wall of will spell!":GOSUB 9100:SLP=1:SLPC=2:GOTO 5730
  1142. 10550 A$="You cast a light spell!":GOSUB 9100:L=3:GOSUB 6690:GOTO 5730
  1143. 10560 A$="You cast a levitate spell!":GOSUB 9100
  1144. 10570 FOR K=1 TO INT(RND*4+2)
  1145. 10580 RAN!=RND:IF RAN!<.3 THEN XO=-2 ELSE IF RAN!>.7 THEN XO=2 ELSE XO=0
  1146. 10590 RAN!=RND:IF RAN!<.3 THEN YO=-2 ELSE IF RAN!>.7 THEN YO=2 ELSE YO=0
  1147. 10600 IF XO=0 AND YO=0 THEN 10580
  1148. 10610 IF XCO+XO<2 OR XCO+XO>21 OR YCO+YO<2 OR YCO+YO>75 THEN 10580
  1149. 10620 IF Z(XCO+XO,YCO+YO)<>32 THEN 10580
  1150. 10630 Z(XCO,YCO)=32:XCO=XCO+XO:YCO=YCO+YO
  1151. 10640 GOSUB 6550:NEXT:GOTO 5730
  1152. 10650 A$="You cast a monster summon spell!":GOSUB 9100:I=0
  1153. 10660 FOR I=1 TO INT(RND*4+1)
  1154. 10670 RAN!=RND:IF RAN!<.3 THEN XO=-1 ELSE IF RAN!>.7 THEN XO=1 ELSE XO=0
  1155. 10680 RAN!=RND:IF RAN!<.3 THEN YO=-1 ELSE IF RAN!>.7 THEN YO=1 ELSE YO=0
  1156. 10690 IF (XO<>0 AND YO<>0) OR (XO=0 AND YO=0) THEN 10670
  1157. 10700 IF XCO+XO<2 OR XCO+XO>22 OR YCO+YO<2 OR YCO+YO>75 THEN 10670
  1158. 10710 IF Z(XCO+XO,YCO+YO)<>32 THEN 10730
  1159. 10720 MXCO=XCO+XO:MYCO=YCO+YO:Z(XCO+XO,YCO+YO)=35:LOCATE XCO+XO,YCO+YO:PRINT "#";:I=1
  1160. 10730 NEXT:IF I THEN GOSUB 7460
  1161. 10740 GOTO 5730
  1162. 10750 A$="You cast a finger of death spell!":GOSUB 9100:IF MON=0 THEN 5730 ELSE GOSUB 9200:GOTO 8170
  1163. 10760 SP3=SP3-3:IF SP3<0 THEN SP3=0:GOTO 5730
  1164. 10770 GOSUB 9140:ON SP GOTO 10780,10790,10800,10810,10820,10830,10840,10850,10970,11070
  1165. 10771 DATA i regenerate thee,you must not remember,a bolt from hell carries thee away,multicolored shield protect me,i create a wall,i cast sleep unto your eyes,i will see more,i will travel through thee,monsters of hell hear me,you will all die
  1166. 10780 A$="You cast a regeneration spell!":GOSUB 9100:PTS#=PTS#+CO+CO:GOSUB 6650:GOTO 5730
  1167. 10790 A$="You cast a forget spell!":GOSUB 9100:MHPM=DX:MHPMC=3:GOTO 5730
  1168. 10800 A$="You cast a lightning bolt spell!":GOSUB 9100:IF MON=0 THEN 5730 ELSE GOSUB 9200:BONUS=4:GOTO 7910
  1169. 10810 A$="You cast a phantasmal force spell!":GOSUB 9100:SHP=AR:SHPC=3:GOTO 5730
  1170. 10820 A$="You cast a wall of force spell!":GOSUB 9100:STP=ST:STPC=3:GOTO 5730
  1171. 10830 A$="You cast a charm monster spell!":GOSUB 9100:SLP=1:SLPC=3:GOTO 5730
  1172. 10840 A$="You cast a continual light spell!":GOSUB 9100:LL=3:LLC=8:GOSUB 6690:GOTO 5730
  1173. 10850 A$="You cast a passwall spell!(press cursor key to move)":GOSUB 9100:IF PWL THEN RETURN
  1174. 10860 PWL=1:FOR K=1 TO INT(RND*4+2):GOSUB 10870:NEXT:WHILE Z(XCO,YCO)<>88:GOSUB 10870:WEND:PWL=0:GOTO 5730
  1175. 10870 GOSUB 9270:XO=XCO:YO=YCO:IF X=2 THEN XO=XO+1:IF XO<23 THEN 10940
  1176. 10880 IF X=4 THEN YO=YO-1:IF YO>1 THEN 10940
  1177. 10890 IF X=6 THEN YO=YO+1:IF YO<76 THEN 10940
  1178. 10900 IF X=8 THEN XO=XO-1:IF XO>1 THEN 10940
  1179. 10910 IF X=1 AND MON THEN 7840
  1180. 10920 IF X=7 AND MON THEN 7540
  1181. 10921 IF LEN(X$)<>2 THEN 10870
  1182. 10922 SP=ASC(MID$(X$,2)):SPN=0
  1183. 10923 IF SP>58 AND SP<69 THEN SPN=1:SP=SP-58
  1184. 10924 IF SP>93 AND SP<104 THEN SPN=2:SP=SP-93
  1185. 10925 IF SP>83 AND SP<94 THEN SPN=3:SP=SP-83
  1186. 10926 IF SP>103 AND SP<114 THEN SPN=4:SP=SP-103
  1187. 10927 ON SPN GOTO 10250,10470,10760,11290
  1188. 10930 GOTO 10870
  1189. 10940 IF Z(XCO,YCO)=88 THEN Z(XCO,YCO)=32:LOCATE XCO,YCO:PRINT " ";
  1190. 10950 XCO=XO:YCO=YO:IF Z(XCO,YCO)<>32 THEN GOSUB 6560 ELSE GOSUB 6550
  1191. 10960 RETURN
  1192. 10970 A$="You cast a demon summon spell!":GOSUB 9100:I=0
  1193. 10980 FOR I=1 TO INT(RND*3+1)
  1194. 10990 RAN!=RND:IF RAN!<.3 THEN XO=-1 ELSE IF RAN!>.7 THEN XO=1 ELSE XO=0
  1195. 11000 RAN!=RND:IF RAN!<.3 THEN YO=-1 ELSE IF RAN!>.7 THEN YO=1 ELSE YO=0
  1196. 11010 IF (XO<>0 AND YO<>0) OR (XO=0 AND YO=0) THEN 10990
  1197. 11020 IF XCO+XO<2 OR XCO+XO>22 OR YCO+YO<2 OR YCO+YO>75 THEN 10990
  1198. 11030 IF Z(XCO+XO,YCO+YO)<>32 THEN 11050
  1199. 11040 MXCO=XCO+XO:MYCO=YCO+YO:Z(MXCO,MYCO)=35:LOCATE MXCO,MYCO:PRINT "#";:I=1
  1200. 11050 NEXT:IF I THEN MON$="demon":MLVL#=INT(RND*50+20):GOSUB 7480
  1201. 11060 GOTO 5730
  1202. 11070 A$="You cast a doomkill spell!":GOSUB 9100:GOSUB 9200:MON=0
  1203. 11080 STPC=0:STP=0:SLPC=0:SLP=0:SHP=0:SHPC=0:MHPM=0:MHPC=0
  1204. 11090 IF Z(XCO - 1,YCO) = 35 THEN MXCO = XCO - 1  : MYCO = YCO : GOSUB 11140
  1205. 11100 IF Z(XCO + 1,YCO) = 35 THEN MXCO = XCO + 1  : MYCO = YCO : GOSUB 11140
  1206. 11110 IF Z(XCO,YCO - 1) = 35 THEN MXCO = XCO : MYCO = YCO - 1  : GOSUB 11140
  1207. 11120 IF Z(XCO,YCO + 1) = 35 THEN MXCO = XCO : MYCO = YCO + 1  : GOSUB 11140
  1208. 11130 GOSUB 7220:GOTO 5730
  1209. 11140 MLVL# = INT( RND * DLVL# + DLVL# / 2 + 1)
  1210. 11150 HP# = INT(( RND * DLVL# * 2 + 1) * MLVL# ^ 2 / 2 + DLVL# * 2 + RND * MLVL# * 50)
  1211. 11160 EX# = INT(HP# / MLVL#) * INT(DLVL# / 2 + 1) + INT( RND * HP#)
  1212. 11170 NM = NM - 1
  1213. 11180 GOSUB 8980
  1214. 11190 Z(MXCO,MYCO) = 36
  1215. 11200 LOCATE MXCO,MYCO
  1216. 11210 PRINT "$";
  1217. 11220 IF NM THEN RETURN
  1218. 11230 EX# = INT(( RND * DLVL# * 2 + 1) * LVL# ^ 2 / 2 + DLVL# * 2 + RND * LVL# * 50)
  1219. 11240 A$ = "You killed all the monsters on this level! You gain" + STR$(EX#) + " exp!"
  1220. 11250 GOSUB 9100
  1221. 11260 GOSUB 8980
  1222. 11270 GOSUB 9200
  1223. 11280 RETURN
  1224. 11290 SP4=SP4-4:IF SP4<0 THEN SP4=0:GOTO 5730
  1225. 11300 GOSUB 9140:ON SP GOTO 11310,11320,11330,11340,11350,11360,11370,11410,11630,11640
  1226. 11301 DATA i resurrect thee,i frighten thee,you turn to dust,swirling swords slice you,may my weapon become powerful,you are binded tightly,i travel to parts unknown,you become another,let me pass,everything dies continuously
  1227. 11310 A$="You cast a resurrection spell!":GOSUB 9100:PTS#=PTS#+CO*3:GOSUB 6650:GOTO 5730
  1228. 11320 A$="You cast a fear spell!":GOSUB 9100:MHPM=DX:MHPC=4:GOTO 5730
  1229. 11330 A$="You cast a disintegrate spell!":GOSUB 9100:IF MON=0 THEN 5730 ELSE GOSUB 9200:BONUS=5:GOTO 7910
  1230. 11340 A$="You cast a blade barrier spell!":GOSUB 9100:SHP=AR:SHPC=4:GOTO 5730
  1231. 11350 A$="You cast an enchanted weapon spell!":GOSUB 9100:STP=ST:STPC=4:GOTO 5730
  1232. 11360 A$="You cast a hold monster spell!":GOSUB 9100:SLP=1:SLPC=4:GOTO 5730
  1233. 11370 A$="You cast a teleport spell!":GOSUB 9100
  1234. 11380 XO=INT(RND*20+2):YO=INT(RND*73+2):IF Z(XO,YO)<>32 THEN 11380
  1235. 11390 IF Z(XCO,YCO)=88 THEN Z(XCO,YCO)=32
  1236. 11400 MON=0:LOCATE XCO,YCO:IF Z(I,J)<>94 THEN PRINT CHR$(Z(XCO,YCO));
  1237. 11401 XCO=XO:YCO=YO:GOSUB 6550:GOTO 5730
  1238. 11410 GOSUB 11420
  1239. 11420 A$="You cast a polymorph spell!":GOSUB 9100:MON=0
  1240. 11430 STPC=0:STP=0:SLPC=0:SLP=0:SHP=0:SHPC=0:MHPM=0:MHPC=0:GOSUB 11440:GOTO 5730
  1241. 11440 FOR M=-2 TO 2:FOR N=-2 TO 2:IF XCO+M<2 OR XCO+M>21 OR YCO+N<2 OR YCO+N>75 THEN 11460
  1242. 11450 IF Z(XCO + M,YCO + N) = 35 THEN MXCO = XCO + M  : MYCO = YCO + N: GOSUB 11480
  1243. 11460 NEXT:NEXT:IF GD=0 THEN GOSUB 7220
  1244. 11470 MON=0:RETURN
  1245. 11480 MLVL# = INT( RND * DLVL# + DLVL# / 2 + 1)
  1246. 11490 HP# = INT(( RND * DLVL# * 2 + 1) * MLVL# ^ 2 / 2 + DLVL# * 2 + RND * MLVL# * 50)
  1247. 11500 EX# = INT(HP# / MLVL#) * INT(DLVL# / 2 + 1) + INT( RND * HP#)
  1248. 11510 NM = NM - 1
  1249. 11520 GOSUB 8980
  1250. 11530 IF GD THEN Z(MXCO,MYCO)=32 ELSE Z(MXCO,MYCO) = 36
  1251. 11540 LOCATE MXCO,MYCO
  1252. 11550 IF GD THEN PRINT " "; ELSE PRINT "$";
  1253. 11560 IF NM THEN RETURN
  1254. 11570 EX# = INT(( RND * DLVL# * 2 + 1) * LVL# ^ 2 / 2 + DLVL# * 2 + RND * LVL# * 50)
  1255. 11580 A$ = "You killed all the monsters on this level! You gain" + STR$(EX#) + " exp!"
  1256. 11590 GOSUB 9100
  1257. 11600 GOSUB 8980
  1258. 11610 GOSUB 9200
  1259. 11620 RETURN
  1260. 11630 A$="You cast a time stop spell!":GOSUB 9100:PW=1:PWC=5:SLP=1:SLPC=1:GOTO 5730
  1261. 11640 A$="You cast a genocide spell!":GOSUB 9100:GD=1:GDC=5:GOSUB 11440:GOTO 5730
  1262. 11650 ON SP GOTO 11660,11680,11710,11750,11780,11800,11820,11850,11880,11910
  1263. 11660 LOCATE 10,15:PRINT "The HEAL spell restores HIT POINTS to your player."
  1264. 11670 LOCATE 11,15:PRINT "The amount restored is equal to your CONSTITUTION.":GOTO 12350
  1265. 11680 LOCATE 10,15:PRINT "The PROTECTION FROM EVIL spell repells a monster's
  1266. 11690 LOCATE 11,15:PRINT "attacks for one round. The number of hits repelled
  1267. 11700 LOCATE 12,15:PRINT "is equal to your DEXTERITY.":GOTO 12350
  1268. 11710 LOCATE 10,15:PRINT "The MAGIC MISSILE spell causes a dartlike object to"
  1269. 11720 LOCATE 11,15:PRINT "fly from your player's hand. This missile hits the"
  1270. 11730 LOCATE 12,15:PRINT "monster with exact accuracy every time. The amount"
  1271. 11740 LOCATE 13,15:PRINT "of damage normally done is doubled.":GOTO 12350
  1272. 11750 LOCATE 10,15:PRINT "The SHIELD spell generates an invisible force field"
  1273. 11760 LOCATE 11,15:PRINT "between your player and the monster. Your player's"
  1274. 11770 LOCATE 12,15:PRINT "total armor plus is increased by one armor factor.":GOTO 12350
  1275. 11780 LOCATE 10,15:PRINT "The STRENGTH spell doubles your player's strength"
  1276. 11790 LOCATE 11,15:PRINT "for the duration of one round.":GOTO 12350
  1277. 11800 LOCATE 10,15:PRINT "The SLEEP spell binds the monster in a helpless"
  1278. 11810 LOCATE 11,15:PRINT "state for the duration of one round.":GOTO 12350
  1279. 11820 LOCATE 10,15:PRINT "The LOCATE spell reveals nearby traps and pits."
  1280. 11830 LOCATE 11,15:PRINT "This spell works only for the immediate vicinity"
  1281. 11840 LOCATE 12,15:PRINT "and has no duration.":GOTO 12350
  1282. 11850 LOCATE 10,15:PRINT "The PYROTECHNICS spell causes a bolt of fire to fly"
  1283. 11860 LOCATE 11,15:PRINT "from your player's hands. The amount of damage done"
  1284. 11870 LOCATE 12,15:PRINT "normally is doubled.":GOTO 12350
  1285. 11880 LOCATE 10,15:PRINT "The FIRESTORM spell actuates a small blast of flames"
  1286. 11890 LOCATE 11,15:PRINT "to engulf the monster. The amount of damage normally
  1287. 11900 LOCATE 12,15:PRINT "done is doubled.":GOTO 12350
  1288. 11910 LOCATE 10,15:PRINT "The TRANSMUTE spell restructures the surrounding air"
  1289. 11920 LOCATE 11,15:PRINT "into gold. This gold can then be picked up.":GOTO 12350
  1290. 11930 ON SP GOTO 11940,11970,12000,12030,12060,12080,12100,12120,12150,12170
  1291. 11940 LOCATE 10,15:PRINT "The RESTORATION spell restores HIT POINTS to your"
  1292. 11950 LOCATE 11,15:PRINT "player. The amount restored is equal to double"
  1293. 11960 LOCATE 12,15:PRINT "your CONSTITUTION.":GOTO 12350
  1294. 11970 LOCATE 10,15:PRINT "The SCARE spell will repell a monster's attacks for"
  1295. 11980 LOCATE 11,15:PRINT "two rounds. The amount of hits repelled is equal to"
  1296. 11990 LOCATE 12,15:PRINT "your DEXTERITY.":GOTO 12350
  1297. 12000 LOCATE 10,15:PRINT "The FIREBALL spell causes a fireball to fly from your"
  1298. 12010 LOCATE 11,15:PRINT "player's hands. The amount of damage normally done to"
  1299. 12020 LOCATE 12,15:PRINT "the monster is tripled.":GOTO 12350
  1300. 12030 LOCATE 10,15:PRINT "The OBSCUREMENT spell creates an opaque force field"
  1301. 12040 LOCATE 11,15:PRINT "between your player and the monster.  Your player's
  1302. 12050 LOCATE 12,15:PRINT "total armor plus is increased by two armor factors.":GOTO 12350
  1303. 12060 LOCATE 10,15:PRINT "The POWER SHEILD spell doubles your player's strength"
  1304. 12070 LOCATE 11,15:PRINT "for the duration of two rounds.":GOTO 12350
  1305. 12080 LOCATE 10,15:PRINT "The WALL OF WILL spell renders the monster helpless"
  1306. 12090 LOCATE 11,15:PRINT "for the duration of two rounds.":GOTO 12350
  1307. 12100 LOCATE 10,15:PRINT "The LIGHT spell illuminates an extended area around"
  1308. 12110 LOCATE 11,15:PRINT "your player. This spell has no duration.":GOTO 12350
  1309. 12120 LOCATE 10,15:PRINT "The LEVITATE spell causes your player to float above"
  1310. 12130 LOCATE 11,15:PRINT "the Dungeon walls uncontrollably for the duration of"
  1311. 12140 LOCATE 12,15:PRINT "two to five rounds.":GOTO 12350
  1312. 12150 LOCATE 10,15:PRINT "The MONSTER SUMMON spell calls up one to four"
  1313. 12160 LOCATE 11,15:PRINT "monsters of the current monster level.":GOTO 12350
  1314. 12170 LOCATE 10,15:PRINT "The FINGER OF DEATH spell instantly destroys the"
  1315. 12180 LOCATE 11,15:PRINT "monster. The monster's treasure remains intact.":GOTO 12350
  1316. 12190 ON SP GOTO 12200,12203,12206,12209,12212,12214,12216,12219,12223,12226
  1317. 12200 LOCATE 10,15:PRINT "The REGENERATE spell restores HIT POINTS to your"
  1318. 12201 LOCATE 11,15:PRINT "player. The amount restored is equal to triple"
  1319. 12202 LOCATE 12,15:PRINT "your CONSTITUTION.":GOTO 12350
  1320. 12203 LOCATE 10,15:PRINT "The FORGET spell will repell a monster's attacks for"
  1321. 12204 LOCATE 11,15:PRINT "three rounds. The amount of hits repelled is equal to"
  1322. 12205 LOCATE 12,15:PRINT "your DEXTERITY.":GOTO 12350
  1323. 12206 LOCATE 10,15:PRINT "The LIGHTNING BOLT spell causes bolts of electricity"
  1324. 12207 LOCATE 11,15:PRINT "to fly from your player's hands. The amount of damage"
  1325. 12208 LOCATE 12,15:PRINT "normally done to the monster is multiplied by four.":GOTO 12350
  1326. 12209 LOCATE 10,15:PRINT "The PHANTASMAL FORCE spell creates a solid wall between"
  1327. 12210 LOCATE 11,15:PRINT "your player and the monster. Your player's total armor"
  1328. 12211 LOCATE 12,15:PRINT "plus is increased by three armor factors.":GOTO 12350
  1329. 12212 LOCATE 10,15:PRINT "The WALL OF FORCE spell doubles your player's strength."
  1330. 12213 LOCATE 11,15:PRINT "This spell has a duration of three rounds.":GOTO 12350
  1331. 12214 LOCATE 10,15:PRINT "The CHARM MONSTER spell renders the monster helpless."
  1332. 12215 LOCATE 11,15:PRINT "This spell has a duration of three rounds.":GOTO 12350
  1333. 12216 LOCATE 10,15:PRINT "The CONTINUAL LIGHT spell illuminates an extended area"
  1334. 12217 LOCATE 11,15:PRINT "around your player. This spell has a duration of eight"
  1335. 12218 LOCATE 12,15:PRINT "rounds.":GOTO 12350
  1336. 12219 LOCATE 10,17:PRINT "The PASSWALL spell allows your player to travel"
  1337. 12220 LOCATE 11,17:PRINT "through the Dungeon walls. This spell will stay"
  1338. 12221 LOCATE 12,17:PRINT "in effect while in a wall. It has a duration of"
  1339. 12222 LOCATE 13,17:PRINT "two to four rounds.":GOTO 12350
  1340. 12223 LOCATE 10,15:PRINT "The DEMON SUMMON spell calls up one to three Demons"
  1341. 12224 LOCATE 11,15:PRINT "of level twenty to fifty. Demons have been found to"
  1342. 12225 LOCATE 12,15:PRINT "have vast amounts of treasure.":GOTO 12350
  1343. 12226 LOCATE 10,15:PRINT "The DOOMKILL spell instantly demolishes all monsters"
  1344. 12227 LOCATE 11,15:PRINT "surrounding you. The monster's treasures will remain."
  1345. 12228 LOCATE 12,15:PRINT "This spell has no duration.":GOTO 12350
  1346. 12229 ON SP GOTO 12230,12233,12236,12239,12243,12245,12247,12250,12253,12255
  1347. 12230 LOCATE 10,15:PRINT "The RESURRECTION spell restores HIT POINTS to your"
  1348. 12231 LOCATE 11,15:PRINT "player. The amount restored is equal to four times"
  1349. 12232 LOCATE 12,15:PRINT "your CONSTITUTION.":GOTO 12350
  1350. 12233 LOCATE 10,15:PRINT "The FEAR spell will repell a monster's attacks for"
  1351. 12234 LOCATE 11,15:PRINT "four rounds. The amount of hits repelled is equal
  1352. 12235 LOCATE 12,15:PRINT "to your DEXTERITY.":GOTO 12350
  1353. 12236 LOCATE 10,15:PRINT "The DISINTEGRATE spell causes energy to be drained"
  1354. 12237 LOCATE 11,15:PRINT "from the nearest attacking monster. The amount of"
  1355. 12238 LOCATE 12,15:PRINT "damaged done normally is multiplied by five.":GOTO 12350
  1356. 12239 LOCATE 10,15:PRINT "The BLADE BARRIER spell creates a rotating wall of"
  1357. 12240 LOCATE 11,15:PRINT "swords between your player and the monster. Your"
  1358. 12241 LOCATE 12,15:PRINT "player's total armor plus is increased by four armor"
  1359. 12242 LOCATE 13,15:PRINT "factors.":GOTO 12350
  1360. 12243 LOCATE 10,15:PRINT "The ENCHANTED WEAPON spell doubles your weapon plus."
  1361. 12244 LOCATE 11,15:PRINT "This spell has a duration of three rounds.":GOTO 12350
  1362. 12245 LOCATE 10,15:PRINT "The HOLD MONSTER spell renders the monster helpless."
  1363. 12246 LOCATE 11,15:PRINT "This spell lasts up to four rounds.":GOTO 12350
  1364. 12247 LOCATE 10,15:PRINT "The TELEPORT spell causes your player to reappear in"
  1365. 12248 LOCATE 11,15:PRINT "another area of the Dungeon level. Your player has no"
  1366. 12249 LOCATE 12,15:PRINT "control over teleportation.":GOTO 12350
  1367. 12250 LOCATE 10,15:PRINT "The POLYMORPH spell instantly devastates all monsters"
  1368. 12251 LOCATE 11,15:PRINT "within three squares of your player. This spell lasts"
  1369. 12252 LOCATE 12,15:PRINT "for one round.":GOTO 12350
  1370. 12253 LOCATE 10,15:PRINT "The TIME STOP spell nullifies all monster's attacks around"
  1371. 12254 LOCATE 11,15:PRINT "your player. This spell lasts for five rounds.":GOTO 12350
  1372. 12255 LOCATE 10,15:PRINT "The GENOCIDE spell annihilates all monsters within"
  1373. 12256 LOCATE 11,15:PRINT "three squares of your player. This spell's duration"
  1374. 12257 LOCATE 12,15:PRINT "lasts for three rounds.":GOTO 12350
  1375. 12310 LOCATE 10,15:PRINT "The INFO key displays current monster hits and experience,"
  1376. 12320 LOCATE 11,15:PRINT "average, maximum, and minimum statistics for monsters at"
  1377. 12330 LOCATE 12,15:PRINT "the current Dungeon level, attack formulas, and your total"
  1378. 12340 LOCATE 13,15:PRINT "armor and weapon plus.":GOTO 12350
  1379. 12350 LOCATE 25,35:PRINT "Press a key..";:SCREEN 0,1,3,3:I$=INKEY$:WHILE I$="":I$=INKEY$:WEND:RETURN
  1380. 12360 I$=INKEY$:WHILE I$="":I$=INKEY$:WEND:SCREEN 0,1,0,0:RETURN
  1381. 12370 LOCATE 10,15:PRINT "The FIGHT key causes your player to attack a monster."
  1382. 12380 LOCATE 11,15:PRINT "While fighting monsters, many factors are considered"
  1383. 12390 LOCATE 12,15:PRINT "such as your armor plus, your weapon plus, and other"
  1384. 12400 LOCATE 13,15:PRINT "conditions created by casted spells.":GOTO 12350
  1385. 12410 LOCATE 10,15:PRINT "This key moves your player to the south one Dungeon"
  1386. 12420 LOCATE 11,15:PRINT "square. Occupied squares next to your player create"
  1387. 12430 LOCATE 12,15:PRINT "conditions such as opening chests, retreiving gold,
  1388. 12440 LOCATE 13,15:PRINT "and engaging monsters in combat.":GOTO 12350
  1389. 12450 LOCATE 10,15:PRINT "The CAST key causes your player to cast a spell chant."
  1390. 12460 LOCATE 11,15:PRINT "In order to cast spells chants, they must be collected
  1391. 12470 LOCATE 12,15:PRINT "and memorized during the Adventure.":GOTO 12350
  1392. 12480 LOCATE 10,15:PRINT "This key moves your player to the west one Dungeon"
  1393. 12490 LOCATE 11,15:PRINT "square. Moving on a square creates certain unknown"
  1394. 12500 LOCATE 12,15:PRINT "conditions such as triggering a trap, falling in a"
  1395. 12510 LOCATE 13,15:PRINT "pit, and discovering scrolls.":GOTO 12350
  1396. 12520 LOCATE 10,15:PRINT "The ENTER key on the numeric keypad is used as an"
  1397. 12530 LOCATE 11,15:PRINT "'acceptance' key for various prompts such opening"
  1398. 12540 LOCATE 12,15:PRINT "and storing inventory from chests, and picking up"
  1399. 12550 LOCATE 13,15:PRINT "treasure.":GOTO 12350
  1400. 12560 LOCATE 10,15:PRINT "This key moves your player to the east one Dungeon"
  1401. 12570 LOCATE 11,15:PRINT "square. Your player can move to other parts of the"
  1402. 12580 LOCATE 12,15:PRINT "the Dungeon level with certain spells. Among these"
  1403. 12590 LOCATE 13,15:PRINT "spells are levitate, passwall, teleport.":GOTO 12350
  1404. 12600 LOCATE 10,17:PRINT "The EVADE key causes your player to dodge the"
  1405. 12610 LOCATE 11,17:PRINT "current monster (if your player is in combat)"
  1406. 12620 LOCATE 12,17:PRINT "and move to an adjacent square.":GOTO 12350
  1407. 12630 LOCATE 10,15:PRINT "This key moves your player to the north one Dungeon"
  1408. 12640 LOCATE 11,15:PRINT "square. To change Dungeon levels, move your player"
  1409. 12650 LOCATE 12,15:PRINT "through the upper and lower exits.":GOTO 12350
  1410. 12660 LOCATE 10,15:PRINT "The IGNORE key responds as a 'refuse' key for some"
  1411. 12670 LOCATE 11,15:PRINT "prompts. These prompts include opening and storing"
  1412. 12680 LOCATE 12,15:PRINT "inventory from chests and picking up treasure.":GOTO 12350
  1413. 12690 LOCATE 8,16: PRINT "The stats key displays your player character's"
  1414. 12700 LOCATE 9,16: PRINT "attributes, armor pluses, and weapon plus. The"
  1415. 12710 LOCATE 10,16:PRINT "stats and their abbreviations are as follows:"
  1416. 12720 LOCATE 12,11:PRINT "STR  -  Strength       INT  -  Intelligence   WIS  -  Wisdom"
  1417. 12730 LOCATE 13,11:PRINT "CON  -  Constitution   DEX  -  Dexterity      CHA  -  Charisma"
  1418. 12740 LOCATE 14,11:PRINT "WE   -  Weapon         AR   -  Armor          SH   -  Shield"
  1419. 12750 LOCATE 15,11:PRINT "CL   -  Cloak          HE   -  Helmet         BO   -  Boots":GOTO 12350
  1420. 12760 SCREEN 0,1,3,0:CLS
  1421. 12770 LOCATE 1,15:PRINT "Your player has memorized the following spell chants:"
  1422. 12780 RESTORE 10241:FOR I=1 TO 40:READ A$:IF SPELLS(I)=0 THEN 12810
  1423. 12790 IF I>20 THEN J=I-20:K=1 ELSE J=I:K=0
  1424. 12800 LOCATE J+2,K*40+1:PRINT A$
  1425. 12810 NEXT:LOCATE 25,35:PRINT "Press a key..";:SCREEN 0,1,3,3:I$=INKEY$:WHILE I$="":I$=INKEY$:WEND:SCREEN 0,1,0,0:RETURN
  1426. 12820 LOCATE 10,13:PRINT "This key displays all the spell chants your player has"
  1427. 12830 LOCATE 11,13:PRINT "remembered. Your player can read spell chants found on"
  1428. 12840 LOCATE 12,13:PRINT "scrolls hidden in the Dungeon.":GOTO 12350
  1429. 12850 LOCATE 10,18:PRINT "The X is your player.  Move your player with the"
  1430. 12860 LOCATE 11,18:PRINT "numeric keypad cursor keys. You will be prompted"
  1431. 12870 LOCATE 12,18:PRINT "for  an action when you move your player next to"
  1432. 12880 LOCATE 13,18:PRINT "a symbol. For example, you move your player next"
  1433. 12890 LOCATE 14,18:PRINT "to a scroll and are asked to take or  ignore it.":GOTO 12350
  1434. 12910 LOCATE 10,13:PRINT "The # symbol is a monster. Monsters usually carry some"
  1435. 12920 LOCATE 11,13:PRINT "treasure, such as gold, gems, or chests. Monsters have"
  1436. 12930 LOCATE 12,13:PRINT "statistics like your player, including experience, hit"
  1437. 12940 LOCATE 13,13:PRINT "points, and strength.":GOTO 12350
  1438. 12950 LOCATE 10,17:PRINT "The ~ symbol is a scroll. Your player can read and"
  1439. 12960 LOCATE 11,17:PRINT "memorize scrolls for later use. In order to cast a"
  1440. 12970 LOCATE 12,17:PRINT "spell chant learned from a scroll use the '-' key.":GOTO 12350
  1441. 12980 LOCATE 10,12:PRINT "The $ symbol is gold.  Taking gold increases your hoard."
  1442. 12990 LOCATE 11,12:PRINT "Gold is needed for reaching the next level of expertise.":GOTO 12350
  1443. 13010 LOCATE 10,14:PRINT "The "+CHR$(254)+" symbol is a chest. Chests can be opened,"
  1444. 13020 LOCATE 11,14:PRINT "and usually contain armor and weapons. It is said there"
  1445. 13021 LOCATE 12,14:PRINT "was once a Globe of extreme power locked in a chest. This"
  1446. 13022 LOCATE 13,14:PRINT "Globe could unleash the immense power of the past and"
  1447. 13023 LOCATE 14,14:PRINT "allow the user to control whatever he desired.":GOTO 12350
  1448. 13030 LOCATE 10,15:PRINT "The ^ symbol represents a trap. Traps are not visible"
  1449. 13040 LOCATE 11,15:PRINT "until triggered or located (with the locate spell)."
  1450. 13050 LOCATE 12,15:PRINT "Traps in higher Dungeon levels cause more damage to"
  1451. 13051 LOCATE 13,15:PRINT "your player. Traps block Dungeon passages.":GOTO 12350
  1452. 13060 LOCATE 10,15:PRINT "The o symbol is a pit. Pits become visible when your"
  1453. 13070 LOCATE 11,15:PRINT "player has fallen in. Pits in higher Dungeon levels"
  1454. 13080 LOCATE 12,15:PRINT "cause more damage to your player. Some spells allow"
  1455. 13090 LOCATE 13,15:PRINT "your player to move around pits, such as levitate,"
  1456. 13100 LOCATE 14,15:PRINT "passwall, and teleport.":GOTO 12350
  1457. 30000 DELAY=NOT DELAY:IF DELAY THEN CLS:RETURN ELSE LOCATE 12,25:PRINT "Creating  Dungeon  Level "DLVL#"          ":RETURN
  1458.