07 マップをビルドする


ここでは、前回までのチュートリアルで作ったマップをビルドして、実際にWADファイルを生成してみたいと思います。
マップをビルドするには、ツールバーの中の「マップをビルド」ボタン を押すか、または「ビルド(B)」メニューの中の「マップをビルド」を選択します。
この時、初めてマップをビルドする場合、マップファイルの名前と保存場所がデフォルトのままだと、図1のようなメッセージボックスが開きますので、変更する時は、「はい」を押します。



図1 マップファイルがデフォルトのままだった時のメッセージボックス

デフォルトのままにする場合は、前に述べた通り、WadCraftのあるフォルダ自体が空白文字を含まないパスでなくてはなりません。

ここで、単純なセクターが一つだけあるマップをビルドする時に、注意する事が一つあります。
今回は、セクターは一つだけでも、中に柱を作る事によって、多少複雑な形になりましたが、最も単純な、凸多角形のセクターが一つだけあるマップでは、ビルドするのに問題があります。その理由を述べる前に、『マップをビルドする』時に、実際に何が行われているかを少し説明します。

ご存知の方も多いと思いますが、DOOMエンジンでは、レンダリングを効率良く行うために、『BSPツリー』と呼ばれるデータ構造を使います。
マップをビルドする時の主な仕事が、このBSPツリーを作る事です。
具体的には、まずマップの中の直線を一つ選び、それを分割線として、残りの直線を、分割線に対して右側にある直線と左側にある直線の二つの集合に分けます。もし分割線をまたいでいる直線がある時は、その直線を二つに分割してそれぞれの集合に入れます。そして、分けられた右側と左側の二つの集合に対して、全く同じ手順を繰り返します。もし、分けられた集合の中の全ての直線を分割線にしても、残りの直線がどちらか一方の側にしか無い場合は、それ以上は手続きを繰り返しません。
このような手続きが全て終わると、マップの中の(Void Space以外の)領域は、全て凸状の多角形に分割されます。
このようにして出来上がった凸領域を、DOOMでは、Subsectorと呼びます。

BSPツリーは、『二分木』と呼ばれるデータ構造の一種で、ノード(節)とリーフ(葉)から成っていますが、DOOMのBSPツリーでは、ノードは分割線を表し、リーフはSubsectorを表します。
二分木としてのデータ構造を持つには、最低でも一つのノードと二つのリーフが無くてはなりません。つまり、マップの中には、最低二つのSubsectorが必要です。
しかし、マップの中に凸多角形のセクターが一つだけある場合は、どの直線を分割線として選んでも、他の全ての直線はその右側にしか無く、Subsectorは一つしか生まれません。従って、不完全な状態のBSPツリーが作られます。

レベルエディタによっては、このような時、自動的に、分割が起こるような直線を付け加えてしまうものもあります。また、ソースポートによっては、ゲームプログラムの方でこの問題に対処している可能性もあります。
しかし、WadCraftではそうした対処はしていませんので、このようなマップをビルドしようとした時は、図2のような確認のメッセージが出ます。



図2 BSPツリーが不完全だった場合の確認のメッセージ

それでは、実際にビルドを実行したら、「表示(V)」メニューの中の「BSPライン」を選択してみて下さい。このオプションにチェックを入れると、BSPツリーを作る時に使われた分割線が、灰色の線で表示されます(図3)。



図3 BSPラインを表示したところ

セクターの内部が凸領域に分けられている事がわかると思います。
マップの形状が少しでも変化すると、BSPツリーの構造も変わりますので、この表示オプションは、普通、マップのビルド直後に有効にします。

WADファイルは、本来、複数のデータを一つにまとめるためのコンテナファイルのような物なので、一つのWADファイルの中に複数のマップのデータを入れる事が出来ますが、WadCraftでは、常に一つのマップのデータを収めたWADファイルしか生成しません。
将来的には、複数のWADファイルを一つのWADファイルに結合するユーティリティプログラムを作る予定ではあります。