Dead Mage では、Children of Morta (ナラティブドリブンの 2D ダンジョンクローラー) を制作した際、ローグライクな要素とストーリー進行のバランスに関するいくつかの課題に直面しました。Unity では、Dead Mage のリードプログラマーである Reza Hooshangi 氏にインタビューをし、ローグライクゲームが持つプロシージャル生成の大きな可能性と、ナラティブドリブンゲームに必要な有意性や進展性をいかにして組み合わせたのかについて話を聞きました。
プロシージャルシステムを開発するには、多数のルールや制約を定義して、ゲーム内でできることとできないことの境界線を定義する必要があります。このブログ記事では、レベル構造の定義と、ナラティブ要素の導入時に生じる課題について見ていきます。さらに、ランダムなイベントがもたらす新鮮な感覚と、ゲーム内のストーリーをサポートするうえで必要なナラティブ進行とのバランスを図るために、Dead Mage が Unity で構築したカスタムツールについて紹介します。
Children of Morta では、すべてのレベルが、出入り口で相互接続された複数の部屋によって構成されています。様々なコンテンツを含んだ多種多様な部屋があり、大勢の敵との息を呑む戦闘が繰り広げられる部屋もあれば、ミステリアスなミニゲームが展開される部屋や、NPC がプレイヤーの助けを求めて待っている部屋もあります。また、レギュラーの敵が登場する通常の通路もあります。
Hooshangi 氏によると、Children of Morta ではレベルごとに一連のパラメーターが定義され、各部屋の配置や接続が決められています。同氏が私たちに提供してくれた下記の図を見ると、1 つのレベルの基本構造内だけでも、様々な可能性があることがわかります。
まず、基本構造を定義する
1 つ目の図は、レベル構造をシンプルに示した例です。
各レベルにはメインパスが 1 つあり、最初の部屋から最後の部屋までをつなぐ複数の部屋(ルーム 0、1、2、3、4)で構成されています。また、メインパスには複数の分岐(行き止まり)も接続されています(ルーム 6 と 7 につながるサイドパス)。
次に、このレベル上の部屋をどのように接続するかを決めるためのルールを追加する
レベル構造パラメーターでは、部屋を定義するとともに、それらの部屋をどのように接続するかについての一連の制約を定義します。たとえば、このレベルでは、アイテムルーム(リワードアイテムがある部屋)がメイン分岐内の部屋に接続されますが、パスの前半には接続されないことになっています。サイドパスにも独自の制約がありますが、説明をわかりやすくするため、ここでは常にルーム 1 に接続されることにしましょう。つまり、このレベルの構成は次の図のようになります。
向きをどのように決めるか
これまでのところ、この構造では部屋の向きは定義されていません。つまり、向きは次の図のいずれかのようになります。
各部屋の形状や構造については、複数の可能性が考えられます。つまり、これらのパラメーターによって、レベルの構成は次の図のように様々に変化するということです。
ここまでは、シンプルなレベルの基本構造だけでも、いかに複雑かということを見てきました。しかし、これで終わりではありません。
場合によっては、プロシージャルとナラティブの組み合わせによって、レベルに一時的な変更が加えられることがあります。たとえば次の図では、プロシージャルイベントによって 2 つの追加ルームが加えられています。
R1 ルームには NPC がいて、リワードと引き換えに、あるアイテムを持ってくるようプレイヤーに頼んできます。メインパスをさらに進むと別の部屋(R2)があり、その中に、頼まれたアイテムが置かれています。プレイヤーはアイテムの場所まで進んでいき、それを取って NPC に渡すと、リワードをもらうことができます。
これは 1 つのレベル内で完結するシンプルなプロシージャルイベントの例ですが、より複雑な目的が設定されたプロシージャルイベントに遭遇することもあります。
場合によっては、プレイヤーがサイドストーリーラインに到達するまでに、複数のレベルをクリアしなければならないこともあります。その過程で、プレイヤーは他のプロシージャルイベントの痕跡を見つけることになります。ただし、それらの順序はランダムなので、プレイヤーが違えば、それらに遭遇する状況もまったく変わってくる可能性があります。
部屋の配置が終わったら、次はそれらの部屋にプロシージャルコンテンツを配置していきます。『Children of Morta』には、異なるタイプのコンテンツを生成して管理するためのサブシステムが複数組み込まれています。映画「マトリックス」の大ファンである Hooshangi 氏は、『Children of Morta』のサブシステムに次のような名前を付けました。
これらの各サブシステムにはそれぞれ独自のパラメーターセットがあり、そのレベルでの動作が厳密に定義されています。つまり各レベルには、そのフォームとレイアウトに関する構造パラメーターと、各コンテンツ生成サブシステムのパラメーターセットがあるということです。
上記で述べた一連のパラメーターには、プロシージャルアルゴリズムでレベルとその内容を生成するために必要なすべてのものが含まれています。ゲームの各レベルには、これらのパラメーターの事前定義済みセットと、各レベルに固有の機能や特性が定義されています。しかし『Children of Morta』では、プレイするごとに、事前定義済みの制約セットに対立するリニアなストーリーが出現します。
制約が少ないと、そこにストーリーの進行や意味を感じられない、まったく異なるレベルが(ランダムに)生成されるという側面がある一方で、レベルが事前定義されている場合には、ナラティブ進行に関係なく、毎回まったく同じゲームを遊ぶことになるという側面もあるわけです。
ゲームプレイ要素間の一貫性と、意味のある関連性を一定レベル確保し、プレイヤーに意義のある体験を提供するために、Hooshangi 氏とそのチームは、Train Man というカスタムツールを Unity 内に構築しました。
このシステムでは、ゲーム内で起こったことがすべて通知されるようになっており、何が起こるかについてのパラメーターを変更することができます。プロシージャルシステムによって新しいレベルが生成されるたびに、すべてのデフォルトパラメーターが収集され、それらが Train Man へと送信されます。パラメーターはその後、ストーリーの現在の状況を反映するかたちで変更されます。
このツールは、ゲームが最初に数回実行されたうちのいずれかの回で、レベルの生成パラメーターを操作し、狼の子供が母親の死骸を守って戦う特別な部屋を追加します。この子狼を助けると新しいクエストが始まり、その後のプロシージャル生成に影響を与えていきます。たとえば、ゲームを進めていくと、レベル内のどこかで、子狼のための薬がある部屋に遭遇する可能性が出てきます。
ただし、子狼のナラティブラインは、多数のプロシージャルイベントの 1 つに過ぎません。Dead Mage のカスタムツールでは、アクティブなプロシージャルイベントをプレイヤープロフィール内に多数格納して管理することができます。次の図に示すように、各プロシージャルイベントの存続期間中に起こるイベントは、すべて追跡され、適切なタイミングに達すると、プレイの進行状況に応じてプロシージャルパラメーターが変更されます。
これにより Dead Mage では、各プロシージャルイベントに縛られることなく、生成されたレベルを現在アクティブなすべてのプロシージャルイベントに対応付けられるようになりました。その結果、レベルごとに様々な可能性が広がり、プレイヤーが各レベルに進むたびに、ランダム性と新鮮味を提供できるようになりました。またそれと同時に、起こっているイベントが、全体的なストーリーの中で意味を持っているという感覚をプレイヤーに感じてもらえるようになりました。
Dead Mage のカスタムツールである Train Man では、プレイヤーのレベル進捗を追跡し、サイドクエストやナラティブを管理しながら、ストーリーが進んでいく感覚を維持することができます。また同社では、このツールを他の複数のアプリケーションにも使用し、プレイヤー体験の向上に役立てています。
Dead Mage では、『Children of Morta』のプロシージャル生成の一部としてルールと制約を定義し、それにより、各レベルの取りうる構成を事実上無限大に広げました。これによって同社は、ローグライクダンジョンゲーム内の各レベルをプレイするプレイヤーに、毎回新鮮な体験を提供するという課題をクリアしました。さらに同社では、Train Man というカスタムツールによって Unity を拡張し、『Children of Morta』の世界で起こるイベントにストーリー上の意味があるという感覚をプレイヤーに与えることで、ナラティブドリブンのフレームワークを維持することに成功しました。Dead Mage が Unity をどのように活用したのかについて詳しくは、『Children of Morta』のケースストーリーをご覧ください。
Is this article helpful for you?
Thank you for your feedback!