ドルアーガ マップビュアー

【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

 

Joomla templates by a4joomla