NetHackのノーム鉱山のダンジョン生成
Dungeon Generation in the Gnomish Mines of NetHack (boristhebrave.com)
要約
この記事では、人気のローグライクゲーム「NetHack」の「ノーム鉱山」レベル生成におけるセルラーオートマトン(CA)の利用に焦点を当てています。CAは、ランダムなセルをフロアまたはロックに設定し、4回のパスを経て洞窟のような有機的な地形を生成します。各パスは、近傍のフロアタイルの数に基づいてセルの状態を更新し、クラスタリングや角の滑らか化、小さな島の削除を行います。ただし、パス2の特定のルール(フロア隣接数がちょうど5の場合にロックにする)の意図については、筆者はまだ解明できていないとしています。
全文翻訳
NetHackのノーム鉱山のダンジョン生成
これは、ビジュアライザーで説明するのが最も良いでしょう。
NetHackのレベル生成には多くの興味深い点がありますが、セルラーオートマトン(CA)の使用という点でノーム鉱山に焦点を当てたいと思います。これにより、ゲームの大部分が四角い部屋で構成されているにもかかわらず、有機的な洞窟のような雰囲気を与えています。
非常にシンプルです。
- セルの40%をランダムにフロアに設定します。
- セルラーオートマトンを4回適用します。
- 接続されていない洞窟を、追加の通路で修正します。
セルラーオートマトンに特化して掘り下げてみましょう。状態はフロアかロックの2つだけです。各パスは、各セルの8近傍にあるフロアタイルの数を数えることで機能します。
パス1:0-2 → ロック; 3-4 → 変更なし, 5-8 → フロア
パス2:0-4 → 変更なし; 5 → ロック; 6-8 → 変更なし
パス3:0-2 → ロック; 3-8 → 変更なし。
パス4:パス3と同じ
興味深いことに、パス1はバッファリングされていません。各セルは、次のセルに移動する前にインプレースで更新されます。他のすべてのパスはバッファリングされています — すべてのセルの新しい値が計算され、その後グリッド全体が一度に更新されます。
パス1は、他のフロアの近くにフロアを作成し、他のロックの近くにロックを作成します。これを「クラスタリング」パスと呼び、ランダムなタイルをタイルの広い領域に押し出します。バッファリングされていないことが、フロア→ロックに変わるものとロック→フロアに変わるものの間で、フリップフロップ(ちらつき)を防ぐために重要です。
パス3とパス4は侵食ルーチンであり、セルラーオートマトンの非常に一般的な用途です。周囲に6〜8個のロックがある場合、あなたもロックになります。これは角を滑らかにし、小さな島を削除する傾向があります。
しかし、パス2… これは、フロアの隣接セルがちょうど5個(つまり、ロックの隣接セルが3個)の場合にセルをロックに変換します。このパスが達成しようとしている目的については、まだ苦労しています。何かアイデアはありますか?