home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / games / dungeon.zip / DUNGEON3.BAS < prev    next >
BASIC Source File  |  1980-01-01  |  70KB  |  1,314 lines

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