home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 3 / FreeSoftwareCollection3pd199x-jp.img / fb386 / dmw3 / dmw3.bas < prev    next >
BASIC Source File  |  1980-01-02  |  25KB  |  649 lines

  1. 10000 '--------------------------------------------------------------------
  2. 10010 '
  3. 10020 '              DUNGEON MASTER MAP WRITER (DMW.BAS)
  4. 10030 '
  5. 10040 '                  written by タケ (NAA01070)
  6. 10050 '--------------------------------------------------------------------
  7. 10051 '                改造 by Dante(PEE01022)
  8. 10052 '--------------------------------------------------------------------
  9. 10060 ON ERROR GOTO *ERROR
  10. 10070 SCREEN@ 0
  11. 10080 COLOR 0, 0, 0
  12. 10090 CLS
  13. 10100 '
  14. 10110 CBK=5 'COLOR OF BACKGROUND
  15. 10120 CG=0  'COLOR OF GRID
  16. 10130 CP=15 'COLOR OF PASSAGE
  17. 10140 CB=10 'COLOR OF BORDER LINE
  18. 10150 CE=0  'COLOR OF ELEMENT
  19. 10160 CN=0  'COLOR OF NUMBER
  20. 10170 CS=0  'COLOR OF SYMBOL
  21. 10180 CR=15 'COLOR FOR REVERSE
  22. 10190 CC=0  'COLOR OF COMPASS
  23. 10200 '
  24. 10210 GL=12: NG=32  'GRID
  25. 10220 GOX=54: GOY=13
  26. 10230 DIM GRID(NG, NG)
  27. 10240 PL=16: NPX=4: NPY=3  'PASSAGE
  28. 10250 POX=445: POY=6
  29. 10260 DL=16: NDX=2: NDY=1  'DRAW MODE
  30. 10270 DOX=445: DOY=61
  31. 10280 EL=16: NEX=4: NEY=8  'ELEMENT
  32. 10290 EOX=445: EOY=81
  33. 10300 MAXE=2000
  34. 10310 DIM EEX(MAXE), EEY(MAXE), EE(MAXE)
  35. 10320 FL=16: NFX=4: NFY=4  'FILE
  36. 10330 FOX=445: FOY=228
  37. 10340 TXL=64: TYL=16: NT=6  'TASK
  38. 10350 TOX=445: TOY=301
  39. 10360 SOX=1: SOY=42  'TITLE
  40. 10370 NOX=1: NOY=123  'FLOOR NUMBER
  41. 10380 COX=19: COY=260  'COMPASS
  42. 10390 '-------------------- MAIN ROUTINE --------------------
  43. 10400 GOSUB *INIT.SCREEN
  44. 10410 '
  45. 10420 SFLG=0
  46. 10430 P=0: PX=0: PY=0
  47. 10440 GOSUB *REVERSE.PASSAGE
  48. 10450 DFLG=0
  49. 10460 DX=0: DY=0
  50. 10470 GOSUB *REVERSE.MODE
  51. 10480 EEN=0
  52. 10490 F=0: FX=0: FY=0: FILE$="DMMAP0"
  53. 10500 GOSUB *REVERSE.FILE
  54. 10510 GOSUB *FLOOR.NUMBER
  55. 10520 '
  56. 10530 MOUSE 0
  57. 10540 MOUSE 1, GOX, GOY, 1
  58. 10550 WHILE NOT(MOUSE(2, 0) AND MOUSE(2, 1))
  59. 10560   IF MOUSE(2, 0) THEN GOSUB *LEFT.BUTTON
  60. 10570   FOR WW=0 TO 200: W=W+1: NEXT
  61. 10580 WEND
  62. 10590 MOUSE 5
  63. 10600 '
  64. 10610 END
  65. 10620 '-------------------- LEFT BUTTON --------------------
  66. 10630 *LEFT.BUTTON
  67. 10640 MX=MOUSE(4, 0): MY=MOUSE(5, 0)
  68. 10650 IF MX>GOX AND MX<GL*NG+GOX AND MY>GOY AND MY<GL*NG+GOY                        THEN GOSUB *SELECT.GRID
  69. 10660 IF MX>POX AND MX<PL*NPX+POX AND MY>POY AND MY<PL*NPY+POY                      THEN GOSUB *SELECT.PASSAGE
  70. 10670 IF MX>DOX AND MX<DL*NDX+DOX AND MY>DOY AND MY<DL*NDY+DOY                      THEN GOSUB *SELECT.MODE
  71. 10680 IF MX>EOX AND MX<EL*NEX+EOX AND MY>EOY AND MY<EL*NEY+EOY                      THEN GOSUB *SELECT.ELEMENT
  72. 10690 IF MX>FOX AND MX<FL*NFX+FOX AND MY>FOY AND MY<FL*NFY+FOY                      THEN GOSUB *SELECT.FILE
  73. 10700 IF MX>TOX AND MX<TXL+TOX AND MY>TOY AND MY<TYL*NT+TOY                         THEN GOSUB *SELECT.TASK
  74. 10710 RETURN
  75. 10720 '--------------------- SELECT GRID --------------------
  76. 10730 *SELECT.GRID
  77. 10740 IF ((MX-GOX) MOD GL)=0 OR ((MY-GOY) MOD GL)=0 THEN RETURN
  78. 10750 GX=(MX-GOX)\GL: GY=(MY-GOY)\GL
  79. 10760 SX=GL*GX+GOX: SY=GL*GY+GOY
  80. 10770 IF SFLG=0 THEN GOSUB *DRAW.PASSAGE                                            ELSE IF DFLG=0 THEN GOSUB *DRAW.ELEMENT                                                    ELSE GOSUB *ERASE.ELEMENT
  81. 10780 RETURN
  82. 10790 '-------------------- DRAW PASSAGE --------------------
  83. 10800 *DRAW.PASSAGE
  84. 10810 PP=0: GOSUB *PUT.PASSAGE
  85. 10820 GRID(GX, GY)=P
  86. 10830 PP=P: GOSUB *PUT.PASSAGE
  87. 10840 RETURN
  88. 10850 '-------------------- DRAW ELEMENT --------------------
  89. 10860 *DRAW.ELEMENT
  90. 10870 IF EEN=MAXE THEN RETURN
  91. 10880 EEN=EEN+1
  92. 10890 EEX(EEN)=GX: EEY(EEN)=GY
  93. 10900 EE(EEN)=E
  94. 10910 EE=E: GOSUB *PUT.ELEMENT
  95. 10920 RETURN
  96. 10930 '--------------------- ERASE.ELEMENT ---------------------
  97. 10940 *ERASE.ELEMENT
  98. 10950 FOR N=1 TO EEN
  99. 10960   IF EEX(N)=GX AND EEY(N)=GY AND EE(N)=E THEN *ERASE
  100. 10970 NEXT
  101. 10980 *ERASE
  102. 10990 EE=EE(N)
  103. 11000 EE(N)=-1
  104. 11010 HLD=CE: CE=CP
  105. 11020 GOSUB *PUT.ELEMENT
  106. 11030 CE=HLD
  107. 11040 RETURN
  108. 11050 '--------------------- SELECT DRAW MODE --------------------
  109. 11060 *SELECT.MODE
  110. 11070 IF ((MX-DOX) MOD DL)=0 OR ((MY-DOY) MOD DL)=0 THEN RETURN
  111. 11080 GOSUB *REVERSE.MODE
  112. 11090 DX=(MX-DOX)\DL: DY=(MY-DOY)\DL
  113. 11100 DFLG=NDX*DY+DX
  114. 11110 GOSUB *REVERSE.MODE
  115. 11120 RETURN
  116. 11130 '--------------------- SELECT PASSAGE --------------------
  117. 11140 *SELECT.PASSAGE
  118. 11150 IF ((MX-POX) MOD PL)=0 OR ((MY-POY) MOD PL)=0 THEN RETURN
  119. 11160 IF SFLG=0 THEN GOSUB *REVERSE.PASSAGE                                                 ELSE GOSUB *REVERSE.ELEMENT
  120. 11170 SFLG=0
  121. 11180 PX=(MX-POX)\PL: PY=(MY-POY)\PL
  122. 11190 P=NPX*PY+PX
  123. 11200 GOSUB *REVERSE.PASSAGE
  124. 11210 RETURN
  125. 11220 '--------------------- SELECT ELEMENT --------------------
  126. 11230 *SELECT.ELEMENT
  127. 11240 IF ((MX-EOX) MOD EL)=0 OR ((MY-EOY) MOD EL)=0 THEN RETURN
  128. 11250 IF SFLG=1 THEN GOSUB *REVERSE.ELEMENT                                                 ELSE GOSUB *REVERSE.PASSAGE
  129. 11260 SFLG=1
  130. 11270 EX=(MX-EOX)\EL: EY=(MY-EOY)\EL
  131. 11280 E=NEX*EY+EX
  132. 11290 GOSUB *REVERSE.ELEMENT
  133. 11300 RETURN
  134. 11310 '-------------------- SELECT FILE --------------------
  135. 11320 *SELECT.FILE
  136. 11330 IF ((MX-FOX) MOD FL)=0 OR ((MY-FOY) MOD FL)=0 THEN RETURN
  137. 11340 GOSUB *REVERSE.FILE
  138. 11350 FX=(MX-FOX)\FL: FY=(MY-FOY)\FL
  139. 11360 F=NFX*FY+FX
  140. 11370 FILE$="DMMAP"+MID$(STR$(F), 2)
  141. 11380 GOSUB *REVERSE.FILE
  142. 11390 GOSUB *FLOOR.NUMBER
  143. 11400 RETURN
  144. 11410 '-------------------- SELECT TASK --------------------
  145. 11420 *SELECT.TASK
  146. 11430 IF ((MY-TOY) MOD TYL)=0 THEN RETURN
  147. 11440 TY=(MY-TOY)\TYL
  148. 11450 T=TY
  149. 11460 GOSUB *REVERSE.TASK
  150. 11470 ON T+1 GOSUB *READ.MAP, *WRITE.MAP, *FAIR.COPY, *CLEAR.MAP,                   *HARD, *TIFF
  151. 11480 GOSUB *REVERSE.TASK
  152. 11490 RETURN
  153. 11500 '-------------------- READ MAP --------------------
  154. 11510 *READ.MAP
  155. 11520 OPEN "I", #1, FILE$+".DAT"
  156. 11530 FOR Y=0 TO NG-1
  157. 11540   FOR X=0 TO NG-1
  158. 11550     INPUT #1, GRID(X, Y)
  159. 11560   NEXT
  160. 11570 NEXT
  161. 11580 EEN=0
  162. 11590 WHILE NOT EOF(1)
  163. 11600   EEN=EEN+1
  164. 11610   INPUT #1, EEX(EEN), EEY(EEN), EE(EEN)
  165. 11620 WEND
  166. 11630 CLOSE
  167. 11640 GOSUB *DRAW.GRID
  168. 11650 GOSUB *DRAW.MAP
  169. 11660 *READ.ERROR
  170. 11670 RETURN
  171. 11680 '-------------------- WRITE MAP --------------------
  172. 11690 *WRITE.MAP
  173. 11700 OPEN "O", #1, FILE$+".DAT"
  174. 11710 FOR Y=0 TO NG-1
  175. 11720   FOR X=0 TO NG-1
  176. 11730     PRINT #1, GRID(X, Y)
  177. 11740   NEXT
  178. 11750 NEXT
  179. 11760 I=1
  180. 11770 WHILE I<=EEN
  181. 11780   IF EE(I)=-1 THEN *ENDIF1
  182. 11790     PRINT #1, EEX(I), EEY(I), EE(I)
  183. 11800   *ENDIF1
  184. 11810   I=I+1
  185. 11820 WEND
  186. 11830 CLOSE
  187. 11840 RETURN
  188. 11850 '-------------------- FAIR COPY --------------------
  189. 11860 *FAIR.COPY
  190. 11870 GOSUB *DRAW.GRID
  191. 11880 GOSUB *DRAW.MAP
  192. 11890 RETURN
  193. 11900 '-------------------- CLEAR MAP --------------------
  194. 11910 *CLEAR.MAP
  195. 11920 GOSUB *DRAW.GRID
  196. 11930 FOR Y=0 TO NG-1
  197. 11940   FOR X=0 TO NG-1
  198. 11950     GRID(X, Y)=0
  199. 11960   NEXT
  200. 11970 NEXT
  201. 11980 EEN=0
  202. 11990 RETURN
  203. 12000 '-------------------- HARD COPY --------------------
  204. 12010 *HARD
  205. 12020 HARDC 1
  206. 12030 RETURN
  207. 12040 '-------------------- TIFF SAVE --------------------
  208. 12050 *TIFF
  209. 12060 SAVE@ FILE$+".TIF", (0, 0)-(511, 399)
  210. 12070 RETURN
  211. 12080 '-------------------- DRAW MAP --------------------
  212. 12090 *DRAW.MAP
  213. 12100 FOR Y=0 TO NG-1
  214. 12110   FOR X=0 TO NG-1
  215. 12120     PP=GRID(X, Y)
  216. 12130     IF PP=0 THEN *ENDIF2
  217. 12140       SX=GL*X+GOX: SY=GL*Y+GOY
  218. 12150       GOSUB *PUT.PASSAGE
  219. 12160     *ENDIF2
  220. 12170   NEXT
  221. 12180 NEXT
  222. 12190 J=1
  223. 12200 WHILE J<=EEN
  224. 12210   IF EE(J)=-1 THEN *ENDIF3
  225. 12220     SX=GL*EEX(J)+GOX: SY=GL*EEY(J)+GOY
  226. 12230     EE=EE(J): GOSUB *PUT.ELEMENT
  227. 12240   *ENDIF3
  228. 12250   J=J+1
  229. 12260 WEND
  230. 12270 FOR Y=0 TO NG-1
  231. 12280   FOR X=0 TO NG-1
  232. 12290     PP=GRID(X, Y)
  233. 12300     IF PP=0 THEN *ENDIF4
  234. 12310       SX=GL*X+GOX: SY=GL*Y+GOY
  235. 12320       GOSUB *DRAW.BORDER
  236. 12330     *ENDIF4
  237. 12340   NEXT
  238. 12350 NEXT
  239. 12360 RETURN
  240. 12370 '--------------------- DRAW BORDER LINE ---------------------
  241. 12380 *DRAW.BORDER
  242. 12390 IF PP=>4 AND PP<=11 THEN GOSUB *ALTAR: RETURN
  243. 12400 IF X=0 THEN GOSUB *LEFT                                                     ELSE XX=GRID(X-1, Y):                                                       IF XX=0 OR (XX=>4 AND XX<=11 AND XX<>4 AND XX<>8) THEN GOSUB *LEFT
  244. 12410 IF X=NG-1 THEN GOSUB *RIGHT                                                 ELSE XX=GRID(X+1, Y):                                                       IF XX=0 OR (XX=>4 AND XX<=11 AND XX<>6 AND XX<>10) THEN GOSUB *RIGHT
  245. 12420 IF Y=0 THEN GOSUB *UPPER                                                    ELSE YY=GRID(X, Y-1):                                                       IF YY=0 OR (YY=>4 AND YY<=11 AND YY<>5 AND YY<>9) THEN GOSUB *UPPER
  246. 12430 IF Y=NG-1 THEN GOSUB *LOWER                                                 ELSE YY=GRID(X, Y+1):                                                       IF YY=0 OR (YY=>4 AND YY<=11 AND YY<>7 AND YY<>11) THEN GOSUB *LOWER
  247. 12440 RETURN
  248. 12450 '-------------------- INIT SCREEN --------------------
  249. 12460 *INIT.SCREEN
  250. 12461 LINE(0,0)-(511,399),PSET,%15,BF
  251. 12462 SYMBOL(1,392),"Dante",.9!,.5!,%10
  252. 12470 '-------------------- GRID
  253. 12480 GOSUB *DRAW.GRID
  254. 12490 FOR I=0 TO NG-1
  255. 12500   SYMBOL(1+GL*I+GOX, -12+GOY), RIGHT$(STR$(I+1), 2), .7!, .7!, %CN
  256. 12510   SYMBOL(-15+GOX, 3+GL*I+GOY), RIGHT$(STR$(I+1), 2), .7!, .7!, %CN
  257. 12520 NEXT
  258. 12530 '-------------------- TITLE
  259. 12540 LINE(SOX, SOY)-(41+SOX, 43+SOY), PSET, %CBK, BF
  260. 12550 LINE(1+SOX, 1+SOY)-(40+SOX, 42+SOY), PSET, %14, B
  261. 12560 SYMBOL(3+SOX, 5+SOY), "DUNGEON", .64!, 1, %10,,, 1
  262. 12570 SYMBOL(3+SOX, 5+SOY), "DUNGEON", .64!, 1, %14
  263. 12580 SYMBOL(6+SOX, 25+SOY), "MASTER", .64!, 1, %10,,, 1
  264. 12590 SYMBOL(6+SOX, 25+SOY), "MASTER", .64!, 1, %14
  265. 12600 '-------------------- COMPASS
  266. 12610 CIRCLE(COX, COY), 18, 0, 1.9!,,, F,, %CBK
  267. 12620 CIRCLE(COX, COY), 15, 0, 2!,,, F,, %12
  268. 12630 LINE(COX, -25+COY)-(COX, 17+COY), PSET, %CC
  269. 12640 LINE(-10+COX, COY)-(10+COX, COY), PSET, %CC
  270. 12650 LINE(COX, -25+COY)-(4+COX, -8+COY), PSET, %CC
  271. 12660 LINE(4+COX, -8+COY)-(-4+COX, -8+COY), PSET, %CC
  272. 12670 '-------------------- BACKGROUND OF BUTTONS
  273. 12680 LINE(POX-2, POY-2)-(TXL+TOX+2, TYL*NT+TOY+2), PSET, %CBK, BF
  274. 12690 '-------------------- PASSAGE
  275. 12700 FOR I=0 TO NPX
  276. 12710   LINE(PL*I+POX, POY)-(PL*I+POX, PL*NPY+POY), PSET, %CG
  277. 12720 NEXT
  278. 12730 FOR I=0 TO NPY
  279. 12740   LINE(POX, PL*I+POY)-(PL*NPX+POX, PL*I+POY), PSET, %CG
  280. 12750 NEXT
  281. 12760 PP=0
  282. 12770 FOR Y=0 TO NPY-1
  283. 12780   FOR X=0 TO NPX-1
  284. 12790     SX=2+PL*X+POX: SY=2+PL*Y+POY
  285. 12800     GOSUB *PUT.PASSAGE
  286. 12810     PP=PP+1
  287. 12820   NEXT
  288. 12830 NEXT
  289. 12840 '-------------------- DRAW MODE
  290. 12850 FOR I=0 TO NDX
  291. 12860   LINE(DL*I+DOX, DOY)-(DL*I+DOX, DL*NDY+DOY), PSET, %CG
  292. 12870   IF I=NDX THEN *ENDIF5
  293. 12880     READ D$
  294. 12890     SYMBOL(2+DL*I+DOX, 3+DOY), D$, .55!, .8!, %CS
  295. 12900   *ENDIF5
  296. 12910 NEXT
  297. 12920 DATA PUT, ERA
  298. 12930 FOR I=0 TO NDY
  299. 12940   LINE(DOX, DL*I+DOY)-(DL*NDX+DOX, DL*I+DOY), PSET, %CG
  300. 12950 NEXT
  301. 12960 '-------------------- ELEMENT
  302. 12970 FOR I=0 TO NEX
  303. 12980   LINE(EL*I+EOX, EOY)-(EL*I+EOX, EL*NEY+EOY), PSET, %CG
  304. 12990 NEXT
  305. 13000 FOR I=0 TO NEY
  306. 13010   LINE(EOX, EL*I+EOY)-(EL*NEX+EOX, EL*I+EOY), PSET, %CG
  307. 13020 NEXT
  308. 13030 EE=0
  309. 13040 FOR Y=0 TO NEY-1
  310. 13050   FOR X=0 TO NEX-1
  311. 13060     SX=2+EL*X+EOX: SY=2+EL*Y+EOY
  312. 13070     GOSUB *PUT.ELEMENT
  313. 13080     EE=EE+1
  314. 13090   NEXT
  315. 13100 NEXT
  316. 13110 '-------------------- FILE
  317. 13120 FOR I=0 TO NFX
  318. 13130   LINE(FL*I+FOX, FOY)-(FL*I+FOX, FL*NFY+FOY), PSET, %CG
  319. 13140 NEXT
  320. 13150 FOR I=0 TO NFY
  321. 13160   LINE(FOX, FL*I+FOY)-(FL*NFX+FOX, FL*I+FOY), PSET, %CG
  322. 13170 NEXT
  323. 13180 F=0
  324. 13190 FOR Y=0 TO NFY-1
  325. 13200   FOR X=0 TO NFX-1
  326. 13210     SYMBOL(2+FL*X+FOX, 3+FL*Y+FOY), RIGHT$(STR$(F), 2), .8!, .8!, %CS
  327. 13220     F=F+1
  328. 13230   NEXT
  329. 13240 NEXT
  330. 13250 '-------------------- TASK
  331. 13260 LINE(TOX, TOY)-(TOX, TYL*NT+TOY), PSET, %CG
  332. 13270 LINE(TXL+TOX, TOY)-(TXL+TOX, TYL*NT+TOY), PSET, %CG
  333. 13280 FOR I=0 TO NT
  334. 13290   LINE(TOX, TYL*I+TOY)-(TXL+TOX, TYL*I+TOY), PSET, %CG
  335. 13300   IF I=NT THEN *ENDIF6
  336. 13310     READ T$
  337. 13320     SYMBOL((TXL-6*LEN(T$))\2+TOX, 3+TYL*I+TOY), T$, .8!, .8!, %CS
  338. 13330   *ENDIF6
  339. 13340 NEXT
  340. 13350 DATA READ, WRITE, FAIR COPY, CLEAR, HARD COPY, TIFF SAVE
  341. 13360 RETURN
  342. 13370 '-------------------- DRAW GRID --------------------
  343. 13380 *DRAW.GRID
  344. 13390 LINE(-2+GOX, -2+GOY)-(2+GL*NG+GOX, 2+GL*NG+GOY), PSET, %CBK, BF
  345. 13400 FOR I=0 TO NG
  346. 13410   LINE(GL*I+GOX, GOY)-(GL*I+GOX, GL*NG+GOY), PSET, %CG
  347. 13420   LINE(GOX, GL*I+GOY)-(GL*NG+GOX, GL*I+GOY), PSET, %CG
  348. 13430 NEXT
  349. 13440 RETURN
  350. 13450 '-------------------- PUT PASSAGE --------------------
  351. 13460 *PUT.PASSAGE
  352. 13470 ON PP+1 GOSUB *P0, *P1, *P2, *P3, *P4, *P5, *P6, *P7, *P8, *P9, *P10,         *P11
  353. 13480 RETURN
  354. 13490 '-------------------- PUT ELEMENT --------------------
  355. 13500 *PUT.ELEMENT
  356. 13510 ON EE+1 GOSUB *E0, *E1, *E2, *E3, *E4, *E5, *E6, *E7, *E8, *E9, *E10,         *E11, *E12, *E13, *E14, *E15, *E16, *E17, *E18, *E19, *E20, *E21,           *E22, *E23, *E24, *E25, *E26, *E27, *E28, *E29, *E30, *E31
  357. 13520 RETURN
  358. 13530 '-------------------- BORDER: ALTAR --------------------
  359. 13540 *ALTAR
  360. 13550 IF PP>=8 THEN PP=PP-4
  361. 13560 ON PP-3 GOSUB *A0, *A1, *A2, *A3
  362. 13570 RETURN
  363. 13580 '-------------------- REVERSE FOR PASSAGE --------------------
  364. 13590 *REVERSE.PASSAGE
  365. 13600 SX=PL*PX+POX: SY=PL*PY+POY
  366. 13610 LINE(SX, SY)-(PL+SX, PL+SY), XOR, %CR, BF
  367. 13620 RETURN
  368. 13630 '-------------------- REVERSE FOR DRAW MODE --------------------
  369. 13640 *REVERSE.MODE
  370. 13650 SX=DL*DX+DOX: SY=DL*DY+DOY
  371. 13660 LINE(SX, SY)-(DL+SX, DL+SY), XOR, %CR, BF
  372. 13670 RETURN
  373. 13680 '-------------------- REVERSE FOR ELEMENT --------------------
  374. 13690 *REVERSE.ELEMENT
  375. 13700 SX=EL*EX+EOX: SY=EL*EY+EOY
  376. 13710 LINE(SX, SY)-(PL+SX, PL+SY), XOR, %CR, BF
  377. 13720 RETURN
  378. 13730 '-------------------- REVERSE FOR FILE --------------------
  379. 13740 *REVERSE.FILE
  380. 13750 SX=FL*FX+FOX: SY=FL*FY+FOY
  381. 13760 LINE(SX, SY)-(FL+SX, FL+SY), XOR, %CR, BF
  382. 13770 RETURN
  383. 13780 '-------------------- REVERSE FOR TASK --------------------
  384. 13790 *REVERSE.TASK
  385. 13800 SX=TOX: SY=TYL*TY+TOY
  386. 13810 LINE(SX, SY)-(TXL+SX, TYL+SY), XOR, %CR, BF
  387. 13820 RETURN
  388. 13830 '-------------------- FLOOR NUMBER --------------------
  389. 13840 *FLOOR.NUMBER
  390. 13850 LINE(NOX, NOY)-(36+NOX, 22+NOY), PSET, %CBK, BF
  391. 13860 LINE(2+NOX, 2+NOY)-(34+NOX, 20+NOY), PSET, 7, B
  392. 13870 IF F=0 THEN N$="1F"                                                                ELSE N$="B"+MID$(STR$(F), 2)+"F"
  393. 13880 SYMBOL(1+(35-LEN(N$)*8)\2+NOX, 4+NOY), N$, 1, 1, %15,,, 1
  394. 13890 RETURN
  395. 13900 '-------------------- PASSAGE 0: BACKGROUND --------------------
  396. 13910 *P0
  397. 13920 LINE(SX, SY)-(GL+SX, GL+SY), PSET, %CBK, BF
  398. 13930 LINE(SX, SY)-(GL+SX, GL+SY), PSET, %CG, B
  399. 13940 RETURN
  400. 13950 '-------------------- PASSAGE 1: PASSAGE --------------------
  401. 13960 *P1
  402. 13970 LINE(SX, SY)-(GL+SX, GL+SY), PSET, %CP, BF
  403. 13980 RETURN
  404. 13990 '-------------------- PASSAGE 2: STAIRS --------------------
  405. 14000 *P2
  406. 14010 LINE(SX, SY)-(GL+SX, GL+SY), PSET, %CP, BF
  407. 14020 SYMBOL(SX+2, SY+2), "Up", .6!, .6!, %CE
  408. 14030 '
  409. 14040 '
  410. 14050 RETURN
  411. 14060 '-------------------- PASSAGE 3: STAIRS --------------------
  412. 14070 *P3
  413. 14080 LINE(SX, SY)-(GL+SX, GL+SY), PSET, %CP, BF
  414. 14090 SYMBOL(SX+2, SY+2), "Dn", .6!, .6!, %CE
  415. 14100 '
  416. 14110 '
  417. 14120 RETURN
  418. 14130 '-------------------- PASSAGE 4: ALTAR --------------------
  419. 14140 *P4
  420. 14150 CONNECT(GL+SX, 2+SY)-(GL+SX, -2+GL+SY)-(-4+GL+SX, -3+GL+SY)-                  (-4+GL+SX, 3+SY)-(GL+SX, 2+SY), %CP, PSET, F, %CP
  421. 14160 RETURN
  422. 14170 '-------------------- PASSAGE 5: ALTAR --------------------
  423. 14180 *P5
  424. 14190 CONNECT(2+SX, GL+SY)-(-2+GL+SX, GL+SY)-(-3+GL+SX, -4+GL+SY)-                  (3+SX, -4+GL+SY)-(2+SX, GL+SY), %CP, PSET, F, %CP
  425. 14200 RETURN
  426. 14210 '-------------------- PASSAGE 6: ALTAR --------------------
  427. 14220 *P6
  428. 14230 CONNECT(SX, 2+SY)-(SX, -2+GL+SY)-(4+SX, -3+GL+SY)-                            (4+SX, 3+SY)-(SX, 2+SY), %CP, PSET, F, %CP
  429. 14240 RETURN
  430. 14250 '-------------------- PASSAGE 7: ALTAR --------------------
  431. 14260 *P7
  432. 14270 CONNECT(2+SX, SY)-(-2+GL+SX, SY)-(-3+GL+SX, 4+SY)-                            (3+SX, 4+SY)-(2+SX, SY), %CP, PSET, F, %CP
  433. 14280 RETURN
  434. 14290 '-------------------- PASSAGE 8: VI ALTAR --------------------
  435. 14300 *P8
  436. 14310 CONNECT(GL+SX, 2+SY)-(GL+SX, -2+GL+SY)-(-4+GL+SX, -3+GL+SY)-                  (-4+GL+SX, 3+SY)-(GL+SX, 2+SY), %CP, PSET, F, %CP
  437. 14320 LINE(-2+GL+SX, 2+SY)-(-2+GL+SX, 4+SY), PSET, %CE
  438. 14330 LINE(-2+GL+SX, -2+GL+SY)-(-2+GL+SX, -4+GL+SY), PSET, %CE
  439. 14340 RETURN
  440. 14350 '-------------------- PASSAGE 9: VI ALTAR --------------------
  441. 14360 *P9
  442. 14370 CONNECT(2+SX, GL+SY)-(-2+GL+SX, GL+SY)-(-3+GL+SX, -4+GL+SY)-                  (3+SX, -4+GL+SY)-(2+SX, GL+SY), %CP, PSET, F, %CP
  443. 14380 LINE(2+SX, -2+GL+SY)-(4+SX, -2+GL+SY), PSET, %CE
  444. 14390 LINE(-2+GL+SX, -2+GL+SY)-(-4+GL+SX, -2+GL+SY), PSET, %CE
  445. 14400 RETURN
  446. 14410 '-------------------- PASSAGE 10: VI ALTAR --------------------
  447. 14420 *P10
  448. 14430 CONNECT(SX, 2+SY)-(SX, -2+GL+SY)-(4+SX, -3+GL+SY)-                            (4+SX, 3+SY)-(SX, 2+SY), %CP, PSET, F, %CP
  449. 14440 LINE(2+SX, 2+SY)-(2+SX, 4+SY), PSET, %CE
  450. 14450 LINE(2+SX, -2+GL+SY)-(2+SX, -4+GL+SY), PSET, %CE
  451. 14460 RETURN
  452. 14470 '-------------------- PASSAGE 11: VI ALTAR --------------------
  453. 14480 *P11
  454. 14490 CONNECT(2+SX, SY)-(-2+GL+SX, SY)-(-3+GL+SX, 4+SY)-                            (3+SX, 4+SY)-(2+SX, SY), %CP, PSET, F, %CP
  455. 14500 LINE(2+SX, 2+SY)-(4+SX, 2+SY), PSET, %CE
  456. 14510 LINE(-2+GL+SX, 2+SY)-(-4+GL+SX, 2+SY), PSET, %CE
  457. 14520 RETURN
  458. 14530 '-------------------- ELEMENT 0: HIDDEN WALL --------------------
  459. 14540 *E0
  460. 14550 FOR I=0 TO 2
  461. 14551   LINE(2+4*I+SX, SY)-(2+4*I+SX, GL+SY), PSET, %CE
  462. 14552   LINE(SX, 2+4*I+SY)-(GL+SX, 2+4*I+SY), PSET, %CE
  463. 14553 NEXT
  464. 14560 RETURN
  465. 14570 '-------------------- ELEMENT 1: INVISIBLE WALL --------------------
  466. 14580 *E1
  467. 14590 LINE(SX, SY)-(GL+SX, GL+SY), PSET, %CE
  468. 14591 LINE(SX, GL+SY)-(GL+SX, SY), PSET, %CE
  469. 14600 RETURN
  470. 14610 '-------------------- ELEMENT 2: WARP ZONE --------------------
  471. 14620 *E2
  472. 14630 FOR I=0 TO 5
  473. 14631   LINE(1+SX, 1+2*I+SY)-(-1+GL+SX, 1+2*I+SY), PSET, %CE, B, &HAAAA
  474. 14632 NEXT
  475. 14640 RETURN
  476. 14650 '-------------------- ELEMENT 3: BLACK GHOST --------------------
  477. 14660 *E3
  478. 14670 CIRCLE(GL\2+SX, GL\2+SY), 3, %CE
  479. 14671 CIRCLE(GL\2+SX, GL\2+SY), 6, %CE
  480. 14680 RETURN
  481. 14690 '-------------------- ELEMENT 4: TURN TABLE --------------------
  482. 14700 *E4
  483. 14710 CIRCLE(GL\2+SX, GL\2+SY), 5, %CE, 1, .5!, .25!
  484. 14711 CONNECT(GL\2+SX, 2+GL\2+SY)-(GL\2+SX, 6+GL\2+SY)-(4+GL\2+SX, 6+GL\2+SY), %CE
  485. 14720 RETURN
  486. 14730 '-------------------- ELEMENT 5: HIDDEN SWITCH --------------------
  487. 14740 *E5
  488. 14750 CIRCLE(GL\2+SX, GL\2+SY), 2, %CE
  489. 14760 RETURN
  490. 14770 '-------------------- ELEMENT 6: ITEMS --------------------
  491. 14780 *E6
  492. 14790 SYMBOL(2+SX, 2+SY), "I", .6!, .6!, %CE
  493. 14800 RETURN
  494. 14810 '-------------------- ELEMENT 7: UNIDENTIFIED -------------------
  495. 14820 *E7
  496. 14830 SYMBOL(2+SX, 2+SY), "?", .6!, .6!, %CE
  497. 14840 RETURN
  498. 14850 '-------------------- ELEMENT 8: DOOR --------------------
  499. 14860 *E8
  500. 14870 LINE(GL\2+SX, SY)-(GL\2+SX, GL+SY), PSET, %CE
  501. 14880 RETURN
  502. 14890 '-------------------- ELEMENT 9: DOOR --------------------
  503. 14900 *E9
  504. 14910 LINE(SX, GL\2+SY)-(GL+SX, GL\2+SY), PSET, %CE
  505. 14920 RETURN
  506. 14930 '-------------------- ELEMENT 10: WOODEN DOOR --------------------
  507. 14940 *E10
  508. 14950 LINE(-1+GL\2+SX, SY)-(-1+GL\2+SX, GL+SY), PSET, %CE
  509. 14960 LINE(1+GL\2+SX, SY)-(1+GL\2+SX, GL+SY), PSET, %CE
  510. 14970 RETURN
  511. 14980 '-------------------- ELEMENT 11: WOODEN DOOR --------------------
  512. 14990 *E11
  513. 15000 LINE(SX, -1+GL\2+SY)-(GL+SX, -1+GL\2+SY), PSET, %CE
  514. 15010 LINE(SX, 1+GL\2+SY)-(GL+SX, 1+GL\2+SY), PSET, %CE
  515. 15020 RETURN
  516. 15030 '-------------------- ELEMENT 12: DOOR WITH BUTTONS -----------------
  517. 15040 *E12
  518. 15050 LINE(GL\2+SX, SY)-(GL\2+SX, GL+SY), PSET, %CE
  519. 15060 LINE(-1+GL\2+SX, -2+GL+SY)-(-2+GL\2+SX, -4+GL+SY), PSET, %CE, BF
  520. 15070 LINE(1+GL\2+SX, 2+SY)-(2+GL\2+SX, 4+SY), PSET, %CE, BF
  521. 15080 RETURN
  522. 15090 '-------------------- ELEMENT 13: DOOR WITH BUTTONS -----------------
  523. 15100 *E13
  524. 15110 LINE(SX, GL\2+SY)-(GL+SX, GL\2+SY), PSET, %CE
  525. 15120 LINE(2+SX, -1+GL\2+SY)-(4+SX, -2+GL\2+SY), PSET, %CE, BF
  526. 15130 LINE(-2+GL+SX, 1+GL\2+SY)-(-4+GL+SX, 2+GL\2+SY), PSET, %CE, BF
  527. 15140 RETURN
  528. 15150 '-------------------- ELEMENT 14: PIT --------------------
  529. 15160 *E14
  530. 15170 LINE(4+SX, 4+SY)-(-4+GL+SX, -4+GL+SY), PSET, %CE, BF
  531. 15180 RETURN
  532. 15190 '-------------------- ELEMENT 15: FLOOR SWITCH --------------------
  533. 15200 *E15
  534. 15210 LINE(4+SX, 4+SY)-(-4+GL+SX, -4+GL+SY), PSET, %CE, B
  535. 15220 RETURN
  536. 15230 '-------------------- ELEMENT 16: BUTTON --------------------
  537. 15240 *E16
  538. 15250 LINE(GL+SX, -1+GL\2+SY)-(-2+GL+SX, 1+GL\2+SY), PSET, %CE, BF
  539. 15260 RETURN
  540. 15270 '-------------------- ELEMENT 17: BUTTON --------------------
  541. 15280 *E17
  542. 15290 LINE(-1+GL\2+SX, GL+SY)-(1+GL\2+SX, -2+GL+SY), PSET, %CE, BF
  543. 15300 RETURN
  544. 15310 '-------------------- ELEMENT 18: BUTTON --------------------
  545. 15320 *E18
  546. 15330 LINE(SX, -1+GL\2+SY)-(2+SX, 1+GL\2+SY), PSET, %CE, BF
  547. 15340 RETURN
  548. 15350 '-------------------- ELEMENT 19: BUTTON --------------------
  549. 15360 *E19
  550. 15370 LINE(-1+GL\2+SX, SY)-(1+GL\2+SX, 2+SY), PSET, %CE, BF
  551. 15380 RETURN
  552. 15390 '-------------------- ELEMENT 20: MESSAGE --------------------
  553. 15400 *E20
  554. 15410 LINE(GL+SX, GL\2+SY)-(-4+GL+SX, GL\2+SY), PSET, %CE
  555. 15420 RETURN
  556. 15430 '-------------------- ELEMENT 21: MESSAGE --------------------
  557. 15440 *E21
  558. 15450 LINE(GL\2+SX, GL+SY)-(GL\2+SX, -4+GL+SY), PSET, %CE
  559. 15460 RETURN
  560. 15470 '-------------------- ELEMENT 22: MESSAGE --------------------
  561. 15480 *E22
  562. 15490 LINE(SX, GL\2+SY)-(4+SX, GL\2+SY), PSET, %CE
  563. 15500 RETURN
  564. 15510 '-------------------- ELEMENT 23: MESSAGE --------------------
  565. 15520 *E23
  566. 15530 LINE(GL\2+SX, SY)-(GL\2+SX, 4+SY), PSET, %CE
  567. 15540 RETURN
  568. 15550 '-------------------- ELEMENT 24: LOCK --------------------
  569. 15560 *E24
  570. 15570 LINE(GL+SX, -1+GL\2+SY)-(-2+GL+SX, -1+GL\2+SY), PSET, %CE
  571. 15580 LINE(GL+SX, 1+GL\2+SY)-(-2+GL+SX, 1+GL\2+SY), PSET, %CE
  572. 15590 RETURN
  573. 15600 '-------------------- ELEMENT 25: LOCK --------------------
  574. 15610 *E25
  575. 15620 LINE(-1+GL\2+SX, GL+SY)-(-1+GL\2+SX, -2+GL+SY), PSET, %CE
  576. 15630 LINE(1+GL\2+SX, GL+SY)-(1+GL\2+SX, -2+GL+SY), PSET, %CE
  577. 15640 RETURN
  578. 15650 '-------------------- ELEMENT 26: LOCK --------------------
  579. 15660 *E26
  580. 15670 LINE(SX, -1+GL\2+SY)-(2+SX, -1+GL\2+SY), PSET, %CE
  581. 15680 LINE(SX, 1+GL\2+SY)-(2+SX, 1+GL\2+SY), PSET, %CE
  582. 15690 RETURN
  583. 15700 '-------------------- ELEMENT 27: LOCK --------------------
  584. 15710 *E27
  585. 15720 LINE(-1+GL\2+SX, SY)-(-1+GL\2+SX, 2+SY), PSET, %CE
  586. 15730 LINE(1+GL\2+SX, SY)-(1+GL\2+SX, 2+SY), PSET, %CE
  587. 15740 RETURN
  588. 15750 '-------------------- ELEMENT 28: FOUNTAIN --------------------
  589. 15760 *E28
  590. 15770 CIRCLE(GL+SX, GL\2+SY), 3, %CE, 1, .25!, .75!
  591. 15780 RETURN
  592. 15790 '-------------------- ELEMENT 28: FOUNTAIN --------------------
  593. 15800 *E29
  594. 15810 CIRCLE(GL\2+SX, GL+SY), 3, %CE, 1, .5!, 1
  595. 15820 RETURN
  596. 15830 '-------------------- ELEMENT 28: FOUNTAIN --------------------
  597. 15840 *E30
  598. 15850 CIRCLE(SX, GL\2+SY), 3, %CE, 1, .75!, .25!
  599. 15860 RETURN
  600. 15870 '-------------------- ELEMENT 28: FOUNTAIN --------------------
  601. 15880 *E31
  602. 15890 CIRCLE(GL\2+SX, SY), 3, %CE, 1, 0, .5!
  603. 15900 RETURN
  604. 15910 '-------------------- BORDER: LEFT LINE --------------------
  605. 15920 *LEFT
  606. 15930 SX=GL*X+GOX: SY=GL*Y+GOY
  607. 15940 LINE(SX, SY)-(SX, GL+SY), PSET, %CB
  608. 15950 RETURN
  609. 15960 '-------------------- BORDER: RIGHT LINE --------------------
  610. 15970 *RIGHT
  611. 15980 SX=GL*X+GOX: SY=GL*Y+GOY
  612. 15990 LINE(GL+SX, SY)-(GL+SX, GL+SY), PSET, %CB
  613. 16000 RETURN
  614. 16010 '-------------------- BORDER: UPPER LINE --------------------
  615. 16020 *UPPER
  616. 16030 SX=GL*X+GOX: SY=GL*Y+GOY
  617. 16040 LINE(SX, SY)-(GL+SX, SY), PSET, %CB
  618. 16050 RETURN
  619. 16060 '-------------------- BORDER: LOWER LINE --------------------
  620. 16070 *LOWER
  621. 16080 SX=GL*X+GOX: SY=GL*Y+GOY
  622. 16090 LINE(SX, GL+SY)-(GL+SX, GL+SY), PSET, %CB
  623. 16100 RETURN
  624. 16110 '-------------------- BORDER: ALTAR 0 --------------------
  625. 16120 *A0
  626. 16130 CONNECT(GL+SX, -1+GL+SY)-(-5+GL+SX, -2+GL+SY)-(-5+GL+SX, 2+SY)-               (GL+SX, 1+SY), %CB
  627. 16140 RETURN
  628. 16150 '-------------------- BORDER: ALTAR 1 --------------------
  629. 16160 *A1
  630. 16170 CONNECT(-1+GL+SX, GL+SY)-(-2+GL+SX, -5+GL+SY)-(2+SX, -5+GL+SY)-               (1+SX, GL+SY), %CB
  631. 16180 RETURN
  632. 16190 '-------------------- BORDER: ALTAR 2 --------------------
  633. 16200 *A2
  634. 16210 CONNECT(SX, -1+GL+SY)-(5+SX, -2+GL+SY)-(5+SX, 2+SY)-(SX, 1+SY), %CB
  635. 16220 RETURN
  636. 16230 '-------------------- BORDER: ALTAR 3 --------------------
  637. 16240 *A3
  638. 16250 CONNECT(-1+GL+SX, SY)-(-2+GL+SX, 5+SY)-(2+SX, 5+SY)-(1+SX, SY), %CB
  639. 16260 RETURN
  640. 16270 '-------------------- ERROR ROUTINE --------------------
  641. 16280 *ERROR
  642. 16290 IF ERR=63 THEN RESUME *READ.ERROR
  643. 16300 IF ERR=64 AND ERL=11700 THEN KILL FILE$+".DAT": RESUME
  644. 16310 IF ERR=64 AND ERL=12060 THEN KILL FILE$+".TIF": RESUME
  645. 16320 '
  646. 16330 CLS
  647. 16340 COLOR 2: PRINT "ERL:"; ERL; "  ERR:"; ERR
  648. 16350 END
  649.