06 Thingを配置する


DOOMでは、モンスターや武器、アイテムなど、マップの中に配置できる物を、Thingと呼ばれるデータ構造で表します。
ほとんどのThingは、ゲームの中では、スプライトで表現されていますが、中には、「プレイヤーのスタート位置」や「テレポートの着地点」のように、目には見えない物もThingとして含まれています。
ここでは、マップをプレイするのに最低限必要なプレイヤースタート位置を含め、二、三のThingを、前回作ったセクターの中に配置してみたいと思います。

WadCraftでThingを配置するには、まず、Thingを置きたい場所でマウスの右クリックをします。すると、図1のようなポップアップメニューが現れます。



図1 Thingポップアップメニュー

トップレベルのメニューはThingのグループごとに分かれており、その下にThingの名前がメニュー項目として表示されます。そのThingに該当するスプライト画像があった場合は、さらに画像がメニュー項目として現れますので、その部分をクリックして選択して下さい。該当する画像が無い場合は、名前のメニュー項目をクリックして選択します。

一つ気を付ける点は、WadCraftでは、Thingの置かれた位置をチェックしないので、Void Spaceや壁に近すぎる場所にはThingを配置しないようにして下さい。
また、グリッドへのスナップは、Thingの配置には適用されません。

それでは最初に、前回作ったセクター内の適当な場所で右クリックをして、ポップアップメニューの「Player start」グループの中の「Player 1 start」を選択して下さい。
画面には、その場所に、白く塗りつぶされた正方形が現れると思います。
四角の中には、黄色でThingグループの名前の頭文字が書かれます。ただし「Power-up」グループだけは「U」の文字になります。
このようにWadCraftでは、Thingは正方形として表示されますが、この正方形は、ゲームにおいて『衝突判定』に使われるバウンディングボックスでもあります。このバウンディングボックスは、Thingの向きにかかわらず、常に座標軸に平行な辺を持ちます。
例えば、プレイヤーのバウンディングボックスは、辺の長さが32の正方形で表されますので、狭い通路などを作る時は、幅が32以下では通れない事を考慮して下さい(斜めの時はさらに必要です)。ちなみに、プレイヤーが上れる床の段差は24までです。
モンスターの場合も、それぞれのバウンディングボックスに応じた正方形で表示されますので、それらを目安にマップのレイアウトを考えて下さい。

とりあえず、「Player 1 start」があればマップをプレイする事は出来ますが、他に何も無いのは寂しいので、ここでは他のThingも追加してみます。
図2は、「Player 1 start」の他に、「Enemy」グループ内の「Former Human」と「Weapon」グループ内の「Shotgun」を追加したところです。



図2 三つのThingを配置したところ

みなさんも、適当な場所に、興味のあるThingを置いてみて下さい。

最後にThingの衝突判定についての補足的な説明をしておきます。
まず、DOOMエンジンでは、Thing同士の衝突を調べる時は高さについては考慮しません。つまり、Thing同士については、二次元上でバウンディングボックスが重なっているかどうかしか調べません。もちろん、床や天井などのマップ内の要素に対しての衝突判定では、高さが考慮に入れられます。
このため、例えば、高いバルコニーのような所から下に降りようとした時に、下に別のThingがあると、何も接触しないように見えてもブロックされてしまう事があります。
これに関連して、Thingの「Victim」グループにある「Hanged」タイプのThingについて説明しておきます。
このグループの中には、ロープで吊り上げられた犠牲者のThingがいくつかありますが、通常のThingは床の上に乗っているのに対し、これらのThingは天井の高さに応じてそのZ値が決まります。従って、非常に天井の高いセクターでは、これらのThingがあっても下を通り抜けられそうに見えますが、上で述べたようにThing同士の場合は、いくら高さに違いがあっても上から見て重なっていれば衝突したと判断されます。
「Hanged」タイプのThingには、名前が同じで、その後に(NB)と付いている物と付いていない物がありますが、NBはNon-Blockingの略で、そのThingは、衝突判定が全くおこなわれず、『素通り』される事を意味します。これによって、高い天井に吊り下げられている犠牲者の下を通り抜けられるようになります。もし天井が低い場合は、通り抜けられると逆に不自然になるので、(NB)が付かない方を使います。
ちなみに、「Corpse」グループには、死体や血溜りなどのThingがありますが、これらは全てNon-Blockingです。