ZDOOMHEXEN.PRJの解説2
ZDOOMで動かすことのできる部屋を作ってみましょう。
このページは画像を多く使っています。少し重たいかもしれません。
はじめに
DOOM95で動かせるWADファイルとZDOOM専用WADファイルとでは、MAPの構造が少し違っています。今回は、ZDOOM専用のMAPを作ってみましょう。(ACSの解説やSpecial&関数集の内容が出ます。)
引数について
ZDOOMHEXEN.PRJでは、LineTypeを指定したLineに対して、引数を設定することでそのLineTypeについて詳細な設定を行うことが可能です。
引数については、ACSの解説で紹介しています。
このページで取り扱う内容
ドア | ドアの作り方を紹介します。 | ||
リフト | リフトの作り方を紹介します。 | ||
テレポーター | テレポーターの作り方を紹介します。 | ||
テレポーターを使ったトラップ | アイテムを取ると敵が出現するトラップの作り方を紹介します。 | ||
階段 | スイッチを押すと階段ができる仕掛けの作り方を紹介します。 | ||
坂道 | 床や天井を傾斜させる方法を紹介します。 | ||
その他 | ZDOOMHEXEN.PRJで簡単に設定できる仕掛けを紹介します。 | ||
・ | 鏡 | 鏡ができます。 | |
・ | 地平線 | どこまでも空間が広がります。 | |
・ | 半透明な壁 | 半透明な壁ができます。 |
まず、ドアを作成してみましょう。
図のようにドアを作ります。
DOOM2.PRJのときと同様に、ドアとなるSectorの天井の高さを床の高さと同じにします。
ドアと接する壁(Line)にはLowerUnpegのチェックを入れましょう。
ドアにそれらしいTextureを貼り付けます。
ここから少し違ってきます。
画像の紫色の2本のLineを選択して、編集画面を開きます。
LineTypeに2 ALL Doors → 3 Door Open/Close + Tag-Speed-Delay-LightTag [12]
を選択します。(この関数(LineType)の詳細はこちらのLineType12番)
ドアの開き方を指定しましょう。LineTypeを選ぶと引数に自動的にデフォルトの値が入力されているはずなので、
今回はそのまま引数はいじらずに使います。
ちなみに、今回登場する引数は↓
引数 | 働き | デフォルトの値 |
Tag | D2.PRJのSectorTagと同じ働き | 0 |
Speed | ドアの開閉速度 | 16 |
Delay | ドアが開いている時間 | 100 |
LightTag | 今回は説明しません。 | 0 |
次に、Lineの起動条件を指定しましょう。今回はスイッチ式にします。
「Activated When」欄のPlayer Uses Line w/u Keyにチェックを入れます。(はじめからここにチェックが入っていると思います。)
Lineの起動する回数を指定しましょう。今回は何回でも作動するようにします。
LineDef Flags欄のRepeat(Hexen)ThruLine(Boom)にチェックを入れます。(はじめからここにチェックが入っていると思います。)
テストプレイをしてみましょう。
無事ドアを作ることができました。
リフトを作ってみましょう。
画像のようにSectorを作ります。
今回はAのSectorをリフトにします。
プレイヤーがCのLineを使用するとリフトが作動する仕掛けです。
まず、CとDのLineのLower Textureを指定します。
CのLineを選択し、編集画面を開きます。
Line Typeに8 Lifts/Elevators → 3 Lift Down-Wait-Up-Stay + Tag-Speed-Delay
[62]
を選択します。
リフトの詳細を設定します。
引数Tagの値を2に変更して下さい。(このLineだけの値にしてください。)
(引数Tagは0でもリフトは正常に動作します。この場合、AのSectorのLineDefTagを調整する必要はありません。)
引数Speedの値を32に変更して下さい。(←デフォルト値だとリフトの上下が遅いので・・・(^_^;))
引数Delayはそのままにしてください。
ちなみに、今回登場する引数は↓
引数 | 働き | デフォルトの値 | 今回使用する値 |
Tag | D2.PRJのSectorTagと同じ働き | 0 | 2 |
Speed | リフトの上下時の速さ | 8 | 32 |
Delay | リフトが下降して留まっている時間 | 50 | デフォルト値 |
次に、Lineの起動条件を指定しましょう。今回はスイッチ式にします。
「Activated When」欄のPlayer Uses Line w/u Keyにチェックを入れます。
Lineの起動する回数を指定しましょう。今回は何回でも作動するようにします。
LineDef Flags欄のRepeat(Hexen)ThruLine(Boom)にチェックを入れます。
AのSectorのLineDefTagを先ほど指定した引数Tagの値2と同じにして下さい。
テストプレイをしてみましょう。
画像ではわかりにくいですが、無事リフトを作ることができました。
次に、テレポーターを作成しましょう。
DOOM2.PRJでは、テレポート先のThingが含まれるSectorを指定して、その中にさらにテレポート先のThingを設置していましたが、
ZDOOMHEXEN.PRJではTidを使用してテレポート先を直接指定することができます。
図の様に青い四角形をテレポーターにします。
まず、青い四角形のSectorをテレポーターらしく装飾して下さい。
※注意:青い四角形を作っている4本のLineのSide1側は必ず正方形の外側を向いているようにしてください。
次に、青い四角形を作っている4本のLineを選択し、編集画面を開きます。
LineTypeをA Teleport/End/Special → 1 Teleport +Tid-Tag-NoFog [70]にします。
引数(テレポート方法)を設定します。今回もデフォルトの値を使用します。
ちなみに、今回登場する引数は↓
引数 | 働き | デフォルトの値 |
Tid | テレポート先のThingのTid | 1 |
Tag | テレポート先のSectorのLineDefTag(未使用) | 0 |
NoFog | テレポート時のテレポート元のアクション(緑色のエネルギーが出現)の有無 | 0 |
次に、Lineの起動条件を指定しましょう。今回はLineをまたぐと起動するタイプにします。
「Activated When」欄のPlayer Crosses Lineにチェックを入れます。(はじめからここにチェックが入っていると思います。)
Lineの起動する回数を指定しましょう。今回は何回でも作動するようにします。
LineDef Flags欄のRepeat(Hexen)ThruLine(Boom)にチェックを入れます。(はじめからここにチェックが入っていると思います。)
テレポート先を作成しましょう。
図の様に、Thing編集画面で、テレポート先に Teleport Landing (no gravity) + Tid (9044)を配置します。
さきほど、引数Tidを1と指定しました。先ほどのThingを選択し、編集画面を開きます。Thing TIDを0から1に変更しましょう。
Thingの方角を変えて、テレポート後のプレイヤーの向きを指定します。
これでテレポーターの設定が完了です。
テストプレイをしてみましょう。
![]() |
→ テレポート → |
![]() |
テレポーターが設置されました。
ちなみに、テレポート先のThingを複数配置し、すべてのTidを1にしてテストプレイをしてみると、テレポーターが作動したら毎回ランダムにテレポート先が決まります。
アイテムを入手したらモンスターが突然現れる仕掛けを作りましょう。
DOOM2.PRJでは仕掛けを作動させるのにLineを使う必要がありましたが、ZDOOMHEXEN.PRJではThingだけの設定でこの仕掛けを作ることができます。
画像真ん中のMegaSphereを入手したと同時に画像右のThingからDemonが現れるトラップです。
ZDOOMHEXEN.PRJではThingにSpecial(LineのLineTypeのような物)を指定することができました。今回はそのSpecialを使って仕掛けを作っていきます。
まず、画像の様な位置に3種類のThing(Player、MegaSphere、MapSpot(※))を配置します。
(※):名前はMap Spot + Tidで、Typeは9001です。
MegaSphereを選択し、編集画面を開きます。
Special → X Thing Specials → 9 Thing Spawn +Tid-Type-Angle [135]にします。
その後、出現させるThingを設定できるので、自分の好きなThingを選びます。(今回はDemonです。)
次に、TID入力欄が出ますが、Cancelを押して下さい。
次に、引数入力欄が出ます。
引数Tidの値を2に変更して下さい。(そのThing特有の値ならどの値でも良いです。)
引数Typeは先ほど出現させるモンスターを指定しましたので、そのままにしてください。(Demonを選んでいるなら引数Typeの値は8)
引数Angleの値を128にしてください。(西向き)
ちなみに、今回登場する引数は↓
引数 | 働き | デフォルトの値 | 今回使用する値 |
Tid | Thingの出現先 | 0 | 2 |
Type | 出現するThingの種類 | - | 8(Demon) |
Angle | 出現時のThingの向き | 0 | 128(西向き) |
Map SpotのThing編集画面を開き、Thing TIDを2(先ほどの引数Tidと同じ値)にします。
これて仕掛けが完成しました。
テストプレイをしてみましょう。
無事Demonが出現しました。
ちなみに、MapSpotを複数配置すると、配置した数だけ配置した場所からモンスターが出現します。
複数種類のモンスターを出現させるためにはACSが必要になります。
スイッチを押すと階段ができる仕掛けを作りましょう。
図のようなSectorを作ったとします。A〜DのSectorが階段となり、順番に床がせり上がっていくことでEのSectorへ続く階段ができます。
まず、階段が出現したときを考えてLowerTextureを指定しておきます。
次に、スイッチとなるLineを選択し、編集画面を開きます。
LineTypeを7 Stairs→2 Build Stairs Up +Tag-Speed-Height-StepDelay-ResetDelay
[27]にします。
(Sectorを下げるようにして階段を出現させるときなどはLineTypeをふさわしい物に変えて下さい。)
このLineの引数を設定しましょう。
今回登場する引数は↓
引数 | 働き | デフォルトの値 | 今回使用する値 |
Tag | 階段の始点となるSectorを指定。 | 不定 | 3(適当な値) |
Speed | 階段がせり上がる速さ。 | 10 | 10 |
Height | 階段一段あたりの高さ。 | 8 | 8 |
StepDelay | (恐らく)階段が一段せり上がった時に次の段をせり上げるまでに待つ時間。(tic) | 0(連続してせり上がります。) | 0 |
ResetDelay | このLineTypeを起動してから階段がもとの状態に戻るまでに必要な時間。(tic) | 0(階段ができたらそのままです。) | 0 |
次に、Lineの起動条件を指定しましょう。今回はスイッチ式にします。
「Activated When」欄のPlayer Uses Line w/u Keyにチェックを入れます。(はじめからここにチェックが入っていると思います。)
Lineの起動する回数を指定しましょう。今回は一度きりしか起動しないようにします。
LineDef Flags欄のRepeat(Hexen)ThruLine(Boom)のチェックを外します。
ちなみに、チェックを外し忘れるとスイッチが何度も起動してどこまでも階段を上昇させることができてしまします。(下図参照)
階段となるSectorを指定しましょう。
階段の始点となるSector(今回はAのSector)を選択し、編集画面を開いて、LineDefTagを3(引数Tagと同じ値)にします。
次に、Sector編集画面でAのSectorのSectorTypeを3 Stairs & Sky→1 Stairs Special 1[26]にします。
階段の始点となるSectorから順番にSectorTypeを
3 Stairs & Sky→1 Stairs Special 1[26](AのSector)
↓
3 Stairs & Sky→1 Stairs Special 2[27](BのSector)
↓
3 Stairs & Sky→1 Stairs Special 1[26](CのSector)
↓
・・・(繰り返し)
となるように設定します。
これで仕掛けができました。
実際にテストプレイをしてみましょう。
![]() |
→ スイッチ起動 → |
![]() |
無事階段が作成できました。
ちなみに、LineDef Flags欄のRepeat(Hexen)ThruLine(Boom)のチェックを外し忘れると、下図のようになります。
![]() |
← スイッチを起動すればするほど 階段はせり上がっていきます。 |
(個人的な)ZDOOMHEXEN.PRJの魅力の一つは斜めに傾いたSectorを作れることです。
作り方はとてもシンプルです。
図の様に、真ん中のSectorの床を坂道にします。
この状態で、図の緑色のLineを選択し、編集画面を開きます。
LineTypeをH Slopes, Mirror & Reflection→2 SetSlope +Floor-Ceiling [181]にします。
引数の設定を行います。
今回登場する引数は↓
引数 | 働き | 今回使用する値 | 取り得る値 |
Floor | どちら側の床を傾斜させるか決定します。 | 1 | 0(傾斜させない)/1(Side1側を傾斜)/2(Side2側を傾斜) |
Ceiling | どちら側の天井を傾斜させるか決定します。 | 0 | 0(傾斜させない)/1(Side1側を傾斜)/2(Side2側を傾斜) |
引数Floorの値を1にしましたが、これは緑色のLineのSide 1側のSectorの床をSide 2側のSectorの床の高さまで傾斜させるという意味です。
つまり、図の真ん中のSectorは東へ行くほど上昇する坂道になります。
天井を傾斜させたい場合は引数Ceilingの値を(1か2に)変えましょう。
実際にテストプレイをしてみましょう。
無事坂道を作ることができました。
ZDOOMHEXEN.PRJで、簡単に使用することのできる特殊なLineTypeを紹介します。
鏡を作ります。
鏡にしたいLineを選択して編集画面を開き、LineTypeをH Slopes, Mirror & Reflection→3 LineMirror
[182]にします。
引数は使用しません。
※注意:ZDOOMの場合、鏡のすぐ後ろにSectorがあると、鏡の描写が上手く行われません。
どこまでも空間が広がるような描写を行います。
どこまでも空間を広がらせたいLineを選択して編集画面を開き、LineTypeをE Light & Specials→F Line Horizon
[9]にします。
引数は使用しません。
↑実際は正方形型の部屋なのですが、Line Horizonを設定したLineのみ画像の様にはてしなく空間が続きます。
注意:視覚的にどこまでも空間が広がりますが、Line Horizonを設定したLineより先の空間には進めません。
半透明な壁を作ります。
ただし、半透明にする壁は、Side1もSide2もSectorと接していてNormalTextureが設定されているLineに限定されます。
半透明にしたいLineを選択して編集画面を開き、LineTypeをE Light & Specials→1 Translucent Line
+Lineid-TranspAmount [208]にします。
今回使用する引数は↓
引数 | 働き | 今回使用する値 |
Lineid | Lineidを指定します。 | 0(今回は未使用) |
TranspAmount | 透明度を指定します。(0→完全に透明 / 255→不透明) | 128 |
余談ですが、SHAWN2のTextureと組み合わせるとガラスのようになります。
ちなみに、鏡と組み合わせるとよりリアルに鏡を作ることができます。
↑少し曇った鏡です。
次に、解説3に進みましょう。
必要に応じて内容を追加、変更します。