
ドルアーガ マップビュアー
【VRC7/MMC5 BASIC専用】
FC版ドルアーガの塔の迷路生成をファミリーベーシックで再現するプログラム
ステージ数を種に各ステージのマップを生成し表示します。
このプログラムを実行する前に、こちらのPCG定義プログラムを実行してください。
FC版本来のフローを再現しているため生成アルゴリズムを理解するのに最適ですが、
BASICに最適化されていないためBASIC本来の実行速度と相まって
生成に時間が掛かります。
10 '####################### 20 '# # 30 '# THE TOWER OF DRUAGA # 40 '# # 50 '# MAP VIEWER # 60 '# # 70 '# BASIC VER. # 80 '# # 90 '####################### 1000 CLEAR 1010 FL=1 1020 'INPUT"FLOOR";FL 1030 PALETB 0,15,0,2,6 1100 '== ハイレツ ショキカ == 1110 DIM CO(127) 1200 '== ランスウ ジュンビ == 1210 T1=((FL*2) AND 255)+FL 1220 T2=(T1 AND 255)+(T1/256)+3 1230 S2=(T2 AND 255) 1240 S1=(S2+(T2/256)+2) AND 255 1400 '== カイシイチ シテイ == 1410 CP=16 1500 '== カベ カクテイ == 1510 FOR I=0 TO 127 1520 CO(I)=CO(I) AND 15 1530 NEXT 1600 '== サクセイズミ? == 1610 SP=CP 1620 IF CO(CP) <> 0 GOTO 2200 1700 '== チェック == 1710 '== ゲンザイチ ガ ガイヘキ? == 1720 IF (CP AND 15) = 15 GOTO 2200 1800 '== ウエ ノ ハシラ チェック == 1810 IF (CO(CP-16) AND 240) = 0 GOTO 2000 1820 '== シタ ノ ハシラ チェック == 1830 IF (CO(CP+16) AND 240) = 0 GOTO 2000 1840 '== ヒダリ ノ ハシラ チェック == 1850 IF (CO(CP-1) AND 240) = 0 GOTO 2000 1860 '== ミギ ノ ハシラ チェック == 1870 IF (CO(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 (CO(NP) AND 240) = 0 OK=1 2040 IF OK=0 GOTO 2000 2050 CK=CO(NP) 2060 CO(NP)=CO(NP) OR W2 2070 BP=CP:CP=NP 2080 CO(BP)=CO(BP) OR W1 2090 IF CK <> 0 GOTO 2200 2100 IF (CP AND 15) = 15 GOTO 2200 2110 IF CP >= 112 GOTO 2200 2120 IF CP >= 16 GOTO 1700 2200 '== ツギノ ハシラ == 2210 CP=SP+1 2220 IF CP = 112 GOTO 2300 2230 GOTO 1500 2300 '== 60メン センヨウショリ == 2310 IF FL<>60 GOTO 4000 2320 FOR I=0 TO 127 2330 CO(I)=10 2340 NEXT 2350 FOR I=14 TO 126 STEP 16 2360 CO(I)=8 2370 CO(I+1)=2 2380 NEXT 4000 '== ヒョウジ == 4010 PRINT:PRINT "FLOOR";FL 4020 PRINT CHR$(&HE9);:FOR I=0 TO 14:PRINT CHR$((CO(I) AND 4) OR &HE2);:NEXT:PRINT CHR$(&HEA) 4030 FOR I=15 TO 95 STEP 16 4040 PRINT CHR$((CO(I) AND 2) OR &HE1); 4050 FOR J=I+1 TO I+15 4060 PRINT CHR$(CO(J) OR &HC0); 4070 NEXT 4080 PRINT CHR$((CO(I+16) AND 8) OR &HE0) 4090 NEXT 4100 PRINT CHR$(&HEB);:FOR I=112 TO 126:PRINT CHR$((CO(I) AND 1) OR &HE4);:NEXT:PRINT CHR$(&HEC) 5000 '== ル-プ ショリ == 5010 FOR I=0 TO 127:CO(I)=0:NEXT 5020 FL=(FL+1) AND 255:GOTO 1200 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