TEST02.BASにBGMを追加してみました。
・TEST03.BAS(MSX2,MSX2+,MSX turboR)
10 SCREEN 5,2
20 DEFINT A-Z:DIM B$(15),BG$(8)
30 FOR I=0 TO 8:READ BG$(I):NEXT
40 ON INTERVAL=80 GOSUB 490:BG=0
100 '
110 B$( 0)="000000AAE0000000"
120 B$( 1)="00000AAAEE000000"
130 B$( 2)="0000AAAAEEE00000"
140 B$( 3)="0000A11111E00000"
150 B$( 4)="0000AAA1EEEAEE00"
160 B$( 5)="00000AEEEAAC11EE"
170 B$( 6)="000AAAA66ACC111E"
180 B$( 7)="0099AA6A8ACC111E"
190 B$( 8)="0FF906688ACC111E"
200 B$( 9)="AAF00444B8AC11E0"
210 B$(10)="AA00AAAAE8AA1EE0"
220 B$(11)="000009909988E000"
230 B$(12)="00000990FF088000"
240 B$(13)="00000FF0AAA00000"
250 B$(14)="0000AAA0AAA11111"
260 B$(15)="0000AAA111111110"
270 FOR I=0 TO 15:FOR J=0 TO 15
280 C=VAL("&H"+MID$(B$(I),J+1,1))
290 PSET(J,I),C:NEXT:NEXT
300 '
310 SET PAGE 1,1:CLS:X=120:Y=104
320 INTERVAL ON
330 '
340 TIME=0:VX=0:VY=0
350 ST=STICK(0) OR STICK(1)
360 SR=STRIG(0) OR STRIG(1)
370 IF SR=-1 THEN 470
380 IF ST=0 THEN 450
390 IF ST=1 AND Y<> 0 THEN VY=-8
400 IF ST=3 AND X<>240 THEN VX= 8
410 IF ST=5 AND Y<>192 THEN VY= 8
420 IF ST=7 AND X<> 0 THEN VX=-8
430 COPY(16,0)-(31,15),0TO(X,Y),1
440 X=X+VX:Y=Y+VY
450 COPY(0,0)-(15,15),0TO(X,Y),1,TPSET
460 IF TIME<8 THEN 460 ELSE 340
470 END
480 '
490 PLAY BG$(BG)
500 BG=BGMOD8+1:RETURN
510 '
520 DATA T180L4o5s9m8500
530 DATA d2o4a2o5,eo4ar2
540 DATA o5e2o4a2o5,fdr4d8d8
550 DATA c+dr4d8d8,efd.d8
560 DATA gfed,dc+r2
20 DEFINT A-Z:DIM B$(15),BG$(8)
30 FOR I=0 TO 8:READ BG$(I):NEXT
40 ON INTERVAL=80 GOSUB 490:BG=0
100 '
110 B$( 0)="000000AAE0000000"
120 B$( 1)="00000AAAEE000000"
130 B$( 2)="0000AAAAEEE00000"
140 B$( 3)="0000A11111E00000"
150 B$( 4)="0000AAA1EEEAEE00"
160 B$( 5)="00000AEEEAAC11EE"
170 B$( 6)="000AAAA66ACC111E"
180 B$( 7)="0099AA6A8ACC111E"
190 B$( 8)="0FF906688ACC111E"
200 B$( 9)="AAF00444B8AC11E0"
210 B$(10)="AA00AAAAE8AA1EE0"
220 B$(11)="000009909988E000"
230 B$(12)="00000990FF088000"
240 B$(13)="00000FF0AAA00000"
250 B$(14)="0000AAA0AAA11111"
260 B$(15)="0000AAA111111110"
270 FOR I=0 TO 15:FOR J=0 TO 15
280 C=VAL("&H"+MID$(B$(I),J+1,1))
290 PSET(J,I),C:NEXT:NEXT
300 '
310 SET PAGE 1,1:CLS:X=120:Y=104
320 INTERVAL ON
330 '
340 TIME=0:VX=0:VY=0
350 ST=STICK(0) OR STICK(1)
360 SR=STRIG(0) OR STRIG(1)
370 IF SR=-1 THEN 470
380 IF ST=0 THEN 450
390 IF ST=1 AND Y<> 0 THEN VY=-8
400 IF ST=3 AND X<>240 THEN VX= 8
410 IF ST=5 AND Y<>192 THEN VY= 8
420 IF ST=7 AND X<> 0 THEN VX=-8
430 COPY(16,0)-(31,15),0TO(X,Y),1
440 X=X+VX:Y=Y+VY
450 COPY(0,0)-(15,15),0TO(X,Y),1,TPSET
460 IF TIME<8 THEN 460 ELSE 340
470 END
480 '
490 PLAY BG$(BG)
500 BG=BGMOD8+1:RETURN
510 '
520 DATA T180L4o5s9m8500
530 DATA d2o4a2o5,eo4ar2
540 DATA o5e2o4a2o5,fdr4d8d8
550 DATA c+dr4d8d8,efd.d8
560 DATA gfed,dc+r2
・実行画面
・解説
10 スクリーンモード
20 文字列の定義
30 BGMデータの読み取り
40 一定の時間ごとに割り込み処理する行番号の指定
110~260 キャラクターデータ
270~290 キャラクターの描画
310 表示ページ、線画ページの切替
320 割り込み処理の開始
340~460 メインルーチン
490~500 割り込み処理(BGMの演奏)
520~560 BGMデータ
ちょっとした工夫でMSX BASICでもBGM付きのゲームをつくることができます。
そして、今はMSXでゲームを制作するのに便利なフリーソフトがたくさんあります。
次回からはそうしたソフトを活用した21世紀のMSX BASICのゲームのつくり方(ちょっと大げさですが・・・)などを紹介していきたいと思います。
・動画
https://youtu.be/jyF28Kx9MTM