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 にて、
表示する内容を変更することで対応しています。
特に新しいことをしているわけではないので、説明は省略させていただきます。
今回は、こんな感じでした。
次回は、ボスの処理を追加したいと思います。
[▲トップページへ]