先日、最近ハマっているゲームということで紹介した『Mindustry』。記事の最後の方でもちょろっと書いたのですが、やっぱりBGMがしっくりこない。
そもそも、BGMが流れる時間が少ないんですよね。ウェーブを乗り切ったあとに1回流れるだけで、ループとかはしないので。音楽が流れていない間は、ずっと「機械の作動音」のような音が鳴っています。
しっくりこないのは、この辺りの仕様もあるのかも。とにかく、気になってしょうがなかったので、初めてMODというやつを作ってみました。
単にMODというワードだけだとピンときませんが、要は「オリジナルファイルをカスタムファイルでオーバーライドする」わけです。誰でもアルバム1、2枚分くらいの音楽ファイルはローカルに転がっているでしょう。BGMに限れば音楽ファイルを使えばいいだけなので、割と簡単にMODを作れちゃうんです。
ただ、対応する音楽ファイルが「Ogg Vorbis」というややトリッキーな形式なんですよね。変換(エンコード)でつまずくケースはありそうです。この辺を含めて、この記事では「MindustryのBGMを変更するMODの作り方」を解説してゆきます。
音楽ファイルの変換については、こちらで一発変換できるコマンドを用意していますのでご安心ください。
まずは確認
最初にやることはオリジナルファイルの確認です。次のページを開いて、ファイルの数とファイル名を確認しましょう。
バージョンアップで変更があるかも知れないので、念のため記事執筆時点のファイルを列挙しておきます。
boss1.ogg boss2.ogg editor.ogg fine.ogg game1.ogg game2.ogg game3.ogg game4.ogg game5.ogg game6.ogg game7.ogg game8.ogg game9.ogg land.ogg launch.ogg menu.ogg
これらを全てオーバーライドするので、自前で用意する音楽ファイルも16必要ということになります。
使用できる音楽ファイルの形式は、「MP3」と「Ogg Vorbis」の2種類だけです。MP3はシームレスにループできないという理由から、Oggを推奨されています。
オリジナルファイルがOgg形式ということもあるので、ここでは例にならってOggを使って解説を進めます。
FFmpeg
さっそく、音楽ファイルをOgg形式に変換するところから始めましょう。今回は、インストール不要のFFmpegを使って変換を行います。
すでに使い慣れたツールがインストールされているなど、FFmpegを使わないで変換するケースもあるかと思います。その場合は、音楽ファイルの「タグを全消去してから変換する」ようにしてください。変換後のファイルが破損する原因になるためです。
さて、FFmpegは次のページからダウンロードできます。「Essentials」と「Full」がありますが、今回の用途であればEssentialsで十分です。
音楽ファイルをOggに変換する
ここから本番です。手順は次の通りです。
デスクトップなどの「書き込み権限がいらない場所」に作業フォルダを作成します。
FFmpegをダウンロードし、アーカイブ内のbinフォルダに入っている「ffmpeg.exe」を作業フォルダに展開します。
BGMに使用する16曲の音楽ファイル(動画も可)を作業フォルダにコピーします。
作業フォルダをエクスプローラーで開いている状態で、アドレスバーにpowershellと入力→エンターキーを押します。
とりあえずここまで。次は、起動したPowerShellに下記のコードを貼り付けるのですが…。任意で編集してもらうコードが1箇所あるので、ひとまずメモ帳などにコードを貼り付けてください。
New-Item -Path .\music -ItemType Directory
Get-ChildItem -Path ./ -Exclude *.exe | foreach{.\ffmpeg.exe -i $_.name -map 0:a -map_metadata -1 -c:a libvorbis -q 10 ((Convert-Path .\music\)+$_.BaseName+'.ogg')}
編集するコードは、2行目の-q 10の部分です。この10という数値は音質に相当します。-1から10までの数値を設定でき、最大の10では500程度のビットレートになります。4で128kbpsくらいです。これを目安に数値を決めてください。
コードの編集が済んだら、PowerShellにコードを貼り付けます。コードをコピーしている状態で、ウィンドウ上に右クリックで貼り付けできます。(最終行の改行までをコピペすること)
ずらずらと文字列が表示されますが、しばらくすると処理は終わります。処理が終わった時点で、作業フォルダ内に新しく作られたmusicフォルダにOggファイルが入っているはずです。作成されていることを確認できたら、次のコードを貼り付けましょう。
cd music
foreach($f in @('boss1.ogg','boss2.ogg','editor.ogg','fine.ogg','game1.ogg','game2.ogg','game3.ogg','game4.ogg','game5.ogg','game6.ogg','game7.ogg','game8.ogg','game9.ogg','land.ogg','launch.ogg','menu.ogg')) {
dir -Name
Rename-Item -Path (Read-Host -Prompt `n$f' にリネームするファイル名を入力(拡張子含む)') -NewName $f
}
dir -Name
こちらのコードでは、現在musicフォルダに入っているOggファイルを、Mindustryのオリジナルファイルと同じ名前にリネームします。対話形式で進むようになっていますので、指示に従ってください。入力支援のため、リネーム毎にファイル名が列挙されます。
boss1と2は「ボス戦で再生される」というように、おおよその用途は名前で推測できると思います。わかりにくいのが、「land」と「launch」かも知れません。launchは「セクターを選択する画面」で再生されます。そしてlandですが、これについてはまだ再生されたことがないため用途がわかりません。
これで変換作業は終わりです。
追記
land.oggの用途が判明しました。攻城戦で流れるBGMです。
メタデータファイルを作成する
次に、MODのタイトルや説明を記載するための「mod.hjson」というファイルを作成します。記載例と各項目についての説明は次のページで解説されています。
下記は私が作成したときのコードです。
{
name: "localmod"
displayName: "localmod"
author: "me"
description: "Override BGM."
version: "1.0"
minGameVersion: "141.3"
hidden: false
}
実態はただのテキストデータです。メモ帳などのテキストエディタでコードを作成し、文字コードを「UTF-8」に、名前を「mod.hjson」にして作業フォルダに保存すればOKです。
それにしても、初めてHJSONという形式を知ったのですが、コメントに特化したJSONファイルらしいですね。コメントはCSSと同じように/**/で括るようです。記法が若干違っていて、例の通りキーのコーテーションを外せたり、カンマが不要だったりします。
ちなみに、メタデータファイルは絶対HJSONでなくてはいけないということではなく、mod.jsonでもちゃんと動作します。
アイコン画像
最後に、アイコン用の画像としてPNGファイルが必要です。ファイル名を「icon.png」にリネームし、作業フォルダに保存しましょう。
仕上げに固める
Oggファイルが入っているmusicフォルダ、mod.hjson、icon.png、の3種が作業フォルダに入っていることを確認しましょう。確認できたら、3種を選択した状態で右クリック>送る>圧縮(zip 形式)フォルダーを選択します。作成されたZIPがMODファイルとなります。
作成したZipファイルをMindustryのMODフォルダに移動します。MODフォルダは、Steamの場合\Steam\steamapps\common\Mindustry\saves\modsです。他のプラットフォームについては次のページに記載されています。
ここまで済んだらゲームを起動してみましょう。作成したMODが適用されているはずです。
おわりに
Steamでゲームをする人だったら、なんやかんやバンドルとかでサントラ持っているのでは。MODを作って遊んでみてはどうでしょう?
と書いといてなんですが、この記事を書くのにコマンドのテストとかで色々と試したところ…。他のゲームのBGMって意外と合わないもんですね。結局、好きな曲を流すのが一番しっくりきました。
0 件のコメント:
コメントを投稿