インタビュー: ブローグでのレベル生成はどのように機能しますか?

ローグライクは私の一番好きなゲームジャンルであり、ブローグ[公式サイト』は私の大好きなローグライクゲームの一つです。このジャンルの慎重に連動したシステムがあり、プレイヤーを重要な決定へと導き、豊富な楽しい逸話を生み出すだけでなく、親しみやすいインターフェースを介してそれらを提示し、同業者を怖がらせたり、プレイを疲れさせたりするような肥大化させることはありません。

私が思うに、大部分はブローグの魅力はレベル生成にあります。これは、回避すべき罠、陥るべき亀裂、そして奇妙な ASCII の美しさなど、興味深い環境の詳細に満ちた狭い空間を作成します。私はこのゲームのクリエイターであるブライアン・ウォーカーに、これらのレベルの設計目標は何か、予測できないゲームのバランスをとる方法、そしてゲームがそれらのレベルを作成する正確なプロセスについて話しました。

注記:数か月前、私はサポーター コミュニティから記事のアイデアを募集しました。ピープルズ ゲーム ジャーナリスト。私の動きは遅かったですが、この記事は、皆さんのアイデアから生み出された多くのアイデアのうちの最初の記事となります。特に、この記事は、ゲームの 1 つの部分の作成について詳細に取り上げたインタビューをもっと欲しいという読者のアマチュアバイキングからのリクエストに応えたものです。アマチュアバイキングサイトをサポートしていただきありがとうございます!

RPS: Brogue でのレベル生成の目標は何でしたか?

ブライアン・ウォーカー:私の主な目標は、ダンジョンが具体的でエキサイティングであるように感じられること、つまりモンスターやアイテムを置くための単なる平らな基盤ではなく、有益な情報と戦術的な重要性が詰まった、探索するための生き生きとした雰囲気のある場所であることです。インディ・ジョーンズは良いテンプレートです。敵対的な場所で孤独な冒険家が、たいまつの光に導かれ、手がかりを探し、宝物を探し、機転を利かせて生き延びますが、いつ地獄の機械が作動して床や肉体が崩壊するかわかりません。ネズミを食べて壁から飛び出したり、水がその地域を洪水させたりします。私は、隠されたレバーが虫だらけの曲がりくねった通路を開き、隠されたアーティファクトの金庫を開ける鍵につながることが段階的に明らかになる、手作業でデザインされた品質を持たせたいと考えています。手続き的に生成されたレベルでは、専門家が設計した手作りのレベルとの差を完全に埋めることはおそらく決してできないでしょう。しかし、私はそれをできる限りその標準に近づけたいと考えています。利己的な理由も含め、新鮮なレベルを探索して驚かせることができるようにするためです。他のプレイヤーと同じように、その秘密によって。

RPS: ブローグ レベルの手続き型生成の段階的な手順、たとえば手順は何ですか?具体的に教えてください。

ウォーカー:アルゴリズムは、空のグリッドにランダムに配置された 1 つの部屋から始まります。次に、別の部屋を別のグリッド上に描画し、新しい部屋が接触したり重なったりすることなく既存の部屋にぴったりと収まるまで、レベル上をセロハンのようにスライドさせます。発作が起こると、部屋をセロファンからマスターグリッドに移し、ドアを打ち抜きます。これを部屋に収まらなくなるまで繰り返します。

最初の部屋は「洞窟」になる場合があります。これは、レベルのスペースの大部分を占める、大きく曲がりくねった有機的な形状です。これらは、レベルを 55% の床と 45% の壁でランダムに埋めてから、5 ラウンドのスムージングを実行することによって作成されます。スムージングの各ラウンドでは、隣接するフロア セルが 4 つ未満のすべてのフロア セルが壁になり、隣接するフロア セルが 6 つ以上あるすべての壁セルがフロアになります。このプロセスにより、ランダムなノイズが強制的に合体し、曲がりくねった塊の形状に収縮します。アルゴリズムは完全に接続されている最大の BLOB を選択し、それを最初の部屋と呼びます。

部屋を描くには、毎回ランダムに選択されるさまざまなテクニックがたくさんあります。たとえば、2 つの大きな長方形を重ね合わせたり、大きなドーナツの形、円や、上で説明した洞窟のように作成された「塊」などです。より小さな寸法。場合によっては、ランダムな点で廊下が突き出た部屋を生成し、廊下の端が既存の部屋に接続することを要求することがあります。

この時点で、形状の異なる部屋が単純に接続されたネットワークが完成しました。問題は、ジオメトリにループがないことです。マップ全体は 1 つのツリーであり、最初のルーム以降の各部屋には、ちょうど 1 つの「親」ルーム (そこから派生した) と、任意の数の「子」ルーム (そこから派生した) があります。この種のレベルを探索するのは、あまり楽しいものではないことがわかりました。なぜなら、後戻りが多く、モンスターに追い詰められやすいからです。そこで、レベルの壁の検査を開始します。両側に通行可能なセルがあり、2 つのセルが経路探索の観点から少なくとも一定の距離離れている壁を見つけることができた場合、ドア (または秘密のドア) を打ち抜きます。それを何度も繰り返すと、うまく接続されたレベルが得られます。

それから湖に移ります。湖は、水、溶岩、裂け目、硫黄など、特定の地形タイプの塊であり、レベルのほぼ全体に及ぶことがあります。それらは雰囲気があり、長距離攻撃を可能にし、曲がりくねった通路の均質な迷路のように感じられるのを防ぐためにレベルに大規模な構造を課します。セロハンを引き出し、セル オートマトンの方法を使用してその上に湖を描きます。次に、機能する場所 (レベルの覆われていない通行可能な部分がすべて見つかる場所) が見つかるまで、セロハンをランダムな場所にスライドさせます。湖畔はまだ完全に接続されているため、プレーヤーが湖を渡る必要はありません。 20 回のランダムな試行で適格な場所が見つからなかった場合は、より小さい湖を描画して再試行します。適切な場所が見つかった場合は、そこの地図上に湖をドロップし、その下の地形を上書きします。一部の湖には花輪があり、浅い水が深い水を囲み、「キャズムエッジ」の地形が裂け目を囲んでいます。この段階でそれを描画します。

次に、草の茂み、結晶の成長、泥の穴、隠された罠、彫像、松明など、地形の風味豊かな地元の特徴を紹介します。これらは、各フィーチャが表示される深さの範囲、その可能性、および作成するコピーの数を指定する「自動ジェネレータ」の巨大なテーブルで定義されます。それぞれについて、ランダムな場所を選択してスポーンします。それらの多くはパッチで出現します。これらは、最初の位置を選択し、そこから外側にランダムに拡張することによって生成されますが、拡張するたびにさらに拡張する確率は低くなります。これは、平らでない床に絵の具を注ぎ、それを水たまりの中に外側に流すようなものです。

レベル生成の次の主要なステップは、私がマシンと呼んでいるものです。これは、レベル生成の中で最も複雑な部分です。マシンは、相互に関連する地形フィーチャのクラスターです。祭壇や、ある地点で地形と対話することで遠くの地点にある地形に何かをさせる例を見るときは、あなたは機械を見ていることになります。手動で設計されたマシンのテーブル (現在 71 台) があり、各マシンがどこに、なぜスポーンするのか、またどのような機能を作成する必要があるのか​​が示されています。各マシンの機能はさらに、部屋の出入り口付近のみにスポーンするのか、部屋から遠く離れた場所にスポーンするのか、部屋の見える場所にスポーンするのか、廊下には決してスポーンしないのか、マシンを囲む壁にのみスポーンするのかなどを指定します。

マシンには 3 種類あります。1 つのチョークポイントでエリアの内部を占有するルーム マシン、ドアを守るためにルーム マシンによって生成されるドア マシン、および適切な場所になるまでどこにでも生成でき、外側に広がるエリア マシンです。サイズ。一部のマシンは、レベルの一部をブルドージングし、その特定の領域で異なるパラメーターを使用して新しいレベル生成アルゴリズムを実行します。そうすることで、窮屈な泥で覆われた部屋の密集したネットワークとしてゴブリンの巣窟が得られ、円形と十字形の部屋からなる結晶の宮殿としてセンチネル寺院が得られるのです。場合によっては、マシンがキーなどのアイテムを生成し、それを別のマシンに渡してそのアイテムを採用することがあります。これが、レベルの別の場所にある罠で守られた鍵でドアがロックされる方法です。場合によっては、キーを保持しているマシンがそれ自体の施錠されたドアで守られており、そのドアのキーが別の場所にあることもあります。ネストの階層数に制限はなく、ネストされた部屋が一種の役割を果たすことが期待されています。連動する課題を通じて、レベルに対する物語の一貫性を高めます。ゲームはレベルのどの部分がどのマシンに属しているかを追跡しており、特定の種類の地形アクティベーションはマシンの他の場所でのアクティベーションをトリガーします。これは、祭壇から鍵を外すと、部屋の反対側にあるたいまつが部屋の草に火をつける仕組みです。マシン アーキテクチャは、テーブルのエントリを他のアドベンチャーにリンクするためのフックを備えた自己完結型のアドベンチャーに変換することを目的とした機能の寄せ集めです。

機械が完成したら、階段を設置します。上の階は、上の階から下の階の場所の位置にできる限り近づこうとし、下の階は、上の階から適度な距離にある適格な場所をランダムに選択します。プレイヤーが階段に入ると自動的に階段が使用され、階段は壁に埋め込まれているため、他に入る理由はありません。そのため、スポーンできる場所の数は制限されますが、通常は隣接するレベルの場所にかなり近くに接続できます。

次に、クリーンアップを行います。 2 つの壁の間に斜めの開口部がある場合は、一方の壁を倒します。ドアに隣接する壁が 2 枚未満の場合は、ドアをノックダウンします。壁の両側が同様の通行不可能な地形に囲まれている場合、溶岩湖の真ん中を下ったり、裂け目を横切ったりする壁を想像してください。私たちはそれを破壊します。ここは、キャズムを越えてブリッジが構築される意味のある場所でもあります。つまり、両側が接続され、2 つのエンドポイント間の経路距離が大幅に短縮される場所です。

次に、機械によってすでに配置されているものを超えてアイテムが登場します。アイテムを配置する場所を決めるにはかわいいトリックがあります。マップの空の各セルが一定数のチケットを抽選に投入する抽選を想像してください。セルは 1 枚のチケットから始まります。プレイヤーが独房に到達するために通過するドアごとに、2 階から始めて、独房は追加のチケットを 10 枚獲得します。プレイヤーが独房に到達するために通過しなければならない秘密のドアごとに、独房は追加の 3,000 枚のチケットを取得します。独房が廊下や不利な地形にある場合、すべてのチケットが失われます。アイテムを配置する前に、抽選を行います。そのため、宝の隠し場所は人里離れた、よく隠れた場所にある可能性が高くなります。アイテムを配置するときは、すべてのアイテムが 1 つの塊になるのを避けるために、近くのエリアからチケットの一部を取り除きます。 (食料と体力のポーションは例外です。これらは慎重に計量されているため、隠し部屋に偏ることなく配置されており、これらを見逃すとプレイヤーが大幅に後退する可能性があります。) また、非常に初期のレベルには、より多くのアイテムがあり、プレイヤーがビルドを組み立て始めることができる時点。

最後はモンスターの大群です。これらはランダムかつ均一に配置されますが、上の階からは見えないので、プレイヤーが初めてそのレベルに足を踏み入れたときに待ち伏せされることはありません。場合によっては、モンスターはより深いレベルから描画されたり、ランダムな突然変異で生成されたりして、プレイヤーを常に警戒させます。

これでレベルは終了です!

このプロセス全体にわたる確率の多くは深さによって異なります。深く進むにつれて、レベルはより有機的で洞窟のようになり、より多くの溶岩や硫黄が見え始め、秘密の扉がより一般的になり、草や癒しの植物はより少なくなり、トラップやクリスタルの形成はより頻繁になります。それは徐々にではありますが、26 レベルでイェンドールのアミュレットを手に入れることができた場合、急速な上昇中にその違いは顕著になります。

RPS: それらのレベルを作成しようとしたときに、どのような課題に直面しましたか?

ウォーカー:最大の問題は、レベル生成におけるエッジケースを見つけるのが難しいことです。レベル生成アルゴリズムに新しい機能を追加するときは、通常、特定の方法で地形の特定の構成に対処することを考えます。しかし、ゲームでは私が予期していなかったさらに 50 種類の地形構成が常に考慮され、そのほとんどは機能が何らかの悲劇的な方法で失敗する原因となり、そのうちのいくつかは非常にまれです。そして、有望なキャラクターが地形生成の不具合のために立ち往生するのは本当に悪い経験です。したがって、これらの機能を何度もテストして修正する必要があります。

実際、これが「シード」機能の当初の目的でした。プレイヤーが経験したまれなレベル生成のバグを再現できるようにするためです。乱数発生器は、通常の使用では混沌と見える一連の数値を生成するだけです。異なるシード番号からシーケンスを開始しない限り、毎回同じシーケンスが生成されます。そのため、ブローグのゲームが開始されると、RNG にマスター シード (デフォルトでは時刻) がシードされます。次に、最初に RNG から 40 個の乱数を取得し、リストに書き込みます。新しい深度に到達すると、ゲームは数値のリストから次のエントリを取得し、レベルを生成する前にそれを使用して RNG をシードします。つまり、同じマスター シードからプレイするたびに、レベルはまったく同じになります。しかし、バグの再現を支援するために設計された機能として始まったものは、現在ではシード コンテストの基礎となっており、世界中の多数のプレイヤーが同じシードからスタートし、同じダンジョンでそれぞれがどのように戦ったかを比較します。

レベルの生成はローグライク ゲームの核心です。何よりも、環境の感触とその継続的な斬新さが体験を定義します。エキサイティングな体験を生み出すようにデザインすることは、物語を永遠に伝えることができる魔法の機械を構築するようなものです。私はずっとプレイしたいと思っていた完璧なローグライク ダンジョン環境を想像して Brogue を書き始めました。最初にそのエクスペリエンスを作成するためにプロトタイプ レベルのジェネレーターを構築しました。探索したくなるエキサイティングな環境を手に入れると、それらを探索することがゲームの残りの部分を構築するための永続的なモチベーションになりました。

RPS: レベルの手順を考慮すると、ゲームが公平であることをどのように確認しますか?困難な地形やまばらな地形などを考慮して、ポーション/敵/アイテムなどのバランスをとる、レベル生成後のチェックはありますか?

ウォーカー:絶対に!キャラクターの進行はランダムに生成されたアイテムによって行われますが、ブローグを公平にするために舞台裏でたくさんの小さなトリックが行われています。強化ポーション、ライフポーション、エンチャントの巻物はその世代で「輪ゴムで固定」されているため、各ゲームでほぼ同じ数、ほぼ同じレートで入手できます。新しい深さになるたびに、その生成確率は上昇し、生成されるたびに、その生成確率は低下します。これらのデルタのサイズを調整することで、ラバーバンドの締め付けの強さが決まります。食料はそれよりもさらに厳密に生成されます。特定の深さによって生成される栄養の量には絶対的な下限があり、その上限を超える必要があるときはいつでもスポーンします。プレイヤーが多数の強力なアイテムの中から任意の 1 つを選択できる保管庫もあり、これらの保管庫は初期のダンジョンに少なくとも 1 回は表示される可能性が非常に高いため、ゲームに十分なアイテムが提供されないことは非常にまれです。経験豊富なプレイヤーがビルドを組み立てます。

RPS: 「間違った」ジオメトリ、ランダムすぎるジオメトリ、または極端な場合があるジオメトリを作成せずに、十分な多様性を保証するにはどうすればよいですか?デザイナーの手を加えずに退屈なレベルを生成する規範的なルール セットと、それらのルールを自由に設定して有機的で刺激的なランダム性を実現することとの違いは何でしょうか?

ウォーカー:私が特に避けたアプローチの 1 つは、グリッド上にあらゆる種類のボールトを定義することです。データ ファイルにはグリッドがありません。代わりに、機械は地形を見つけたときにそれを適応させる必要があります。単一のチョークポイントがあるレベルのエリアは、ルーム マシンに適応させることができます。これにより、マシン システムの構築が非常に困難になり、徹底的なテストが必要になり、非常にまれに、何らかの形が不正な部屋が見つかることもあります (ただし、進歩を妨げるものではありません)。しかし、手続き的に生成されたボールトはより有機的に感じられ、興味深い驚きが生まれる可能性がより高いため、追加の手間をかける価値があると思います。

RPS: プロシージャル生成に関して、ASCII グラフィックスには制限があるのでしょうか、それとも解放されますか?ブローグは、ASCII ゲームとしては異常に美しいです。

ウォーカー:正方形ごとに 1 つのフォント グリフと 2 つの色しか取得できないという意味では、確かに制限があり、伝達する二次情報が多い場合には、難しいデザイン上の決定を強いられます。しかし、ダンジョンのすべてのコンテンツの空間的位置とアイデンティティを非常に明確に伝え、残りは十分に種を蒔いた想像力に任せるという意味で、それらは自由です。そのために、ブローグにはフレーバー テキストが溢れています。すべてのモンスターやアイテムにフレーバー テキストがあり、UI の全行が永久的にフレーバー テキスト専用であり、すべてが常に見ているもの、聞いているもの、匂いを感じているもの、感じているものを説明しています。ダンジョンを歩き回って味わいましょう。そこから逃れることはできません!フルカラーのダイナミック照明エンジンもここで重労働を行って、火を熱く燃やし、発光菌の帯をきらめかせます。挑戦的なゲームでは戦略を最適化する必要がありますが、Brogue はダンジョンを方程式ではなく場所として見るように説得しようと懸命に努力します。

RPS: お時間をいただきありがとうございます。

Brogue の優れた点について詳しくは、こちらの記事をお読みください。永久の死に向かって酒を飲む物語ゲームで選択された神秘的なポーションを使用します。

この投稿は、RPSサポータープログラム。サイトをサポートしてくださった皆様に感謝します!