ドルアーガ マップジェネレータ
【VRC7/MMC5 BASIC専用】
FC版ドルアーガの塔の迷路生成をファミリーベーシックで再現するプログラム
ステージ数を種に各ステージのマップを生成しその過程を表示します。
このプログラムを実行する前に、こちらのPCG定義プログラムを実行してください。
1130行のコメントアウトを解除することで任意の面を選択して見ることができます。
10 '####################### 20 '# # 30 '# THE TOWER OF DRUAGA # 40 '# # 50 '# MAP GENERATOR # 60 '# # 70 '# MAIN PROGRAM # 80 '# # 90 '####################### 1000 '== ショキセッテイ == 1110 CLEAR (&H7F00-1) 1120 MO=0:FL=1 1130 'MO=1:INPUT"FLOOR";FL 1140 SZ=6:S2=(SZ+1)*16:S1=S2-1:S3=(SZ+2)*16-1 1150 PALETB 0,15,48,22,6:PALETB 1,15,16,17,6 1160 GOSUB 6000 1170 GOSUB 6300 1200 '== リョウイキ リセット == 1210 FOR I=0 TO 127:POKE (&H7F00+I),0:NEXT 1220 FL$=STR$(FL):IF LEN(FL$)=2 THEN FL$=" 0"+RIGHT$(FL$,1) 1230 LOCATE 16,5:PRINT FL$ 1300 '== ランスウ ジュンビ == 1310 T1=((FL*2) AND 255)+FL 1320 T2=(T1 AND 255)+(T1/256)+3 1330 S2=(T2 AND 255) 1340 S1=(S2+(T2/256)+2) AND 255 1400 '== カイシイチ シテイ == 1410 CP=16 1420 GOSUB 5000:GOTO 1600 1500 '== カベ カクテイ == 1510 IF SK=0 GOSUB 2600 1520 SK=0 1600 '== サクセイズミ? == 1610 SP=CP 1620 IF PEEK(&H7F00+CP) <> 0 THEN SK=1:GOTO 2200 1700 '== チェック == 1710 '== ゲンザイチガ ガイヘキ? == 1720 IF (CP AND 15) = 15 THEN SK=1:GOTO 2200 1730 '== ウエノハシラ カクニン == 1740 IF (PEEK(&H7F00+CP-16) AND 240) = 0 GOTO 2000 1750 '== シタノハシラ カクニン == 1760 IF (PEEK(&H7F00+CP+16) AND 240) = 0 GOTO 2000 1770 '== ヒダリノハシラ カクニン == 1780 IF (PEEK(&H7F00+CP-1) AND 240) = 0 GOTO 2000 1790 '== ミギノハシラ カクニン == 1800 IF (PEEK(&H7F00+CP+1) AND 240) <> 0 GOTO 2200 2000 '== カベ サクセイ == 2010 OK=0:GOSUB 9000 2020 ON (A AND 3)+1 GOSUB 8000,8100,8200,8300 2030 IF (PEEK(&H7F00+NP) AND 240) = 0 OK=1 2040 IF OK=0 GOTO 2000 2050 CK=PEEK(&H7F00+NP) 2060 POKE (&H7F00+CP),(PEEK(&H7F00+CP) OR W1) 2070 GOSUB 7500 2080 POKE (&H7F00+NP),(PEEK(&H7F00+NP) OR W2) 2090 GOSUB 7000 2100 BP=CP:CP=NP 2110 IF CK <> 0 GOTO 2200 2120 IF (CP AND 15) = 15 GOTO 2200 2130 IF CP >= 112 GOTO 2200 2140 IF CP >= 16 GOTO 1700 2200 '== ツギノハシラ == 2210 CP=SP+1 2220 IF CP <> 112 GOTO 1500 2300 '== 60メン センヨウショリ == 2310 IF FL<>60 GOTO 2500 2320 FOR J=0 TO 127 2330 POKE (&H7F00+J),10 2340 NEXT 2350 FOR J=14 TO 126 STEP 16 2360 POKE (&H7F00+J),8 2370 POKE (&H7F00+J+1),2 2380 NEXT 2390 GOSUB 5000 2500 '== ツギノ フロア ヘ == 2510 PLAY"T3Y0M1V5O3#G3G1F#DF7":SK=0 2520 IF MO=1 THEN LOCATE 0,22:END 2530 FL=FL+1:IF FL>60 FL=1 2540 GOTO 1200 2600 '== カベ カクテイ == 2610 FOR I=0 TO 127 2620 POKE (&H7F00+I),(PEEK(&H7F00+I) AND 15) 2630 NEXT 2640 GOSUB 5000 2650 RETURN 5000 '== ヒョウジ == 5010 P0$="":FOR I=0 TO 14:P0$=P0$+CHR$((PEEK(&H7F00+I) AND 4) OR 226):NEXT 5020 P0$=CHR$(233)+P0$+CHR$(234) 5030 P1$="":FOR I=16 TO 30:P1$=P1$+CHR$(PEEK(&H7F00+I) OR 192):NEXT 5040 P1$=CHR$((PEEK(&H7F00+15) AND 2) OR 225)+P1$+CHR$((PEEK(&H7F00+31) AND 8) OR 224) 5050 P2$="":FOR I=32 TO 46:P2$=P2$+CHR$(PEEK(&H7F00+I) OR 192):NEXT 5060 P2$=CHR$((PEEK(&H7F00+31) AND 2) OR 225)+P2$+CHR$((PEEK(&H7F00+47) AND 8) OR 224) 5070 P3$="":FOR I=48 TO 62:P3$=P3$+CHR$(PEEK(&H7F00+I) OR 192):NEXT 5080 P3$=CHR$((PEEK(&H7F00+47) AND 2) OR 225)+P3$+CHR$((PEEK(&H7F00+63) AND 8) OR 224) 5090 P4$="":FOR I=64 TO 78:P4$=P4$+CHR$(PEEK(&H7F00+I) OR 192):NEXT 5100 P4$=CHR$((PEEK(&H7F00+63) AND 2) OR 225)+P4$+CHR$((PEEK(&H7F00+79) AND 8) OR 224) 5110 P5$="":FOR I=80 TO 94:P5$=P5$+CHR$(PEEK(&H7F00+I) OR 192):NEXT 5120 P5$=CHR$((PEEK(&H7F00+79) AND 2) OR 225)+P5$+CHR$((PEEK(&H7F00+95) AND 8) OR 224) 5130 P6$="":FOR I=96 TO 110:P6$=P6$+CHR$(PEEK(&H7F00+I) OR 192):NEXT 5140 P6$=CHR$((PEEK(&H7F00+95) AND 2) OR 225)+P6$+CHR$((PEEK(&H7F00+111) AND 8) OR 224) 5150 P7$="":FOR I=112 TO 126:P7$=P7$+CHR$((PEEK(&H7F00+I) AND 1)+228):NEXT 5160 P7$=CHR$(235)+P7$+CHR$(236) 5200 LOCATE 6,9:PRINT P0$ 5210 LOCATE 6,10:PRINT P1$ 5220 LOCATE 6,11:PRINT P2$ 5230 LOCATE 6,12:PRINT P3$ 5240 LOCATE 6,13:PRINT P4$ 5250 LOCATE 6,14:PRINT P5$ 5260 LOCATE 6,15:PRINT P6$ 5270 LOCATE 6,16:PRINT P7$ 5280 RETURN 6000 '== ショキ ガメン == 6010 UW$=CHR$(226)+CHR$(226)+CHR$(226)+CHR$(226)+CHR$(226) 6020 C0$=CHR$(192)+CHR$(192)+CHR$(192)+CHR$(192)+CHR$(192) 6030 LW$=CHR$(228)+CHR$(228)+CHR$(228)+CHR$(228)+CHR$(228) 6100 CLS 6110 FOR I=10 TO 16 STEP 2 6120 FOR J=6 TO 22 STEP 2 6130 COLOR J,I,1 6140 NEXT 6150 NEXT 6160 LOCATE 5,2:PRINT"DRUAGA MAP GENERATOR" 6170 LOCATE 12,19:PRINT CHR$(176)+CHR$(177)+CHR$(178)+CHR$(179)+CHR$(180)+CHR$(181) 6180 LOCATE 12,20:PRINT CHR$(182)+CHR$(183)+CHR$(184)+CHR$(185)+CHR$(186)+CHR$(187) 6190 LOCATE 12,21:PRINT CHR$(188)+CHR$(189)+CHR$(190)+CHR$(191)+CHR$(237)+CHR$(238) 6200 RETURN 6300 '== プレ-ン マップ == 6310 FL$=STR$(FL):IF LEN(FL$)=2 THEN FL$=" 0"+RIGHT$(FL$,1) 6320 LOCATE 11,5:PRINT"FLOOR"+FL$ 6330 LOCATE 6,9:PRINT CHR$(233)+UW$+UW$+UW$+CHR$(234) 6340 FOR I=10 TO 15:LOCATE 6,I:PRINT CHR$(225)+C0$+C0$+C0$+CHR$(224):NEXT 6350 LOCATE 6,16:PRINT CHR$(235)+LW$+LW$+LW$+CHR$(236) 6360 RETURN 7000 '== イキサキ ビョウガ == 7010 X=(NP MOD 16)+7:Y=(NP/16)+9 7020 IF X=22 GOTO 7100 7030 IF Y=9 GOTO 7200 7040 IF Y=16 GOTO 7300 7050 LOCATE X,Y:PRINT CHR$((PEEK(&H7F00+NP)) OR 192):RETURN 7100 IF NP>CP THEN LOCATE 22,Y:PRINT CHR$(248):RETURN 7110 LOCATE 6,Y+1:PRINT CHR$(243):RETURN 7200 LOCATE X,9:PRINT CHR$(246):RETURN 7300 LOCATE X,16:PRINT CHR$(245):RETURN 7500 '== ゲンザイイチ ビョウガ == 7510 X=(CP MOD 16)+7:Y=(CP/16)+9 7520 LOCATE X,Y:PRINT CHR$((PEEK(&H7F00+CP)) OR 192):RETURN 8000 '== カベヲ ウエニ == 8010 W1=17:W2=20:NP=CP-16:RETURN 8100 '== カベヲ シタニ == 8110 W1=20:W2=17:NP=CP+16:RETURN 8200 '== カベヲ ヒダリニ == 8210 W1=24:W2=18:NP=CP-1:RETURN 8300 '== カベヲ ミギニ == 8310 W1=18:W2=24:NP=CP+1:RETURN 9000 '== ランスウ セイセイ == 9010 S1=(S1*5+1) AND 255 9020 CF=(S2*2)/256 9030 S2=(S2*2) AND 255 9040 IF CF=0 GOTO 9070 9050 IF (32 AND S2)=0 GOTO 9090 9060 GOTO 9080 9070 IF (32 AND S2)<>0 GOTO 9090 9080 S2=(S2+1) AND 255 9090 A=S2 XOR S1 9100 RETURN