見出し画像

ローグライク(仮) ダンジョン自動生成 最初の一手

ローグライクの醍醐味である『ダンジョン自動生成』について、今回始めて着手した。今まではただの迷路(棒倒し法)だったのだが、道しか存在しなかったので単調でつまらないものだ。

ローグライクでよくあるのがこのアルゴリズムである。

簡単に言えば、バイナリ空間分割によってできたパーティションに1つ以下の部屋を自由な大きさで配置して、道を伸ばしてパーティションの境目で道同士を接続する方法である。この方法は不思議のダンジョンシリーズなどでも用いられていると思われる。

しかし、ぼくが望んでいるダンジョンはこういったよくあるタイプのものではない。もう少し工夫をしてみたいのだ。これについては最初に表明したように『時間はかけていいが、なるべく単純なもので。品質は上げたい。』という優先度で制作しているからだ。よくある知られた方法でゲームの根幹部分を実装することはこれに反していると思っているし、考えているゲームに向いていないのではないか、とも思ったからだ。

そこで、今回検討している方法とその第一歩目の挑戦した結果を説明する。

ライフゲームというのをご存知だろうか?

これはコンピュータができるよりずっと前に数学者たちが没頭したセルオートマトンという計算モデルの一種である。奇妙なことに、単純な計算で生命のような不思議な動きをもたらすものだ。
ライフゲーム以外にもセルオートマトンには数多くの種類があり、アメーバ状になったり、あるいは迷路のようになって安定するものも存在する。
ぼくが今回挑戦したのはこのセルオートマトンを用いたダンジョン生成である。

セルオートマトンのシミュレータで有名な Golly というアプリケーションを使い、様々なルールを自作してダンジョンのようにならないか試し、いくつか良さそうなものを発見した。

多種多様な模様が自動生成できていることがわかる。そのひとつを実際にダンジョンとして組み込んでみたのがこの動画。

まだまだ面白そうには見えないが、迷路に比べて空間があったり入り組んだスポットもできたりと、期待している複雑さが生まれている。実装は非常に簡単なものなので、20分程度で組み込むことができてしまった。
セルオートマトンのルールを変えればダンジョンの性質も変化するため、ダンジョン生成のパターンを『洞窟』や『迷宮』などタグ付けして初期値とステップ数をランダムに設定したダンジョンを提供することができる。
これから工夫してよりよいものを作れるように頭を使っていきたい。

参考にした GDC の発表があり、こちらもセルオートマトンを使ったダンジョン生成を行っている。他にも様々な工夫により自然な宇宙空間の岩の世界を作っており、このような挑戦をしてみたいとも思った。

今回、組み込むのに使った昔に作ったセルオートマトンの CPU を使った高速アルゴリズムをオープンソースで公開しているので、技術者の方はご興味あればコードもご覧あれ。


応援してくださると嬉しいです。よろしくお願いいたします!