本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。
ターミナルタイピングRPG「クムドールの試練」v0.3.0 更新 – ステージ別BGMを追加 | UNIX Cafe

C言語で作っているターミナルタイピングRPG「クムドールの試練」を、v0.3.0 に更新しました。
GitHubでは kumdor-trial という名前で公開しています。
- Repository: https://github.com/k1117n-cmyk/kumdor-trial
- Version:
v0.3.0 - License: MIT License
今回の更新内容は、ステージ別BGMの追加です。
v0.2.0 では、課題の難易度調整やターミナル表示のカラー化を行いました。ゲームとしての感触は少し整ってきましたが、何度か遊んでいるうちに、画面の変化だけでは少し寂しい気がしました。
そこで v0.3.0 では、各ステージにBGMを付けることにしました。
ステージごとにBGMを鳴らす
今回追加したBGMファイルは、BGM/ ディレクトリに置いています。
ファイル名はステージ番号に合わせています。
BGM/kumdor_01.m4a
BGM/kumdor_02.m4a
BGM/kumdor_03.m4a
...
BGM/kumdor_10.m4aゲーム側では、ステージ開始時に現在のステージ番号を見て、対応するBGMファイルを探します。
たとえば第1ステージなら BGM/kumdor_01.m4a、第10ステージなら BGM/kumdor_10.m4a を再生します。
対応するファイルがない場合は、エラーで止めずに、そのステージだけ無音で続行するようにしています。
ターミナルゲームなので、音源がない環境でも遊べることは残しておきたかったためです。
*.m4a を差し替えると、BGMを変更することができます。
最初はafplayで再生していた
最初はmacOS標準の afplay を使ってBGMを再生していました。
afplay は、Cのプログラムから子プロセスとして起動すれば、ゲーム本体を止めずに音を鳴らせるので手軽なのですが、ループ再生で問題が出ました。
音が途切れるのです。 afplay を利用すると、曲が終わるたびに起動し直すことになるので、次の再生が始まるまでに一瞬だけ間が空きます。
短いBGMを繰り返すと、この途切れが思ったより気になります。
AVFoundationでループ再生する
そこで、macOSではAVFoundationを使う形に変更しました。
追加したファイルは src/bgm_player.m です。
Objective-C側で AVAudioPlayer を作り、numberOfLoops = -1 に設定して、同じプレイヤーの中でループ再生します。
これで、曲が終わるたびに再生プロセスを起動し直す必要がなくなりました。
C側のゲーム本体から見ると、今まで通り「ステージ開始時にBGMを開始し、ステージ終了時に止める」という扱いのままです。
音の再生部分だけをmacOS用の小さなファイルに分けたので、ゲーム進行のコードにはあまり混ぜ込まずに済みました。
BGMなしでも起動できる
音を出したくない場面もあるので、BGMを無効にする起動方法も残しています。
KUMDOR_NO_BGM=1 ./kumdor_01この環境変数を付けると、BGMファイルがあっても再生しません。
ターミナルで少し試すだけのときや、音を出せない場所では、この起動方法を使えます。
v0.3.0にした理由
今回の変更は、バグ修正ではなく、遊んだときの体験が変わる機能追加ですので、バージョンは v0.2.1 ではなく v0.3.0 にしました。
コード上の GAME_VERSION とREADMEの表記も v0.3.0 に揃えています。
今回の更新内容
主な変更点は次の通りです。
- ステージ別BGMを追加
BGM/kumdor_01.m4aからBGM/kumdor_10.m4aを追加- macOSではAVFoundationでBGMをループ再生
- ループ時に音が途切れにくい方式へ変更
KUMDOR_NO_BGM=1でBGMなし起動に対応- バージョンを
v0.3.0に更新
小さな更新ですが、BGMを鳴らすと、画面だけの時よりもゲームらしさが感じられます。
次は、ステージごとの手応えやテンポを見ながら、課題や演出をもう少し調整していく予定です。
追記:BGMファイルをWAV形式に変更しました
BGMのループ再生時に、曲のつなぎ目でわずかな隙間が出ることがあったため、BGMファイルを .m4a から .wav に変更しました。
これに合わせて、ゲーム側で読み込むファイル名も次の形式に変更しています。
BGM/kumdor_01.wav
BGM/kumdor_02.wav
BGM/kumdor_03.wav
...
BGM/kumdor_10.wav動作としてはこれまで通り、ステージ開始時に対応するBGMを探して再生します。対応するファイルがない場合は、そのステージは無音で進みます。
v0.4.0 戦闘イベントで、RPGらしさを強化しました
前回まででゲームとして一通り遊べる形になったので、第4回ではステージ別BGM、敵の本気状態、反撃特性、状態異常などを追加して、戦闘に緊張感と変化を出していきます。










