ニャオニャオ21世紀

レトロゲーム(MSX、PCエンジン、セガサターン)と、MSXぽいアプリ開発と、最新ゲーム(PS4、SWITCH)、身体(身体意識など)、ライフハック、電子工作ほか雑記を綴っています

追記しました:MSX BASIC基礎 その15 地味に面倒臭い、画面上に拾えるアイテムを設置する。(今回は宝箱^^)






宝箱(アイテム)の設置とアイテムを拾う処理をします。

簡単そうにみえますが、地味に面倒くさいです^^;

 

今回は宝箱ですが、

ゲームによってはアイテムだったり、

フルーツだったり、コインだったりすると思います。

いずれも今回の方法でやることが出来ます(^∇^)

 

画面上に宝箱の設置

1、画面を表示。

2、アイテムがある場所かどうか?(すべてのアイテムをチェック)

3、設置場所なら、アイテムを設置。

 

宝箱(アイテム)を拾う

1、移動先が宝箱(アイテム)かどうかチェック

2、主人公キャラクターと宝箱が完全に重なっているか?

3、アイテム番号(鍵)のチェック

4、文字を表示

(今回は拾っても宝箱は消していません^^;

 忘れていました ( ( °ω° ) ) そのうち追記します)

 

こんな感じです。

f:id:nyaonyaokun:20181124172655p:plain

 

今回は、アイテムが入った宝箱が4個と、

鍵の入った宝箱が4個を表示します。

宝箱を取ると、アイテムの名前が表示されます。

 

サンプルをMSX PENで(WebMSX)で実行

ソースコードをコピペできます。

(近いうちにWebMSXの方もリンクを貼ります^^)

 

それではソースコードを。

5 TIME=0
10 COLOR15,1,1:SCREEN2:SCREEN1,2:COLOR15,1,1:WIDTH32:DEFINTA-Z:KEYOFF
20 DEFUSR=&H7E:A=USR(0)
25 POKE &HF3B1,26
26 POKE &HF3DB,0
28 KEY1,CHR$(12)+"POKE&HF3B1,24"+CHR$(13)
30 KEY2,"SCREEN1"+CHR$(13)
31 DIMEX(4),EY(4),EM(4),UX(4),UY(4),ES(4),EC(4),EP(4),IS(4),IX(4),IY(4),KS(4),KX(4),KY(4),G2(8)
32 IS(0)=2:IS(1)=6:IS(2)=10:IS(3)=14:IX(0)=5:IX(1)=5:IX(2)=5:IX(3)=5:IY(0)=5:IY(1)=5:IY(2)=5:IY(3)=5
33 KS(0)=0:KS(1)=1:KS(2)=2:KS(3)=3:KX(0)=10:KX(1)=10:KX(2)=10:KX(3)=10:KY(0)=10:KY(1)=10:KY(2)=10:KY(3)=10
34 EN=0:EK=4:IT=4:KE=4
35 X=20:Y=15:H=4:SX=2:SY=2
36 EX(0)=20:EY(0)=1:EX(1)=12:EY(1)=4:EX(2)=20:EY(2)=18:EX(3)=12:EY(3)=13
37 ES(0)=0:ES(1)=1:ES(2)=0:ES(3)=1
38 BS=&H1800:B2=&H800:B3=&H1000:C1=&H2000:C2=&H2800:C3=&H3000
39 DIMMP$(96),IM$(8)
40 EP(0)=8:EP(1)=8:EP(2)=8:EP(3)=8
41 EC(0)=7:EC(1)=7:EC(2)=7:EC(3)=7
42 NG=ASC("`")-1:IM=ASC("u"):IT=IT-1:KE=KE-1
43 IM$(0)="ITEM 0":IM$(1)="ITEM 1":IM$(2)="ITEM 2":IM$(3)="ITEM 3":IM$(4)="ITEM 4":IM$(5)="ITEM 5":IM$(6)="ITEM 6":IM$(7)="ITEM 7"
50 'MOJI TEIGI========================
51 N=48
52 FOR J=0 TO 41
53 FOR I=0 TO 7
54 K=VPEEK(N*8+I)
55 L=K OR (K\2)
56 VPOKE N*8+I,L
57 VPOKE B2+N*8+I,L
58 VPOKE B3+N*8+I,L
59 'COLOR TEIGI
60 VPOKE C1+N*8+I,&HF1
61 VPOKE C2+N*8+I,&HF1
62 VPOKE C3+N*8+I,&HF1
63 NEXT
64 N=N+1
65 NEXT
66 LOCATE10,10:PRINT"PLEASE WAIT!"
70 'SPRITE TEIGI======================
80 RESTORE 3000
90 FOR J=0 TO 9
100 S$=""
110 FOR I=0 TO31
120 READ DT$
130 S$=S$+CHR$(VAL("&H"+DT$))
140 NEXT
150 SPRITE$(J)=S$
160 NEXT
175 'BLOCK TEIGI======================
180 M=ASC("#")
185 RESTORE 4010
186 FOR J=0 TO 30
187 BG$="":CR$=""
190 READ BG$,CR$
192 FOR I=0 TO 7
193 BK$="":CK$=""
195 BK$=MID$(BG$,I*2+1,2)
196 CK$=MID$(CR$,I*2+1,2)
200 VPOKE M*8+I,VAL("&H"+BK$)
210 VPOKE B2+M*8+I,VAL("&H"+BK$)
220 VPOKE B3+M*8+I,VAL("&H"+BK$)
250 VPOKE C1+M*8+I,VAL("&H"+CK$)
260 VPOKE C2+M*8+I,VAL("&H"+CK$)
270 VPOKE C3+M*8+I,VAL("&H"+CK$)
280 NEXT
290 M=M+1
295 IF M=40 THEN M=96
300 NEXT
305 'WAKU
310 GOSUB 22000
435 'MAP
440 GOSUB 20500
890 'BGM WARIKOMI====================
900 RESTORE 20000
910 GOSUB 1860
920 ON INTERVAL=80 GOSUB 1860
930 INTERVAL ON
995 'MAIN LOOP
996 'PLAYER==========================
998 M=ASC("a")-1
999 H=4
1000 S=STICK(0) OR STICK(1)
1001 A=TIME
1010 TX=X:TY=Y
1018 'PLAYER
1020 TK=1
1021 ON S GOTO 1400,1040,1410,1040,1420,1040,1430,1040
1025 'PLAYER - ALL ENEMY ATARI HANTEI
1030 GOTO1680
1040 'SPRITE HYOUJI
1050 PUT SPRITE 0,(X*8 ,Y*8-1),15,H
1100 'ENEMY==========================
1110 UX(EN)=EX(EN):UY(EN)=EY(EN)
1200 C=RND(1)*5
1220 IF C=1 THEN ES(EN)=RND(1)*4
1230 EF=0
1240 ON ES(EN)+1 GOTO 1440,1450,1460,1470
1270 'ENEMY - PLAYER ATARI HANTEI====
1280 GOTO1770
1330 PUT SPRITE EN+1,(EX(EN)*8,EY(EN)*8-1),EC(EN),EP(EN)
1340 EN=EN+1:IF EN>EK-1 THEN EN=0
1345 B=TIME
1346 C=B-A:TIME=0
1347 LOCATE0,0:PRINT C;"/60"
1350 GOTO1000
1395 'UP=============================
1400 IF Y=1 THEN Y=21:H=(H+1)MOD 2:GOTO1910
1401 Y=Y-1:H=(H+1)MOD 2:V1=VPEEK(BS+X+Y*32):V2=VPEEK(BS+X+1+Y*32)
1402 IF V1>NG THEN TK=1:IF V1<IM GOTO1437
1403 IF V2>NG THEN TK=1:IF V2<IM GOTO1437
1404 IF TK=1 GOTO 2000
1405 GOTO 1030
1409 'RIGHT
1410 IF X=21 THEN X=1:H=( (H+1)MOD 2)+2:GOTO1930
1411 X=X+1:H=( (H+1)MOD 2)+2:V1= VPEEK(BS+X+1+Y*32):V2=VPEEK(BS+X+1+(Y+1)*32)
1412 IF V1>NG THEN TK=1:IF V1<IM GOTO1437
1413 IF V2>NG THEN TK=1:IF V2<IM GOTO1437
1414 IF TK=1 GOTO2000
1415 GOTO 1030
1419 'DOWN
1420 IF Y=21 THEN Y=1:H=( (H+1)MOD 2)+4:GOTO1950
1421 Y=Y+1:H=( (H+1)MOD 2)+4:V1=VPEEK(BS+X+(Y+1)*32):V2=VPEEK(BS+X+1+(Y+1)*32)
1422 IF V1>NG THEN TK=1:IF V1<IM GOTO1437
1423 IF V2>NG THEN TK=1:IF V2<IM GOTO1437
1424 IF TK=1 GOTO2000
1425 GOTO 1030
1429 'LEFT
1430 IF X=1 THEN X=21:H=( (H+1)MOD 2)+6:GOTO1970
1431 X=X-1:H=( (H+1)MOD 2)+6:V1=VPEEK(BS+X+Y*32):V2=VPEEK(BS+X+(Y+1)*32)
1432 IF V1>NG THEN TK=1:IF V1<IM GOTO1437
1433 IF V2>NG THEN TK=1:IF V2<IM GOTO1437
1434 IF TK=1 GOTO2000
1435 GOTO 1030
1437 X=TX:Y=TY:GOTO1030
1438 'ENEMY MOVE==================
1439 'ENEMY UP 0
1440 EY(EN)=EY(EN)-1
1441 IF EY(EN)<1 THEN EF=1
1442 IF VPEEK(BS+EX(EN)+(EY(EN)*32)) >NG THEN EF=1:GOTO1444
1443 IF VPEEK(BS+EX(EN)+1+EY(EN)*32) >NG THEN EF=1
1444 IF EF=1 THEN ES(EN)=2:EX(EN)=UX(EN):EY(EN)=UY(EN)
1445 GOTO1270
1449 'ENEMY RIGHT 1
1450 EX(EN)=EX(EN)+1
1451 IF EX(EN)>21 THEN EF=1
1452 IF VPEEK(BS+EX(EN)+1+EY(EN)*32) >NG THEN EF=1:GOTO1454
1453 IF VPEEK(BS+EX(EN)+1+(EY(EN)+1)*32) >NG THEN EF=1
1454 IF EF=1 THEN ES(EN)=3:EX(EN)=UX(EN):EY(EN)=UY(EN)
1455 GOTO1270
1459 'ENEMY DOWN 2
1460 EY(EN)=EY(EN)+1
1461 IF EY(EN)>21 THEN EF=1
1462 IF VPEEK(BS+EX(EN)+(EY(EN)+1)*32) >NG THEN EF=1:GOTO1464
1463 IF VPEEK(BS+EX(EN)+1+(EY(EN)+1)*32) >NG THEN EF=1
1464 IF EF=1 THEN ES(EN)=0:EX(EN)=UX(EN):EY(EN)=UY(EN)
1465 GOTO1270
1469 'ENEMY LEFT 3
1470 EX(EN)=EX(EN)-1
1471 IF EX(EN)<1 THEN EF=1
1472 IF VPEEK(BS+EX(EN)+EY(EN)*32) >NG THEN EF=1:GOTO1474
1473 IF VPEEK(BS+EX(EN)+(EY(EN)+1)*32) >NG THEN EF=1
1474 IF EF=1 THEN ES(EN)=1:EX(EN)=UX(EN):EY(EN)=UY(EN)
1475 GOTO1270
1680 'PLAYER ALL ENEMY ATARI HANTEI===============
1690 ED=99
1700 FOR I=0 TO EK-1
1710 IF ABS(X-EX(I))<2 AND ABS(Y-EY(I))<2 THEN ED=I
1720 NEXT
1730 IF ED=99 THEN 1040
1740 X=TX:Y=TY
1745 PUT SPRITE 0,(X*8,Y*8-1),15,H
1747 'DAMAGE ENEMY
1750 PUT SPRITE ED+1,(EX(ED)*8,EY(ED)*8-1),9,9
1755 GOSUB1830
1756 PUT SPRITE ED+1,(EX(ED)*8,EY(ED)*8-1),EC(ED),EP(ED)
1760 GOTO1040
1765 'ENEMY ATARI HANTEI===========
1770 IF ABS(X-EX(EN))<2 THEN IF ABS(Y-EY(EN))<2 THEN1790
1780 GOTO1330
1790 EX(EN)=UX(EN):EY(EN)=UY(EN):ES(EN)=(ES(EN)+2)MOD4
1800 PUT SPRITE 0,(X*8,Y*8-1),9,9:GOSUB1830
1810 PUT SPRITE 0,(X*8,Y*8-1),15,H
1820 GOTO1330
1825 'WAIT
1830 FOR I=0 TO 1000
1840 NEXT
1850 RETURN
1855 'BGM===============================
1860 IF PEEK(&HFB40)<>0 THEN RETURN
1870 READ U$
1880 IF U$="##" THEN RESTORE 20000:READ U$
1890 PLAY"O5"+U$
1900 RETURN
1365 'STAGE MOVE========================
1910 IF SY>0 THEN SY=SY-1 ELSE SY=3
1920 GOSUB21500:GOTO1100
1930 IF SX<3 THEN SX=SX+1 ELSE SX=0
1940 GOSUB21500:GOTO1100
1950 IF SY<3 THEN SY=SY+1 ELSE SY=0
1960 GOSUB21500:GOTO1100
1970 IF SX>0 THEN SX=SX-1 ELSE SX=3
1980 GOSUB21500:GOTO1100
1990 'ITEM CHECK==========================
2000 FOR I=0 TO 1
2010 FOR J=0 TO 1
2020 V=VPEEK(BS+X+I+(Y+J)*32)
2030 IF V<IM THEN GOTO 2090
2040 NEXT:NEXT
2045 PUT SPRITE 0,(X*8,Y*8-1),15,H
2050 IF G1<>99 THEN IF IX(G1)=X AND IY(G1)=Y THEN LOCATE 7,10:PRINT IM$(G1);" GET"
2060 FOR K=0 TO 7
2070 IF G2(K)<>99 THEN IF KX(G2(K))=X AND KY(G2(K))=Y THEN LOCATE 8,10:PRINT "KEY ";G2(K);" GET"
2080 NEXT
2090 GOTO1030
2995 'SPRITE UP0 DATA===================
3000 DATA00,00,4F,5F,7F,3F,3F,3F,3F,1F,EF,F0,FE,F3,6C,00,01,01,E5,F5,FD,F9,F9,F9,F9,F7,E7,07,E1,80,60,60
3010 'SPRITE UP1 DATA
3020 DATA00,00,4F,5F,7F,3F,3F,3F,3F,DF,EF,F8,FE,73,0C,0C,00,00,E5,F5,FD,F9,F9,F9,F9,F1,E1,07,E7,87,61,00
3030 'SPRITE RIGHT2 DATA
3040 DATA00,00,47,4B,6B,0B,6B,6B,6B,2B,0B,1C,1B,03,1C,1C,00,00,E0,F4,FC,F8,68,68,F8,F8,FE,1A,B0,DA,3E,3C
3050 'SPRITE RIGHT3 DATA
3060 DATA00,00,4F,5E,6D,1D,7D,7D,7A,3A,15,0C,1B,1B,24,0E,00,00,E0,F4,7C,78,58,58,F8,F0,FE,1A,50,DA,0E,E4
3070 'SPRITE DOWN4 DATA
3080 DATA00,00,A7,AF,BF,9F,9D,9D,9F,8F,87,80,E7,E1,86,00,00,00,F2,FA,FE,FC,DC,DC,FC,FF,FB,11,7B,CE,30,30
3090 'SPRITE DOWN5 DATA
3100 DATA00,80,A7,AF,BF,9F,9D,9D,9F,8F,E7,E0,E7,81,06,06,00,00,F2,FA,FE,FC,DC,DC,FC,F8,FF,1B,71,DB,3E,00
3110 'SPRITE LEFT6 DATA
3120 DATA00,00,03,17,1F,8F,8B,8B,4F,4F,27,20,1A,1B,00,03,00,00,F9,FD,FB,FC,7F,7F,FF,CE,DF,1B,D1,DB,3E,70
3130 'SPRITE LEFT7 DATA
3140 DATA00,00,47,6F,7F,5F,56,56,5F,5F,4F,40,E5,E3,48,38,00,00,F2,FA,F6,F8,FE,FE,FE,9C,BE,36,A2,B6,3C,38
3150 'SPRITE SLIME DATA
3160 DATA00,00,00,00,0F,3F,7F,FF,FF,FF,FF,7E,00,00,00,00,00,00,00,00,F0,FC,FE,FF,FF,FF,FF,7E,00,00,00,00
3170 'SPRITE DAMAGE
3180 DATAFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF
3990 'BG DATA===========================
4000 'YUKA GLASS #
4010 DATA0000000000000000,2222222222222222
4020 'YUKA BLUE BLOCK $
4030 DATA7F7F7F00F7F7F700,4141414141414141
4040 'YUKA RIVER %
4050 DATA00C0000600000060,F7F7F7F7F7F7F7F7
4060 'YUKA TREES &'
4070 DATA3E57A8D70B050B07,13131212121C1C1C
4080 DATA03D7BFD3C7C78368,1C1C161626262686
8985 'BG ATARI HANTEI ARI-------
8990 'DRAGON abcdefghijk
9000 DATAF8F87B7EFEFCFDFD,2C32312121312121
9010 DATAF87E3C7DFDFB7FF8,3231212131212132
9020 DATADFDBEABE9FDFFDFD,C12121C1C121C1C1
9030 DATABF9EDCEEEBFBFEFF,2121C1C121C1C121
9040 DATAB7B797C7677FFF7E,CF3F3FCE3E31C131
9050 DATA28305C6FDE5F2F37,F1F131C1C2C2C2C2
9060 DATAEDEDE9E3E67E7F7E,CF2F2FCE2E21C121
9070 DATA140C3A767B7AF4EC,F1F121C1C2C2C2C2
9080 DATA3F3F3D1D1F0FFFFF,C4C4C4C4C4C44444
9090 DATAFCFCBCB8F8F00000,C4C4C4C4C4C4C4C4
9100 DATA6060E0E0E0C0C080,C4C4C4C4C4C4C4C4
9110 DATA0606070707030301,C4C4C4C4C4C4C4C4
10050 'KAWA BLOCK l
10060 DATABEFEFEFEFEF6F2FF,F151515151515111
10065 'GLASS DASH m NON
10070 DATA6060000101181800,32C23232C232C232
10075 'GLASS n NON
10080 DATA0000000000000000,3232323232323232
10085 'HAKA o NON
10090 DATA0000000020505000,F6F6F6F6F6E6E6E6
10095 'YELLOW BLOCK t p
10100 DATAFF92A4C992A4C992,1B1B1B1B1A1A1A1A
10105 'TREE qrst
10110 DATAF0FFCF9FBF7F7F9A,313131312121212C
10120 DATA7D7F7FBEC003070F,C1C1C1C1C1828262
10130 DATA0F83C181D168F0F0,2121212121C1C1C1
10140 DATAE8C0D201B0E0F0F8,C1C1C1C161626262
10144 'ITEM---------------
10145 'TAKARA uvwx
10150 DATA00010F3DDAB3B3B3,F1F1F1F1B1B1B6B1
10160 DATAB7348731C7390700,B171B1B1B1B1A1A1
10170 DATA00F8E43219594D73,F1F1F1A1A1A4ADA1
10180 DATA451555071C70C000,A1A1A1E1E1E1E1A1
10185 'WAKU
10190 DATA7F7F7F00F7F7F700,D1D1D1D1D1D1D1D1
19990 'MUSIC DATA
20000 DATAG4E8E4F8E8D8C8
20010 DATAG4E8E8D4R4
20020 DATAE8E8G8G8A8A8R8A8
20030 DATAO6C4O5E8E8G4R4
20040 DATAGE8E8F8E8D8C8
20050 DATAGE8E8D4R4
20060 DATAGE8E8A4G8G8
20070 DATAA8A8B8B8O6C4O5R4
20080 DATA##
20490 'MAP DATA
20500 MP$(0)= "########################################################################################"
20510 MP$(1)= "#################################$$$$$$####$$$$$$$##$$$$$$$$$$$#########################"
20520 MP$(2)= "################################$$$$$$$$$$$$$$$$$$$$$$$pppppppppppppp###################"
20530 MP$(3)= "##############################llllllllll$$$$$$$$$$$$$$$$$$$$$$$#########################"
20540 MP$(4)= "##############################$$$$$$$$$l$$$$$$$$$$$$$$$$$$$$$$$#########################"
20550 MP$(5)= "##############################$$$$$$$$$l$$$$$$$$$$$$$$$$$pppppppppppp###################"
20560 MP$(6)= "##############################lllllll$$l$$$$$$$$$$$$$ppppp&#&&&&&&######################"
20570 MP$(7)= "####################################l$$l$$$$$$$$$$$$$$$$$p&&&&&&&&######################"
20580 MP$(8)= "####################################l$$l$$$&&&$$$$$$$$$$$p&&&&''''######################"
20590 MP$(9)= "#############qs#####################l$$l$$$&&&&&$$$$$$p$$p''''##########################"
20600 MP$(10)="#############rt#################lllll$$l&&&&&&&&$$$$$$p$$p#######################qs#####"
20610 MP$(11)="################################l$$$$$$l&&&&''''####$$$$$$$$llll#################rt#####"
20620 MP$(12)="################################l$$$$$$l&&&&##########$$$$$$l%%l########################"
20630 MP$(13)="################################l$$lllll&&&&##########$$$$$$l%%l########################"
20640 MP$(14)="################################l$$l&&&&&&&&qs########$$$$$$l%%l########################"
20650 MP$(15)="##########################lllllll$$l&&&&&&&&rt#########$$$##l%%l######ll###lll##########"
20660 MP$(16)="##########################l$$$$$$$$l'''&&&''###########$$$##l%%lllllll%%lll%%%l#########"
20670 MP$(17)="##########################l$$$$$$$$l###'''#############$$$##l%%%%%%%%%%%%%%%%%l#########"
20680 MP$(18)="##########################llllllllll###################$$$##l%%%%%%%%%%%%%%%%%l#########"
20690 MP$(19)="&&&&&##################################################$$$$#llllllll%%%%%%%%%%%l########"
20700 MP$(20)="&&&&&&######################################$$$$$$$$###$$$$####pp$$l%%%%%%%%%%%l########"
20710 MP$(21)="&&&&&&&#################################$$$$$$$$$$$$$##$$$$####pp$$l%%%%%%%%%%%l########"
20720 MP$(22)="'''&&&'###############################$$$$$$$pppppp$$$$$$$$$$$$pp##l%%%%%%%%%%l#########"
20730 MP$(23)="##&&&&&&########################$$$$$$$$pp$$$pppppp$$$$$$$$$$$$pp###l%%%%%%%%%l########&"
20740 MP$(24)="&&&&&&&'########################p$$$$$$$p$$$$$$`b$$$$$$$$$$$$$$pp###l%%%%%%%%%%l#######'"
20750 MP$(25)="'''&&''#########################p$$$$$$$p$$$$$$ac$$$$$$$$$$$$$$pp##l%%%%%%%%%%%l########"
20760 MP$(26)="###''###################################p$$$$$$`b$$$$$$pppppppppp##l%%%%%%%%%%%l########"
20770 MP$(27)="llllllllllllllllllllll##llllllllllllllllp$$$$$$ac$$$$$$$$$$$$$$pp###lll%%%%%%%%l########"
20780 MP$(28)="%%%%%%%%%%%%%%%%%%%%%l##l%%%%%%%%%%%%%%lp$$$$$kdfj$$$$$$$$$$$$$pp######llllllll#########"
20790 MP$(29)="%%%%%%%%%%%%%%%%%%%%%l##l%%%%%%%%%%%%%%lp$$$$$$eg$$$$$$$$pppppppp#######################"
20800 MP$(30)="llllllllllllllllllllll##lllllllllllll%%lp$$$$$$hi$$$pppppp&#&&##########################"
20810 MP$(31)="####################################l%%lp$$$$$$$$$$$$$$$$p&&&&&&&&&#####################"
20820 MP$(32)="####################################l%%lp$$ppp$$$$$$$$$$$p&&&&''&&&#####################"
20830 MP$(33)="#############qs#####################l%%lp$$p$$$$$$$p$$p$$p''''##'''#####################"
20840 MP$(34)="#############rt#################lllll%%lp$$p$$$$$$$p$$p$$p#######################qs####&"
20850 MP$(35)="################################l%%%%%%lpppppppppppp$$ppppqs#####################rt####'"
20860 MP$(36)="################################l%%%%%%l&&&&&&&&&#########rt##########################qs"
20870 MP$(37)="################################l%%lllll&&&&&&&&'##########################qs#########rt"
20880 MP$(38)="################################l%%l&&&&&&&&qs''###########################rt###########"
20890 MP$(39)="###################llllllllllllll%%l&&&&&&&&rt&&&#######################################"
20900 MP$(40)="###################l%%%%%%%%%%%%%%%l'''&&&''##&&&#######################################"
20910 MP$(41)="###################l%%%%%%%%%%%%%%%l###'''####'''#######qs##########################qs##"
20920 MP$(42)="###################l%%llllllllllllll####################rt##########################rt##"
20930 MP$(43)="###################l%%l#################################################################"
20940 MP$(44)="###################llll#################################################################"
20950 MP$(45)="#######################################################################&&&&&############"
20960 MP$(46)="#####################################################################&&&&'''############"
20970 MP$(47)="###################llll##############################################&&&&&&######&&&&&&#"
20980 MP$(48)="###################l%%l#############qs############################&&&&&&&&&&&##&&&&&&''#"
20990 MP$(49)="###################l%%l#############rt############################&&&&''''&&&&&&&&'''###"
21000 MP$(50)="###################l%%l###########################################'&&&&##&&&&&&&''####&&"
21010 MP$(51)="###################l%%llllllllllllllllll###########################''''##''&&&''####&&&&"
21020 MP$(52)="###################l%%%%%%%%%%%%%%%%%%%l#################################&&&&&&&####&&&&"
21030 MP$(53)="###################l%%%%%%%%%%%%%%%%%%%l####&&&############&&&&##########'&&&&&'###&&&&&"
21040 MP$(54)="###################llllllllllllllllll%%l#&&&&&&&##########&&&&'##########&&&&&&&###'&&&&"
21050 MP$(55)="####################################l%%l#&&&&&&&##########&&&&&&#########'&&&&''###&&&&&"
21060 MP$(56)="####################################l%%l#&&&&&&&&#########&&&&''##########''''#####''&&&"
21070 MP$(57)="#############qs#####################l%%l&&&&&&&&&#########''''######################&&&&"
21080 MP$(58)="#############rt#################lllll%%l&&&&&&&&&################################qs#''''"
21090 MP$(59)="################################l%%%%%%l&&&&&&&&&################################rt#####"
21100 MP$(60)="################################l%%%%%%l&&&&&&llll#####llll#############################"
21110 MP$(61)="################################l%%lllll&&&&&l%%%%lllll%%%%ll###########################"
21120 MP$(62)="################################l%%l&&&&&'''l%%%%%%%%%%%##%%%l##########################"
21130 MP$(63)="################################l%%l&&'''###l%%%%%%%%%%####%%l##########################"
21140 MP$(64)="########qs######################l%%l''#####l%%%%%%ll%%%####%%l##########################"
21150 MP$(65)="########rt######################l%%l######l%%%%lll##ll%####%%l##########################"
21160 MP$(66)="################################llll######l%%%%l####l%%%%%%%l###########################"
21170 MP$(67)="##########################################l%%%%%#####llllllll###########################"
21180 MP$(68)="##########################################l%%%%%########################################"
21190 MP$(69)="###########################################lllll########################################"
21200 MP$(70)="########################################################################################"
21210 MP$(71)="########################################################################################"
21220 MP$(72)="###################l##l##############################################&&&&&&######&&&&&&#"
21230 MP$(73)="###################l%%l#############qs############################&&&&&&&&&&&##&&&&&&''#"
21240 MP$(74)="###################l%%l#############rt############################&&&&''''&&&&&&&&'''###"
21250 MP$(75)="###################l%%l###########################################'&&&&##&&&&&&&''####&&"
21260 MP$(76)="###################l%%llllllllllllllllll###########################''''##''&&&''####&&&&"
21270 MP$(77)="###################l%%%%%%%%%%%%%%%%%%%l#################################&&&&&&&####&&&&"
21280 MP$(78)="###################l%%%%%%%%%%%%%%%%%%%l###################&&&&##########'&&&&&'###&&&&&"
21290 MP$(79)="###################lllllll%%lllllllll%%l#&&###############&&&&'##########&&&&&&&###'&&&&"
21300 MP$(80)="#########################l%%l#######l%%l#&&####&#lll##ll##&&&&&&#########'&&&&''###&&&&&"
21310 MP$(81)="#########################l%%l#######l%%l#&&&###&&l%%%%%%l#&&&&''##########''''#####''&&&"
21320 MP$(82)="#############qs##########l%%l#######l%%l&&&&###&&l%%%%%%l#''''######################&&&&"
21330 MP$(83)="#############rt##########l%%lllll##ll%%l&&&&###&&l%%%%%%%l#######################qs#''''"
21340 MP$(84)="#########################l%%%%%%%%%%%%%l&&&&&&&&&l%%%%%%%l#######################rt#####"
21350 MP$(85)="#########################l%%%%%%%%%%%%%l&&&&&&llll%%%%%llll#############################"
21360 MP$(86)="#########################llllllll%%lllll&&&&&l%%%%%%%%%%%%%ll###########################"
21370 MP$(87)="################################l%%l&&&&&'''l%%%%%%%%%%%##%%%l##########################"
21380 MP$(88)="################################l%%l&&'''###l%%%%%%%%%%####%%l##########################"
21390 MP$(89)="########qs######################l%%l''#####l%%%%%%ll%%%####%%l##########################"
21400 MP$(90)="########rt######################l%%l######l%%%%lll##ll%####%%l##########################"
21410 MP$(91)="################################llll######l%%%%l####l%%%%%%%l###########################"
21420 MP$(92)="##########################################l%%%%%#####llllllll###########################"
21430 MP$(93)="##########################################l%%%%%########################################"
21440 MP$(94)="###########################################lllll########################################"
21450 MP$(95)="########################################################################################"
21490 'MAP HYOUJI=============================
21500 PUT SPRITE 0,(0,193)
21510 K=0:FOR I=SY*21 TO SY*21+21
21520 LOCATE 1,K+1:PRINT MID$(MP$(I),SX*22+1,22)
21530 K=K+1:NEXT
21540 SS=SX+4*SY:NN=0:G1=99
21550 FOR I=0 TO IT
21560 IF IS(I)=SS THEN OX=IX(I):OY=IY(I):G1=I:GOSUB 21630
21570 NEXT
21575 G2(0)=99:G2(1)=99:G2(2)=99:G2(3)=99:G2(4)=99:G2(5)=99:G2(6)=99:G2(7)=99
21580 FOR J=0 TO KE
21590 IF KS(J)=SS THEN OX=KX(J):OY=KY(J):G2(NN)=J:GOSUB 21630
21600 NEXT
21610 NN=0:PUT SPRITE 0,(X*8,Y*8-1),15,H
21620 RETURN
21625 'TAKARA HYOUJI
21630 IF NN<8 THEN NN=NN+1
21640 LOCATE OX,OY:PRINT "u"
21650 LOCATE OX,OY+1:PRINT "v"
21660 LOCATE OX+1,OY:PRINT "w"
21670 LOCATE OX+1,OY+1:PRINT "x"
21680 RETURN
21995 'WAKU HYOUJI
22000 LOCATE 0,0
22010 PRINT"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
22020 FOR I=1 TO 22
22030 LOCATE 0,I:PRINT"y yyyyyyyy"
22040 NEXT
22050 LOCATE 0,23:PRINT"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
22060 LOCATE 24,2:PRINT"HP"
22070 LOCATE 24,3:PRINT USING"######";255
22080 LOCATE 24,5:PRINT"STR"
22090 LOCATE 24,6:PRINT USING"######";255
22100 LOCATE 24,8:PRINT"EXP"
22110 LOCATE 24,9:PRINT USING"######";255
22120 RETURN

 

赤文字が、宝箱を拾う処理。

紫文字が、宝箱を設置する処理です。

 

 

宝箱(アイテムでもOK) の設置

まずは設置から。

 

21490 'MAP HYOUJI=============================
21500 PUT SPRITE 0,(0,193)
21510 K=0:FOR I=SY*21 TO SY*21+21
21520 LOCATE 1,K+1:PRINT MID$(MP$(I),SX*22+1,22)
21530 K=K+1:NEXT
21540 SS=SX+4*SY:NN=0:G1=99
21550 FOR I=0 TO IT
21560 IF IS(I)=SS THEN OX=IX(I):OY=IY(I):G1=I:GOSUB 21630
21570 NEXT
21575 G2(0)=99:G2(1)=99:G2(2)=99:G2(3)=99:G2(4)=99:G2(5)=99:G2(6)=99:G2(7)=99
21580 FOR J=0 TO KE
21590 IF KS(J)=SS THEN OX=KX(J):OY=KY(J):G2(NN)=J:GOSUB 21630
21600 NEXT
21610 NN=0:PUT SPRITE 0,(X*8,Y*8-1),15,H
21620 RETURN
21625 'TAKARA HYOUJI
21630 IF NN<8 THEN NN=NN+1
21640 LOCATE OX,OY:PRINT "u"
21650 LOCATE OX,OY+1:PRINT "v"
21660 LOCATE OX+1,OY:PRINT "w"
21670 LOCATE OX+1,OY+1:PRINT "x"
21680 RETURN

 

まずマップを表示します。

(最初の方)

21540行 SS=SX+4*SY

ここなのですが、

全マップは 4 X 4 画面です。

その位置は、SX、SY (SXは0~3、SYも0~3)で取得したいところなのですが、

今回は、ひとつの数字で表します。

(VRAMの画面上の文字の取得(vpeek)、

アドレスも1つの数字で表していました)

 

4 x 4画面は

 

0  ・ 1 ・ 2 ・  3

4  ・ 5 ・ 6 ・  7

8  ・ 9 ・10・11

12・13・14・15

 

こういう並びになっています。

SS=SX+4*SY

 

Y座標が1行目のとき (Y=0)

SS=SX+4*0

でX座標がそのままSSに入ります。

ここはOKだと思います。

 

Y座標が2行目のY=1の時が、

SS=SX+ 4 *

となります。

 

この考え方は、

色々と応用できるのです。

X座標が4個ある時に、4*Y

X座標が256個ある時は、256*Y

 

iPhoneのリアルタイム画像加工のカメラアプリでも、

この考え方を使用しました。

(iPhoneのピクセルの色を取得する時に^^)

 

X , Y座標を1つの数字で表す時のテクニックなので

覚えておくと便利かもしれないです^^

 

配列で、

31行目で

DIM IS(4),IX(4),IY(4)

としています。

(DIMは配列の宣言です)

 

宝箱にはそれぞれ配列で3つデータを与えます。

 

IS(アイテム番号)  = 宝箱を表示するマップナンバー( SS )

IX(アイテム番号) = 宝箱表示のX座標

(実際にLOCATEでPRINTする時に使います)

 

IY(アイテム番号) = 宝箱表示のY座標

(実際にLOCATEでPRINTする時に使います)

 

宝箱を表示する際に、

画面は切替方式なので、どこのマップか(SX,SY) 知る必要があるのと、

実際にLOCATEで表示するX,Yが必要です。

宝箱に入っているアイテムの数だけ配列を用意してやります。

(今回は4つ)

 

 

21550 FOR I=0 TO IT
21560 IF IS(I)=SS THEN OX=IX(I):OY=IY(I):G1=I:GOSUB 21630
21570 NEXT

 

すべての宝箱をFOR文でチェックします。

今回は、4個なので、ITは3です。(4ループ)

 

21560行で、今表示しているマップ番号SSが、

宝箱を表示させたいマップナンバーかどうかチェックします。

OX、OYにLOCATEで使うX座標、Y座標を入れます。

(G1は、宝箱を拾う時に使用します。何を拾ったか表示させたいので( ・∇・))

 

そして21630行へ。

21625 'TAKARA HYOUJI
21630 IF NN<8 THEN NN=NN+1
21640 LOCATE OX,OY:PRINT "u"
21650 LOCATE OX,OY+1:PRINT "v"
21660 LOCATE OX+1,OY:PRINT "w"
21670 LOCATE OX+1,OY+1:PRINT "x"
21680 RETURN

 

宝箱は

u w

v  x

の文字のグラフィックを変えています。

 

(表示するものがアイテムだった場合は、

グラフィックがすべて異なるはずなので、

この文字(uvwx)をそれぞれのアイテムに対応した文字にします。

あ う

い え

だとか。)

 

鍵も同じ方法でやります。

21575 G2(0)=99:G2(1)=99:G2(2)=99:G2(3)=99:G2(4)=99:G2(5)=99:G2(6)=99:G2(7)=99
21580 FOR J=0 TO KE
21590 IF KS(J)=SS THEN OX=KX(J):OY=KY(J):G2(NN)=J:GOSUB 21630
21600 NEXT

 

なぜ、アイテムと鍵を分けて処理しているかといいますと、

鍵をたくさん出すためです。

ハイドライド は鍵が一つですが、

今回作っているハイドライド もどきは、鍵をたくさん出します。

 

個人的に、ドラクエみたいに鍵と扉がたくさん出てくる方が

楽しいなぁって思うので^^

 

ゲーム的にも作りやすいですし(๑╹ω╹๑ )

 

(G2は、1画面に何個も鍵があってもいいように配列にしています。

これも宝箱を拾うときに使います)

 

アイテム(宝箱)を拾う

設置されたアイテムを完全に重なったら(16x16ドット同士)

拾うという処理をします。

 

カーソルの上を押したら、1395行へ飛ばされます。

それ以降の説明します。

 

1395 'UP=============================
1400 IF Y=1 THEN Y=21:H=(H+1)MOD 2:GOTO1910
1401 Y=Y-1:H=(H+1)MOD 2:V1=VPEEK(BS+X+Y*32):V2=VPEEK(BS+X+1+Y*32)
1402 IF V1>NG THEN TK=1:IF V1<IM GOTO1437
1403 IF V2>NG THEN TK=1:IF V2<IM GOTO1437
1404 IF TK=1 GOTO 2000
1405 GOTO 1030

 

前回と少し変わっています。

VPEEKで文字番号を取得していますが、

V1=VPEEK(BS+X+Y*32)

V2=VPEEK(BS+X+1+Y*32)

 

青:V1   黄:V2 

      f:id:nyaonyaokun:20181124233736p:plain

この位置の文字を取得しています。

 

1402 IF V1>NG THEN TK=1:IF V1<IM GOTO1437

文字(アスキーコード)は0~255あります。

自分で文字の形を変えているわけですが、

僕はこのようにしました。

 

 CHR$(35) ~ CHR$(39)が、歩ける地形BG

(草原とか、青いレンガ、川など)

 

CHR$(97) ~ CHR$(116)が、通過できないBG

(ドラゴンとか、黄色の壁、川沿いの壁、一本の木など)

 

CHR$(117) ~ CHR$(120)が、宝箱のBG

(重なって何か起こるような物です。これから以降も追加していくと思います)

 

このように文字を絵に変えるのでも法則性を持たすといい感じに^^

NGはCHR$(97)から、97を設定しています。

IMはCHR$(117)から、117を設定しています。

 

1402 IF V1>NG THEN TK=1:IF V1<IM GOTO1437

1403 IF V2>NG THEN TK=1:IF V2<IM GOTO1437

1404 IF TK=1 GOTO 2000

1405 GOTO 1030

 

ちょっとややこしいですけど...

1402行は、最終的にブロックだと判断したら、1437行へ。

1403行も、ブロックだったら、1437行へ。

このとき、アイテムかブロックかわからない時に、TK=1としておきます。

 

1404行を実行するときに、

V1、V2は、歩ける地形か、宝箱のどちらかなのですが、

TK=1なら宝箱と判断できます。

2000行は、ITEMチェックのサブルーチンです。

 

(1437行は、 X=TX:Y=TY:GOTO1030

ブロックなので、移動前に戻す処理です。)

 

 

1990 'ITEM CHECK==========================
2000 FOR I=0 TO 1
2010 FOR J=0 TO 1
2020 V=VPEEK(BS+X+I+(Y+J)*32)
2030 IF V<IM THEN GOTO 2090
2040 NEXT:NEXT
2045 PUT SPRITE 0,(X*8,Y*8-1),15,H
2050 IF G1<>99 THEN IF IX(G1)=X AND IY(G1)=Y THEN LOCATE 7,10:PRINT IM$(G1);" GET"
2060 FOR K=0 TO 7
2070 IF G2(K)<>99 THEN IF KX(G2(K))=X AND KY(G2(K))=Y THEN LOCATE 8,10:PRINT "KEY ";G2(K);" GET"
2080 NEXT
2090 GOTO1030

 

キャラクターと(16x16ドット)、宝箱(8x8が4つ)が、

すべて宝箱の文字(uvwx)かどうかチェックします。

V< IM  (IMは、(uのアスキーコード - 1) )

一つでも、宝箱じゃない文字だったら、何もせずにメインルーチンに戻ります。

 

2050行以降は、主人公と宝箱と完全に重なっている時の処理です。

 

2050 IF G1<>99 THEN IF IX(G1)=X AND IY(G1)=Y THEN LOCATE 7,10:PRINT IM$(G1);" GET"
2060 FOR K=0 TO 7
2070 IF G2(K)<>99 THEN IF KX(G2(K))=X AND KY(G2(K))=Y THEN LOCATE 8,10:PRINT "KEY ";G2(K);" GET"
2080 NEXT

 

G1は、宝箱の中身のアイテム番号が記憶されています。

(宝箱の設置の時に、G1に入れておきました)

 

G1=99は、初期値です。

IF G1<>99というのは、C 言語でいう IF G1 !=99です。

~でないならば、という条件式です。

この場合は、99でないならば、です。

 

あとは取得した宝箱の、アイテム番号から文字を表示するだけです。

(IM$( アイテム番号)、最初に配列として宣言しています)

 

追記

宝箱と重なると、宝箱が画面から消える処理をいれました。

それと、

宝箱を取った時に、アイテムゲットの音楽をなるようにして

"ITEM GET"の文字が消えるようにしました。

 

ソースコード

 

5 TIME=0
10 COLOR15,1,1:SCREEN2:SCREEN1,2:COLOR15,1,1:WIDTH32:DEFINTA-Z:KEYOFF
20 DEFUSR=&H7E:A=USR(0)
21 DEFUSR1=&H0090
25 POKE &HF3B1,26
26 POKE &HF3DB,0
28 KEY1,CHR$(12)+"POKE&HF3B1,24"+CHR$(13)
30 KEY2,"SCREEN1"+CHR$(13)
31 DIMEX(4),EY(4),EM(4),UX(4),UY(4),ES(4),EC(4),EP(4),IS(4),IX(4),IY(4),KS(4),KX(4),KY(4),G2(8)
32 IS(0)=2:IS(1)=6:IS(2)=10:IS(3)=14:IX(0)=5:IX(1)=5:IX(2)=5:IX(3)=5:IY(0)=5:IY(1)=5:IY(2)=5:IY(3)=5
33 KS(0)=0:KS(1)=1:KS(2)=2:KS(3)=3:KX(0)=10:KX(1)=10:KX(2)=10:KX(3)=10:KY(0)=10:KY(1)=10:KY(2)=10:KY(3)=10
34 EN=0:EK=4:IT=4:KE=4
35 X=20:Y=15:H=4:SX=2:SY=2
36 EX(0)=20:EY(0)=1:EX(1)=12:EY(1)=4:EX(2)=20:EY(2)=18:EX(3)=12:EY(3)=13
37 ES(0)=0:ES(1)=1:ES(2)=0:ES(3)=1
38 BS=&H1800:B2=&H800:B3=&H1000:C1=&H2000:C2=&H2800:C3=&H3000
39 DIMMP$(96),IM$(8)
40 EP(0)=8:EP(1)=8:EP(2)=8:EP(3)=8
41 EC(0)=7:EC(1)=7:EC(2)=7:EC(3)=7
42 NG=ASC("`")-1:IM=ASC("u"):IT=IT-1:KE=KE-1
43 IM$(0)="ITEM 0":IM$(1)="ITEM 1":IM$(2)="ITEM 2":IM$(3)="ITEM 3":IM$(4)="ITEM 4":IM$(5)="ITEM 5":IM$(6)="ITEM 6":IM$(7)="ITEM 7"
50 'MOJI TEIGI========================
51 N=48
52 FOR J=0 TO 41
53 FOR I=0 TO 7
54 K=VPEEK(N*8+I)
55 L=K OR (K\2)
56 VPOKE N*8+I,L
57 VPOKE B2+N*8+I,L
58 VPOKE B3+N*8+I,L
59 'COLOR TEIGI
60 VPOKE C1+N*8+I,&HF1
61 VPOKE C2+N*8+I,&HF1
62 VPOKE C3+N*8+I,&HF1
63 NEXT
64 N=N+1
65 NEXT
66 LOCATE10,10:PRINT"PLEASE WAIT!"
70 'SPRITE TEIGI======================
80 RESTORE 3000
90 FOR J=0 TO 9
100 S$=""
110 FOR I=0 TO31
120 READ DT$
130 S$=S$+CHR$(VAL("&H"+DT$))
140 NEXT
150 SPRITE$(J)=S$
160 NEXT
175 'BLOCK TEIGI======================
180 M=ASC("#")
185 RESTORE 4010
186 FOR J=0 TO 30
187 BG$="":CR$=""
190 READ BG$,CR$
192 FOR I=0 TO 7
193 BK$="":CK$=""
195 BK$=MID$(BG$,I*2+1,2)
196 CK$=MID$(CR$,I*2+1,2)
200 VPOKE M*8+I,VAL("&H"+BK$)
210 VPOKE B2+M*8+I,VAL("&H"+BK$)
220 VPOKE B3+M*8+I,VAL("&H"+BK$)
250 VPOKE C1+M*8+I,VAL("&H"+CK$)
260 VPOKE C2+M*8+I,VAL("&H"+CK$)
270 VPOKE C3+M*8+I,VAL("&H"+CK$)
280 NEXT
290 M=M+1
295 IF M=40 THEN M=96
300 NEXT
305 'WAKU
310 GOSUB 22000
435 'MAP
440 GOSUB 20500
890 'BGM WARIKOMI====================
900 RESTORE 20000
910 GOSUB 1860
920 ON INTERVAL=80 GOSUB 1860
930 INTERVAL ON
995 'MAIN LOOP
996 'PLAYER==========================
998 M=ASC("a")-1
999 H=4
1000 S=STICK(0) OR STICK(1)
1001 A=TIME
1010 TX=X:TY=Y
1018 'PLAYER
1020 TK=1
1021 ON S GOTO 1400,1040,1410,1040,1420,1040,1430,1040
1025 'PLAYER - ALL ENEMY ATARI HANTEI
1030 GOTO1680
1040 'SPRITE HYOUJI
1050 PUT SPRITE 0,(X*8 ,Y*8-1),15,H
1100 'ENEMY==========================
1110 UX(EN)=EX(EN):UY(EN)=EY(EN)
1200 C=RND(1)*5
1220 IF C=1 THEN ES(EN)=RND(1)*4
1230 EF=0
1240 ON ES(EN)+1 GOTO 1440,1450,1460,1470
1270 'ENEMY - PLAYER ATARI HANTEI====
1280 GOTO1770
1330 PUT SPRITE EN+1,(EX(EN)*8,EY(EN)*8-1),EC(EN),EP(EN)
1340 EN=EN+1:IF EN>EK-1 THEN EN=0
1345 B=TIME
1346 C=B-A:TIME=0
1347 LOCATE0,0:PRINT C;"/60"
1350 GOTO1000
1395 'UP=============================
1400 IF Y=1 THEN Y=21:H=(H+1)MOD 2:GOTO1910
1401 Y=Y-1:H=(H+1)MOD 2:V1=VPEEK(BS+X+Y*32):V2=VPEEK(BS+X+1+Y*32)
1402 IF V1>NG THEN TK=1:IF V1<IM GOTO1437
1403 IF V2>NG THEN TK=1:IF V2<IM GOTO1437
1404 IF TK=1 GOTO 2000
1405 GOTO 1030
1409 'RIGHT
1410 IF X=21 THEN X=1:H=( (H+1)MOD 2)+2:GOTO1930
1411 X=X+1:H=( (H+1)MOD 2)+2:V1= VPEEK(BS+X+1+Y*32):V2=VPEEK(BS+X+1+(Y+1)*32)
1412 IF V1>NG THEN TK=1:IF V1<IM GOTO1437
1413 IF V2>NG THEN TK=1:IF V2<IM GOTO1437
1414 IF TK=1 GOTO2000
1415 GOTO 1030
1419 'DOWN
1420 IF Y=21 THEN Y=1:H=( (H+1)MOD 2)+4:GOTO1950
1421 Y=Y+1:H=( (H+1)MOD 2)+4:V1=VPEEK(BS+X+(Y+1)*32):V2=VPEEK(BS+X+1+(Y+1)*32)
1422 IF V1>NG THEN TK=1:IF V1<IM GOTO1437
1423 IF V2>NG THEN TK=1:IF V2<IM GOTO1437
1424 IF TK=1 GOTO2000
1425 GOTO 1030
1429 'LEFT
1430 IF X=1 THEN X=21:H=( (H+1)MOD 2)+6:GOTO1970
1431 X=X-1:H=( (H+1)MOD 2)+6:V1=VPEEK(BS+X+Y*32):V2=VPEEK(BS+X+(Y+1)*32)
1432 IF V1>NG THEN TK=1:IF V1<IM GOTO1437
1433 IF V2>NG THEN TK=1:IF V2<IM GOTO1437
1434 IF TK=1 GOTO2000
1435 GOTO 1030
1437 X=TX:Y=TY:GOTO1030
1438 'ENEMY MOVE==================
1439 'ENEMY UP 0
1440 EY(EN)=EY(EN)-1
1441 IF EY(EN)<1 THEN EF=1
1442 IF VPEEK(BS+EX(EN)+(EY(EN)*32)) >NG THEN EF=1:GOTO1444
1443 IF VPEEK(BS+EX(EN)+1+EY(EN)*32) >NG THEN EF=1
1444 IF EF=1 THEN ES(EN)=2:EX(EN)=UX(EN):EY(EN)=UY(EN)
1445 GOTO1270
1449 'ENEMY RIGHT 1
1450 EX(EN)=EX(EN)+1
1451 IF EX(EN)>21 THEN EF=1
1452 IF VPEEK(BS+EX(EN)+1+EY(EN)*32) >NG THEN EF=1:GOTO1454
1453 IF VPEEK(BS+EX(EN)+1+(EY(EN)+1)*32) >NG THEN EF=1
1454 IF EF=1 THEN ES(EN)=3:EX(EN)=UX(EN):EY(EN)=UY(EN)
1455 GOTO1270
1459 'ENEMY DOWN 2
1460 EY(EN)=EY(EN)+1
1461 IF EY(EN)>21 THEN EF=1
1462 IF VPEEK(BS+EX(EN)+(EY(EN)+1)*32) >NG THEN EF=1:GOTO1464
1463 IF VPEEK(BS+EX(EN)+1+(EY(EN)+1)*32) >NG THEN EF=1
1464 IF EF=1 THEN ES(EN)=0:EX(EN)=UX(EN):EY(EN)=UY(EN)
1465 GOTO1270
1469 'ENEMY LEFT 3
1470 EX(EN)=EX(EN)-1
1471 IF EX(EN)<1 THEN EF=1
1472 IF VPEEK(BS+EX(EN)+EY(EN)*32) >NG THEN EF=1:GOTO1474
1473 IF VPEEK(BS+EX(EN)+(EY(EN)+1)*32) >NG THEN EF=1
1474 IF EF=1 THEN ES(EN)=1:EX(EN)=UX(EN):EY(EN)=UY(EN)
1475 GOTO1270
1680 'PLAYER ALL ENEMY ATARI HANTEI===============
1690 ED=99
1700 FOR I=0 TO EK-1
1710 IF ABS(X-EX(I))<2 AND ABS(Y-EY(I))<2 THEN ED=I
1720 NEXT
1730 IF ED=99 THEN 1040
1740 X=TX:Y=TY
1745 PUT SPRITE 0,(X*8,Y*8-1),15,H
1747 'DAMAGE ENEMY
1750 PUT SPRITE ED+1,(EX(ED)*8,EY(ED)*8-1),9,9
1755 GOSUB1830
1756 PUT SPRITE ED+1,(EX(ED)*8,EY(ED)*8-1),EC(ED),EP(ED)
1760 GOTO1040
1765 'ENEMY ATARI HANTEI===========
1770 IF ABS(X-EX(EN))<2 THEN IF ABS(Y-EY(EN))<2 THEN1790
1780 GOTO1330
1790 EX(EN)=UX(EN):EY(EN)=UY(EN):ES(EN)=(ES(EN)+2)MOD4
1800 PUT SPRITE 0,(X*8,Y*8-1),9,9:GOSUB1830
1810 PUT SPRITE 0,(X*8,Y*8-1),15,H
1820 GOTO1330
1825 'WAIT
1830 FOR I=0 TO 1000
1840 NEXT
1850 RETURN
1855 'BGM===============================
1860 IF PEEK(&HFB40)<>0 THEN RETURN
1870 READ U$
1880 IF U$="##" THEN RESTORE 20000:READ U$
1890 PLAY"T120O5"+U$
1900 RETURN
1365 'STAGE MOVE========================
1910 IF SY>0 THEN SY=SY-1 ELSE SY=3
1920 GOSUB21500:GOTO1100
1930 IF SX<3 THEN SX=SX+1 ELSE SX=0
1940 GOSUB21500:GOTO1100
1950 IF SY<3 THEN SY=SY+1 ELSE SY=0
1960 GOSUB21500:GOTO1100
1970 IF SX>0 THEN SX=SX-1 ELSE SX=3
1980 GOSUB21500:GOTO1100
1990 'ITEM CHECK==========================
2000 FOR I=0 TO 1
2010 FOR J=0 TO 1
2020 V=VPEEK(BS+X+I+(Y+J)*32)
2030 IF V<IM THEN GOTO 2090
2040 NEXT:NEXT
2045 PUT SPRITE 0,(X*8,Y*8-1),15,H
2050 IF G1<>99 THEN IF IX(G1)=X AND IY(G1)=Y THEN LOCATE 7,10:PRINT IM$(G1);" GET":XX=IX(G1):YY=IY(G1):IS(G1)=99:M=2:GOSUB 2100:GOSUB 2140
2060 FOR K=0 TO 7
2070 IF G2(K)<>99 THEN IF KX(G2(K))=X AND KY(G2(K))=Y THEN LOCATE 8,10:PRINT "KEY ";G2(K);" GET":XX=KX(G2(K)):YY=KY(G2(K)):KS(G2(K))=99:M=2:GOSUB 2100:GOSUB 2140
2080 NEXT
2090 GOTO1030
2099 'TAKARA SITA CHIKEI HYOUJI
2100 FOR I=0 TO 1
2110 LOCATE XX,YY+I:PRINT MID$(MP$(SY*21+YY+I-1),SX*22+XX,M)
2120 NEXT
2130 RETURN
2135 'GET SOUND
2140 INTERVAL OFF:B=USR1(0):PLAY"T255O4ABO5CDE"
2150 FOR I=0 TO 1000:NEXT
2160 XX=1:YY=10:M=21:GOSUB 2100
2170 INTERVAL ON
2180 RETURN
2995 'SPRITE UP0 DATA===================
3000 DATA00,00,4F,5F,7F,3F,3F,3F,3F,1F,EF,F0,FE,F3,6C,00,01,01,E5,F5,FD,F9,F9,F9,F9,F7,E7,07,E1,80,60,60
3010 'SPRITE UP1 DATA
3020 DATA00,00,4F,5F,7F,3F,3F,3F,3F,DF,EF,F8,FE,73,0C,0C,00,00,E5,F5,FD,F9,F9,F9,F9,F1,E1,07,E7,87,61,00
3030 'SPRITE RIGHT2 DATA
3040 DATA00,00,47,4B,6B,0B,6B,6B,6B,2B,0B,1C,1B,03,1C,1C,00,00,E0,F4,FC,F8,68,68,F8,F8,FE,1A,B0,DA,3E,3C
3050 'SPRITE RIGHT3 DATA
3060 DATA00,00,4F,5E,6D,1D,7D,7D,7A,3A,15,0C,1B,1B,24,0E,00,00,E0,F4,7C,78,58,58,F8,F0,FE,1A,50,DA,0E,E4
3070 'SPRITE DOWN4 DATA
3080 DATA00,00,A7,AF,BF,9F,9D,9D,9F,8F,87,80,E7,E1,86,00,00,00,F2,FA,FE,FC,DC,DC,FC,FF,FB,11,7B,CE,30,30
3090 'SPRITE DOWN5 DATA
3100 DATA00,80,A7,AF,BF,9F,9D,9D,9F,8F,E7,E0,E7,81,06,06,00,00,F2,FA,FE,FC,DC,DC,FC,F8,FF,1B,71,DB,3E,00
3110 'SPRITE LEFT6 DATA
3120 DATA00,00,03,17,1F,8F,8B,8B,4F,4F,27,20,1A,1B,00,03,00,00,F9,FD,FB,FC,7F,7F,FF,CE,DF,1B,D1,DB,3E,70
3130 'SPRITE LEFT7 DATA
3140 DATA00,00,47,6F,7F,5F,56,56,5F,5F,4F,40,E5,E3,48,38,00,00,F2,FA,F6,F8,FE,FE,FE,9C,BE,36,A2,B6,3C,38
3150 'SPRITE SLIME DATA
3160 DATA00,00,00,00,0F,3F,7F,FF,FF,FF,FF,7E,00,00,00,00,00,00,00,00,F0,FC,FE,FF,FF,FF,FF,7E,00,00,00,00
3170 'SPRITE DAMAGE
3180 DATAFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF
3990 'BG DATA===========================
4000 'YUKA GLASS #
4010 DATA0000000000000000,2222222222222222
4020 'YUKA BLUE BLOCK $
4030 DATA7F7F7F00F7F7F700,4141414141414141
4040 'YUKA RIVER %
4050 DATA00C0000600000060,F7F7F7F7F7F7F7F7
4060 'YUKA TREES &'
4070 DATA3E57A8D70B050B07,13131212121C1C1C
4080 DATA03D7BFD3C7C78368,1C1C161626262686
8985 'BG ATARI HANTEI ARI-------
8990 'DRAGON abcdefghijk
9000 DATAF8F87B7EFEFCFDFD,2C32312121312121
9010 DATAF87E3C7DFDFB7FF8,3231212131212132
9020 DATADFDBEABE9FDFFDFD,C12121C1C121C1C1
9030 DATABF9EDCEEEBFBFEFF,2121C1C121C1C121
9040 DATAB7B797C7677FFF7E,CF3F3FCE3E31C131
9050 DATA28305C6FDE5F2F37,F1F131C1C2C2C2C2
9060 DATAEDEDE9E3E67E7F7E,CF2F2FCE2E21C121
9070 DATA140C3A767B7AF4EC,F1F121C1C2C2C2C2
9080 DATA3F3F3D1D1F0FFFFF,C4C4C4C4C4C44444
9090 DATAFCFCBCB8F8F00000,C4C4C4C4C4C4C4C4
9100 DATA6060E0E0E0C0C080,C4C4C4C4C4C4C4C4
9110 DATA0606070707030301,C4C4C4C4C4C4C4C4
10050 'KAWA BLOCK l
10060 DATABEFEFEFEFEF6F2FF,F151515151515111
10065 'GLASS DASH m NON
10070 DATA6060000101181800,32C23232C232C232
10075 'GLASS n NON
10080 DATA0000000000000000,3232323232323232
10085 'HAKA o NON
10090 DATA0000000020505000,F6F6F6F6F6E6E6E6
10095 'YELLOW BLOCK t p
10100 DATAFF92A4C992A4C992,1B1B1B1B1A1A1A1A
10105 'TREE qrst
10110 DATAF0FFCF9FBF7F7F9A,313131312121212C
10120 DATA7D7F7FBEC003070F,C1C1C1C1C1828262
10130 DATA0F83C181D168F0F0,2121212121C1C1C1
10140 DATAE8C0D201B0E0F0F8,C1C1C1C161626262
10144 'ITEM---------------
10145 'TAKARA uvwx
10150 DATA00010F3DDAB3B3B3,F1F1F1F1B1B1B6B1
10160 DATAB7348731C7390700,B171B1B1B1B1A1A1
10170 DATA00F8E43219594D73,F1F1F1A1A1A4ADA1
10180 DATA451555071C70C000,A1A1A1E1E1E1E1A1
10185 'WAKU
10190 DATA7F7F7F00F7F7F700,D1D1D1D1D1D1D1D1
19990 'MUSIC DATA
20000 DATAG4E8E4F8E8D8C8
20010 DATAG4E8E8D4R4
20020 DATAE8E8G8G8A8A8R8A8
20030 DATAO6C4O5E8E8G4R4
20040 DATAGE8E8F8E8D8C8
20050 DATAGE8E8D4R4
20060 DATAGE8E8A4G8G8
20070 DATAA8A8B8B8O6C4O5R4
20080 DATA##
20490 'MAP DATA
20500 MP$(0)= "########################################################################################"
20510 MP$(1)= "#################################$$$$$$####$$$$$$$##$$$$$$$$$$$#########################"
20520 MP$(2)= "################################$$$$$$$$$$$$$$$$$$$$$$$pppppppppppppp###################"
20530 MP$(3)= "##############################llllllllll$$$$$$$$$$$$$$$$$$$$$$$#########################"
20540 MP$(4)= "##############################$$$$$$$$$l$$$$$$$$$$$$$$$$$$$$$$$#########################"
20550 MP$(5)= "##############################$$$$$$$$$l$$$$$$$$$$$$$$$$$pppppppppppp###################"
20560 MP$(6)= "##############################lllllll$$l$$$$$$$$$$$$$ppppp&#&&&&&&######################"
20570 MP$(7)= "####################################l$$l$$$$$$$$$$$$$$$$$p&&&&&&&&######################"
20580 MP$(8)= "####################################l$$l$$$&&&$$$$$$$$$$$p&&&&''''######################"
20590 MP$(9)= "#############qs#####################l$$l$$$&&&&&$$$$$$p$$p''''##########################"
20600 MP$(10)="#############rt#################lllll$$l&&&&&&&&$$$$$$p$$p#######################qs#####"
20610 MP$(11)="################################l$$$$$$l&&&&''''####$$$$$$$$llll#################rt#####"
20620 MP$(12)="################################l$$$$$$l&&&&##########$$$$$$l%%l########################"
20630 MP$(13)="################################l$$lllll&&&&##########$$$$$$l%%l########################"
20640 MP$(14)="################################l$$l&&&&&&&&qs########$$$$$$l%%l########################"
20650 MP$(15)="##########################lllllll$$l&&&&&&&&rt#########$$$##l%%l######ll###lll##########"
20660 MP$(16)="##########################l$$$$$$$$l'''&&&''###########$$$##l%%lllllll%%lll%%%l#########"
20670 MP$(17)="##########################l$$$$$$$$l###'''#############$$$##l%%%%%%%%%%%%%%%%%l#########"
20680 MP$(18)="##########################llllllllll###################$$$##l%%%%%%%%%%%%%%%%%l#########"
20690 MP$(19)="&&&&&##################################################$$$$#llllllll%%%%%%%%%%%l########"
20700 MP$(20)="&&&&&&######################################$$$$$$$$###$$$$####pp$$l%%%%%%%%%%%l########"
20710 MP$(21)="&&&&&&&#################################$$$$$$$$$$$$$##$$$$####pp$$l%%%%%%%%%%%l########"
20720 MP$(22)="'''&&&'###############################$$$$$$$pppppp$$$$$$$$$$$$pp##l%%%%%%%%%%l#########"
20730 MP$(23)="##&&&&&&########################$$$$$$$$pp$$$pppppp$$$$$$$$$$$$pp###l%%%%%%%%%l########&"
20740 MP$(24)="&&&&&&&'########################p$$$$$$$p$$$$$$`b$$$$$$$$$$$$$$pp###l%%%%%%%%%%l#######'"
20750 MP$(25)="'''&&''#########################p$$$$$$$p$$$$$$ac$$$$$$$$$$$$$$pp##l%%%%%%%%%%%l########"
20760 MP$(26)="###''###################################p$$$$$$`b$$$$$$pppppppppp##l%%%%%%%%%%%l########"
20770 MP$(27)="llllllllllllllllllllll##llllllllllllllllp$$$$$$ac$$$$$$$$$$$$$$pp###lll%%%%%%%%l########"
20780 MP$(28)="%%%%%%%%%%%%%%%%%%%%%l##l%%%%%%%%%%%%%%lp$$$$$kdfj$$$$$$$$$$$$$pp######llllllll#########"
20790 MP$(29)="%%%%%%%%%%%%%%%%%%%%%l##l%%%%%%%%%%%%%%lp$$$$$$eg$$$$$$$$pppppppp#######################"
20800 MP$(30)="llllllllllllllllllllll##lllllllllllll%%lp$$$$$$hi$$$pppppp&#&&##########################"
20810 MP$(31)="####################################l%%lp$$$$$$$$$$$$$$$$p&&&&&&&&&#####################"
20820 MP$(32)="####################################l%%lp$$ppp$$$$$$$$$$$p&&&&''&&&#####################"
20830 MP$(33)="#############qs#####################l%%lp$$p$$$$$$$p$$p$$p''''##'''#####################"
20840 MP$(34)="#############rt#################lllll%%lp$$p$$$$$$$p$$p$$p#######################qs####&"
20850 MP$(35)="################################l%%%%%%lpppppppppppp$$ppppqs#####################rt####'"
20860 MP$(36)="################################l%%%%%%l&&&&&&&&&#########rt##########################qs"
20870 MP$(37)="################################l%%lllll&&&&&&&&'##########################qs#########rt"
20880 MP$(38)="################################l%%l&&&&&&&&qs''###########################rt###########"
20890 MP$(39)="###################llllllllllllll%%l&&&&&&&&rt&&&#######################################"
20900 MP$(40)="###################l%%%%%%%%%%%%%%%l'''&&&''##&&&#######################################"
20910 MP$(41)="###################l%%%%%%%%%%%%%%%l###'''####'''#######qs##########################qs##"
20920 MP$(42)="###################l%%llllllllllllll####################rt##########################rt##"
20930 MP$(43)="###################l%%l#################################################################"
20940 MP$(44)="###################llll#################################################################"
20950 MP$(45)="#######################################################################&&&&&############"
20960 MP$(46)="#####################################################################&&&&'''############"
20970 MP$(47)="###################llll##############################################&&&&&&######&&&&&&#"
20980 MP$(48)="###################l%%l#############qs############################&&&&&&&&&&&##&&&&&&''#"
20990 MP$(49)="###################l%%l#############rt############################&&&&''''&&&&&&&&'''###"
21000 MP$(50)="###################l%%l###########################################'&&&&##&&&&&&&''####&&"
21010 MP$(51)="###################l%%llllllllllllllllll###########################''''##''&&&''####&&&&"
21020 MP$(52)="###################l%%%%%%%%%%%%%%%%%%%l#################################&&&&&&&####&&&&"
21030 MP$(53)="###################l%%%%%%%%%%%%%%%%%%%l####&&&############&&&&##########'&&&&&'###&&&&&"
21040 MP$(54)="###################llllllllllllllllll%%l#&&&&&&&##########&&&&'##########&&&&&&&###'&&&&"
21050 MP$(55)="####################################l%%l#&&&&&&&##########&&&&&&#########'&&&&''###&&&&&"
21060 MP$(56)="####################################l%%l#&&&&&&&&#########&&&&''##########''''#####''&&&"
21070 MP$(57)="#############qs#####################l%%l&&&&&&&&&#########''''######################&&&&"
21080 MP$(58)="#############rt#################lllll%%l&&&&&&&&&################################qs#''''"
21090 MP$(59)="################################l%%%%%%l&&&&&&&&&################################rt#####"
21100 MP$(60)="################################l%%%%%%l&&&&&&llll#####llll#############################"
21110 MP$(61)="################################l%%lllll&&&&&l%%%%lllll%%%%ll###########################"
21120 MP$(62)="################################l%%l&&&&&'''l%%%%%%%%%%%##%%%l##########################"
21130 MP$(63)="################################l%%l&&'''###l%%%%%%%%%%####%%l##########################"
21140 MP$(64)="########qs######################l%%l''#####l%%%%%%ll%%%####%%l##########################"
21150 MP$(65)="########rt######################l%%l######l%%%%lll##ll%####%%l##########################"
21160 MP$(66)="################################llll######l%%%%l####l%%%%%%%l###########################"
21170 MP$(67)="##########################################l%%%%%#####llllllll###########################"
21180 MP$(68)="##########################################l%%%%%########################################"
21190 MP$(69)="###########################################lllll########################################"
21200 MP$(70)="########################################################################################"
21210 MP$(71)="########################################################################################"
21220 MP$(72)="###################l##l##############################################&&&&&&######&&&&&&#"
21230 MP$(73)="###################l%%l#############qs############################&&&&&&&&&&&##&&&&&&''#"
21240 MP$(74)="###################l%%l#############rt############################&&&&''''&&&&&&&&'''###"
21250 MP$(75)="###################l%%l###########################################'&&&&##&&&&&&&''####&&"
21260 MP$(76)="###################l%%llllllllllllllllll###########################''''##''&&&''####&&&&"
21270 MP$(77)="###################l%%%%%%%%%%%%%%%%%%%l#################################&&&&&&&####&&&&"
21280 MP$(78)="###################l%%%%%%%%%%%%%%%%%%%l###################&&&&##########'&&&&&'###&&&&&"
21290 MP$(79)="###################lllllll%%lllllllll%%l#&&###############&&&&'##########&&&&&&&###'&&&&"
21300 MP$(80)="#########################l%%l#######l%%l#&&####&#lll##ll##&&&&&&#########'&&&&''###&&&&&"
21310 MP$(81)="#########################l%%l#######l%%l#&&&###&&l%%%%%%l#&&&&''##########''''#####''&&&"
21320 MP$(82)="#############qs##########l%%l#######l%%l&&&&###&&l%%%%%%l#''''######################&&&&"
21330 MP$(83)="#############rt##########l%%lllll##ll%%l&&&&###&&l%%%%%%%l#######################qs#''''"
21340 MP$(84)="#########################l%%%%%%%%%%%%%l&&&&&&&&&l%%%%%%%l#######################rt#####"
21350 MP$(85)="#########################l%%%%%%%%%%%%%l&&&&&&llll%%%%%llll#############################"
21360 MP$(86)="#########################llllllll%%lllll&&&&&l%%%%%%%%%%%%%ll###########################"
21370 MP$(87)="################################l%%l&&&&&'''l%%%%%%%%%%%##%%%l##########################"
21380 MP$(88)="################################l%%l&&'''###l%%%%%%%%%%####%%l##########################"
21390 MP$(89)="########qs######################l%%l''#####l%%%%%%ll%%%####%%l##########################"
21400 MP$(90)="########rt######################l%%l######l%%%%lll##ll%####%%l##########################"
21410 MP$(91)="################################llll######l%%%%l####l%%%%%%%l###########################"
21420 MP$(92)="##########################################l%%%%%#####llllllll###########################"
21430 MP$(93)="##########################################l%%%%%########################################"
21440 MP$(94)="###########################################lllll########################################"
21450 MP$(95)="########################################################################################"
21490 'MAP HYOUJI=============================
21500 PUT SPRITE 0,(0,193)
21510 K=0:FOR I=SY*21 TO SY*21+21
21520 LOCATE 1,K+1:PRINT MID$(MP$(I),SX*22+1,22)
21530 K=K+1:NEXT
21540 SS=SX+4*SY:NN=0:G1=99
21550 FOR I=0 TO IT
21560 IF IS(I)=SS THEN OX=IX(I):OY=IY(I):G1=I:GOSUB 21630
21570 NEXT
21575 G2(0)=99:G2(1)=99:G2(2)=99:G2(3)=99:G2(4)=99:G2(5)=99:G2(6)=99:G2(7)=99
21580 FOR J=0 TO KE
21590 IF KS(J)=SS THEN OX=KX(J):OY=KY(J):G2(NN)=J:GOSUB 21630
21600 NEXT
21610 NN=0:PUT SPRITE 0,(X*8,Y*8-1),15,H
21620 RETURN
21625 'TAKARA HYOUJI
21630 IF NN<8 THEN NN=NN+1
21640 LOCATE OX,OY:PRINT "u"
21650 LOCATE OX,OY+1:PRINT "v"
21660 LOCATE OX+1,OY:PRINT "w"
21670 LOCATE OX+1,OY+1:PRINT "x"
21680 RETURN
21995 'WAKU HYOUJI
22000 LOCATE 0,0
22010 PRINT"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
22020 FOR I=1 TO 22
22030 LOCATE 0,I:PRINT"y yyyyyyyy"
22040 NEXT
22050 LOCATE 0,23:PRINT"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
22060 LOCATE 24,2:PRINT"HP"
22070 LOCATE 24,3:PRINT USING"######";255
22080 LOCATE 24,5:PRINT"STR"
22090 LOCATE 24,6:PRINT USING"######";255
22100 LOCATE 24,8:PRINT"EXP"
22110 LOCATE 24,9:PRINT USING"######";255
22120 RETURN

 

 

 

解説

特別、新しいことはやっていません。

2099 'TAKARA SITA CHIKEI HYOUJI
2100 FOR I=0 TO 1
2110 LOCATE XX,YY+I:PRINT MID$(MP$(SY*21+YY+I-1),SX*22+XX,M)
2120 NEXT
2130 RETURN

 

宝箱の座標が入っている

X座標  :  IX( アイテムナンバー)

Y座標  :  IY( アイテムナンバー)

を、

XX , YYにいれておいて、

LOCATE XX , YYで、本来表示されるはずだった地面を表示してやります。

(MP$() には、宝箱がない状態のマップデータが入っているので)

 

PRINT MID$(MP$(SY*21+YY+I-1),SX*22+XX,M)

は、宝箱の下の部分の、

本来表示されるべきマップデータを表示しています。

SX ,  SYは、マップ画面です。

(今回のフィールドは、4 x 4 画面でした)

(SXは0~3、SYも0~3です。)

 

 

MID$は、文字を抜き出す命令です。

MID$( 文字列, 先頭位置 , 文字数)

 

そのフィールドマップに、実際に表示される座標XX,YYを足してやります。

 

宝箱は2x 2文字ですので、X座標を、MID$でM=2文字表示です。

 

宝箱のゲット音楽

21行目 DEFUSR1=&H0090

 

2135 'GET SOUND
2140 INTERVAL OFF:B=USR1(0):PLAY"T255O4ABO5CDE"
2150 FOR I=0 TO 1000:NEXT
2160 XX=1:YY=10:M=21:GOSUB 2100
2170 INTERVAL ON
2180 RETURN

 

今まで鳴っていたBGMを一度止めないといけないので、

音楽を止めるBIOS命令?を使っています。

 

BIOS

GICINI (アドレス:0090H)

PSGを初期化し、PLAY文の環境を設定する。

(音楽を止める)

引数:なし

戻り値:なし

 

BIOSを使うときは、

DEFUSR=&H0090

で、アドレスを設定してやり、

A=USR(0)

で呼び出します。

 

 

BIOSの命令?を使いたい行で、A=USR(0)としてやればOKです。

今回のプログラムでは、2083行でBGMを止めています。

 

DEFUSER=BIOSのアドレス、A=USR(0)  、

DEFUSER1=別のBIOSのアドレス、B=USR1(0) 、

DEFUSER2=別のBIOSのアドレス、C=USR2(0) 、、、、

と最大10個まで使えるのかな?

ちょっと忘れましたが。

(Aとか、Bとかは別にどんな文字でもOKです。)

 

 

2160行は、

2160 XX=1:YY=10:M=21:GOSUB 2100

”ITEM GET”という文字を消しています。

 

MSXPen - MSX Developer Playground & Code Editor in the Browser

サンプルを実行 WebMSX

サンプルをダウンロード

 

まとめ

ふぅ〜長い説明でした。

お疲れ様です(^O^)

 

かなり形になってきました!

みなさんがゲームを作る上で、参考になればいいなぁと思います^^

 

色々と、雑誌などを調べたものをブログに載せたりしていますが、

僕が自分で考えているものも多いので、

効率の悪いソースコードもあると思います。

(一番は、わかりやすいのをモットーにしています^^)

 

MSX BASICのゲームプログラムではあるのですが、

結構応用が効くような気がします。

結局、基本的な考え方は、現代の言語でも同じなのかなぁって感じます。

 

逆に、現代の言語が、如何に進化してきているかよく分かってきました。

便利になっていますもんねぇ〜( ・∇・)

 

面白いですw

 

それで、このゲームプログラムですが、段々処理が重くなってきました(^^;)

やっぱり最後は、マシン語に頼るところが出てきそうです。

それは最後の最後になりますが。

その時は、マシン語がわからなくてもいいように、

コピペするだけでOKなようにしたいと思います^^

 

マシン語まではやる気はないよ!って方も多いと思うので^^

 

今回はここまでです。

それでは〜。

 

 

Amazon、楽天で、

MSX ゲーム・本体・雑誌などを

たまにチェックすると掘り出し物があるかも^^

(楽天には駿河屋さんもいますので(๑╹ω╹๑ ))

こちらは駿河屋さんです^^

msx | 通販ショップの駿河屋

(MSX本体、ゲーム、MSXの雑誌など)

 

 


「ニャオニャオ21世紀は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。」

当サイトは第三者配信の広告サービス「Google Adsense グーグルアドセンス」を利用しています。 広告配信事業者は、ユーザーの興味に応じた広告を表示するためにCookie(クッキー)を使用することがあります。 Cookie(クッキー)を無効にする設定およびGoogleアドセンスに関する詳細は「広告 – ポリシーと規約 – Google」をご覧ください