Chapter.28 BGMを付ける
[Chapter28 制作物]

今回は、ゲーム画面にBGMを付けます。
BGMデータは、三毛乱ジェロさんに提供していただきました。

■BGM差し替え用のMMLコンパイル環境を作る
今回から、bgm というフォルダを用意しました。
ここに MMLデータを配置して、bgm\mk_bgm.bat にてアセンブラソースに変換。
その後に mk.bat で BGMデータがリンクされる仕組みにします。

MMLデータのコンパイルは、mc\release\mc.exe で行うのはこれまでと同じです。
コンパイルの結果、出力されるアセンブラソースの中身をコピペする作業を自動化するために
.include を使います。

内容をコピペする代わりに、.include で挿入してしまうのです。

sca_main.asm に BGMデータを追加するので、sca_main.asm の最後にプログラム1を追記します。

プログラム1. BGMデータの挿入
; -----------------------------------------------------------------------------
;	曲データ
; -----------------------------------------------------------------------------
bgm_stage1:
	.include	"stage_bgm.asm"
		

stage_bgm.asm は、stage_bgm.txt (MMLデータ) のコンパイル結果のファイル名です。
bgm_stage1 というラベルの位置に stage_bgm.asm の内容を挿入します。
従って、bgm_stage1 は、stage_bgm.asm の先頭アドレスを示すラベルになります。
このようにすることで、BGMデータに変更が入っても、今後 sca_main.asm には手を付けずに済むようになります。

■曲の再生・停止を挿入
sca_main_loop のあたりを見てください。
call game_loop という部分があります。
これが、ゲーム中のループ処理を請け負っているルーチンですが、このループ処理が始まる前に曲の再生開始を、
このループ処理が終わるときに曲の停止を指示するコードを記述することで、BGM再生に対応します。
挿入したイメージは、プログラム2 のようになります。

プログラム2. 曲の再生・停止を挿入
sca_main_loop:
	call	sca_title			; タイトル画面
	call	background_init_game_screen	; ゲーム中の背景を初期化
	call	score_init			; 点数を初期化
	ld	hl, #bgm_stage1			; stage1 の BGM を演奏開始
	call	bgmdriver_play
	call	game_loop			; メインループ
	call	bgmdriver_stop
	jr	sca_main_loop
		

■Copyright 表示の修正
sca_background.asm にて、いくつかの定義フォントを追加して、sca_title.asm にて、
表示する内容を変更することで対応しています。
特に新しいことをしているわけではないので、説明は省略させていただきます。


今回は、こんな感じでした。
次回は、ボスの処理を追加したいと思います。

[▲トップページへ]