home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FreeWare Collection 2
/
FreeSoftwareCollection2pd199x-jp.img
/
fbasic
/
dmw3
/
dmw3.bas
< prev
next >
Wrap
BASIC Source File
|
1990-06-14
|
25KB
|
649 lines
10000 '--------------------------------------------------------------------
10010 '
10020 ' DUNGEON MASTER MAP WRITER (DMW.BAS)
10030 '
10040 ' written by タケ (NAA01070)
10050 '--------------------------------------------------------------------
10051 ' 改造 by Dante(PEE01022)
10052 '--------------------------------------------------------------------
10060 ON ERROR GOTO *ERROR
10070 SCREEN@ 0
10080 COLOR 0, 0, 0
10090 CLS
10100 '
10110 CBK=5 'COLOR OF BACKGROUND
10120 CG=0 'COLOR OF GRID
10130 CP=15 'COLOR OF PASSAGE
10140 CB=10 'COLOR OF BORDER LINE
10150 CE=0 'COLOR OF ELEMENT
10160 CN=0 'COLOR OF NUMBER
10170 CS=0 'COLOR OF SYMBOL
10180 CR=15 'COLOR FOR REVERSE
10190 CC=0 'COLOR OF COMPASS
10200 '
10210 GL=12: NG=32 'GRID
10220 GOX=54: GOY=13
10230 DIM GRID(NG, NG)
10240 PL=16: NPX=4: NPY=3 'PASSAGE
10250 POX=445: POY=6
10260 DL=16: NDX=2: NDY=1 'DRAW MODE
10270 DOX=445: DOY=61
10280 EL=16: NEX=4: NEY=8 'ELEMENT
10290 EOX=445: EOY=81
10300 MAXE=2000
10310 DIM EEX(MAXE), EEY(MAXE), EE(MAXE)
10320 FL=16: NFX=4: NFY=4 'FILE
10330 FOX=445: FOY=228
10340 TXL=64: TYL=16: NT=6 'TASK
10350 TOX=445: TOY=301
10360 SOX=1: SOY=42 'TITLE
10370 NOX=1: NOY=123 'FLOOR NUMBER
10380 COX=19: COY=260 'COMPASS
10390 '-------------------- MAIN ROUTINE --------------------
10400 GOSUB *INIT.SCREEN
10410 '
10420 SFLG=0
10430 P=0: PX=0: PY=0
10440 GOSUB *REVERSE.PASSAGE
10450 DFLG=0
10460 DX=0: DY=0
10470 GOSUB *REVERSE.MODE
10480 EEN=0
10490 F=0: FX=0: FY=0: FILE$="DMMAP0"
10500 GOSUB *REVERSE.FILE
10510 GOSUB *FLOOR.NUMBER
10520 '
10530 MOUSE 0
10540 MOUSE 1, GOX, GOY, 1
10550 WHILE NOT(MOUSE(2, 0) AND MOUSE(2, 1))
10560 IF MOUSE(2, 0) THEN GOSUB *LEFT.BUTTON
10570 FOR WW=0 TO 200: W=W+1: NEXT
10580 WEND
10590 MOUSE 5
10600 '
10610 END
10620 '-------------------- LEFT BUTTON --------------------
10630 *LEFT.BUTTON
10640 MX=MOUSE(4, 0): MY=MOUSE(5, 0)
10650 IF MX>GOX AND MX<GL*NG+GOX AND MY>GOY AND MY<GL*NG+GOY THEN GOSUB *SELECT.GRID
10660 IF MX>POX AND MX<PL*NPX+POX AND MY>POY AND MY<PL*NPY+POY THEN GOSUB *SELECT.PASSAGE
10670 IF MX>DOX AND MX<DL*NDX+DOX AND MY>DOY AND MY<DL*NDY+DOY THEN GOSUB *SELECT.MODE
10680 IF MX>EOX AND MX<EL*NEX+EOX AND MY>EOY AND MY<EL*NEY+EOY THEN GOSUB *SELECT.ELEMENT
10690 IF MX>FOX AND MX<FL*NFX+FOX AND MY>FOY AND MY<FL*NFY+FOY THEN GOSUB *SELECT.FILE
10700 IF MX>TOX AND MX<TXL+TOX AND MY>TOY AND MY<TYL*NT+TOY THEN GOSUB *SELECT.TASK
10710 RETURN
10720 '--------------------- SELECT GRID --------------------
10730 *SELECT.GRID
10740 IF ((MX-GOX) MOD GL)=0 OR ((MY-GOY) MOD GL)=0 THEN RETURN
10750 GX=(MX-GOX)\GL: GY=(MY-GOY)\GL
10760 SX=GL*GX+GOX: SY=GL*GY+GOY
10770 IF SFLG=0 THEN GOSUB *DRAW.PASSAGE ELSE IF DFLG=0 THEN GOSUB *DRAW.ELEMENT ELSE GOSUB *ERASE.ELEMENT
10780 RETURN
10790 '-------------------- DRAW PASSAGE --------------------
10800 *DRAW.PASSAGE
10810 PP=0: GOSUB *PUT.PASSAGE
10820 GRID(GX, GY)=P
10830 PP=P: GOSUB *PUT.PASSAGE
10840 RETURN
10850 '-------------------- DRAW ELEMENT --------------------
10860 *DRAW.ELEMENT
10870 IF EEN=MAXE THEN RETURN
10880 EEN=EEN+1
10890 EEX(EEN)=GX: EEY(EEN)=GY
10900 EE(EEN)=E
10910 EE=E: GOSUB *PUT.ELEMENT
10920 RETURN
10930 '--------------------- ERASE.ELEMENT ---------------------
10940 *ERASE.ELEMENT
10950 FOR N=1 TO EEN
10960 IF EEX(N)=GX AND EEY(N)=GY AND EE(N)=E THEN *ERASE
10970 NEXT
10980 *ERASE
10990 EE=EE(N)
11000 EE(N)=-1
11010 HLD=CE: CE=CP
11020 GOSUB *PUT.ELEMENT
11030 CE=HLD
11040 RETURN
11050 '--------------------- SELECT DRAW MODE --------------------
11060 *SELECT.MODE
11070 IF ((MX-DOX) MOD DL)=0 OR ((MY-DOY) MOD DL)=0 THEN RETURN
11080 GOSUB *REVERSE.MODE
11090 DX=(MX-DOX)\DL: DY=(MY-DOY)\DL
11100 DFLG=NDX*DY+DX
11110 GOSUB *REVERSE.MODE
11120 RETURN
11130 '--------------------- SELECT PASSAGE --------------------
11140 *SELECT.PASSAGE
11150 IF ((MX-POX) MOD PL)=0 OR ((MY-POY) MOD PL)=0 THEN RETURN
11160 IF SFLG=0 THEN GOSUB *REVERSE.PASSAGE ELSE GOSUB *REVERSE.ELEMENT
11170 SFLG=0
11180 PX=(MX-POX)\PL: PY=(MY-POY)\PL
11190 P=NPX*PY+PX
11200 GOSUB *REVERSE.PASSAGE
11210 RETURN
11220 '--------------------- SELECT ELEMENT --------------------
11230 *SELECT.ELEMENT
11240 IF ((MX-EOX) MOD EL)=0 OR ((MY-EOY) MOD EL)=0 THEN RETURN
11250 IF SFLG=1 THEN GOSUB *REVERSE.ELEMENT ELSE GOSUB *REVERSE.PASSAGE
11260 SFLG=1
11270 EX=(MX-EOX)\EL: EY=(MY-EOY)\EL
11280 E=NEX*EY+EX
11290 GOSUB *REVERSE.ELEMENT
11300 RETURN
11310 '-------------------- SELECT FILE --------------------
11320 *SELECT.FILE
11330 IF ((MX-FOX) MOD FL)=0 OR ((MY-FOY) MOD FL)=0 THEN RETURN
11340 GOSUB *REVERSE.FILE
11350 FX=(MX-FOX)\FL: FY=(MY-FOY)\FL
11360 F=NFX*FY+FX
11370 FILE$="DMMAP"+MID$(STR$(F), 2)
11380 GOSUB *REVERSE.FILE
11390 GOSUB *FLOOR.NUMBER
11400 RETURN
11410 '-------------------- SELECT TASK --------------------
11420 *SELECT.TASK
11430 IF ((MY-TOY) MOD TYL)=0 THEN RETURN
11440 TY=(MY-TOY)\TYL
11450 T=TY
11460 GOSUB *REVERSE.TASK
11470 ON T+1 GOSUB *READ.MAP, *WRITE.MAP, *FAIR.COPY, *CLEAR.MAP, *HARD, *TIFF
11480 GOSUB *REVERSE.TASK
11490 RETURN
11500 '-------------------- READ MAP --------------------
11510 *READ.MAP
11520 OPEN "I", #1, FILE$+".DAT"
11530 FOR Y=0 TO NG-1
11540 FOR X=0 TO NG-1
11550 INPUT #1, GRID(X, Y)
11560 NEXT
11570 NEXT
11580 EEN=0
11590 WHILE NOT EOF(1)
11600 EEN=EEN+1
11610 INPUT #1, EEX(EEN), EEY(EEN), EE(EEN)
11620 WEND
11630 CLOSE
11640 GOSUB *DRAW.GRID
11650 GOSUB *DRAW.MAP
11660 *READ.ERROR
11670 RETURN
11680 '-------------------- WRITE MAP --------------------
11690 *WRITE.MAP
11700 OPEN "O", #1, FILE$+".DAT"
11710 FOR Y=0 TO NG-1
11720 FOR X=0 TO NG-1
11730 PRINT #1, GRID(X, Y)
11740 NEXT
11750 NEXT
11760 I=1
11770 WHILE I<=EEN
11780 IF EE(I)=-1 THEN *ENDIF1
11790 PRINT #1, EEX(I), EEY(I), EE(I)
11800 *ENDIF1
11810 I=I+1
11820 WEND
11830 CLOSE
11840 RETURN
11850 '-------------------- FAIR COPY --------------------
11860 *FAIR.COPY
11870 GOSUB *DRAW.GRID
11880 GOSUB *DRAW.MAP
11890 RETURN
11900 '-------------------- CLEAR MAP --------------------
11910 *CLEAR.MAP
11920 GOSUB *DRAW.GRID
11930 FOR Y=0 TO NG-1
11940 FOR X=0 TO NG-1
11950 GRID(X, Y)=0
11960 NEXT
11970 NEXT
11980 EEN=0
11990 RETURN
12000 '-------------------- HARD COPY --------------------
12010 *HARD
12020 HARDC 1
12030 RETURN
12040 '-------------------- TIFF SAVE --------------------
12050 *TIFF
12060 SAVE@ FILE$+".TIF", (0, 0)-(511, 399)
12070 RETURN
12080 '-------------------- DRAW MAP --------------------
12090 *DRAW.MAP
12100 FOR Y=0 TO NG-1
12110 FOR X=0 TO NG-1
12120 PP=GRID(X, Y)
12130 IF PP=0 THEN *ENDIF2
12140 SX=GL*X+GOX: SY=GL*Y+GOY
12150 GOSUB *PUT.PASSAGE
12160 *ENDIF2
12170 NEXT
12180 NEXT
12190 J=1
12200 WHILE J<=EEN
12210 IF EE(J)=-1 THEN *ENDIF3
12220 SX=GL*EEX(J)+GOX: SY=GL*EEY(J)+GOY
12230 EE=EE(J): GOSUB *PUT.ELEMENT
12240 *ENDIF3
12250 J=J+1
12260 WEND
12270 FOR Y=0 TO NG-1
12280 FOR X=0 TO NG-1
12290 PP=GRID(X, Y)
12300 IF PP=0 THEN *ENDIF4
12310 SX=GL*X+GOX: SY=GL*Y+GOY
12320 GOSUB *DRAW.BORDER
12330 *ENDIF4
12340 NEXT
12350 NEXT
12360 RETURN
12370 '--------------------- DRAW BORDER LINE ---------------------
12380 *DRAW.BORDER
12390 IF PP=>4 AND PP<=11 THEN GOSUB *ALTAR: RETURN
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
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
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
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
12440 RETURN
12450 '-------------------- INIT SCREEN --------------------
12460 *INIT.SCREEN
12461 LINE(0,0)-(511,399),PSET,%15,BF
12462 SYMBOL(1,392),"Dante",.9!,.5!,%10
12470 '-------------------- GRID
12480 GOSUB *DRAW.GRID
12490 FOR I=0 TO NG-1
12500 SYMBOL(1+GL*I+GOX, -12+GOY), RIGHT$(STR$(I+1), 2), .7!, .7!, %CN
12510 SYMBOL(-15+GOX, 3+GL*I+GOY), RIGHT$(STR$(I+1), 2), .7!, .7!, %CN
12520 NEXT
12530 '-------------------- TITLE
12540 LINE(SOX, SOY)-(41+SOX, 43+SOY), PSET, %CBK, BF
12550 LINE(1+SOX, 1+SOY)-(40+SOX, 42+SOY), PSET, %14, B
12560 SYMBOL(3+SOX, 5+SOY), "DUNGEON", .64!, 1, %10,,, 1
12570 SYMBOL(3+SOX, 5+SOY), "DUNGEON", .64!, 1, %14
12580 SYMBOL(6+SOX, 25+SOY), "MASTER", .64!, 1, %10,,, 1
12590 SYMBOL(6+SOX, 25+SOY), "MASTER", .64!, 1, %14
12600 '-------------------- COMPASS
12610 CIRCLE(COX, COY), 18, 0, 1.9!,,, F,, %CBK
12620 CIRCLE(COX, COY), 15, 0, 2!,,, F,, %12
12630 LINE(COX, -25+COY)-(COX, 17+COY), PSET, %CC
12640 LINE(-10+COX, COY)-(10+COX, COY), PSET, %CC
12650 LINE(COX, -25+COY)-(4+COX, -8+COY), PSET, %CC
12660 LINE(4+COX, -8+COY)-(-4+COX, -8+COY), PSET, %CC
12670 '-------------------- BACKGROUND OF BUTTONS
12680 LINE(POX-2, POY-2)-(TXL+TOX+2, TYL*NT+TOY+2), PSET, %CBK, BF
12690 '-------------------- PASSAGE
12700 FOR I=0 TO NPX
12710 LINE(PL*I+POX, POY)-(PL*I+POX, PL*NPY+POY), PSET, %CG
12720 NEXT
12730 FOR I=0 TO NPY
12740 LINE(POX, PL*I+POY)-(PL*NPX+POX, PL*I+POY), PSET, %CG
12750 NEXT
12760 PP=0
12770 FOR Y=0 TO NPY-1
12780 FOR X=0 TO NPX-1
12790 SX=2+PL*X+POX: SY=2+PL*Y+POY
12800 GOSUB *PUT.PASSAGE
12810 PP=PP+1
12820 NEXT
12830 NEXT
12840 '-------------------- DRAW MODE
12850 FOR I=0 TO NDX
12860 LINE(DL*I+DOX, DOY)-(DL*I+DOX, DL*NDY+DOY), PSET, %CG
12870 IF I=NDX THEN *ENDIF5
12880 READ D$
12890 SYMBOL(2+DL*I+DOX, 3+DOY), D$, .55!, .8!, %CS
12900 *ENDIF5
12910 NEXT
12920 DATA PUT, ERA
12930 FOR I=0 TO NDY
12940 LINE(DOX, DL*I+DOY)-(DL*NDX+DOX, DL*I+DOY), PSET, %CG
12950 NEXT
12960 '-------------------- ELEMENT
12970 FOR I=0 TO NEX
12980 LINE(EL*I+EOX, EOY)-(EL*I+EOX, EL*NEY+EOY), PSET, %CG
12990 NEXT
13000 FOR I=0 TO NEY
13010 LINE(EOX, EL*I+EOY)-(EL*NEX+EOX, EL*I+EOY), PSET, %CG
13020 NEXT
13030 EE=0
13040 FOR Y=0 TO NEY-1
13050 FOR X=0 TO NEX-1
13060 SX=2+EL*X+EOX: SY=2+EL*Y+EOY
13070 GOSUB *PUT.ELEMENT
13080 EE=EE+1
13090 NEXT
13100 NEXT
13110 '-------------------- FILE
13120 FOR I=0 TO NFX
13130 LINE(FL*I+FOX, FOY)-(FL*I+FOX, FL*NFY+FOY), PSET, %CG
13140 NEXT
13150 FOR I=0 TO NFY
13160 LINE(FOX, FL*I+FOY)-(FL*NFX+FOX, FL*I+FOY), PSET, %CG
13170 NEXT
13180 F=0
13190 FOR Y=0 TO NFY-1
13200 FOR X=0 TO NFX-1
13210 SYMBOL(2+FL*X+FOX, 3+FL*Y+FOY), RIGHT$(STR$(F), 2), .8!, .8!, %CS
13220 F=F+1
13230 NEXT
13240 NEXT
13250 '-------------------- TASK
13260 LINE(TOX, TOY)-(TOX, TYL*NT+TOY), PSET, %CG
13270 LINE(TXL+TOX, TOY)-(TXL+TOX, TYL*NT+TOY), PSET, %CG
13280 FOR I=0 TO NT
13290 LINE(TOX, TYL*I+TOY)-(TXL+TOX, TYL*I+TOY), PSET, %CG
13300 IF I=NT THEN *ENDIF6
13310 READ T$
13320 SYMBOL((TXL-6*LEN(T$))\2+TOX, 3+TYL*I+TOY), T$, .8!, .8!, %CS
13330 *ENDIF6
13340 NEXT
13350 DATA READ, WRITE, FAIR COPY, CLEAR, HARD COPY, TIFF SAVE
13360 RETURN
13370 '-------------------- DRAW GRID --------------------
13380 *DRAW.GRID
13390 LINE(-2+GOX, -2+GOY)-(2+GL*NG+GOX, 2+GL*NG+GOY), PSET, %CBK, BF
13400 FOR I=0 TO NG
13410 LINE(GL*I+GOX, GOY)-(GL*I+GOX, GL*NG+GOY), PSET, %CG
13420 LINE(GOX, GL*I+GOY)-(GL*NG+GOX, GL*I+GOY), PSET, %CG
13430 NEXT
13440 RETURN
13450 '-------------------- PUT PASSAGE --------------------
13460 *PUT.PASSAGE
13470 ON PP+1 GOSUB *P0, *P1, *P2, *P3, *P4, *P5, *P6, *P7, *P8, *P9, *P10, *P11
13480 RETURN
13490 '-------------------- PUT ELEMENT --------------------
13500 *PUT.ELEMENT
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
13520 RETURN
13530 '-------------------- BORDER: ALTAR --------------------
13540 *ALTAR
13550 IF PP>=8 THEN PP=PP-4
13560 ON PP-3 GOSUB *A0, *A1, *A2, *A3
13570 RETURN
13580 '-------------------- REVERSE FOR PASSAGE --------------------
13590 *REVERSE.PASSAGE
13600 SX=PL*PX+POX: SY=PL*PY+POY
13610 LINE(SX, SY)-(PL+SX, PL+SY), XOR, %CR, BF
13620 RETURN
13630 '-------------------- REVERSE FOR DRAW MODE --------------------
13640 *REVERSE.MODE
13650 SX=DL*DX+DOX: SY=DL*DY+DOY
13660 LINE(SX, SY)-(DL+SX, DL+SY), XOR, %CR, BF
13670 RETURN
13680 '-------------------- REVERSE FOR ELEMENT --------------------
13690 *REVERSE.ELEMENT
13700 SX=EL*EX+EOX: SY=EL*EY+EOY
13710 LINE(SX, SY)-(PL+SX, PL+SY), XOR, %CR, BF
13720 RETURN
13730 '-------------------- REVERSE FOR FILE --------------------
13740 *REVERSE.FILE
13750 SX=FL*FX+FOX: SY=FL*FY+FOY
13760 LINE(SX, SY)-(FL+SX, FL+SY), XOR, %CR, BF
13770 RETURN
13780 '-------------------- REVERSE FOR TASK --------------------
13790 *REVERSE.TASK
13800 SX=TOX: SY=TYL*TY+TOY
13810 LINE(SX, SY)-(TXL+SX, TYL+SY), XOR, %CR, BF
13820 RETURN
13830 '-------------------- FLOOR NUMBER --------------------
13840 *FLOOR.NUMBER
13850 LINE(NOX, NOY)-(36+NOX, 22+NOY), PSET, %CBK, BF
13860 LINE(2+NOX, 2+NOY)-(34+NOX, 20+NOY), PSET, 7, B
13870 IF F=0 THEN N$="1F" ELSE N$="B"+MID$(STR$(F), 2)+"F"
13880 SYMBOL(1+(35-LEN(N$)*8)\2+NOX, 4+NOY), N$, 1, 1, %15,,, 1
13890 RETURN
13900 '-------------------- PASSAGE 0: BACKGROUND --------------------
13910 *P0
13920 LINE(SX, SY)-(GL+SX, GL+SY), PSET, %CBK, BF
13930 LINE(SX, SY)-(GL+SX, GL+SY), PSET, %CG, B
13940 RETURN
13950 '-------------------- PASSAGE 1: PASSAGE --------------------
13960 *P1
13970 LINE(SX, SY)-(GL+SX, GL+SY), PSET, %CP, BF
13980 RETURN
13990 '-------------------- PASSAGE 2: STAIRS --------------------
14000 *P2
14010 LINE(SX, SY)-(GL+SX, GL+SY), PSET, %CP, BF
14020 SYMBOL(SX+2, SY+2), "Up", .6!, .6!, %CE
14030 '
14040 '
14050 RETURN
14060 '-------------------- PASSAGE 3: STAIRS --------------------
14070 *P3
14080 LINE(SX, SY)-(GL+SX, GL+SY), PSET, %CP, BF
14090 SYMBOL(SX+2, SY+2), "Dn", .6!, .6!, %CE
14100 '
14110 '
14120 RETURN
14130 '-------------------- PASSAGE 4: ALTAR --------------------
14140 *P4
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
14160 RETURN
14170 '-------------------- PASSAGE 5: ALTAR --------------------
14180 *P5
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
14200 RETURN
14210 '-------------------- PASSAGE 6: ALTAR --------------------
14220 *P6
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
14240 RETURN
14250 '-------------------- PASSAGE 7: ALTAR --------------------
14260 *P7
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
14280 RETURN
14290 '-------------------- PASSAGE 8: VI ALTAR --------------------
14300 *P8
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
14320 LINE(-2+GL+SX, 2+SY)-(-2+GL+SX, 4+SY), PSET, %CE
14330 LINE(-2+GL+SX, -2+GL+SY)-(-2+GL+SX, -4+GL+SY), PSET, %CE
14340 RETURN
14350 '-------------------- PASSAGE 9: VI ALTAR --------------------
14360 *P9
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
14380 LINE(2+SX, -2+GL+SY)-(4+SX, -2+GL+SY), PSET, %CE
14390 LINE(-2+GL+SX, -2+GL+SY)-(-4+GL+SX, -2+GL+SY), PSET, %CE
14400 RETURN
14410 '-------------------- PASSAGE 10: VI ALTAR --------------------
14420 *P10
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
14440 LINE(2+SX, 2+SY)-(2+SX, 4+SY), PSET, %CE
14450 LINE(2+SX, -2+GL+SY)-(2+SX, -4+GL+SY), PSET, %CE
14460 RETURN
14470 '-------------------- PASSAGE 11: VI ALTAR --------------------
14480 *P11
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
14500 LINE(2+SX, 2+SY)-(4+SX, 2+SY), PSET, %CE
14510 LINE(-2+GL+SX, 2+SY)-(-4+GL+SX, 2+SY), PSET, %CE
14520 RETURN
14530 '-------------------- ELEMENT 0: HIDDEN WALL --------------------
14540 *E0
14550 FOR I=0 TO 2
14551 LINE(2+4*I+SX, SY)-(2+4*I+SX, GL+SY), PSET, %CE
14552 LINE(SX, 2+4*I+SY)-(GL+SX, 2+4*I+SY), PSET, %CE
14553 NEXT
14560 RETURN
14570 '-------------------- ELEMENT 1: INVISIBLE WALL --------------------
14580 *E1
14590 LINE(SX, SY)-(GL+SX, GL+SY), PSET, %CE
14591 LINE(SX, GL+SY)-(GL+SX, SY), PSET, %CE
14600 RETURN
14610 '-------------------- ELEMENT 2: WARP ZONE --------------------
14620 *E2
14630 FOR I=0 TO 5
14631 LINE(1+SX, 1+2*I+SY)-(-1+GL+SX, 1+2*I+SY), PSET, %CE, B, &HAAAA
14632 NEXT
14640 RETURN
14650 '-------------------- ELEMENT 3: BLACK GHOST --------------------
14660 *E3
14670 CIRCLE(GL\2+SX, GL\2+SY), 3, %CE
14671 CIRCLE(GL\2+SX, GL\2+SY), 6, %CE
14680 RETURN
14690 '-------------------- ELEMENT 4: TURN TABLE --------------------
14700 *E4
14710 CIRCLE(GL\2+SX, GL\2+SY), 5, %CE, 1, .5!, .25!
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
14720 RETURN
14730 '-------------------- ELEMENT 5: HIDDEN SWITCH --------------------
14740 *E5
14750 CIRCLE(GL\2+SX, GL\2+SY), 2, %CE
14760 RETURN
14770 '-------------------- ELEMENT 6: ITEMS --------------------
14780 *E6
14790 SYMBOL(2+SX, 2+SY), "I", .6!, .6!, %CE
14800 RETURN
14810 '-------------------- ELEMENT 7: UNIDENTIFIED -------------------
14820 *E7
14830 SYMBOL(2+SX, 2+SY), "?", .6!, .6!, %CE
14840 RETURN
14850 '-------------------- ELEMENT 8: DOOR --------------------
14860 *E8
14870 LINE(GL\2+SX, SY)-(GL\2+SX, GL+SY), PSET, %CE
14880 RETURN
14890 '-------------------- ELEMENT 9: DOOR --------------------
14900 *E9
14910 LINE(SX, GL\2+SY)-(GL+SX, GL\2+SY), PSET, %CE
14920 RETURN
14930 '-------------------- ELEMENT 10: WOODEN DOOR --------------------
14940 *E10
14950 LINE(-1+GL\2+SX, SY)-(-1+GL\2+SX, GL+SY), PSET, %CE
14960 LINE(1+GL\2+SX, SY)-(1+GL\2+SX, GL+SY), PSET, %CE
14970 RETURN
14980 '-------------------- ELEMENT 11: WOODEN DOOR --------------------
14990 *E11
15000 LINE(SX, -1+GL\2+SY)-(GL+SX, -1+GL\2+SY), PSET, %CE
15010 LINE(SX, 1+GL\2+SY)-(GL+SX, 1+GL\2+SY), PSET, %CE
15020 RETURN
15030 '-------------------- ELEMENT 12: DOOR WITH BUTTONS -----------------
15040 *E12
15050 LINE(GL\2+SX, SY)-(GL\2+SX, GL+SY), PSET, %CE
15060 LINE(-1+GL\2+SX, -2+GL+SY)-(-2+GL\2+SX, -4+GL+SY), PSET, %CE, BF
15070 LINE(1+GL\2+SX, 2+SY)-(2+GL\2+SX, 4+SY), PSET, %CE, BF
15080 RETURN
15090 '-------------------- ELEMENT 13: DOOR WITH BUTTONS -----------------
15100 *E13
15110 LINE(SX, GL\2+SY)-(GL+SX, GL\2+SY), PSET, %CE
15120 LINE(2+SX, -1+GL\2+SY)-(4+SX, -2+GL\2+SY), PSET, %CE, BF
15130 LINE(-2+GL+SX, 1+GL\2+SY)-(-4+GL+SX, 2+GL\2+SY), PSET, %CE, BF
15140 RETURN
15150 '-------------------- ELEMENT 14: PIT --------------------
15160 *E14
15170 LINE(4+SX, 4+SY)-(-4+GL+SX, -4+GL+SY), PSET, %CE, BF
15180 RETURN
15190 '-------------------- ELEMENT 15: FLOOR SWITCH --------------------
15200 *E15
15210 LINE(4+SX, 4+SY)-(-4+GL+SX, -4+GL+SY), PSET, %CE, B
15220 RETURN
15230 '-------------------- ELEMENT 16: BUTTON --------------------
15240 *E16
15250 LINE(GL+SX, -1+GL\2+SY)-(-2+GL+SX, 1+GL\2+SY), PSET, %CE, BF
15260 RETURN
15270 '-------------------- ELEMENT 17: BUTTON --------------------
15280 *E17
15290 LINE(-1+GL\2+SX, GL+SY)-(1+GL\2+SX, -2+GL+SY), PSET, %CE, BF
15300 RETURN
15310 '-------------------- ELEMENT 18: BUTTON --------------------
15320 *E18
15330 LINE(SX, -1+GL\2+SY)-(2+SX, 1+GL\2+SY), PSET, %CE, BF
15340 RETURN
15350 '-------------------- ELEMENT 19: BUTTON --------------------
15360 *E19
15370 LINE(-1+GL\2+SX, SY)-(1+GL\2+SX, 2+SY), PSET, %CE, BF
15380 RETURN
15390 '-------------------- ELEMENT 20: MESSAGE --------------------
15400 *E20
15410 LINE(GL+SX, GL\2+SY)-(-4+GL+SX, GL\2+SY), PSET, %CE
15420 RETURN
15430 '-------------------- ELEMENT 21: MESSAGE --------------------
15440 *E21
15450 LINE(GL\2+SX, GL+SY)-(GL\2+SX, -4+GL+SY), PSET, %CE
15460 RETURN
15470 '-------------------- ELEMENT 22: MESSAGE --------------------
15480 *E22
15490 LINE(SX, GL\2+SY)-(4+SX, GL\2+SY), PSET, %CE
15500 RETURN
15510 '-------------------- ELEMENT 23: MESSAGE --------------------
15520 *E23
15530 LINE(GL\2+SX, SY)-(GL\2+SX, 4+SY), PSET, %CE
15540 RETURN
15550 '-------------------- ELEMENT 24: LOCK --------------------
15560 *E24
15570 LINE(GL+SX, -1+GL\2+SY)-(-2+GL+SX, -1+GL\2+SY), PSET, %CE
15580 LINE(GL+SX, 1+GL\2+SY)-(-2+GL+SX, 1+GL\2+SY), PSET, %CE
15590 RETURN
15600 '-------------------- ELEMENT 25: LOCK --------------------
15610 *E25
15620 LINE(-1+GL\2+SX, GL+SY)-(-1+GL\2+SX, -2+GL+SY), PSET, %CE
15630 LINE(1+GL\2+SX, GL+SY)-(1+GL\2+SX, -2+GL+SY), PSET, %CE
15640 RETURN
15650 '-------------------- ELEMENT 26: LOCK --------------------
15660 *E26
15670 LINE(SX, -1+GL\2+SY)-(2+SX, -1+GL\2+SY), PSET, %CE
15680 LINE(SX, 1+GL\2+SY)-(2+SX, 1+GL\2+SY), PSET, %CE
15690 RETURN
15700 '-------------------- ELEMENT 27: LOCK --------------------
15710 *E27
15720 LINE(-1+GL\2+SX, SY)-(-1+GL\2+SX, 2+SY), PSET, %CE
15730 LINE(1+GL\2+SX, SY)-(1+GL\2+SX, 2+SY), PSET, %CE
15740 RETURN
15750 '-------------------- ELEMENT 28: FOUNTAIN --------------------
15760 *E28
15770 CIRCLE(GL+SX, GL\2+SY), 3, %CE, 1, .25!, .75!
15780 RETURN
15790 '-------------------- ELEMENT 28: FOUNTAIN --------------------
15800 *E29
15810 CIRCLE(GL\2+SX, GL+SY), 3, %CE, 1, .5!, 1
15820 RETURN
15830 '-------------------- ELEMENT 28: FOUNTAIN --------------------
15840 *E30
15850 CIRCLE(SX, GL\2+SY), 3, %CE, 1, .75!, .25!
15860 RETURN
15870 '-------------------- ELEMENT 28: FOUNTAIN --------------------
15880 *E31
15890 CIRCLE(GL\2+SX, SY), 3, %CE, 1, 0, .5!
15900 RETURN
15910 '-------------------- BORDER: LEFT LINE --------------------
15920 *LEFT
15930 SX=GL*X+GOX: SY=GL*Y+GOY
15940 LINE(SX, SY)-(SX, GL+SY), PSET, %CB
15950 RETURN
15960 '-------------------- BORDER: RIGHT LINE --------------------
15970 *RIGHT
15980 SX=GL*X+GOX: SY=GL*Y+GOY
15990 LINE(GL+SX, SY)-(GL+SX, GL+SY), PSET, %CB
16000 RETURN
16010 '-------------------- BORDER: UPPER LINE --------------------
16020 *UPPER
16030 SX=GL*X+GOX: SY=GL*Y+GOY
16040 LINE(SX, SY)-(GL+SX, SY), PSET, %CB
16050 RETURN
16060 '-------------------- BORDER: LOWER LINE --------------------
16070 *LOWER
16080 SX=GL*X+GOX: SY=GL*Y+GOY
16090 LINE(SX, GL+SY)-(GL+SX, GL+SY), PSET, %CB
16100 RETURN
16110 '-------------------- BORDER: ALTAR 0 --------------------
16120 *A0
16130 CONNECT(GL+SX, -1+GL+SY)-(-5+GL+SX, -2+GL+SY)-(-5+GL+SX, 2+SY)- (GL+SX, 1+SY), %CB
16140 RETURN
16150 '-------------------- BORDER: ALTAR 1 --------------------
16160 *A1
16170 CONNECT(-1+GL+SX, GL+SY)-(-2+GL+SX, -5+GL+SY)-(2+SX, -5+GL+SY)- (1+SX, GL+SY), %CB
16180 RETURN
16190 '-------------------- BORDER: ALTAR 2 --------------------
16200 *A2
16210 CONNECT(SX, -1+GL+SY)-(5+SX, -2+GL+SY)-(5+SX, 2+SY)-(SX, 1+SY), %CB
16220 RETURN
16230 '-------------------- BORDER: ALTAR 3 --------------------
16240 *A3
16250 CONNECT(-1+GL+SX, SY)-(-2+GL+SX, 5+SY)-(2+SX, 5+SY)-(1+SX, SY), %CB
16260 RETURN
16270 '-------------------- ERROR ROUTINE --------------------
16280 *ERROR
16290 IF ERR=63 THEN RESUME *READ.ERROR
16300 IF ERR=64 AND ERL=11700 THEN KILL FILE$+".DAT": RESUME
16310 IF ERR=64 AND ERL=12060 THEN KILL FILE$+".TIF": RESUME
16320 '
16330 CLS
16340 COLOR 2: PRINT "ERL:"; ERL; " ERR:"; ERR
16350 END