ダンジョン作成チュートリアル

実際に小さなダンジョンを作成し、ダンジョンエディターの基本的な機能を体験しましょう。

チュートリアルプロジェクトの新規作成

メニューバーの「File」をクリックし、「New Project...」をクリックすると、新規プロジェクトウィンドウが表示されます。

最後にCreateボタンをクリックすると、新しいプロジェクトが開かれ、3x3の部屋とプレイヤーのスタートポイント、そして壁に掛けられたたいまつだけのマップが表示されます。

地形の作成

さっそく穴掘りボタンを使用して、ダンジョンの地形を作りましょう。

まず、編集ツールの右端にある穴掘りボタンをクリックし、マップビュー上でマウスをクリックしてください。

以下のような地形を作成してください。暗い部分が新たに掘った部分です。

作成が終わったら、メニューバーの「File」から「Save Project」をクリックするか、Ctrl+Sキーを押して保存しましょう。

保存しないままエディターを終了させたり、エディターがクラッシュしてしまうと、それまでの作業が全て無駄になります。こまめに保存する癖をつけておきましょう。

テストプレイ

では、今作った地形をプレビューで確認してみましょう。

プレビューの開始ボタンをクリックすると、今作ったダンジョンの中を歩きまわることができます。(操作方法はLegend of Grimrock本編と同じです)

一時停止ボタンをクリックするとプレビューを一時停止できます。停止ボタンをクリックすると、プレビューを終了します。

なお、テストプレイではプレイヤーはたいまつを持った状態でスタートしますが、ダンジョンを完成させてLegend of GrimrockのメインメニューのCustom Dungeonからゲームを始めた時はたいまつを持っていないので注意してください。

エンティティの配置

さて、とりあえず地形はできましたがこれだけではただの迷路ゲームです。ダンジョンの中に色々な仕掛けを配置してみましょう。

ドアの配置

アセットブラウザには、マップ上に配置できる物のアセットが羅列されています。アセットとは「情報を提供するもの」のことで、平たく言えばこれからマップ上に配置する物の「ひな形」です。

アセットブラウザの検索欄に「door」と入力してみましょう。アセット名に「door」が含まれるものだけが表示されるようになります。

ドアらしきものがいっぱい出てきました。このうち、先頭にdungeonと付いているものはLegend of Grimrockの浅い階の壁の模様に合わせたスタイルのドアです。なお、先頭にtempleと付いているのは中盤以降の、先頭にprisonと付いているのは最下層の壁の模様に合わせたスタイルになっています。その階の壁の模様に合ったスタイルのアセットを選択しないと、ダンジョン内の統一感が無くなってしまうので注意してください。

では、木製のドアを配置してみましょう。アセットブラウザの中から「dungeon_door_wooden」をクリックしてください。

編集ツールの中の追加ボタンが選択された状態になりました。この状態でマップビュー上をクリックすることで、様々な物を配置していきます。配置されたアセットはエンティティと呼ばれます。

エンティティとは「実体」のことで、アセットを配置した時点でひな形からコピーが作られて固有の情報(IDや位置や向きなど)を持つ実体(別個の存在)になります。この先も良く出てくる言葉なので覚えておいてください。

では、以下の場所にdungeon_door_woodenを配置してください。

うまく置けたでしょうか。もし余分なドアを配置してしまった場合は、編集ツールの選択ボタンをクリックしてください。

選択ボタンが押された状態になると、マウスでマップ上に配置したエンティティを選択することができます。余分なドアをクリックし、ドアが黄色く表示されたらDELキーを押せばエンティティは消えます。

また、ドアを配置する場所がずれてしまったら、同じように編集ツールの選択ボタンをクリックしてからドアをクリックし、ドアが黄色く表示されたらカーソルキーでドアの位置を移動できます。また、WSADキーでも同じように移動ができ、QEキーで向きを変えることができます。

もしドアをお互いに近い場所に複数配置してしまった時、ドアをクリックすると以下の様なメニューが出てくることがあります。

このような時は、メニューの中から選択したいエンティティの名前をクリックするとそのエンティティを選択することができます。同じような名前だからどっちがどっちか分からない?確かにそうです。この先、ダンジョンを作りこんでいくと、狭い範囲に複数のエンティティが密集してどのエンティティがどの名前なのか分からなくなってしまう事があるでしょう。そこで、エンティティそれぞれに名前をつけてやって、後から分かりやすくすることができます。

編集ツールの選択ボタンをクリックし、スタート地点のすぐ右のドアを選択してください。右下のインスペクタの表示が変わり、現在選択されているエンティティの情報が細かく記されています。この中のIDという欄が、エンティティ固有の識別名になります。

では、それぞれのドアに名前をつけてみましょう。スタート地点のすぐ右のドアは「door_1st」、右下の部屋の西側のドアは「door_2nd」、その奥の部屋に配置したドアは「door_3rd」としてください。

なお、このIDはダンジョン内すべてを通して一意でなければなりません。要は同じIDのエンティティは作っちゃダメということです。仮に作ったとしてもIDが赤くなって駄目だよと教えてくれます。

鎖で開く扉

door_1stに、開閉用の鎖をつけましょう。door_1stを選択して、インスペクタを見てください。

Add Pull chainというチェックボックスがあるのでチェックを付けてください。これで、この扉は鎖を引けばいつでも自由に開け閉めできるドアになりました。プレビューの開始ボタンをクリックして確認してみてください。残りの2つのドアは仕掛けで開くようにしたいので、鎖は付けないでください。

隠し扉

次に、隠し扉を作りましょう。アセットブラウザのdungeon_secret_doorを選択し、右下の部屋の南の窪みをふさぐように配置してください。そして、インスペクタでIDを「door_secret」にしてください。

dungeon_secret_doorは一見ただの壁にしか見えませんが、実際はドアです。Legend of Grimrock本編でも壁がゴゴゴッとせり上がるのを何度も目にしたことがあるかと思います。アレです。ただし、インスペクタを見ると分かるように、他のドアと違って開閉用の鎖は付けることができません。このように、似たような種類のアセットでも、一部の機能が違うことがあるので注意してください。

ボタンとスイッチの配置

先ほど配置したドアのうち、鎖を付けなかった3つのドアは、現状では開けないただの壁です。ドアを開けるためのボタンとスイッチを配置しましょう。

アセットブラウザの検索欄に「button」と入力してみましょう。アセット名に「button」が含まれるものだけが表示されるようになります。

今度はボタンがずらっと出てきました。一番下のwall_buttonをクリックして、右下の部屋のドアの右側にボタンを配置しましょう。配置したらインスペクタでボタンのIDを「button_1st」に変更してください。

次に、隠し部屋を開けるための隠しボタンを配置しましょう。アセットブラウザの「dungeon_secret_button_small」を選択して、右下の部屋の隠しドアの左側にボタンを配置しましょう。配置したらインスペクタでボタンのIDを「button_2nd」に変更してください。

最後は床スイッチです。アセットブラウザの検索欄をの右端のXをクリックして検索欄をクリアし、検索欄に「pressure」と入力します。アセットブラウザに床スイッチが出てくるので、「dungeon_pressure_plate」を選択して、スタート地点の南にある部屋の四隅に床スイッチを配置しましょう。IDは左上を「pplate_1st」、右上を「pplate_2nd」、左下を「pplate_3rd」、右下を「pplate_4th」に変更してください。

ドアの近くに配置しただけでは、まだボタンも床スイッチも機能しません。もう少し準備が必要です。

アイテムの配置

ドアやボタンを配置してきたのと同じ方法で、アイテムも配置できます。

どのようなアイテムがアセットにあるのか知るための簡単な方法は、アセットブラウザのShowでアイテムだけを表示するように指定することです。「All ▼」の部分をクリックして、クリックしたまま「Items」にカーソルを移動させて指を離してください。

しかし、このチュートリアルに書いてあるとおりに操作していた場合、アセットブラウザには何も表示されません。これは、先ほど検索欄に入力していた「pressure」を含むアイテムのアセットが無いからです。検索欄の右端のXをクリックして検索欄をクリアしましょう。

なんか大量に出てきましたね。Legend of Grimrockには標準でこれだけ大量のアイテムが用意されていて、その中から目的のアイテムを探しだすのは困難です。今回はとりあえず先ほど4つ配置した床スイッチを押したままにしたいので、小石を4つ配置したいと思います。

検索欄に「rock」と入力すると、アセットブラウザには小石のアセットrockだけが表示されます。rockをクリックして、スタート地点の部屋に1個、その右の部屋に1個、その南の部屋に1個、最後に床スイッチのある部屋に1個配置してください。今回は、小石のエンティティのIDを変更する必要はありません。小石は汎用的でどこにでもある物ですし、だいたい面倒くさいですからね。

エンティティの関連付け

スイッチで開く扉

では、今まで配置してきたドアとボタンを関連付けて、「ボタンを押したら開くドア」を作ってみましょう。

まず、右下の部屋の西側にあるの木製のドアを、その隣りのボタンで開くように設定してみましょう。「button_1st」を選択して、インスペクタの一番下にあるAdd Connectorボタンをクリックするとコネクタが追加され、以下のような項目が表示されます。

ます、ボタン類のエンティティのEventはtoggleしかありませんのでそのままにしておきます。次にTargetの右端にある?をクリックして、ボタンの横にあるドアのエンティティをクリックするとTargetにdoor_2ndが設定されます。ActionはOpenのままで大丈夫です。

このように関連付けられたエンティティは、選択すると関連付け相手との間に青い線が引かれます。

次に、同じように部屋の南の隠し扉を隠しボタンで開くように設定してみましょう。「button_2nd」で「door_secret」が開くようにしてください。まずbutton_2ndをクリックし、インスペクタのAdd Connectorボタンをクリックし、Targetをdoor_secretにすればOKです。

プレビューの開始ボタンをクリックして、壁のボタンがちゃんと動作するかどうか確認してください。

シークレット

ボタンを押したらきちんとドアが開いたと思いますが、何か物足りません。せっかく隠しスイッチを見つけて隠し部屋を見つけたのだから、「Found Secret」というメッセージと効果音が無いとつまらないですね。

シークレットを見つけた時のエフェクトは、シークレットエンティティを作成することで実現できます。まず、アセットブラウザのShowをAllに変更し、検索欄に「secret」と入力してください。

青いSの「secret」がシークレットです。まんまですね。選択して、隠し部屋の一つ左のマスに配置してください。そして、IDを「secret_1st」に変えてください。

しかし、secretエンティティは配置しただけでは働きませんし、エンティティの上を通っても何も起こりません。何かスイッチを用意して、secretエンティティに関連付けをしなければなりません。

「見た目は何も無いけれど、その場所を通ったら何かが起こる」事を実現するためには、「pressure_plate_hidden」を使用します。名前の通り、見えない床スイッチです。アセットブラウザの検索欄に「hidden」と入力し、「pressure_plate_hidden」を選択して隠し部屋の中に配置しましょう。

そして、インスペクタの中を以下のように編集します。

これで、シークレットの完成です。プレビューの開始ボタンをクリックして隠し扉を開き、部屋の中に入った時点でシークレットのエフェクトが出ることを確認してください。

アセットブラウザで楽をする方法

ここまで何度かアセットブラウザの検索欄に検索語を入力してきましたが、なにかムダに気が付きませんでしたか?例えば「pressure_plate_hidden」を検索する時に「hidden」と入力しましたが、実際は「hid」まで入力した時点でアセットブラウザには候補が2つしか残っておらず、「den」を入力しなくても良いのでは、と思いませんか?

実はそのとおりで、検索欄にはキーワードを全部書く必要はありません。大体2文字か3文字入力すれば、ほとんどの場合目的のアセットが絞り込めます。入力する手間が省けるだけでなく、使いたいアセットの名前の一部分だけ覚えていればすぐに呼び出せるようになり、大変便利です。

このチュートリアルではこの後も『検索欄に「~~~」と入力して・・・』という文章が出てきますが、ぜひこの絞り込み機能をマスターして、手間を減らすことを意識してみてください。

カウンターを使った仕掛け

あとひとつ、まだ開けられないドアが残っています。スタート地点の南にある、床スイッチを4つ配置した部屋のドアです。この部屋の床スイッチが4つとも押されている時だけ西のドアが開くようにするには、カウンターエンティティを使います。

アセットブラウザのShowをAllにして、検索欄に「counter」と入力してcounterアセットを選択しましょう。そして、部屋の真ん中に配置してください。

インスペクタのIDを「cnt_1st」に、Initial Value(初期値)を「-4」にしてください。そしてAdd Connectorボタンを2回クリックして、次の2つのイベントを追加します。

カウンターは、カウントが0になった時にactivateイベントが、-1になった時にdeactivateイベントが起こります。部屋のスイッチが押されたらカウンターを+1して、スイッチが離されたら-1するように設定すれば、4つの床スイッチ全てが押された時にカウンターが0になり、activateイベントが起こって扉が開きます。逆に、その状態から1つでも床スイッチが離されたらカウンターが-1になり、deactivateイベントが起こって扉が閉まります。

カウンターの周りの4つの床スイッチ全てに、次の2つのイベントを追加します。

これで、カウンターを使った仕掛けの完成です。プレビューの開始ボタンをクリックして、ダンジョンの小石を拾い集めて床スイッチの上に置き、最後の扉が開くことを確認してください。

タイマーを使ったトラップ

落とし穴の作成

1階のスタート地点の東の部屋に落とし穴を作りましょう。

アセットブラウザのShowをAllにして、検索欄に「pit」と入力して「dungeon_pit」を選択し、南の通路の手前に配置してください。

インスペクタのIDを「pit_1st」に変更し、Trap Doorにチェックを付けてください。これで、「フタの開いた落とし穴」の出来上がりです。

しかし、落とし穴は下の階に移動する性質のものなので、必ず下の階を作成する必要があります。

2階の作成

ダンジョンに新しい階を追加するには、プロジェクトビューの「Level 1: Unnamed」を右クリックし、出てきたメニューから「New Level」をクリックします。

すると、新しい階層「Level 2: Unnamed」がプロジェクトビューに追加されます。プロジェクトビューに表示されている階をクリックすると、マップビューがクリックした階に切り替わります。

では2階の地形を作成しましょう。まず、プロジェクトビューの「Level 2: Unnamed」をクリックします。編集ツールの穴掘りボタンをクリックして、以下のような地形を作成してください。なお、この時、一番南のマスは1階の落とし穴と同じ位置に作成してください。

位置を合わせるのが難しいですか?そんな時は、ダンジョンエディターの右下にマップ上の座標が表示されている事に注目してください。1階のマップ上で落とし穴の上にカーソルを動かして座標を調べ、2階に戻って同じ座標に通路の南端を作ってください。

階段の配置

プレイヤーが2つの階を行き来するには、階段を配置する必要があります。

まず、1階に下り階段を作りましょう。プロジェクトビューの「Level 1: Unnamed」をクリックして、1階の地図を表示させてください。

アセットブラウザの検索欄に「stairs」と入力して「dungeon_stairs_down」を選択し、落とし穴のある部屋の北の窪みに配置してください。この時、階段のアイコンに矢印が付いていることに気がつくと思います。この矢印は下り階段の降りていく方向を示しており、これを北を向くように配置する必要があります。

マウスをマップビューのマスの中で細かく動かすと矢印の向きが変わります。マスの中心から上方向にカーソルがあれば矢印も上に、右方向にあれば矢印も右に向きます。細かい操作が苦手な方や、単に面倒くさいと思った方はとりあえず階段を配置してから階段を選択して、インスペクタの中で方向を変えることもできます。

下り階段を配置したら、次は対になる上り階段です。プロジェクトビューの「Level 2: Unnamed」をクリックして2階の地図を表示させ、アセットブラウザから「dungeon_stairs_up」を選択して、1階の下り階段を配置した場所と同じ座標に配置してください。この時、矢印は南向きにする必要がありますので気をつけてください。

これで1階と2階がつながりました。プレビューの開始ボタンをクリックして、階段を登り降りしたり、落とし穴に落ちてみてください。

タイマーで罠を作成

さて、ここからが本題です。この落とし穴はフタが開いているので、向こう側に行きたくても行けません。蓋を閉じるボタンを配置してもいいのですが、それでは芸が無さ過ぎます。タイマーを使って、フタが周期的に開いたり閉じたりする仕掛けを作ってみましょう。

まずプロジェクトビューの「Level 1: Unnamed」をクリックして、1階の地図を表示させてください。そしてアセットブラウザの検索欄に「time」と入力して「timer」を選択し、落とし穴の右に配置してください。配置したタイマーを選択してインスペクタを以下のように設定します。

こうすることで、タイマーは2秒おきにpit_1stを閉じたり開いたりを繰り返します。

タイマーは、Timer Intervalの秒数ごとに指定されたイベントを発生させます。Legend of Grimrockで周期的に魔法を発射する顔の彫刻に悩まされたことはありませんか?あれらも、このタイマーを利用して作られているのです。

敵の配置

ダンジョンにはモンスターがつきものです。最後の部屋に、恐ろしいモンスターを配置してプレイヤーを迎え撃ちましょう。ogreにしましょうか、それともgoromorgにしましょうか?しかし、残念ながらこのチュートリアルの中ではプレイヤーが使える武器は最初の部屋で拾えるたいまつだけしか無いので(小石は前の部屋で使ってしまっているはずですしね)、バランスを考えてsnailあたりが妥当かと思われます。

アセットブラウザの検索欄を空白にして、ShowをMonstersに切り替えると、モンスターの一覧が出てきます。snailをクリックして、一番奥の部屋に配置しましょう。

これで、モンスターの配置は完了です。これだけでは簡単すぎるので、モンスターにアイテムを持たせてみましょう。

マップ上に配置したsnailを選択して、インスペクタのAdd New Itemに「gold」と入力してみましょう。名前にgoldが含まれるアイテムが出てくるので、「gold_key」をクリックしてください。そしてAddボタンをクリックすると、モンスターにアイテムを持たせることができます。

スクリプトとエンディング

モンスターを倒したら、このダンジョンはクリアーです。モンスターから入手した鍵を使用したときにエンディングに移るように、簡単なスクリプトを書いてみましょう。

アセットブラウザのShowをAllに切り替えて検索欄に「script」と入力し、「script_entity」を選択して部屋のそばに配置してください。そして、インスペクタでIDを「scr_ending」に変え、インスペクタ下部のテキストボックスに次のようなスクリプトを書いてください。

function TheEnd()
    completeGame()
end

これは、TheEnd関数が呼ばれたらゲームを終了してエンディングに移るスクリプトです。しかし、このTheEnd関数を呼び出すためには他のエンティティからの関連付けが必要になります。

アセットブラウザの検索欄に「lock」と入力し、「lock_golden」を選択して、部屋の奥の壁に配置してください。そして、インスペクタでscr_endingへの関連付けを行います。

これで、モンスターの落とした鍵を鍵穴に使った時にTheEnd関数が呼ばれ、TheEnd関数の中のcompleteGame命令によってエンディングに移ります。(ただし、ダンジョンエディターのプレビューでは画面に「Game Completed!」と表示されるだけです。)

最後に

以上で、チュートリアルは終了です。

あなたはもうLegend of Grimrockのダンジョンエディターの機能を一通り使えるようになりました。このチュートリアルで作ったダンジョンに部屋や通路を拡張し、アイテムやモンスターを配置して自分だけのダンジョンを作るのもいいですし、関連サイトを読んでダンジョンエディターへのより深い知識を見つけ出すのも良いでしょう。

スクリプトに対して少しでも興味や知識がある方は、Luaという比較的簡単な言語を駆使してもっと凝った仕掛けを作ることもできます。さらに、ダンジョンエディター内には留まらず、luaファイルを直接編集したりdds形式の画像を作成することができれば、オリジナルのアイテムや仕掛けを作成することもできます。

残念ながらLegend of Grimrockは日本語を表示することはできませんが、それでもSteam Workshopという仕組みのお陰で、自分の作ったダンジョンを世界に向けて発信することが簡単にできます。恐れずに恥ずかしがらずに、どんどん自分の作品をSteam Workshopに上げていってください。やったもん勝ちです。

それでは良い穴掘りを!