home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / games / dungeon.zip / DUNGEON2.BAS < prev    next >
BASIC Source File  |  1987-01-21  |  69KB  |  1,429 lines

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