Buho No.216 目次

BM98 プレイヤー

DirectX ラッピングライブラリの習作

文殊壱平


BM98 について

BM98は,フリーの音楽ゲームソフトです。 ゲームとしてよくできているし,ステージデータを自由に制作できる 仕様のため,ネットワーク上でかなりの人気を博しました。 ただし,コナミのヒット作「ビートマニア」シリーズの クローンと受け止められる内容のため,現在では, 本体の公開は完全に停止されています。

ちなみに作者は, BM98 のゲーム本体と BM98 曲データとの独立性を主張しています。 こうすることで,データの蓄積を保護するとともに,現存ソフトウェアの 存在を正当化している模様です。 すなわち,一般的な音楽の制作・演奏のためのデータフォーマット 「Be-Music Data Format '98」に準じたデータがいわゆる 「BM98曲データ」であり,これに準拠したプレイバッカーが,BM98本体を含め, 何種類かリリースされているのだという主張です。 BM98本体の作者は,このBM98企画に準じたゲームを, 改めて製作しているといいます。

さて,BM98本体とデータフォーマットは独立で, 新たなデータを作ることも,ローダやプレイバッカーを実装することも 妨げないという原作者の主張に従って, 私も新しいBM98プレイヤーを制作することにしました。 技術的トピックは,下記の通りです。

実装概要

このプロジェクトは,Microsoft(R) Visual StudioTM, Microsoft(R) Visual C++(R) 6.0 上で開発し, MFC(Microsoft(R) Foundation Class)6.0 および DirectX(R) 6.0 SDK を利用します。

DirectX(R) に MFC という組み合わせは意外かもしれませんが, これには,今後にわたって使える(MFC と親和性の高い)クラスライブラリを 作ってしまおうという意図が含まれています。 DirectX は COM オブジェクトの集まりなので,そのままでも C++ の作法で じゅうぶん利用できるのですが,ゲームやちょっとしたプレゼンテーションに すぐ利用できるような既存のライブラリは,ガチガチの C 記述であったり, MFC と併用しにくい API 群であったりして,あまりよくありません。

MFC について

MFC AppWizard といえば,Appクラス,Frameクラスに,びっちりとViewクラスが 張りつき,こいつにDocクラスがもれなくついてくるという, 非常に厚ぼったいスケルトンを強要されるか, さもなければダイアログベースにするしかない仕組みのため, DirectX(R) とくに DirectDraw 排他モードを使うようなゲームには, 全く向かない思われていました。

しかし,Visual C++(R) 6.0 の MFC AppWizard は, Doc-View アーキテクチャでないアプリケーションのスケルトンを 吐き出す機能をもっています。 チェックボックスのチェックを1つはずして, 「次へ」「次へ」……で,Frame,View,App(および AboutDlg)だけの プロジェクトができます。このうち View をポイして, かわりに DirectDraw をはめこんでやればいいわけですね。

たったこれだけのことですが,このおかげで, 統合環境の機能をほぼ完全に利用できて,しかも MFC のお作法に縛られない 開発ができるようになるわけです。

所感

Windows でアプリケーションを書くのは初めてなので, デバッガでいろいろ試しました。 メッセージの流れなど,とても理解しきれる代物ではありませんが, デバイスコンテキストの実体を自分の目で確かめないと気がすまなかったので, 膨大なライブラリソースをトレースしまくりました。

ドキュメント類も,のべ10MBくらいは目を通したのではないでしょうか。 日本語訳を読んで,よくわからんので英語の原文を参照し,もとの日本語を もう一度読む,なんてやってたので,わりと頭には入ったんですが, これではコーディングは遅くなってしまいますね。 この冊子の編集作業なんかと並行して進めるのはわりとつらかったです。


今野 俊一 (こんの, knn) <toknn@ijk.com>, <knn@ebony.plala.or.jp>
東京大学 工学部 計数工学科(内定), TSG(理論科学グループ)