すらすと’s 生活の跡

不真面目な元高専生によるなにか

学祭で音ゲーを作って展示した時の裏話や感想

レポート提出期限や試験が迫る中,忘れないうちに書いておこうと思ったから気にせずに駄文を書くという前置き......

 

今回,奈良高専の展示でWave-Toneを公開させていただきました."全部自分たちで作った音楽ゲーム"というテーマで,楽曲以外は全部自分たちで作りました.

譜面はクラスメイト10人くらいが睡眠時間を犠牲に作成してくれて,メニュー部の実装は師匠氏(クラスメイト)に委託.自分はプレーヤー本体を一からコーディングしました.

結果は上々,音ゲーマーの方々がリピーターになったりもして,展示スペースに人が居ない時間がありませんでした.プレーしてくださった方々,本当にありがとうございました!!

 

さてここから本題です.

このWave-Toneは"自分の今できる最大限を趣味全開で作ろう!"ということで今年の6月から作成し始めました.言語はC++,外部ライブラリはDirectX11,XAudio2,libogg / libvorbisで頑張りました.なお,Windows10向けです.

 

C++は独学でそれまでやってたC言語ベース,ライブラリに至っては全て初見という環境のなか,開発に励みました.(多分夏休みは平均8時間 / 日は開発していたはず)

周りからは「DXライブラリとか使えよ」「FMOD使えば?」と言われつつDirectX11とXAudio2でクソコードを量産し続けました.だって楽しいんだもん.

 

ちなみに,DirectX11を使ったのは,Windowsネイティブかつリファレンスやサンプルコードが比較的転がっている最新に近いライブラリだから選びました.9は負けた気がして,12はそもそも情報が集まりませんでした.11は最低限の情報しか集まらないなか,学校の図書館にリファレンス本が存在したので,これが大活躍.学校の図書館,恐るべし...!なお,これをものにした段階で1ヶ月消費して夏休み前でした.

 

XAudio2は,DirectSoundより推奨されてるからこっち使おう,みたいな感覚でした.こっちは比較的情報があって組みやすかったです.とはいえ,1つ生成すればいいMasteringVoiceを存在する音源分用意して処理と音を爆発させていたりもしましたが.

 

libogg / libvorbis は今回ほとんど使用せず.当初はOGGファイルに対応すればいいよねって思ってましたが,処理が時間かかるのとみんなWave形式で送ってくれたので,実装だけが残りました.けど,ちゃんと使えるようにはなっているんです.

 

その他,DirectX向けのスマートポインタやWaveファイルの読み込み,譜面ファイルの読み込みやメイン処理を実装.これらは,サイトにあるものを拾ってきて,半分は自分が思うように書き換えたり書き加えたり.結局はそのサイトの執筆者様が居なければ完全に詰みでした.本当に先人の方々,ありがとう!

 

ちなみに,譜面ファイルはBMSをそのまま流用しています.理由は,現在最も完成したPC向け音ゲーの譜面ファイルであると思うからです.実際,扱いやすかったです.

 

 

さて,実装した感想ですが,バグって怖いですね.

今回,いろいろなバグがあって,しかも原因が

が大多数を占めていました.己の愚かさを呪う....

なお,最終的には治ったんですが,最後の最後で変数の初期化を忘れて動かず,展示終了直後に体育館で後夜祭中にバグが修正できたという悲しいオチが付きました.あの時は崩れ落ちたね,えぇ.

 

あと,やっぱり好きなものを実装するって力になりますね,改めて実感しました.

今回,多分一人で数千行は書いたんですが,ポインタの概念やバグの発生しやすいポイントなんかがすごいよく理解できた気がします.

 

 

 

最後に,今回のコードがGitHubに上がっているので,コードを見て貶してやってください.もしかしたら今後の糧にするかもです.

github.com