BSPZIPでのカスタムコンテンツの追加

Last-modified: 2009-09-22 (火) 23:20:06

Bspzipを使用したカスタムコンテントの埋め込み

参考 http://tendon.s35.xrea.com/phpBB/kb.php?mode=article&k=105

ソ-スエンジンの.BSP形式のマップにはそのマップ特有のカスタムマテリアルやモデルを埋め込むことができます。BspzipはMODやマップ制作者が.BSPファイルの中にゲ-ムコンテントを埋め込んだり、抽出したり、一覧を表示させたりできるようにするコマンドラインのユ-ティリティです。これでカスタムマップコンテントの配布が簡単になります。

bspzip.exeアプリケ-ションは書式によって4つのモ-ドで使用できます:

Code:
bspzip -dir bspfile
bspzip -addfile bspfile relativepathname fullpathname newbspfile
bspzip -addlist bspfile listfile newbspfile
bspzip -extract bspfile files.zip

基本の使い方

コマンドライン宣言で簡単にbspzip.exeの場所を見つけるためにWindows環境変数"%sourcesdk%"を使うことができます。この変数はSource SDKのインスト-ル場所を含んでいます。

例えば、Half-Life 2 Deathmatchの"dm_lockdown.bsp"に埋め込まれた全てのコンテントのリストを得るには、コマンドプロンプトを開いて、"half-life 2/hl2/maps"ディレクトリに移動し、以下をコマンド入力してください。

Code:
"%sourcesdk%\bin\bspzip" -dir dm_lockdown.bsp

これによって.BSPに埋め込まれたファイルのリストが以下のように表示されます:

Code:
materials/maps/dm_lockdown/tile/tilewall009b_-3792_3120_72.vmt
materials/maps/dm_lockdown/tile/tilewall009b_-3488_2752_80.vmt
materials/maps/dm_lockdown/tile/tilewall009b_-3488_3104_72.vmt
materials/maps/dm_lockdown/tile/tilewall009b_-3192_3120_72.vmt
materials/maps/dm_lockdown/tile/tilewall009b_-2944_3136_72.vmt
...

この場合では、dm_lockdown.bspに埋め込まれた全てのキュ-ブマップマテリアルが表示されます。

注意: コマンドプロンプトをテクスチャのコンパイルのために開く前に、SDKランチャ-でCurrent Gameを指定するか、VConfigを正しいゲ-ムディレクトリを指すように設定することが重要です。Current Gameを変更してもすでに開かれたコマンドプロンプト窓には影響がありません。これはWindowsの環境変数の扱いによるものです。

個々のファイルの埋め込み

bspzipを-adddileコマンドで使用すると指定したファイルを.bspファイルに追加することができます:

Code:
bspzip -addfile bspfile relativepathname fullpathname newbspfile

ゲ-ムディレクトリへの相対パスと、追加したいファイルへの絶対パスを指定します。

例えば、"/half-life 2 deathmatch/hl2mp/materials/metal/sample.vmt"にある.VMTファイルを"dm_mymap.bsp"というマップに埋め込みたいのなら、コマンドラインに以下のように入力してください:

Code:
"%sourcesdk%\bin\bspzip" -addfile dm_mymap.bsp "materials/metal/sample.vmt" "%vproject%/materials/metal/sample.vmt" dm_mymap.bsp

これにより、"dm_mymap.bsp"というマップを読み込み、"materials/metal/sample.vmt"を追加し、結果を元のファイル"dm_mymap.bsp"に出力します。環境変数"%vproject%"はゲ-ムディレクトリの場所を見つけるのに使われます。

ファイルリストからの埋め込み

bspzipを-addlistコマンドで使用すると指定した.TXTのファイルリストにあるファイルを.bspファイルに追加することができます:

Code:
bspzip -addlist bspfile listfile newbspfile

リストファイルは-addfileコマンドと同じような形式です。ゲ-ムディレクトリへの相対パスと、追加したいファイルへの絶対パスです。以下のようにそれぞれのファイルの相対パスと絶対パスをリストにする必要があります:

Code:
relativepath/file1
absolutepath/file1
relativepath/file2
absolutepath/file2
...

例えば、"/half-life 2 deathmatch/hl2mp/materials/metal/"にあるいくつかの.VMTファイルを埋め込みたいのなら、以下のようなリストをテキストエディタで作ります:
注意このファイルに余分な改行などを入れるとエラーが出ます。気付かないことが多いので注意しましょう。

Code:
materials/metal/sample.vmt
C:/Program Files/Valve/Steam/SteamApps/username/half-life 2 deathmatch/hl2mp/materials/metal/sample.vmt
materials/metal/sample.vtf
C:/Program Files/Valve/Steam/SteamApps/username/half-life 2 deathmatch/hl2mp/materials/metal/sample.vtf
materials/metal/sample2.vmt
C:/Program Files/Valve/Steam/SteamApps/username/half-life 2 deathmatch/hl2mp/materials/metal/sample2.vmt
materials/metal/sample2.vtf
C:/Program Files/Valve/Steam/SteamApps/username/half-life 2 deathmatch/hl2mp/materials/metal/sample2.vtf

このファイルをmapsディレクトリ(.BSPがある場所)におきます。他の場所においてもいいのですが、ここが一番便利です。

もし"addmaterials.txt"にリストアップされたファイルを"dm_mymap.bsp"という.BSPに追加したいのなら、コンソ-ルに以下のコマンドを入力してください:

Code:
"%sourcesdk%\bin\bspzip" -addlist dm_mymap.bsp addmaterials.txt dm_mymap.bsp

これにより、"dm_mymap.bsp"というマップを読み込み、"addmaterials.txt"に記述されたファイル全てを追加し、結果を元のファイル"dm_mymap.bsp"に出力します。このコマンドが実行されるとbspzipは以下のような出力を表示するはずです:

Code:
Opening bsp file: C:/Program Files/Valve/Steam/SteamApps/username/half-life 2 deathmatch/hl2mp/maps/dm_mymap.bsp
Adding file: C:/Program Files/Valve/Steam/SteamApps/username/half-life 2 deathmatch/hl2mp/materials/metal/sample.vmt
Adding file: C:/Program Files/Valve/Steam/SteamApps/username/half-life 2 deathmatch/hl2mp/materials/metal/sample.vtf
Adding file: C:/Program Files/Valve/Steam/SteamApps/username/half-life 2 deathmatch/hl2mp/materials/metal/sample2.vmt
Adding file: C:/Program Files/Valve/Steam/SteamApps/username/half-life 2 deathmatch/hl2mp/materials/metal/sample2.vtf
Writing new bsp file: C:/Program Files/Valve/Steam/SteamApps/username/half-life 2 deathmatch/hl2mp/maps/dm_mymap.bsp

ファイルの抽出

.BSPファイルに埋め込まれたコンテントを抽出するには以下の書式を使ってください:

Code:
bspzip -extract bspfile files.zip

これによって、指定した.BSPの全ての埋め込みコンテントを含む新しい.ZIP形式ファイルが生成されます。例:

Code:
"%sourcesdk%\bin\bspzip" -extract dm_mymap.bsp dm_mymap_content.zip

これにより"dm_mymap.bsp"に埋め込まれたコンテンツ全てを含むファイル"dm_mymap_content.zip"が作成されます。コンテンツを検査するには.ZIPファイルを展開してください。

テストと結論

同じ方法でカスタムモデルコンテントも追加することができます。関連したモデルファイル(.MDL、 .VTX、 .PHY、 etc.) そしてモデルが使うマテリアルも全て含まれていることを確認してください。

カスタムコンテントの.BSPファイルへの追加が終わったら、必要なファイル全てを追加できたかを確かめることも重要です。一つの方法は必要なコンテントファイル(モデル、マテリアル)を一時的に正しいディレクトリから別のディレクトリに移動させることです。それから、ゲ-ムを起動してマップをロ-ドしました。全てを正しくできたのなら、それでもマップ内にコンテントが現れるはずです、というのもマテリアル、モデルディレクトリの代わりに.BSPファイルの中からコンテントがロ-ドされるからです。これは他のユ-ザがマップをロ-ドしたときに体験することの正確なシミュレ-ションになります。

もし正しくロ-ドされないコンテントがあり、コンソ-ルにファイルがないというエラ-メッセ-ジが出たなら、今までのプロセスを戻ってファイル追加時に間違いをしていないことを確かめてください。bspzip -dirコマンドで.BSPファイル内のコンテントのリストを出すのは間違ったディレクトリパスといったエラ-を見つけたりするのに役に立ちます。

エラ-がないことをテストできたら、コンテントを元の場所に戻し、.BSPファイルの配布準備は完了です。